lkml.org 
[lkml]   [2007]   [Sep]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] modpost: detect unterminated device id lists


    On Sun, 16 Sep 2007, Andrew Morton wrote:

    > On Mon, 17 Sep 2007 05:54:45 +0530 "Satyam Sharma" <satyam.sharma@gmail.com> wrote:
    >
    > > On 9/17/07, Andrew Morton <akpm@linux-foundation.org> wrote:
    > > >
    > > > I'm getting this:
    > > >
    > > > rusb2/pvrusb2: struct usb_device_id is 20 bytes. The last of 3 is:
    > > > 0x03 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    > > > 0x00 0x00 0x00 0x00 0x00
    > > > FATAL: drivers/media/video/pvrusb2/pvrusb2: struct usb_device_id is not terminated
    > > > with a NULL entry!
    > > >
    > > > ("rusb2/pvrusb2" ??)
    > >
    > > Hmm? Are you sure you didn't see any "drivers/media/video/pv" before the
    > > "rusb2/pvrusb2" bit?
    >
    > Fairly. I looked twice.

    "drivers/media/video/pvrusb2/pvrusb2" comes out correctly here ...


    > > Looking at Kees' patch (and the existing code), I've no
    > > clue how/why this should happen ... will try to reproduce here ...
    > >
    > >
    > > > but:
    > > >
    > > > struct usb_device_id pvr2_device_table[] = {
    > > > [PVR2_HDW_TYPE_29XXX] = { USB_DEVICE(0x2040, 0x2900) },
    > > > [PVR2_HDW_TYPE_24XXX] = { USB_DEVICE(0x2040, 0x2400) },
    > > > { USB_DEVICE(0, 0) },
    > > > };
    > > >
    > > > looks OK?
    > > >
    > > > Using plain old "{ }" shut the warning up.
    > >
    > > USB_DEVICE(0, 0) is not empty termination, actually, and this looks like
    > > a genuine bug caught by the patch. As that dump shows, USB_DEVICE(0, 0)
    > > assigns "0x03 0x00" (in little endian) to usb_device_id.match_flags. And
    > > I don't think the USB code treats such an entry as an empty entry (?)
    > >
    > > Interestingly, the "USB_DEVICE(0, 0)" thing is absent from latest -git
    > > tree and also in my copy of 23-rc4-mm1 -- so this looks like something
    > > you must've merged recently.
    >
    > git-dvb very carefully does
    >
    > --- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c~git-dvb
    > +++ a/drivers/media/video/pvrusb2/pvrusb2-hdw.c
    > @@ -44,7 +44,7 @@
    > struct usb_device_id pvr2_device_table[] = {
    > [PVR2_HDW_TYPE_29XXX] = { USB_DEVICE(0x2040, 0x2900) },
    > [PVR2_HDW_TYPE_24XXX] = { USB_DEVICE(0x2040, 0x2400) },
    > - { }
    > + { USB_DEVICE(0, 0) },
    > };
    >
    > MODULE_DEVICE_TABLE(usb, pvr2_device_table);

    Ok, this is a false positive indeed, the core USB code does in fact
    treat such an entry as an empty entry (usb_match_id() tests only the
    .idVendor, .bDeviceClass, .bInterfaceClass and .driver_info members
    for non-zero and not the .match_flags member).

    However, a quick-grep-and-glance tells us that none of the other 2213
    occurrences of USB_DEVICE() in the tree ever do this "(0,0)" thing,
    so it does make sense to change this one to a simple "{ }" as well --
    that's clearer style anyway, and the "standard" way to empty-terminate
    in the rest of the tree, if nothing else.


    Satyam
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-09-17 23:45    [W:0.043 / U:123.180 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site