From 2b549d93c88bd0dd55429457f0da9eb199374b3a Mon Sep 17 00:00:00 2001 From: liuxianliang Date: Tue, 6 Apr 2021 10:46:31 +0800 Subject: [PATCH] [fix] change from enter critical area into disable interrupt. --- components/net/lwip-1.4.1/src/netif/ethernetif.c | 5 +++-- components/net/lwip-2.0.2/src/netif/ethernetif.c | 5 +++-- components/net/lwip-2.1.2/src/netif/ethernetif.c | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/components/net/lwip-1.4.1/src/netif/ethernetif.c b/components/net/lwip-1.4.1/src/netif/ethernetif.c index 94d1f8d907..4565f5e528 100644 --- a/components/net/lwip-1.4.1/src/netif/ethernetif.c +++ b/components/net/lwip-1.4.1/src/netif/ethernetif.c @@ -638,6 +638,7 @@ static void eth_rx_thread_entry(void* parameter) { if (rt_mb_recv(ð_rx_thread_mb, (rt_ubase_t*)&device, RT_WAITING_FOREVER) == RT_EOK) { + rt_base_t level; struct pbuf *p; /* check link status */ @@ -657,10 +658,10 @@ static void eth_rx_thread_entry(void* parameter) netifapi_netif_set_link_down(device->netif); } - rt_enter_critical(); + level = rt_hw_interrupt_disable(); /* 'rx_notice' will be modify in the interrupt or here */ device->rx_notice = RT_FALSE; - rt_exit_critical(); + rt_hw_interrupt_enable(level); /* receive all of buffer */ while(1) diff --git a/components/net/lwip-2.0.2/src/netif/ethernetif.c b/components/net/lwip-2.0.2/src/netif/ethernetif.c index 28e3822cf7..1c0f3ca9b2 100644 --- a/components/net/lwip-2.0.2/src/netif/ethernetif.c +++ b/components/net/lwip-2.0.2/src/netif/ethernetif.c @@ -687,6 +687,7 @@ static void eth_rx_thread_entry(void* parameter) { if (rt_mb_recv(ð_rx_thread_mb, (rt_ubase_t *)&device, RT_WAITING_FOREVER) == RT_EOK) { + rt_base_t level; struct pbuf *p; /* check link status */ @@ -706,10 +707,10 @@ static void eth_rx_thread_entry(void* parameter) netifapi_netif_set_link_down(device->netif); } - rt_enter_critical(); + level = rt_hw_interrupt_disable(); /* 'rx_notice' will be modify in the interrupt or here */ device->rx_notice = RT_FALSE; - rt_exit_critical(); + rt_hw_interrupt_enable(level); /* receive all of buffer */ while(1) diff --git a/components/net/lwip-2.1.2/src/netif/ethernetif.c b/components/net/lwip-2.1.2/src/netif/ethernetif.c index 09a84f61e5..751a7bbdac 100644 --- a/components/net/lwip-2.1.2/src/netif/ethernetif.c +++ b/components/net/lwip-2.1.2/src/netif/ethernetif.c @@ -689,6 +689,7 @@ static void eth_rx_thread_entry(void* parameter) { if (rt_mb_recv(ð_rx_thread_mb, (rt_ubase_t *)&device, RT_WAITING_FOREVER) == RT_EOK) { + rt_base_t level; struct pbuf *p; /* check link status */ @@ -708,10 +709,10 @@ static void eth_rx_thread_entry(void* parameter) netifapi_netif_set_link_down(device->netif); } - rt_enter_critical(); + level = rt_hw_interrupt_disable(); /* 'rx_notice' will be modify in the interrupt or here */ device->rx_notice = RT_FALSE; - rt_exit_critical(); + rt_hw_interrupt_enable(level); /* receive all of buffer */ while(1) -- GitLab