Hi, On Sat, Sep 28, 2013 at 10:40:47PM +0200, Richard Weinberger wrote: > Am 28.09.2013 21:50, schrieb Aaro Koskinen: > > Currently the driver assumes that CPU 0 is handling all the hard IRQs. > > This is wrong in Linux SMP systems where user is allowed to assign to > > hardware IRQs to any CPU. The driver will stop working if user sets > > smp_affinity so that interrupts end up being handled by other than CPU > > 0. The patch fixes that. > > > > Signed-off-by: Aaro Koskinen <aaro.koskinen@xxxxxx> > > --- > > drivers/staging/octeon/ethernet-rx.c | 12 ++++++------ > > 1 file changed, 6 insertions(+), 6 deletions(-) > > > > diff --git a/drivers/staging/octeon/ethernet-rx.c b/drivers/staging/octeon/ethernet-rx.c > > index e14a1bb..de831c1 100644 > > --- a/drivers/staging/octeon/ethernet-rx.c > > +++ b/drivers/staging/octeon/ethernet-rx.c > > @@ -80,6 +80,8 @@ struct cvm_oct_core_state { > > > > static struct cvm_oct_core_state core_state __cacheline_aligned_in_smp; > > > > +static int cvm_irq_cpu = -1; > > Why are you introducing a new global variable here? > Can't you pass cvm_irq_cpu as argument to cvm_oct_enable_napi()? This information needs to be accessed in cvm_oct_no_more_work(). Maybe I'm missing something obvious, but I don't get how the argument could be accessed in or passed to napi poll routine which is calling cvm_oct_no_more_work()? A.