Merge usb-linus branch into usb-next
This pulls in a bunch of fixes that are in Linus's tree because we need them here for testing and development. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
这个提交包含在:
@@ -1698,7 +1698,7 @@ static void handle_port_status(struct xhci_hcd *xhci,
|
||||
faked_port_index + 1);
|
||||
if (slot_id && xhci->devs[slot_id])
|
||||
xhci_ring_device(xhci, slot_id);
|
||||
if (bus_state->port_remote_wakeup && (1 << faked_port_index)) {
|
||||
if (bus_state->port_remote_wakeup & (1 << faked_port_index)) {
|
||||
bus_state->port_remote_wakeup &=
|
||||
~(1 << faked_port_index);
|
||||
xhci_test_and_clear_bit(xhci, port_array,
|
||||
@@ -2589,6 +2589,8 @@ cleanup:
|
||||
(trb_comp_code != COMP_STALL &&
|
||||
trb_comp_code != COMP_BABBLE))
|
||||
xhci_urb_free_priv(xhci, urb_priv);
|
||||
else
|
||||
kfree(urb_priv);
|
||||
|
||||
usb_hcd_unlink_urb_from_ep(bus_to_hcd(urb->dev->bus), urb);
|
||||
if ((urb->actual_length != urb->transfer_buffer_length &&
|
||||
@@ -3106,7 +3108,7 @@ static u32 xhci_v1_0_td_remainder(int running_total, int trb_buff_len,
|
||||
* running_total.
|
||||
*/
|
||||
packets_transferred = (running_total + trb_buff_len) /
|
||||
usb_endpoint_maxp(&urb->ep->desc);
|
||||
GET_MAX_PACKET(usb_endpoint_maxp(&urb->ep->desc));
|
||||
|
||||
if ((total_packet_count - packets_transferred) > 31)
|
||||
return 31 << 17;
|
||||
@@ -3640,7 +3642,8 @@ static int xhci_queue_isoc_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
|
||||
td_len = urb->iso_frame_desc[i].length;
|
||||
td_remain_len = td_len;
|
||||
total_packet_count = DIV_ROUND_UP(td_len,
|
||||
usb_endpoint_maxp(&urb->ep->desc));
|
||||
GET_MAX_PACKET(
|
||||
usb_endpoint_maxp(&urb->ep->desc)));
|
||||
/* A zero-length transfer still involves at least one packet. */
|
||||
if (total_packet_count == 0)
|
||||
total_packet_count++;
|
||||
@@ -3662,9 +3665,11 @@ static int xhci_queue_isoc_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
|
||||
td = urb_priv->td[i];
|
||||
for (j = 0; j < trbs_per_td; j++) {
|
||||
u32 remainder = 0;
|
||||
field = TRB_TBC(burst_count) | TRB_TLBPC(residue);
|
||||
field = 0;
|
||||
|
||||
if (first_trb) {
|
||||
field = TRB_TBC(burst_count) |
|
||||
TRB_TLBPC(residue);
|
||||
/* Queue the isoc TRB */
|
||||
field |= TRB_TYPE(TRB_ISOC);
|
||||
/* Assume URB_ISO_ASAP is set */
|
||||
|
在新工单中引用
屏蔽一个用户