mirror of https://gitee.com/openkylin/linux.git
xhci: remove BUG() in xhci_get_endpoint_type()
If the endpoint type is unknown, set it to 0 and fail gracefully instead of causing a kernel panic. Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
This commit is contained in:
parent
bd18fd5c21
commit
17d6555437
|
@ -1329,7 +1329,7 @@ static u32 xhci_get_endpoint_type(struct usb_device *udev,
|
|||
else
|
||||
type = EP_TYPE(INT_OUT_EP);
|
||||
} else {
|
||||
BUG();
|
||||
type = 0;
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
@ -1375,10 +1375,16 @@ int xhci_endpoint_init(struct xhci_hcd *xhci,
|
|||
unsigned int max_burst;
|
||||
enum xhci_ring_type type;
|
||||
u32 max_esit_payload;
|
||||
u32 endpoint_type;
|
||||
|
||||
ep_index = xhci_get_endpoint_index(&ep->desc);
|
||||
ep_ctx = xhci_get_ep_ctx(xhci, virt_dev->in_ctx, ep_index);
|
||||
|
||||
endpoint_type = xhci_get_endpoint_type(udev, ep);
|
||||
if (!endpoint_type)
|
||||
return -EINVAL;
|
||||
ep_ctx->ep_info2 = cpu_to_le32(endpoint_type);
|
||||
|
||||
type = usb_endpoint_type(&ep->desc);
|
||||
/* Set up the endpoint ring */
|
||||
virt_dev->eps[ep_index].new_ring =
|
||||
|
@ -1407,11 +1413,9 @@ int xhci_endpoint_init(struct xhci_hcd *xhci,
|
|||
* CErr shall be set to 0 for Isoch endpoints.
|
||||
*/
|
||||
if (!usb_endpoint_xfer_isoc(&ep->desc))
|
||||
ep_ctx->ep_info2 = cpu_to_le32(ERROR_COUNT(3));
|
||||
ep_ctx->ep_info2 |= cpu_to_le32(ERROR_COUNT(3));
|
||||
else
|
||||
ep_ctx->ep_info2 = cpu_to_le32(ERROR_COUNT(0));
|
||||
|
||||
ep_ctx->ep_info2 |= cpu_to_le32(xhci_get_endpoint_type(udev, ep));
|
||||
ep_ctx->ep_info2 |= cpu_to_le32(ERROR_COUNT(0));
|
||||
|
||||
/* Set the max packet size and max burst */
|
||||
max_packet = GET_MAX_PACKET(usb_endpoint_maxp(&ep->desc));
|
||||
|
|
Loading…
Reference in New Issue