Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b229487b authored by Rick Farrington's avatar Rick Farrington Committed by David S. Miller
Browse files

liquidio: remove/replace invalid code



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: default avatarRick Farrington <ricardo.farrington@cavium.com>
Signed-off-by: default avatarFelix Manlunas <felix.manlunas@cavium.com>
Signed-off-by: default avatarDerek Chickles <derek.chickles@cavium.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5080f39e
Loading
Loading
Loading
Loading
+10 −16
Original line number Diff line number Diff line
@@ -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)) {