lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 25 Jul 2007 15:09:55 +1000 From: Rusty Russell <rusty@...tcorp.com.au> To: David Miller <davem@...emloft.net> Cc: netdev@...r.kernel.org, shemminger@...ux-foundation.org, jgarzik@...ox.com, hadi@...erus.ca Subject: Re: [PATCH RFX]: napi_struct V3 On Tue, 2007-07-24 at 21:29 -0700, David Miller wrote: > From: Rusty Russell <rusty@...tcorp.com.au> > Date: Wed, 25 Jul 2007 12:33:14 +1000 > > > Maybe by adding YA state bit? Hold on, this might get ugly... > > > > Say netif_rx_schedule_prep() sets the MORE_TODO bit (atomically instead > > of setting __LINK_STATE_RX_SCHED) if it's going to fail, and > > netif_rx_complete() returns 0 if it was set, or 1 if it's OK. Now > > callers do: > > > > reenable_interrupts(); > > if (rx_pending() || !netif_rx_complete(netdev, napi)) > > disable_interrupts(); > > This is an interesting idea, and would work, but the extra atomics > for something that 2 or 3 drivers actually need.... unless I > misunderstand your suggestion? Well, netif_rx_schedule_prep() becomes a cmpxchg instead of a test_and_set_bit: /* We either set MORE_TODO or RX_SCHED. */ unsigned long state; again: state = napi->state; if (!(state & __LINK_STATE_RX_SCHED)) { if (cmpxchg(&napi->state, state, state|__LINK_STATE_RX_SCHED) == state) return 1; } else { if (cmpxchg(&napi->state, state, state|__LINK_STATE_MORE_TODO) == state) return 0; } goto again; netif_rx_complete would need something more complex... hmm... unsigned long state; again: state = napi->state; if (state & __LINK_STATE_MORE_TODO) return 0; list_del(&napi->poll_list); if (cmpxchg(&napi->state, state, state & ~__LINK_STATE_RX_SCHED) == state) return 1; list_add_tail(napi->poll_list, &__get_cpu_var(softnet_data).poll_list); goto again; Not pretty 8( Rusty. if ( - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists