os/arch/arm/src/armino: software-extended watchdog timeout period#7279
os/arch/arm/src/armino: software-extended watchdog timeout period#7279ziliguo wants to merge 1 commit intoSamsung:masterfrom
Conversation
ziliguo
commented
Apr 16, 2026
- Increment nmi_seen on each WDT expiry NMI (only when watchdog is logically STARTed and extension state is valid).
- If nmi_seen < n: intermediate — bk_wdt_start(next_slice_ms), clear s_nmi_occur (or equivalent) so the “second NMI hard hang” does not trigger on legitimate chained expiries; if int_mode with a user handler, do not call the handler on intermediates; return.
- If nmi_seen == n``: final — **reset nmi_seen`, then existing reset / PANIC / int_mode handler path.
| extern uint32_t sys_hal_nmi_wdt_get_clk_div(void); | ||
|
|
||
| #if !defined(CONFIG_ARMINO_WDG_SLICE_MAX_MS) || (CONFIG_ARMINO_WDG_SLICE_MAX_MS < 1) | ||
| #define ARMINO_WDG_SLICE_CAP_MS 60000u |
There was a problem hiding this comment.
When the config is enabled, the maximum value is 32,767.
config ARMINO_WDG_SLICE_MAX_MS
int "Max WDT slice (ms) for software-extended timeout"
default 30000
range 1 32767
But this shows 60,000 at disabled.
Is this right?
There was a problem hiding this comment.
Ohh, Thank you Mr Chang. You remind me. I will change the default value of source code as 30000 ms.
There was a problem hiding this comment.
I have changed the default ARMINO_WDG_SLICE_CAP_MS to 30000 to match Kconfig defaults.
| config ARMINO_WDG_SLICE_MAX_MS | ||
| int "Max WDT slice (ms) for software-extended timeout" | ||
| default 30000 | ||
| range 1 32767 | ||
| ---help--- | ||
| Hardware watchdog is reloaded in slices no longer than this value | ||
| (and never longer than the chip-specific hardware limit), so the | ||
| logical timeout can exceed one hardware period. | ||
|
|
||
| config ARMINO_WDG_MAX_SOFT_TIMEOUT_MS | ||
| int "Max logical watchdog timeout (ms)" | ||
| default 300000 | ||
| range 1 86400000 | ||
| ---help--- | ||
| Upper bound for WDIOC_SETTIMEOUT / settimeout in milliseconds. |
There was a problem hiding this comment.
Sorry but I don't get what the configs are and how to use them. Could you explain them?
There was a problem hiding this comment.
Hello @sunghan-chang
- ARMINO_WDG_SLICE_MAX_MS
What it is: The longest one hardware reload is allowed to be (in ms), when the driver splits a long logical timeout into multiple slices.
How it’s used: The real slice length is min(this Kconfig value, chip hardware max). Smaller slice → more NMI/reload steps for the same long timeout; larger slice → fewer steps (still capped by hardware).
How to set it: Pick something in 1…32767 that fits your tolerance for how often the watchdog is re-armed. Default 30000 is a reasonable starting point.
- ARMINO_WDG_MAX_SOFT_TIMEOUT_MS
What it is: The maximum logical timeout userspace may request via WDIOC_SETTIMEOUT / settimeout (ms). Values above this are rejected (EINVAL).
How it’s used: Set it to the longest timeout your product allows (e.g. 5 minutes default, or up to 86400000 if you really need a day).
In one line: Slice max = size of each hardware chunk; soft max = largest user-visible timeout you allow.
| priv->wdg_slice_ms = 0; | ||
| priv->wdg_last_slice_ms = 0; | ||
| priv->wdg_nmi_total = 0; | ||
| priv->wdg_nmi_seen = 0; |
There was a problem hiding this comment.
You changed malloc to zalloc at line 681. Those initializations look duplicated.
There was a problem hiding this comment.
Hello @sunghan-chang
Yes. With kmm_zalloc, those four assignments are redundant, I have removed the lines 696–699 and rely on zalloc. Behavior stays the same as before.
32c8568 to
7fe62c9
Compare
pcs1265
left a comment
There was a problem hiding this comment.
I tested this locally
but It fails when the timeout was set to 30001.
actually it's not used normally but it's bug in software so please check this.
==========================
11:58:56:177 ---- Sent utf8 encoded message: "2" ----
11:58:56:365 ->
11:58:56:365 -> [Watchdog Reset Test Start]
11:58:56:365 -> WARNING: System will reset in 30001 ms!
11:58:56:365 -> Watchdog timeout set to 30001 ms
11:58:56:365 -> Watchdog started - waiting for reset...
12:00:24:747 -> [15] WIFI ALIVE
12:00:39:836 ->
12:00:39:836 -> print_hardfault_detail: PANIC!!! Hard fault: 40000000
12:00:39:836 -> print_hardfault_detail: IRQ: 3 regs: 0x702891ec
12:00:39:836 -> print_hardfault_detail: BASEPRI: 00000040 PRIMASK: 00000001 IPSR: 00000003 CONTROL: 00000001
12:00:39:836 -> print_hardfault_detail: CFAULTS: 00000000 HFAULTS: 40000000 DFAULTS: 00000000 BFAULTADDR: e000ed38 AFAULTS: 00000000
12:00:39:836 -> print_hardfault_detail: R0: 00000002 70017450 70011ed0 00000000 70011e10 00000000 7028925c 000000e0
12:00:39:836 -> print_hardfault_detail: R8: 00000000 00000000 00000000 00000000 121a99ff 70289240 121a3611 18010856
12:00:39:880 -> print_hardfault_detail: xPSR: 0100020f BASEPRI: 00000040 EXC_RETURN: ffffffb0 (saved)
12:00:39:880 ->
12:00:39:880 -> ===========================================================
12:00:39:880 -> Assertion details
12:00:39:880 -> ===========================================================
12:00:39:880 -> print_assert_detail: Assertion failed at file:armv8-m/up_hardfault.c line: 215 task: hpwork
12:00:39:880 -> print_assert_detail: Assert location (PC) : 0x18010856
12:00:39:880 -> print_assert_detail: Code asserted in workqueue!
12:00:39:880 -> print_assert_detail: Running work function is 18011a85.
12:00:39:880 -> check_assert_location: Code asserted in normal thread!
12:00:39:925 -> ===========================================================
12:00:39:925 -> Asserted task's stack details
12:00:39:925 -> ===========================================================
12:00:39:925 -> print_stack_dump: ERROR: Stack pointer is not within any of the allocated stack
12:00:39:925 -> print_stack_dump: Wrong Stack pointer 70289240: 121a3611 00000001 00000000 7028924c 00000000 70289254 70289258 7028925c
12:00:39:925 -> print_stack_dump: Nested IRQ stack dump:
12:00:39:925 -> up_stackdump: 70008c40: xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx deadbeef deadbeef deadbeef
12:00:39:969 -> up_stackdump: 70008c60: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:39:969 -> up_stackdump: 70008c80: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:39:969 -> up_stackdump: 70008ca0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:39:969 -> up_stackdump: 70008cc0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:39:969 -> up_stackdump: 70008ce0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:013 -> up_stackdump: 70008d00: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:013 -> up_stackdump: 70008d20: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:013 -> up_stackdump: 70008d40: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:013 -> up_stackdump: 70008d60: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:013 -> up_stackdump: 70008d80: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:013 -> up_stackdump: 70008da0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:058 -> up_stackdump: 70008dc0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:058 -> up_stackdump: 70008de0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:058 -> up_stackdump: 70008e00: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:058 -> up_stackdump: 70008e20: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:058 -> up_stackdump: 70008e40: deadbeef deadbeef deadbeef deadbeef 00000000 00000000 702891ec 00000000
12:00:40:103 -> print_stack_dump: User thread stack dump:
12:00:40:103 -> up_stackdump: 70012da0: xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx deadbeef deadbeef deadbeef deadbeef
12:00:40:103 -> up_stackdump: 70012dc0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:103 -> up_stackdump: 70012de0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:103 -> up_stackdump: 70012e00: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:103 -> up_stackdump: 70012e20: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:147 -> up_stackdump: 70012e40: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:147 -> up_stackdump: 70012e60: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:147 -> up_stackdump: 70012e80: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:147 -> up_stackdump: 70012ea0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:147 -> up_stackdump: 70012ec0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:191 -> up_stackdump: 70012ee0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:191 -> up_stackdump: 70012f00: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:191 -> up_stackdump: 70012f20: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:191 -> up_stackdump: 70012f40: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:191 -> up_stackdump: 70012f60: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:236 -> up_stackdump: 70012f80: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:236 -> up_stackdump: 70012fa0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:236 -> up_stackdump: 70012fc0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:236 -> up_stackdump: 70012fe0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:236 -> up_stackdump: 70013000: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:236 -> up_stackdump: 70013020: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:280 -> up_stackdump: 70013040: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:280 -> up_stackdump: 70013060: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:280 -> up_stackdump: 70013080: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:280 -> up_stackdump: 700130a0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:280 -> up_stackdump: 700130c0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:325 -> up_stackdump: 700130e0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:325 -> up_stackdump: 70013100: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:325 -> up_stackdump: 70013120: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:325 -> up_stackdump: 70013140: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:325 -> up_stackdump: 70013160: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:369 -> up_stackdump: 70013180: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:369 -> up_stackdump: 700131a0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:369 -> up_stackdump: 700131c0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:369 -> up_stackdump: 700131e0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:369 -> up_stackdump: 70013200: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:369 -> up_stackdump: 70013220: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:414 -> up_stackdump: 70013240: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:414 -> up_stackdump: 70013260: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:414 -> up_stackdump: 70013280: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:414 -> up_stackdump: 700132a0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:414 -> up_stackdump: 700132c0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:458 -> up_stackdump: 700132e0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:458 -> up_stackdump: 70013300: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:458 -> up_stackdump: 70013320: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:458 -> up_stackdump: 70013340: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:458 -> up_stackdump: 70013360: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:502 -> up_stackdump: 70013380: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:502 -> up_stackdump: 700133a0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:502 -> up_stackdump: 700133c0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:502 -> up_stackdump: 700133e0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:502 -> up_stackdump: 70013400: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
12:00:40:547 -> up_stackdump: 70013420: deadbeef deadbeef deadbeef deadbeef deadbeef 70013464 18010691 70008f80
12:00:40:547 -> up_stackdump: 70013440: 70008e58 0000000b 180108a5 70011e10 00000000 00000000 00000000 00000040
12:00:40:547 -> up_stackdump: 70013460: 1801057f 700134b8 00000040 70011e10 00000000 00000000 00000000 00000040
12:00:40:547 -> up_stackdump: 70013480: 700299c0 700299c0 700134cc 700299c0 0000000b 700134cc 00000000 700134cc
12:00:40:547 -> up_stackdump: 700134a0: 18010691 70008f80 70008e58 0000000b 180108a5 70011e10 00020000 00000000
12:00:40:547 -> up_stackdump: 700134c0: 00000000 00000040 1801057f 70013520 00000040 70011e10 00020000 00000000
12:00:40:591 -> up_stackdump: 700134e0: 00000000 00000040 70013554 00000000 00000000 ffffffb8 00000000 70012db0
12:00:40:591 -> up_stackdump: 70013500: 00000002 70011ed0 70029a80 00000000 121e5475 121e468b 18010856 01000000
12:00:40:591 -> up_stackdump: 70013520: 70013554 00000000 00000000 00000000 00000000 70008f9c 000000e0 00000000
12:00:40:591 -> up_stackdump: 70013540: 00000000 00000000 0004cc60 121b17e3 70008f9c 00020000 70029a80 70008f9c
12:00:40:591 -> up_stackdump: 70013560: 121b14f1 00000000 00000000 00000000 00000000 00000000 00000000 121b14fd
12:00:40:635 -> up_stackdump: 70013580: 00000002 1219e559 00000000 00000000 00000000 00000000 deadbeef 700135a4
12:00:40:635 -> ===========================================================
12:00:40:635 -> Asserted task's TCB info
12:00:40:635 -> ===========================================================
12:00:40:635 -> task_show_tcbinfo: State : 4
12:00:40:635 -> task_show_tcbinfo: Flags : 34
12:00:40:635 -> task_show_tcbinfo: Lock count : 0
12:00:40:635 -> task_show_tcbinfo: Timeslice : 10
12:00:40:635 -> task_show_tcbinfo: Waitdog : 0
12:00:40:635 -> task_show_tcbinfo: WaitSem : 0
12:00:40:680 -> task_show_tcbinfo: MsgwaitQ : 0
12:00:40:680 -> task_show_tcbinfo: Sigdeliver : 0x121a366f
12:00:40:680 -> task_show_tcbinfo: Nsyscalls : 0
12:00:40:680 -> ===========================================================
12:00:40:680 -> Asserted task's register dump
12:00:40:680 -> ===========================================================
12:00:40:680 -> up_registerdump: R0: 00000002 70017450 70011ed0 00000000 70011e10 00000000 7028925c 000000e0
12:00:40:680 -> up_registerdump: R8: 00000000 00000000 00000000 00000000 121a99ff 70289240 121a3611 18010856
12:00:40:680 -> up_registerdump: xPSR: 0100020f BASEPRI: 00000040 CONTROL: 00000000
12:00:40:724 -> up_registerdump: EXC_RETURN: ffffffb0
12:00:40:724 -> ===========================================================
12:00:40:724 -> List of all tasks in the system
12:00:40:724 -> ===========================================================
12:00:40:724 -> NAME | PID | PRI | USED / TOTAL STACK | STACK ALLOC ADDR | TCB ADDR | TASK STATE
12:00:40:724 -> -------------------------------------------------------------------------------------------------------------------
12:00:40:724 -> Idle Task | 0 | 0 | 8184 / 8192 | 0x38062000 | 0x700031f0 | 2
12:00:40:769 -> hpwork | 1 | 201 | 356 / 2028 | 0x70012db0 | 0x70011e10 | 4
12:00:40:769 -> lpwork | 2 | 50 | 272 / 4076 | 0x70014560 | 0x700135c0 | 8
12:00:40:769 -> cli | 4 | 183 | 608 / 3036 | 0x70019670 | 0x700186d0 | 6
12:00:40:769 -> bk_irq_log | 5 | 182 | 960 / 2004 | 0x7001ba50 | 0x7001aab0 | 6
12:00:40:769 -> bk_sensor | 7 | 185 | 520 / 1492 | 0x7002a960 | 0x700299c0 | 9
12:00:40:813 -> pm_thd | 8 | 186 | 392 / 980 | 0x7002c000 | 0x7002b060 | 9
12:00:40:813 -> LWIP_TCP/IP | 9 | 107 | 376 / 4068 | 0x7002d430 | 0x7002c490 | 6
12:00:40:813 -> netmgr_event_handler | 10 | 100 | 232 / 2012 | 0x7002f3e0 | 0x7002e440 | 6
12:00:40:813 -> log_dump | 11 | 200 | 432 / 10212 | 0x70030c90 | 0x7002fcf0 | 9
12:00:40:858 -> binary_manager | 12 | 203 | 952 / 8164 | 0x70034440 | 0x700334a0 | 9
12:00:40:858 -> app1 | 15 | 180 | 732 / 8164 | 0x70281300 | 0x70015990 | 8
12:00:40:858 -> uwork | 16 | 100 | 288 / 2028 | 0x70285840 | 0x70016220 | 8
12:00:40:858 -> tash | 17 | 125 | 840 / 4076 | 0x70286760 | 0x70016ab0 | 6
12:00:40:902 -> hello | 18 | 100 | 1160 / 4060 | 0x702883c0 | 0x70017390 | 2
12:00:40:902 -> -------------------------------------------------------------------------------------------------------------------
12:00:40:902 -> ===========================================================
12:00:40:902 -> List of MPU regions and permissions
12:00:40:902 -> ===========================================================
12:00:40:902 -> mpu_show_regioninfo: ********************************************************************************************
12:00:40:902 -> mpu_show_regioninfo: REGION_NO. BASE_ADDRESS SIZE STATUS ACCESS (P/U) EXECUTE
12:00:40:946 -> mpu_show_regioninfo: ********************************************************************************************
12:00:40:946 -> mpu_show_regioninfo: 0 0x12000000 0x26D000 ENABLED RO/RO X
12:00:40:946 -> mpu_show_regioninfo: 1 0x18000000 0xA0000 ENABLED RO/RO X
12:00:40:946 -> mpu_show_regioninfo: 2 0x38000000 0x80000 ENABLED RW/RW X
12:00:40:946 -> mpu_show_regioninfo: 3 0x50000000 0x20000000 ENABLED RW/RW XN
12:00:40:991 -> mpu_show_regioninfo: 4 0x70000000 0x94A0 ENABLED RW/RW X
12:00:40:991 -> mpu_show_regioninfo: 5 0x0 0x20 DISABLED RW/NO X
12:00:40:991 -> mpu_show_regioninfo: 6 0x700094A0 0x276B60 ENABLED RW/RW XN
12:00:40:991 -> mpu_show_regioninfo: 7 0x0 0x20 DISABLED RW/NO X
12:00:40:991 -> mpu_show_regioninfo: 8 0x0 0x20 DISABLED RW/NO X
12:00:41:035 -> mpu_show_regioninfo: 9 0x1226D000 0x352000 ENABLED RO/RO X
12:00:41:035 -> mpu_show_regioninfo: 10 0x70780000 0x70000 ENABLED RW/RW XN
12:00:41:035 -> mpu_show_regioninfo: 11 0x125BF000 0x100000 ENABLED RO/RO X
12:00:41:035 -> mpu_show_regioninfo: 12 0x70280000 0x500000 ENABLED RW/RW XN
12:00:41:035 -> mpu_show_regioninfo: 13 0x0 0x20 DISABLED RW/NO X
12:00:41:079 -> mpu_show_regioninfo: 14 0x0 0x20 DISABLED RW/NO X
12:00:41:079 -> mpu_show_regioninfo: 15 0x0 0x20 DISABLED RW/NO X
12:00:41:079 -> mpu_show_regioninfo: ********************************************************************************************
12:00:41:079 -> ===========================================================
12:00:41:079 -> Loading location information
12:00:41:079 -> ===========================================================
12:00:41:095 -> elf_show_all_bin_section_addr: [common] Text Addr : 0x1226d010, Text Size : 3481600
12:00:41:095 -> elf_show_all_bin_section_addr: [app1] Text Addr : 0x125bf030, Text Size : 1048576
12:00:41:095 -> ===========================================================
12:00:41:095 -> Checking kernel heap for corruption
12:00:41:095 -> ===========================================================
12:00:41:095 -> mm_check_heap_corruption: Heap start = 0x700094a0 end = 0x7027fff0
12:00:41:095 -> mm_check_heap_corruption: No heap corruption detected
12:00:41:095 -> ##########################################################################################################################################
7fe62c9 to
619ecf4
Compare
Hello @pcs1265 , |
|
This is pseudo code I used to test the watchodg function. ioctl(fd, WDIOC_SETTIMEOUT, 10000);
ioctl(fd, WDIOC_START, 0);
usleep(1000 * 1000);
ioctl(fd, WDIOC_GETSTATUS, before_status)
ioctl(fd, WDIOC_PAUSE, 0);
usleep(1000 * 1000);
ioctl(fd, WDIOC_RESUME, 0);
usleep(200 * 1000);
ioctl(fd, WDIOC_GETSTATUS, after_status)[before] flags=0x3 timeout=10000 timeleft=9000
[after] flags=0x3 timeout=10000 timeleft=1168241904 |
…gle hardware window - Increment nmi_seen on each WDT expiry NMI (only when watchdog is logically STARTed and extension state is valid). - If nmi_seen < n: intermediate — bk_wdt_start(next_slice_ms), clear s_nmi_occur (or equivalent) so the “second NMI hard hang” does not trigger on legitimate chained expiries; if int_mode with a user handler, do not call the handler on intermediates; return. - If nmi_seen == n``: **final** — **reset nmi_seen`, then existing reset / PANIC / int_mode handler path.
619ecf4 to
243abef
Compare
Hello @seokhun-eom24 , Thanks for finding this WDIOC_PAUSE/WDIOC_RESUME issue, I have updated the PR, and checked passed locally. [19:16:46.773]收←◆wdt_slice pause_resume: logical_timeout=10000ms |