]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
staging: wfx: do not update uapsd if not necessary
authorJérôme Pouiller <jerome.pouiller@silabs.com>
Wed, 15 Jan 2020 13:55:03 +0000 (13:55 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 16 Jan 2020 19:59:51 +0000 (20:59 +0100)
wfx_conf_tx() is called for each queue. On every call, the function
updates UAPSD mask and PM mode for all queues. It is a pity since the
UAPSD configuration very rarely changes and it makes exchanges between
the host and the chip more difficult to track.

This patch avoid to update UAPSD and Power Mode in most usual cases.

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
Link: https://lore.kernel.org/r/20200115135338.14374-43-Jerome.Pouiller@silabs.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/wfx/sta.c

index bf285389c3031cc6889d3d640d658e773ac1fda7..6a43decd5ae638bbedc59c9619af986e1fe0c0c7 100644 (file)
@@ -286,6 +286,7 @@ int wfx_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 {
        struct wfx_dev *wdev = hw->priv;
        struct wfx_vif *wvif = (struct wfx_vif *) vif->drv_priv;
+       int old_uapsd = wvif->uapsd_mask;
        int ret = 0;
 
        WARN_ON(queue >= hw->queues);
@@ -294,7 +295,8 @@ int wfx_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
        assign_bit(queue, &wvif->uapsd_mask, params->uapsd);
        memcpy(&wvif->edca_params[queue], params, sizeof(*params));
        hif_set_edca_queue_params(wvif, queue, params);
-       if (wvif->vif->type == NL80211_IFTYPE_STATION) {
+       if (wvif->vif->type == NL80211_IFTYPE_STATION &&
+           old_uapsd != wvif->uapsd_mask) {
                hif_set_uapsd_info(wvif, wvif->uapsd_mask);
                wfx_update_pm(wvif);
        }