Am Freitag, 16. März 2012, 17:56:20 schrieb santosh prasad nayak: > On Fri, Mar 16, 2012 at 10:02 PM, Oliver Neukum <oliver@xxxxxxxxxx> wrote: > > > > Indeed there's a lot wrong here. The idea of having an interruptible > > sleep in probe() is arcane. You need a very, very, very good reason for that. > > Can you please explain why interruptible sleep should not be in probe() ? > I am curious to know. -EINTR is supposed to be returned to user space, so that it can repeat an interrupted syscall. - There is no user space for probe() - probe() cannot be easily repeated from user space - there is no syscall for probe > > > > The sane fix is using an uninterruptable sleep here. > > > > Second, while you are at it, fix the error case for no initialization > > due to a failing kmalloc(). You need to return -ENOMEM. > > Are you talking about kmalloc or kzalloc ? > Because for failing kmalloc -ENOMEM is returned as shown below: data = kzalloc(16, GFP_KERNEL); if (data != NULL) { int rc; rc = go7007_usb_vendor_request(go, 0x41, 0, 0, data, 16, 1); if (rc > 0) { u8 mask; data[0] = 0; mask = 1<<5; data[0] &= ~mask; data[1] |= mask; go7007_usb_vendor_request(go, 0x40, 0, (data[1]<<8) + data[1], data, 16, 0); } kfree(data); } mutex_unlock(&usb->i2c_lock) This code has no error handling. Regards Oliver _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel