Re: [RFC v4 11/24] usb: Make core allocate resources per PCI-device.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, 12 Mar 2011, Sarah Sharp wrote:

> Introduce the notion of a PCI device that may be associated with more than
> one USB host controller driver (struct usb_hcd).  This patch is the start
> of the work to separate the xHCI host controller into two roothubs: a USB
> 3.0 roothub with SuperSpeed-only ports, and a USB 2.0 roothub with
> HS/FS/LS ports.
> 
> One usb_hcd structure is designated to be the "primary HCD", and a pointer
> is added to the usb_hcd structure to keep track of that.  A new function
> call, usb_hcd_is_primary_hcd() is added to check whether the USB hcd is
> marked as the primary HCD (or if it is not part of a roothub pair).  To
> allow the USB core and xHCI driver to access either roothub in a pair, a
> "shared_hcd" pointer is added to the usb_hcd structure.
> 
> Add a new function, usb_create_shared_hcd(), that does roothub allocation
> for paired roothubs.  It will act just like usb_create_hcd() did if the
> primary_hcd pointer argument is NULL.  If it is passed a non-NULL
> primary_hcd pointer, it sets usb_hcd->shared_hcd and usb_hcd->primary_hcd
> fields.  It will also skip the bandwidth_mutex allocation, and set the
> secondary hcd's bandwidth_mutex pointer to the primary HCD's mutex.
> 
> IRQs are only allocated once for the primary roothub.
> 
> Introduce a new usb_hcd driver flag that indicates the host controller
> driver wants to create two roothubs.  If the HCD_SHARED flag is set, then
> the USB core PCI probe methods will allocate a second roothub, and make
> sure that second roothub gets freed during rmmod and in initialization
> error paths.
> 
> When usb_hc_died() is called with the primary HCD, make sure that any
> roothubs that share that host controller are also marked as being dead.


> diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h
> index b8bb693..5d8c0c8 100644
> --- a/include/linux/usb/hcd.h
> +++ b/include/linux/usb/hcd.h

> +extern inline int usb_hcd_is_primary_hcd(struct usb_hcd *hcd);

Inline routines should be static, not external.  Or to put it the other 
way, external routines should be out-of-line, not inline.

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux