[fix] iperf speed test have been stable.

This commit is contained in:
liuxianliang 2021-03-31 13:37:19 +08:00
parent 6d89a9f120
commit 154d73a4e7
6 changed files with 39 additions and 15 deletions

View File

@ -27,6 +27,7 @@ struct eth_device
rt_uint16_t flags; rt_uint16_t flags;
rt_uint8_t link_changed; rt_uint8_t link_changed;
rt_uint8_t link_status; rt_uint8_t link_status;
rt_uint8_t rx_notice; /* avoid send the same mail to mailbox */
/* eth device interface */ /* eth device interface */
struct pbuf* (*eth_rx)(rt_device_t dev); struct pbuf* (*eth_rx)(rt_device_t dev);

View File

@ -550,9 +550,15 @@ rt_err_t eth_device_init(struct eth_device * dev, const char *name)
rt_err_t eth_device_ready(struct eth_device* dev) rt_err_t eth_device_ready(struct eth_device* dev)
{ {
if (dev->netif) if (dev->netif)
/* post message to Ethernet thread */ {
if(dev->rx_notice == RT_FALSE)
{
dev->rx_notice = RT_TRUE;
return rt_mb_send(&eth_rx_thread_mb, (rt_uint32_t)dev); return rt_mb_send(&eth_rx_thread_mb, (rt_uint32_t)dev);
else }
/* post message to Ethernet thread */
}
return ERR_OK; /* netif is not initialized yet, just return. */ return ERR_OK; /* netif is not initialized yet, just return. */
} }
@ -646,9 +652,10 @@ static void eth_rx_thread_entry(void* parameter)
else else
netifapi_netif_set_link_down(device->netif); netifapi_netif_set_link_down(device->netif);
} }
device->rx_notice = RT_FALSE;
/* receive all of buffer */ /* receive all of buffer */
do while(1)
{ {
if(device->eth_rx == RT_NULL) break; if(device->eth_rx == RT_NULL) break;
@ -664,7 +671,7 @@ static void eth_rx_thread_entry(void* parameter)
} }
} }
else break; else break;
}while(rt_mb_recv(&eth_rx_thread_mb, (rt_ubase_t *)&device, RT_WAITING_NO) == RT_EOK); }
} }
else else
{ {

View File

@ -27,6 +27,7 @@ struct eth_device
rt_uint16_t flags; rt_uint16_t flags;
rt_uint8_t link_changed; rt_uint8_t link_changed;
rt_uint8_t link_status; rt_uint8_t link_status;
rt_uint8_t rx_notice; /* avoid send the same mail to mailbox */
/* eth device interface */ /* eth device interface */
struct pbuf* (*eth_rx)(rt_device_t dev); struct pbuf* (*eth_rx)(rt_device_t dev);

View File

@ -599,9 +599,15 @@ void eth_device_deinit(struct eth_device *dev)
rt_err_t eth_device_ready(struct eth_device* dev) rt_err_t eth_device_ready(struct eth_device* dev)
{ {
if (dev->netif) if (dev->netif)
{
if(dev->rx_notice == RT_FALSE)
{
dev->rx_notice = RT_TRUE;
return rt_mb_send(&eth_rx_thread_mb, (rt_uint32_t)dev);
}
/* post message to Ethernet thread */ /* post message to Ethernet thread */
return rt_mb_send(&eth_rx_thread_mb, (rt_ubase_t)dev); }
else
return ERR_OK; /* netif is not initialized yet, just return. */ return ERR_OK; /* netif is not initialized yet, just return. */
} }
@ -695,9 +701,10 @@ static void eth_rx_thread_entry(void* parameter)
else else
netifapi_netif_set_link_down(device->netif); netifapi_netif_set_link_down(device->netif);
} }
device->rx_notice = RT_FALSE;
/* receive all of buffer */ /* receive all of buffer */
do while(1)
{ {
if(device->eth_rx == RT_NULL) break; if(device->eth_rx == RT_NULL) break;
@ -713,7 +720,7 @@ static void eth_rx_thread_entry(void* parameter)
} }
} }
else break; else break;
}while(rt_mb_recv(&eth_rx_thread_mb, (rt_ubase_t *)&device, RT_WAITING_NO) == RT_EOK); }
} }
else else
{ {

View File

@ -27,6 +27,7 @@ struct eth_device
rt_uint16_t flags; rt_uint16_t flags;
rt_uint8_t link_changed; rt_uint8_t link_changed;
rt_uint8_t link_status; rt_uint8_t link_status;
rt_uint8_t rx_notice; /* avoid send the same mail to mailbox */
/* eth device interface */ /* eth device interface */
struct pbuf* (*eth_rx)(rt_device_t dev); struct pbuf* (*eth_rx)(rt_device_t dev);

View File

@ -601,9 +601,15 @@ void eth_device_deinit(struct eth_device *dev)
rt_err_t eth_device_ready(struct eth_device* dev) rt_err_t eth_device_ready(struct eth_device* dev)
{ {
if (dev->netif) if (dev->netif)
/* post message to Ethernet thread */ {
if(dev->rx_notice == RT_FALSE)
{
dev->rx_notice = RT_TRUE;
return rt_mb_send(&eth_rx_thread_mb, (rt_uint32_t)dev); return rt_mb_send(&eth_rx_thread_mb, (rt_uint32_t)dev);
else }
/* post message to Ethernet thread */
}
return ERR_OK; /* netif is not initialized yet, just return. */ return ERR_OK; /* netif is not initialized yet, just return. */
} }
@ -697,9 +703,10 @@ static void eth_rx_thread_entry(void* parameter)
else else
netifapi_netif_set_link_down(device->netif); netifapi_netif_set_link_down(device->netif);
} }
device->rx_notice = RT_FALSE;
/* receive all of buffer */ /* receive all of buffer */
do while(1)
{ {
if(device->eth_rx == RT_NULL) break; if(device->eth_rx == RT_NULL) break;
@ -715,7 +722,7 @@ static void eth_rx_thread_entry(void* parameter)
} }
} }
else break; else break;
}while(rt_mb_recv(&eth_rx_thread_mb, (rt_ubase_t *)&device, RT_WAITING_NO) == RT_EOK); }
} }
else else
{ {