OSDN Git Service

xhci: convert TRB_CYCLE to le32 before using it to set Link TRB's cycle bit
authorXenia Ragiadakou <burzalodowa@gmail.com>
Mon, 9 Sep 2013 18:03:09 +0000 (21:03 +0300)
committerSarah Sharp <sarah.a.sharp@linux.intel.com>
Mon, 2 Dec 2013 20:59:44 +0000 (12:59 -0800)
This patch converts TRB_CYCLE to le32 to update correctly the Cycle Bit in
'control' field of the link TRB.
This bug was found using sparse.

Signed-off-by: Xenia Ragiadakou <burzalodowa@gmail.com>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
drivers/usb/host/xhci-mem.c

index 49b8bd0..90709cf 100644 (file)
@@ -57,7 +57,7 @@ static struct xhci_segment *xhci_segment_alloc(struct xhci_hcd *xhci,
        /* If the cycle state is 0, set the cycle bit to 1 for all the TRBs */
        if (cycle_state == 0) {
                for (i = 0; i < TRBS_PER_SEGMENT; i++)
-                       seg->trbs[i].link.control |= TRB_CYCLE;
+                       seg->trbs[i].link.control |= cpu_to_le32(TRB_CYCLE);
        }
        seg->dma = dma;
        seg->next = NULL;
@@ -308,7 +308,8 @@ static void xhci_reinit_cached_ring(struct xhci_hcd *xhci,
                                sizeof(union xhci_trb)*TRBS_PER_SEGMENT);
                if (cycle_state == 0) {
                        for (i = 0; i < TRBS_PER_SEGMENT; i++)
-                               seg->trbs[i].link.control |= TRB_CYCLE;
+                               seg->trbs[i].link.control |=
+                                       cpu_to_le32(TRB_CYCLE);
                }
                /* All endpoint rings have link TRBs */
                xhci_link_segments(xhci, seg, seg->next, type);