Here a second version of the patch with applied all changes Jeff and Stephen suggest me. All but NAPI, see comments below at this regard. Furthermore I fixed also a bug that caused a crash after ifconfig down and up cycle and changed the mutex_lock policy. Jeff Garzik wrote: > > comments: > > * overall: a clean driver that looks mostly acceptable, good work Thanks > * Why do interrupt work in a kernel thread? Your comment says you > cannot, but does not explain. The enc28j60 is a SPI to Ethernet adapter, so we cannot access register with simple in() out() instructions, but we need to use the SPI subsystem. The spi_sync() basic operation to read/write a register is a blocking operation, so can't be done in interrupt context. Since every basic operation like read interrupt flag register call spi_sync() we need the work queue for almost everything. > > * should use NAPI > For the reason I just explained I don't think NAPI is a viable way for enc28j60. Furthermore enc28j60 is a 10Mb only device and probably don't suffer to interrupt overload. In my test there are a lot more interrupts from SPI than from enc28j60 and the enc28j60 interrupts are less than RX+TX packets. See the dump below: [root@videotron /tmp]# ifconfig eth0 Link encap:Ethernet HWaddr 7E:C4:3B:C7:EA:F3 inet addr:192.168.143.197 Bcast:192.168.143.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:4972 errors:0 dropped:0 overruns:0 frame:0 TX packets:2832 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2009875 (1.9 MiB) TX bytes:131922 (128.8 KiB) Interrupt:18 [root@videotron /tmp]# cat /proc/interrupts CPU0 18: 4316 s3c-ext0 enc28j60 30: 11591615 s3c S3C2410 Timer Tick 32: 0 s3c s162-lcd 33: 0 s3c s3c-mci 37: 21 s3c s3c-mci 38: 2707866 s3c s3c2410-spi 42: 0 s3c ohci_hcd:usb1 43: 28 s3c s3c2440-i2c 45: 1 s3c s3c2410-spi 62: 1 s3c-ext s3c-mci 73: 342 s3c-uart1 s3c2440-uart 74: 1225 s3c-uart1 s3c2440-uart 79: 0 s3c-adc s3c24xx_action 80: 0 s3c-adc s3c24xx_action Err: 0 I think also USB-ethernet adapter have the same problem, and neither use NAPI Cheers, Claudio Lanconelli