From 79312306de0150ef64213ef9fbc5aa8580544f03 Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Tue, 29 May 2012 21:08:20 -0700 Subject: pxe: use core for atomic modification of certain volatiles pxe_need_poll and pxe_irq_count can be accessed from an interrupt handler, so make sure that we modify them in a way that is locally atomic. Signed-off-by: H. Peter Anvin --- core/fs/pxe/isr.c | 2 +- core/lwip/src/netif/undiif.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/fs/pxe/isr.c b/core/fs/pxe/isr.c index 69cfe9f1..069fefd5 100644 --- a/core/fs/pxe/isr.c +++ b/core/fs/pxe/isr.c @@ -252,7 +252,7 @@ void pxe_start_isr(void) pxe_poll_thread, NULL); if (!irq || !(pxe_undi_iface.ServiceFlags & PXE_UNDI_IFACE_FLAG_IRQ)) - pxe_need_poll |= 1; + asm volatile("orb $1,%0" : "+m" (pxe_need_poll)); } int reset_pxe(void) diff --git a/core/lwip/src/netif/undiif.c b/core/lwip/src/netif/undiif.c index b82b6f32..2c7e4ac4 100644 --- a/core/lwip/src/netif/undiif.c +++ b/core/lwip/src/netif/undiif.c @@ -313,8 +313,8 @@ undi_transmit(struct netif *netif, struct pbuf *pbuf, first_xmit = now; } else if (now - first_xmit > 3000) { /* 3 seconds after first transmit, and no interrupts */ - pxe_need_poll |= 1; - pxe_irq_count++; /* We don't need to do this again... */ + asm volatile("orb $1,%0" : "+m" (pxe_need_poll)); + asm volatile("incl %0" : "+m" (pxe_irq_count)); } } -- cgit 1.2.3-korg