liquidio: remove/replace invalid code
authorRick Farrington <ricardo.farrington@cavium.com>
Mon, 13 Mar 2017 19:07:32 +0000 (12:07 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 17 Mar 2017 03:15:20 +0000 (20:15 -0700)
Remove invalid call to dma_sync_single_for_cpu() because previous DMA
allocation was coherent--not streaming.  Remove code that references fields
in struct list_head; replace it with calls to list_empty() and
list_first_entry().  Also, add comment to clarify complicated if statement.

Signed-off-by: Rick Farrington <ricardo.farrington@cavium.com>
Signed-off-by: Felix Manlunas <felix.manlunas@cavium.com>
Signed-off-by: Derek Chickles <derek.chickles@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/cavium/liquidio/response_manager.c

index 2fbaae9..1d987d7 100644 (file)
@@ -69,41 +69,35 @@ int lio_process_ordered_list(struct octeon_device *octeon_dev,
        int resp_to_process = MAX_ORD_REQS_TO_PROCESS;
        u32 status;
        u64 status64;
-       struct octeon_instr_rdp *rdp;
-       u64 rptr;
 
        ordered_sc_list = &octeon_dev->response_list[OCTEON_ORDERED_SC_LIST];
 
        do {
                spin_lock_bh(&ordered_sc_list->lock);
 
-               if (ordered_sc_list->head.next == &ordered_sc_list->head) {
+               if (list_empty(&ordered_sc_list->head)) {
                        spin_unlock_bh(&ordered_sc_list->lock);
                        return 1;
                }
 
-               sc = (struct octeon_soft_command *)ordered_sc_list->
-                   head.next;
-               if (OCTEON_CN23XX_PF(octeon_dev) ||
-                   OCTEON_CN23XX_VF(octeon_dev)) {
-                       rdp = (struct octeon_instr_rdp *)&sc->cmd.cmd3.rdp;
-                       rptr = sc->cmd.cmd3.rptr;
-               } else {
-                       rdp = (struct octeon_instr_rdp *)&sc->cmd.cmd2.rdp;
-                       rptr = sc->cmd.cmd2.rptr;
-               }
+               sc = list_first_entry(&ordered_sc_list->head,
+                                     struct octeon_soft_command, node);
 
                status = OCTEON_REQUEST_PENDING;
 
                /* check if octeon has finished DMA'ing a response
                 * to where rptr is pointing to
                 */
-               dma_sync_single_for_cpu(&octeon_dev->pci_dev->dev,
-                                       rptr, rdp->rlen,
-                                       DMA_FROM_DEVICE);
                status64 = *sc->status_word;
 
                if (status64 != COMPLETION_WORD_INIT) {
+                       /* This logic ensures that all 64b have been written.
+                        * 1. check byte 0 for non-FF
+                        * 2. if non-FF, then swap result from BE to host order
+                        * 3. check byte 7 (swapped to 0) for non-FF
+                        * 4. if non-FF, use the low 32-bit status code
+                        * 5. if either byte 0 or byte 7 is FF, don't use status
+                        */
                        if ((status64 & 0xff) != 0xff) {
                                octeon_swap_8B_data(&status64, 1);
                                if (((status64 & 0xff) != 0xff)) {