Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 8 Oct 2015 07:17:11 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r289006 - head/sys/dev/wpi
Message-ID:  <201510080717.t987HB2x048161@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Thu Oct  8 07:17:11 2015
New Revision: 289006
URL: https://svnweb.freebsd.org/changeset/base/289006

Log:
  wpi(4): drop unnecessary locking in wpi_set_pslevel().
  
  Submitted by:	<s3erios@gmail.com>
  Differential Revision:	https://reviews.freebsd.org/D3758

Modified:
  head/sys/dev/wpi/if_wpi.c
  head/sys/dev/wpi/if_wpivar.h

Modified: head/sys/dev/wpi/if_wpi.c
==============================================================================
--- head/sys/dev/wpi/if_wpi.c	Thu Oct  8 06:34:12 2015	(r289005)
+++ head/sys/dev/wpi/if_wpi.c	Thu Oct  8 07:17:11 2015	(r289006)
@@ -2116,6 +2116,7 @@ wpi_cmd_done(struct wpi_softc *sc, struc
 {
 	struct wpi_tx_ring *ring = &sc->txq[WPI_CMD_QUEUE_NUM];
 	struct wpi_tx_data *data;
+	struct wpi_tx_cmd *cmd;
 
 	DPRINTF(sc, WPI_DEBUG_CMD, "cmd notification qid %x idx %d flags %x "
 				   "type %s len %d\n", desc->qid, desc->idx,
@@ -2128,6 +2129,7 @@ wpi_cmd_done(struct wpi_softc *sc, struc
 	KASSERT(ring->queued == 0, ("ring->queued must be 0"));
 
 	data = &ring->data[desc->idx];
+	cmd = &ring->cmd[desc->idx];
 
 	/* If the command was mapped in an mbuf, free it. */
 	if (data->m != NULL) {
@@ -2138,11 +2140,16 @@ wpi_cmd_done(struct wpi_softc *sc, struc
 		data->m = NULL;
 	}
 
-	wakeup(&ring->cmd[desc->idx]);
+	wakeup(cmd);
 
 	if (desc->type == WPI_CMD_SET_POWER_MODE) {
+		struct wpi_pmgt_cmd *pcmd = (struct wpi_pmgt_cmd *)cmd->data;
+
+		bus_dmamap_sync(ring->data_dmat, ring->cmd_dma.map,
+		    BUS_DMASYNC_POSTREAD);
+
 		WPI_TXQ_LOCK(sc);
-		if (sc->sc_flags & WPI_PS_PATH) {
+		if (le16toh(pcmd->flags) & WPI_PS_ALLOW_SLEEP) {
 			sc->sc_update_rx_ring = wpi_update_rx_ring_ps;
 			sc->sc_update_tx_ring = wpi_update_tx_ring_ps;
 		} else {
@@ -3714,13 +3721,8 @@ wpi_set_pslevel(struct wpi_softc *sc, ui
 		pmgt = &wpi_pmgt[1][level];
 
 	memset(&cmd, 0, sizeof cmd);
-	WPI_TXQ_LOCK(sc);
-	if (level != 0)	{	/* not CAM */
+	if (level != 0)	/* not CAM */
 		cmd.flags |= htole16(WPI_PS_ALLOW_SLEEP);
-		sc->sc_flags |= WPI_PS_PATH;
-	} else
-		sc->sc_flags &= ~WPI_PS_PATH;
-	WPI_TXQ_UNLOCK(sc);
 	/* Retrieve PCIe Active State Power Management (ASPM). */
 	reg = pci_read_config(sc->sc_dev, sc->sc_cap_off + 0x10, 1);
 	if (!(reg & 0x1))	/* L0s Entry disabled. */

Modified: head/sys/dev/wpi/if_wpivar.h
==============================================================================
--- head/sys/dev/wpi/if_wpivar.h	Thu Oct  8 06:34:12 2015	(r289005)
+++ head/sys/dev/wpi/if_wpivar.h	Thu Oct  8 07:17:11 2015	(r289006)
@@ -165,8 +165,6 @@ struct wpi_softc {
 	device_t		sc_dev;
 	int			sc_debug;
 
-	int			sc_flags;
-#define WPI_PS_PATH		(1 << 0)
 	int			sc_running;
 
 	struct mtx		sc_mtx;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201510080717.t987HB2x048161>