Detach kernel driver

Michal Demin michal.demin at gmail.com
Mon Apr 23 20:25:44 UTC 2012


Hi Peter,

I don't really see the problem.

Ether kernel had the driver loaded, or there is other app. If there is
kernel I detach the kernel driver and the device is claimed.
If other app is using the device then I will only try to claim. (Which
will fail)

I can only see the "racy" when 2 applications are concurrently trying
to claim the device, in which case not even your solution
is perfect :-)

Could you please be more specific with the problem?

 Md

On Mon, Apr 23, 2012 at 7:11 PM, Peter Stuge <peter at stuge.se> wrote:
> Michal Demin wrote:
>> Subject: [PATCH 1/2] Detach the device kernel driver when kernel driver loaded.
> ..
>> @@ -689,6 +690,15 @@ int rtlsdr_open(rtlsdr_dev_t **out_dev, uint32_t index)
>>
>>       libusb_free_device_list(list, 0);
>>
>> +     if (libusb_kernel_driver_active(dev->devh, 0)) {
>> +             // reattach later
>> +             dev->reattach = 1;
>> +             if (libusb_detach_kernel_driver(dev->devh, 0)) {
>> +                     fprintf(stderr, "Error detaching kernel driver \n");
>> +                     goto err;
>> +             }
>> +     }
>> +
>>       r = libusb_claim_interface(dev->devh, 0);
>>       if (r < 0) {
>>               fprintf(stderr, "usb_claim_interface error %d\n", r);
>
> This is racy. It's better to call libusb_detach_kernel_driver() when
> libusb_claim_interface() returns an error.
>
>
> //Peter
>




More information about the osmocom-sdr mailing list