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

Commit 5fe88eae authored by David Dillow's avatar David Dillow Committed by David S. Miller
Browse files

typhoon: fix incorrect use of smp_wmb()



The typhoon driver was incorrectly using smp_wmb() to order memory
accesses against IO to the NIC in a few instances. Use wmb() instead,
which is required to actually order between memory types.

Signed-off-by: default avatarDavid Dillow <dave@thedillows.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d17792eb
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -480,7 +480,7 @@ typhoon_hello(struct typhoon *tp)
		typhoon_inc_cmd_index(&ring->lastWrite, 1);
		typhoon_inc_cmd_index(&ring->lastWrite, 1);


		INIT_COMMAND_NO_RESPONSE(cmd, TYPHOON_CMD_HELLO_RESP);
		INIT_COMMAND_NO_RESPONSE(cmd, TYPHOON_CMD_HELLO_RESP);
		smp_wmb();
		wmb();
		iowrite32(ring->lastWrite, tp->ioaddr + TYPHOON_REG_CMD_READY);
		iowrite32(ring->lastWrite, tp->ioaddr + TYPHOON_REG_CMD_READY);
		spin_unlock(&tp->command_lock);
		spin_unlock(&tp->command_lock);
	}
	}
@@ -1311,13 +1311,15 @@ typhoon_init_interface(struct typhoon *tp)


	tp->txlo_dma_addr = le32_to_cpu(iface->txLoAddr);
	tp->txlo_dma_addr = le32_to_cpu(iface->txLoAddr);
	tp->card_state = Sleeping;
	tp->card_state = Sleeping;
	smp_wmb();


	tp->offload = TYPHOON_OFFLOAD_IP_CHKSUM | TYPHOON_OFFLOAD_TCP_CHKSUM;
	tp->offload = TYPHOON_OFFLOAD_IP_CHKSUM | TYPHOON_OFFLOAD_TCP_CHKSUM;
	tp->offload |= TYPHOON_OFFLOAD_UDP_CHKSUM | TSO_OFFLOAD_ON;
	tp->offload |= TYPHOON_OFFLOAD_UDP_CHKSUM | TSO_OFFLOAD_ON;


	spin_lock_init(&tp->command_lock);
	spin_lock_init(&tp->command_lock);
	spin_lock_init(&tp->state_lock);
	spin_lock_init(&tp->state_lock);

	/* Force the writes to the shared memory area out before continuing. */
	wmb();
}
}


static void
static void