9 Mar
2023
9 Mar
'23
11:51 a.m.
On Thu, 09 Mar 2023 00:57:24 +0100, Wesley Cheng wrote:
+struct xhci_interrupter * +xhci_create_secondary_interrupter(struct usb_hcd *hcd, int intr_num) +{
- struct xhci_hcd *xhci = hcd_to_xhci(hcd);
- struct xhci_interrupter *ir;
- unsigned int i;
- unsigned int idx = 0;
- unsigned long flags;
- if (!xhci->interrupters || intr_num > xhci->max_interrupters)
return NULL;
- spin_lock_irqsave(&xhci->lock, flags);
....
- if (idx > 0) {
ir = xhci_alloc_interrupter(xhci, idx, GFP_KERNEL);
if (!ir) {
spin_unlock_irqrestore(&xhci->lock, flags);
return NULL;
}
ir->intr_num = idx;
xhci->interrupters[idx] = ir;
spin_unlock_irqrestore(&xhci->lock, flags);
You can't use GFP_KERNEL allocation inside the spinlock.
Takashi