2009-04-30 00:10:00

by David VomLehn

[permalink] [raw]
Subject: [PATCH 2/5] USB: Provide USB boot device availability notification

From: Alan Stern <[email protected]>

Use boot device discovery infrastructure to report availability of USB
devices.

Signed-off-by: Alan Stern <[email protected]>
Signed-off-by: David VomLehn <[email protected]>
---
drivers/usb/core/hub.c | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index be86ae3..01a9b76 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -37,6 +37,20 @@
#endif
#endif

+/* The mask of possible USB boot devices depends on what drivers and
+ * options have been configured into the kernel. There are too many
+ * USB network config options to list here, so just assume it is always
+ * possible to have a USB network device.
+ */
+static int usb_bootdev_mask = 0
+#ifdef CONFIG_USB_SERIAL_CONSOLE
+ | BOOTDEV_CONSOLE_MASK
+#endif
+#if defined(CONFIG_USB_STORAGE) | defined(CONFIG_BLK_DEV_UB)
+ | BOOTDEV_BLOCK_MASK
+#endif
+ | BOOTDEV_NETDEV_MASK;
+
struct usb_hub {
struct device *intfdev; /* the "interface" device */
struct usb_device *hdev;
@@ -73,6 +87,7 @@ struct usb_hub {
unsigned limited_power:1;
unsigned quiescing:1;
unsigned disconnected:1;
+ unsigned probing:1;

unsigned has_indicators:1;
u8 indicator[USB_MAXCHILDREN];
@@ -1079,6 +1094,9 @@ static int hub_configure(struct usb_hub *hub,
if (hub->has_indicators && blinkenlights)
hub->indicator [0] = INDICATOR_CYCLE;

+ hub->probing = 1;
+ bootdev_found(usb_bootdev_mask);
+
hub_activate(hub, HUB_INIT);
return 0;

@@ -1124,6 +1142,9 @@ static void hub_disconnect(struct usb_interface *intf)
usb_buffer_free(hub->hdev, sizeof(*hub->buffer), hub->buffer,
hub->buffer_dma);

+ if (hub->probing)
+ bootdev_probe_done(usb_bootdev_mask);
+
kref_put(&hub->kref, hub_release);
}

@@ -3135,6 +3156,11 @@ static void hub_events(void)
portstatus, portchange);
} /* end for i */

+ if (hub->probing) {
+ hub->probing = 0;
+ bootdev_probe_done(usb_bootdev_mask);
+ }
+
/* deal with hub status changes */
if (test_and_clear_bit(0, hub->event_bits) == 0)
; /* do nothing */


2009-04-30 15:24:52

by Sergei Shtylyov

[permalink] [raw]
Subject: Re: [PATCH 2/5] USB: Provide USB boot device availability notification

Hello.

David VomLehn wrote:

> From: Alan Stern <[email protected]>

> Use boot device discovery infrastructure to report availability of USB
> devices.

> Signed-off-by: Alan Stern <[email protected]>
> Signed-off-by: David VomLehn <[email protected]>

[...]

> diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
> index be86ae3..01a9b76 100644
> --- a/drivers/usb/core/hub.c
> +++ b/drivers/usb/core/hub.c
> @@ -37,6 +37,20 @@
> #endif
> #endif
>
> +/* The mask of possible USB boot devices depends on what drivers and
> + * options have been configured into the kernel. There are too many
> + * USB network config options to list here, so just assume it is always
> + * possible to have a USB network device.
> + */
> +static int usb_bootdev_mask = 0
> +#ifdef CONFIG_USB_SERIAL_CONSOLE
> + | BOOTDEV_CONSOLE_MASK
> +#endif
> +#if defined(CONFIG_USB_STORAGE) | defined(CONFIG_BLK_DEV_UB)

It should be ||, not bitwise | here, no?

WBR, Sergei

2009-04-30 15:33:12

by Alan Stern

[permalink] [raw]
Subject: Re: [PATCH 2/5] USB: Provide USB boot device availability notification

On Thu, 30 Apr 2009, Sergei Shtylyov wrote:

> > +/* The mask of possible USB boot devices depends on what drivers and
> > + * options have been configured into the kernel. There are too many
> > + * USB network config options to list here, so just assume it is always
> > + * possible to have a USB network device.
> > + */
> > +static int usb_bootdev_mask = 0
> > +#ifdef CONFIG_USB_SERIAL_CONSOLE
> > + | BOOTDEV_CONSOLE_MASK
> > +#endif
> > +#if defined(CONFIG_USB_STORAGE) | defined(CONFIG_BLK_DEV_UB)
>
> It should be ||, not bitwise | here, no?

No, it should be bitwise |. The value being constructed is a union of
disjoint mask bits.

Alan Stern

2009-04-30 15:57:24

by Sergei Shtylyov

[permalink] [raw]
Subject: Re: [PATCH 2/5] USB: Provide USB boot device availability notification

Alan Stern wrote:

>>>+/* The mask of possible USB boot devices depends on what drivers and
>>>+ * options have been configured into the kernel. There are too many
>>>+ * USB network config options to list here, so just assume it is always
>>>+ * possible to have a USB network device.
>>>+ */
>>>+static int usb_bootdev_mask = 0
>>>+#ifdef CONFIG_USB_SERIAL_CONSOLE
>>>+ | BOOTDEV_CONSOLE_MASK
>>>+#endif
>>>+#if defined(CONFIG_USB_STORAGE) | defined(CONFIG_BLK_DEV_UB)

>> It should be ||, not bitwise | here, no?

> No, it should be bitwise |. The value being constructed is a union of
> disjoint mask bits.

I meant the #if line only. Although it shouldn't matter really...

> Alan Stern

WBR, Sergei

2009-04-30 19:24:41

by Alan Stern

[permalink] [raw]
Subject: Re: [PATCH 2/5] USB: Provide USB boot device availability notification

On Thu, 30 Apr 2009, Sergei Shtylyov wrote:

> Alan Stern wrote:
>
> >>>+/* The mask of possible USB boot devices depends on what drivers and
> >>>+ * options have been configured into the kernel. There are too many
> >>>+ * USB network config options to list here, so just assume it is always
> >>>+ * possible to have a USB network device.
> >>>+ */
> >>>+static int usb_bootdev_mask = 0
> >>>+#ifdef CONFIG_USB_SERIAL_CONSOLE
> >>>+ | BOOTDEV_CONSOLE_MASK
> >>>+#endif
> >>>+#if defined(CONFIG_USB_STORAGE) | defined(CONFIG_BLK_DEV_UB)
>
> >> It should be ||, not bitwise | here, no?
>
> > No, it should be bitwise |. The value being constructed is a union of
> > disjoint mask bits.
>
> I meant the #if line only. Although it shouldn't matter really...

Oh, sorry. Yes, you're right about that (and you're right that it
doesn't really matter...).

David, you can go ahead and change the patch, but don't bother to
submit a new version for such a small thing. The next time this gets
pushed it'll have the right operator.

Alan Stern

2009-04-30 19:49:59

by David VomLehn

[permalink] [raw]
Subject: Re: [PATCH 2/5] USB: Provide USB boot device availability notification

On Thu, Apr 30, 2009 at 03:24:30PM -0400, Alan Stern wrote:
> On Thu, 30 Apr 2009, Sergei Shtylyov wrote:
>
> > Alan Stern wrote:
> >
> > >>>+/* The mask of possible USB boot devices depends on what drivers and
> > >>>+ * options have been configured into the kernel. There are too many
> > >>>+ * USB network config options to list here, so just assume it is always
> > >>>+ * possible to have a USB network device.
> > >>>+ */
> > >>>+static int usb_bootdev_mask = 0
> > >>>+#ifdef CONFIG_USB_SERIAL_CONSOLE
> > >>>+ | BOOTDEV_CONSOLE_MASK
> > >>>+#endif
> > >>>+#if defined(CONFIG_USB_STORAGE) | defined(CONFIG_BLK_DEV_UB)
> >
> > >> It should be ||, not bitwise | here, no?
> >
> > > No, it should be bitwise |. The value being constructed is a union of
> > > disjoint mask bits.
> >
> > I meant the #if line only. Although it shouldn't matter really...
>
> Oh, sorry. Yes, you're right about that (and you're right that it
> doesn't really matter...).
>
> David, you can go ahead and change the patch, but don't bother to
> submit a new version for such a small thing. The next time this gets
> pushed it'll have the right operator.

Done. It will be in the next submission.

> Alan Stern

David VomLehn