@@ -2321,24 +2321,13 @@ xhci_alloc_interrupter(struct xhci_hcd *xhci, unsigned int segs, gfp_t flags)
return ir;
}
-static int
+static void
xhci_add_interrupter(struct xhci_hcd *xhci, struct xhci_interrupter *ir,
unsigned int intr_num)
{
u64 erst_base;
u32 erst_size;
- if (intr_num >= xhci->max_interrupters) {
- xhci_warn(xhci, "Can't add interrupter %d, max interrupters %d\n",
- intr_num, xhci->max_interrupters);
- return -EINVAL;
- }
-
- if (xhci->interrupters[intr_num]) {
- xhci_warn(xhci, "Interrupter %d\n already set up", intr_num);
- return -EINVAL;
- }
-
xhci->interrupters[intr_num] = ir;
ir->intr_num = intr_num;
ir->ir_set = &xhci->run_regs->ir_set[intr_num];
@@ -2359,8 +2348,6 @@ xhci_add_interrupter(struct xhci_hcd *xhci, struct xhci_interrupter *ir,
/* Set the event ring dequeue address of this interrupter */
xhci_set_hc_event_deq(xhci, ir);
-
- return 0;
}
struct xhci_interrupter *
@@ -2385,13 +2372,16 @@ xhci_create_secondary_interrupter(struct usb_hcd *hcd, unsigned int segs,
/* Find available secondary interrupter, interrupter 0 is reserved for primary */
for (i = 1; i < xhci->max_interrupters; i++) {
if (!xhci->interrupters[i]) {
- err = xhci_add_interrupter(xhci, ir, i);
+ xhci_add_interrupter(xhci, ir, i);
+ err = 0;
break;
}
}
} else {
- if (!xhci->interrupters[intr_num])
- err = xhci_add_interrupter(xhci, ir, intr_num);
+ if (!xhci->interrupters[intr_num]) {
+ xhci_add_interrupter(xhci, ir, intr_num);
+ err = 0;
+ }
}
spin_unlock_irq(&xhci->lock);
@@ -2504,8 +2494,7 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
if (!ir)
goto fail;
- if (xhci_add_interrupter(xhci, ir, 0))
- goto fail;
+ xhci_add_interrupter(xhci, ir, 0);
ir->isoc_bei_interval = AVOID_BEI_INTERVAL_MAX;