stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Johannes Berg <johannes.berg@intel.com>,
	Sasha Levin <sashal@kernel.org>
Subject: [PATCH 5.19 0474/1157] wifi: cfg80211: do some rework towards MLO link APIs
Date: Mon, 15 Aug 2022 19:57:10 +0200	[thread overview]
Message-ID: <20220815180458.573136703@linuxfoundation.org> (raw)
In-Reply-To: <20220815180439.416659447@linuxfoundation.org>

From: Johannes Berg <johannes.berg@intel.com>

[ Upstream commit 7b0a0e3c3a88260b6fcb017e49f198463aa62ed1 ]

In order to support multi-link operation with multiple links,
start adding some APIs. The notable addition here is to have
the link ID in a new nl80211 attribute, that will be used to
differentiate the links in many nl80211 operations.

So far, this patch adds the netlink NL80211_ATTR_MLO_LINK_ID
attribute (as well as the NL80211_ATTR_MLO_LINKS attribute)
and plugs it through the system in some places, checking the
validity etc. along with other infrastructure needed for it.

For now, I've decided to include only the over-the-air link
ID in the API. I know we discussed that we eventually need to
have to have other ways of identifying a link, but for local
AP mode and auth/assoc commands as well as set_key etc. we'll
use the OTA ID.

Also included in this patch is some refactoring of the data
structures in struct wireless_dev, splitting for the first
time the data into type dependent pieces, to make reasoning
about these things easier.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/net/wireless/ath/ath6kl/cfg80211.c    |   6 +-
 drivers/net/wireless/ath/wil6210/cfg80211.c   |   9 +-
 .../broadcom/brcm80211/brcmfmac/cfg80211.c    |   4 +-
 drivers/net/wireless/marvell/libertas/mesh.c  |  10 +-
 drivers/net/wireless/marvell/mwifiex/11h.c    |   2 +-
 .../net/wireless/marvell/mwifiex/cfg80211.c   |  18 +-
 .../wireless/microchip/wilc1000/cfg80211.c    |   3 +-
 .../net/wireless/quantenna/qtnfmac/cfg80211.c |  14 +-
 .../net/wireless/quantenna/qtnfmac/commands.c |   2 +-
 .../net/wireless/quantenna/qtnfmac/event.c    |  15 +-
 .../staging/rtl8723bs/os_dep/ioctl_cfg80211.c |   4 +-
 include/linux/ieee80211.h                     |   3 +
 include/net/cfg80211.h                        |  99 ++-
 include/uapi/linux/nl80211.h                  |  28 +
 net/mac80211/cfg.c                            |   8 +-
 net/mac80211/mlme.c                           |   2 +-
 net/wireless/ap.c                             |  46 +-
 net/wireless/chan.c                           | 196 ++++--
 net/wireless/core.c                           |  28 +-
 net/wireless/core.h                           |  13 +-
 net/wireless/ibss.c                           |  57 +-
 net/wireless/mesh.c                           |  31 +-
 net/wireless/mlme.c                           |  74 ++-
 net/wireless/nl80211.c                        | 623 +++++++++++++-----
 net/wireless/ocb.c                            |   5 +-
 net/wireless/rdev-ops.h                       |  32 +-
 net/wireless/reg.c                            | 139 ++--
 net/wireless/scan.c                           |   8 +-
 net/wireless/sme.c                            | 102 +--
 net/wireless/trace.h                          |  86 ++-
 net/wireless/util.c                           |  44 +-
 net/wireless/wext-compat.c                    |  48 +-
 net/wireless/wext-sme.c                       |  29 +-
 33 files changed, 1255 insertions(+), 533 deletions(-)

diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index bd1183830e91..33ed54738d47 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -1119,7 +1119,7 @@ void ath6kl_cfg80211_ch_switch_notify(struct ath6kl_vif *vif, int freq,
 					NL80211_CHAN_HT20 : NL80211_CHAN_NO_HT);
 
 	mutex_lock(&vif->wdev.mtx);
-	cfg80211_ch_switch_notify(vif->ndev, &chandef);
+	cfg80211_ch_switch_notify(vif->ndev, &chandef, 0);
 	mutex_unlock(&vif->wdev.mtx);
 }
 
@@ -2967,7 +2967,8 @@ static int ath6kl_change_beacon(struct wiphy *wiphy, struct net_device *dev,
 	return ath6kl_set_ies(vif, beacon);
 }
 
-static int ath6kl_stop_ap(struct wiphy *wiphy, struct net_device *dev)
+static int ath6kl_stop_ap(struct wiphy *wiphy, struct net_device *dev,
+			  unsigned int link_id)
 {
 	struct ath6kl *ar = ath6kl_priv(dev);
 	struct ath6kl_vif *vif = netdev_priv(dev);
@@ -3368,6 +3369,7 @@ static int ath6kl_cfg80211_sscan_stop(struct wiphy *wiphy,
 
 static int ath6kl_cfg80211_set_bitrate(struct wiphy *wiphy,
 				       struct net_device *dev,
+				       unsigned int link_id,
 				       const u8 *addr,
 				       const struct cfg80211_bitrate_mask *mask)
 {
diff --git a/drivers/net/wireless/ath/wil6210/cfg80211.c b/drivers/net/wireless/ath/wil6210/cfg80211.c
index 8f2638f5b87b..f93bdffa4d1d 100644
--- a/drivers/net/wireless/ath/wil6210/cfg80211.c
+++ b/drivers/net/wireless/ath/wil6210/cfg80211.c
@@ -2098,8 +2098,8 @@ static int wil_cfg80211_change_beacon(struct wiphy *wiphy,
 			     bcon->tail_len))
 		privacy = 1;
 
-	memcpy(vif->ssid, wdev->ssid, wdev->ssid_len);
-	vif->ssid_len = wdev->ssid_len;
+	memcpy(vif->ssid, wdev->u.ap.ssid, wdev->u.ap.ssid_len);
+	vif->ssid_len = wdev->u.ap.ssid_len;
 
 	/* in case privacy has changed, need to restart the AP */
 	if (vif->privacy != privacy) {
@@ -2108,7 +2108,7 @@ static int wil_cfg80211_change_beacon(struct wiphy *wiphy,
 
 		rc = _wil_cfg80211_start_ap(wiphy, ndev, vif->ssid,
 					    vif->ssid_len, privacy,
-					    wdev->beacon_interval,
+					    wdev->links[0].ap.beacon_interval,
 					    vif->channel,
 					    vif->wmi_edmg_channel, bcon,
 					    vif->hidden_ssid,
@@ -2186,7 +2186,8 @@ static int wil_cfg80211_start_ap(struct wiphy *wiphy,
 }
 
 static int wil_cfg80211_stop_ap(struct wiphy *wiphy,
-				struct net_device *ndev)
+				struct net_device *ndev,
+				unsigned int link_id)
 {
 	struct wil6210_priv *wil = wiphy_to_wil(wiphy);
 	struct wil6210_vif *vif = ndev_to_vif(ndev);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index 605206abe424..11e1f07f83e0 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -4965,7 +4965,8 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev,
 	return err;
 }
 
-static int brcmf_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *ndev)
+static int brcmf_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *ndev,
+				  unsigned int link_id)
 {
 	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
 	struct brcmf_if *ifp = netdev_priv(ndev);
@@ -5302,6 +5303,7 @@ brcmf_cfg80211_cancel_remain_on_channel(struct wiphy *wiphy,
 
 static int brcmf_cfg80211_get_channel(struct wiphy *wiphy,
 				      struct wireless_dev *wdev,
+				      unsigned int link_id,
 				      struct cfg80211_chan_def *chandef)
 {
 	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
diff --git a/drivers/net/wireless/marvell/libertas/mesh.c b/drivers/net/wireless/marvell/libertas/mesh.c
index a58c1e141f2c..90ffe8d1e0e8 100644
--- a/drivers/net/wireless/marvell/libertas/mesh.c
+++ b/drivers/net/wireless/marvell/libertas/mesh.c
@@ -109,9 +109,9 @@ static int lbs_mesh_config(struct lbs_private *priv, uint16_t action,
 
 		if (priv->mesh_dev) {
 			mesh_wdev = priv->mesh_dev->ieee80211_ptr;
-			ie->val.mesh_id_len = mesh_wdev->mesh_id_up_len;
-			memcpy(ie->val.mesh_id, mesh_wdev->ssid,
-						mesh_wdev->mesh_id_up_len);
+			ie->val.mesh_id_len = mesh_wdev->u.mesh.id_up_len;
+			memcpy(ie->val.mesh_id, mesh_wdev->u.mesh.id,
+						mesh_wdev->u.mesh.id_up_len);
 		}
 
 		ie->len = sizeof(struct mrvl_meshie_val) -
@@ -986,8 +986,8 @@ static int lbs_add_mesh(struct lbs_private *priv)
 	mesh_wdev->wiphy = priv->wdev->wiphy;
 
 	if (priv->mesh_tlv) {
-		sprintf(mesh_wdev->ssid, "mesh");
-		mesh_wdev->mesh_id_up_len = 4;
+		sprintf(mesh_wdev->u.mesh.id, "mesh");
+		mesh_wdev->u.mesh.id_up_len = 4;
 	}
 
 	mesh_wdev->netdev = mesh_dev;
diff --git a/drivers/net/wireless/marvell/mwifiex/11h.c b/drivers/net/wireless/marvell/mwifiex/11h.c
index 3fa25cd64cda..4ca8d0135708 100644
--- a/drivers/net/wireless/marvell/mwifiex/11h.c
+++ b/drivers/net/wireless/marvell/mwifiex/11h.c
@@ -304,6 +304,6 @@ void mwifiex_dfs_chan_sw_work_queue(struct work_struct *work)
 	mwifiex_dbg(priv->adapter, MSG,
 		    "indicating channel switch completion to kernel\n");
 	mutex_lock(&priv->wdev.mtx);
-	cfg80211_ch_switch_notify(priv->netdev, &priv->dfs_chandef);
+	cfg80211_ch_switch_notify(priv->netdev, &priv->dfs_chandef, 0);
 	mutex_unlock(&priv->wdev.mtx);
 }
diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
index 6f23ec34e2e2..d68c40e0e122 100644
--- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
@@ -1753,10 +1753,12 @@ mwifiex_mgmt_stypes[NUM_NL80211_IFTYPES] = {
  * Function configures data rates to firmware using bitrate mask
  * provided by cfg80211.
  */
-static int mwifiex_cfg80211_set_bitrate_mask(struct wiphy *wiphy,
-				struct net_device *dev,
-				const u8 *peer,
-				const struct cfg80211_bitrate_mask *mask)
+static int
+mwifiex_cfg80211_set_bitrate_mask(struct wiphy *wiphy,
+				  struct net_device *dev,
+				  unsigned int link_id,
+				  const u8 *peer,
+				  const struct cfg80211_bitrate_mask *mask)
 {
 	struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
 	u16 bitmap_rates[MAX_BITMAP_RATES_SIZE];
@@ -1998,7 +2000,8 @@ mwifiex_cfg80211_get_antenna(struct wiphy *wiphy, u32 *tx_ant, u32 *rx_ant)
 /* cfg80211 operation handler for stop ap.
  * Function stops BSS running at uAP interface.
  */
-static int mwifiex_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *dev)
+static int mwifiex_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *dev,
+				    unsigned int link_id)
 {
 	struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
 
@@ -2421,7 +2424,7 @@ mwifiex_cfg80211_connect(struct wiphy *wiphy, struct net_device *dev,
 		return -EINVAL;
 	}
 
-	if (priv->wdev.current_bss) {
+	if (priv->wdev.connected) {
 		mwifiex_dbg(adapter, ERROR,
 			    "%s: already connected\n", dev->name);
 		return -EALREADY;
@@ -2649,7 +2652,7 @@ mwifiex_cfg80211_scan(struct wiphy *wiphy,
 		return -EBUSY;
 	}
 
-	if (!priv->wdev.current_bss && priv->scan_block)
+	if (!priv->wdev.connected && priv->scan_block)
 		priv->scan_block = false;
 
 	if (!mwifiex_stop_bg_scan(priv))
@@ -4025,6 +4028,7 @@ mwifiex_cfg80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,
 
 static int mwifiex_cfg80211_get_channel(struct wiphy *wiphy,
 					struct wireless_dev *wdev,
+					unsigned int link_id,
 					struct cfg80211_chan_def *chandef)
 {
 	struct mwifiex_private *priv = mwifiex_netdev_get_priv(wdev->netdev);
diff --git a/drivers/net/wireless/microchip/wilc1000/cfg80211.c b/drivers/net/wireless/microchip/wilc1000/cfg80211.c
index 8d8378bafd9b..269748b9a1c4 100644
--- a/drivers/net/wireless/microchip/wilc1000/cfg80211.c
+++ b/drivers/net/wireless/microchip/wilc1000/cfg80211.c
@@ -1378,7 +1378,8 @@ static int change_beacon(struct wiphy *wiphy, struct net_device *dev,
 	return wilc_add_beacon(vif, 0, 0, beacon);
 }
 
-static int stop_ap(struct wiphy *wiphy, struct net_device *dev)
+static int stop_ap(struct wiphy *wiphy, struct net_device *dev,
+		   unsigned int link_id)
 {
 	int ret;
 	struct wilc_vif *vif = netdev_priv(dev);
diff --git a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
index 84b15a655eab..1593e810b3ca 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
@@ -352,7 +352,8 @@ static int qtnf_start_ap(struct wiphy *wiphy, struct net_device *dev,
 	return ret;
 }
 
-static int qtnf_stop_ap(struct wiphy *wiphy, struct net_device *dev)
+static int qtnf_stop_ap(struct wiphy *wiphy, struct net_device *dev,
+			unsigned int link_id)
 {
 	struct qtnf_vif *vif = qtnf_netdev_get_priv(dev);
 	int ret;
@@ -500,7 +501,7 @@ qtnf_dump_station(struct wiphy *wiphy, struct net_device *dev,
 
 	switch (vif->wdev.iftype) {
 	case NL80211_IFTYPE_STATION:
-		if (idx != 0 || !vif->wdev.current_bss)
+		if (idx != 0 || !vif->wdev.connected)
 			return -ENOENT;
 
 		ether_addr_copy(mac, vif->bssid);
@@ -729,7 +730,7 @@ qtnf_disconnect(struct wiphy *wiphy, struct net_device *dev,
 		pr_err("VIF%u.%u: failed to disconnect\n",
 		       mac->macid, vif->vifid);
 
-	if (vif->wdev.current_bss) {
+	if (vif->wdev.connected) {
 		netif_carrier_off(vif->netdev);
 		cfg80211_disconnected(vif->netdev, reason_code,
 				      NULL, 0, true, GFP_KERNEL);
@@ -745,10 +746,11 @@ qtnf_dump_survey(struct wiphy *wiphy, struct net_device *dev,
 	struct qtnf_wmac *mac = wiphy_priv(wiphy);
 	struct wireless_dev *wdev = dev->ieee80211_ptr;
 	struct ieee80211_supported_band *sband;
-	const struct cfg80211_chan_def *chandef = &wdev->chandef;
+	const struct cfg80211_chan_def *chandef = wdev_chandef(wdev, 0);
 	struct ieee80211_channel *chan;
 	int ret;
 
+
 	sband = wiphy->bands[NL80211_BAND_2GHZ];
 	if (sband && idx >= sband->n_channels) {
 		idx -= sband->n_channels;
@@ -765,7 +767,7 @@ qtnf_dump_survey(struct wiphy *wiphy, struct net_device *dev,
 	survey->channel = chan;
 	survey->filled = 0x0;
 
-	if (chan == chandef->chan)
+	if (chandef && chan == chandef->chan)
 		survey->filled = SURVEY_INFO_IN_USE;
 
 	ret = qtnf_cmd_get_chan_stats(mac, chan->center_freq, survey);
@@ -778,7 +780,7 @@ qtnf_dump_survey(struct wiphy *wiphy, struct net_device *dev,
 
 static int
 qtnf_get_channel(struct wiphy *wiphy, struct wireless_dev *wdev,
-		 struct cfg80211_chan_def *chandef)
+		 unsigned int link_id, struct cfg80211_chan_def *chandef)
 {
 	struct net_device *ndev = wdev->netdev;
 	struct qtnf_vif *vif;
diff --git a/drivers/net/wireless/quantenna/qtnfmac/commands.c b/drivers/net/wireless/quantenna/qtnfmac/commands.c
index c68563c83098..3d734a7a5ba8 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/commands.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/commands.c
@@ -2005,7 +2005,7 @@ int qtnf_cmd_send_scan(struct qtnf_wmac *mac)
 		dwell_active = scan_req->duration;
 		dwell_passive = scan_req->duration;
 	} else if (wdev->iftype == NL80211_IFTYPE_STATION &&
-		   wdev->current_bss) {
+		   wdev->connected) {
 		/* let device select dwell based on traffic conditions */
 		dwell_active = QTNF_SCAN_TIME_AUTO;
 		dwell_passive = QTNF_SCAN_TIME_AUTO;
diff --git a/drivers/net/wireless/quantenna/qtnfmac/event.c b/drivers/net/wireless/quantenna/qtnfmac/event.c
index 8dc80574d08d..4fafe370101a 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/event.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/event.c
@@ -189,7 +189,7 @@ qtnf_event_handle_bss_join(struct qtnf_vif *vif,
 			vif->mac->macid, vif->vifid,
 			join_info->bssid, chandef.chan->hw_value);
 
-		if (!vif->wdev.ssid_len) {
+		if (!vif->wdev.u.client.ssid_len) {
 			pr_warn("VIF%u.%u: SSID unknown for BSS:%pM\n",
 				vif->mac->macid, vif->vifid,
 				join_info->bssid);
@@ -197,7 +197,7 @@ qtnf_event_handle_bss_join(struct qtnf_vif *vif,
 			goto done;
 		}
 
-		ie = kzalloc(2 + vif->wdev.ssid_len, GFP_KERNEL);
+		ie = kzalloc(2 + vif->wdev.u.client.ssid_len, GFP_KERNEL);
 		if (!ie) {
 			pr_warn("VIF%u.%u: IE alloc failed for BSS:%pM\n",
 				vif->mac->macid, vif->vifid,
@@ -207,14 +207,15 @@ qtnf_event_handle_bss_join(struct qtnf_vif *vif,
 		}
 
 		ie[0] = WLAN_EID_SSID;
-		ie[1] = vif->wdev.ssid_len;
-		memcpy(ie + 2, vif->wdev.ssid, vif->wdev.ssid_len);
+		ie[1] = vif->wdev.u.client.ssid_len;
+		memcpy(ie + 2, vif->wdev.u.client.ssid,
+		       vif->wdev.u.client.ssid_len);
 
 		bss = cfg80211_inform_bss(wiphy, chandef.chan,
 					  CFG80211_BSS_FTYPE_UNKNOWN,
 					  join_info->bssid, 0,
 					  WLAN_CAPABILITY_ESS, 100,
-					  ie, 2 + vif->wdev.ssid_len,
+					  ie, 2 + vif->wdev.u.client.ssid_len,
 					  0, GFP_KERNEL);
 		if (!bss) {
 			pr_warn("VIF%u.%u: can't connect to unknown BSS: %pM\n",
@@ -470,14 +471,14 @@ qtnf_event_handle_freq_change(struct qtnf_wmac *mac,
 			continue;
 
 		if (vif->wdev.iftype == NL80211_IFTYPE_STATION &&
-		    !vif->wdev.current_bss)
+		    !vif->wdev.connected)
 			continue;
 
 		if (!vif->netdev)
 			continue;
 
 		mutex_lock(&vif->wdev.mtx);
-		cfg80211_ch_switch_notify(vif->netdev, &chandef);
+		cfg80211_ch_switch_notify(vif->netdev, &chandef, 0);
 		mutex_unlock(&vif->wdev.mtx);
 	}
 
diff --git a/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
index 43b5604c0bca..349aa3c4b668 100644
--- a/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
@@ -2086,6 +2086,7 @@ static u8 rtw_get_chan_type(struct adapter *adapter)
 }
 
 static int cfg80211_rtw_get_channel(struct wiphy *wiphy, struct wireless_dev *wdev,
+				    unsigned int link_id,
 				    struct cfg80211_chan_def *chandef)
 {
 	struct adapter *adapter = wiphy_to_adapter(wiphy);
@@ -2446,7 +2447,8 @@ static int cfg80211_rtw_change_beacon(struct wiphy *wiphy, struct net_device *nd
 	return rtw_add_beacon(adapter, info->head, info->head_len, info->tail, info->tail_len);
 }
 
-static int cfg80211_rtw_stop_ap(struct wiphy *wiphy, struct net_device *ndev)
+static int cfg80211_rtw_stop_ap(struct wiphy *wiphy, struct net_device *ndev,
+				unsigned int link_id)
 {
 	return 0;
 }
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index 75d40acb60c1..5f66d5c9e3de 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -4345,4 +4345,7 @@ enum ieee80211_range_params_max_total_ltf {
 	IEEE80211_RANGE_PARAMS_MAX_TOTAL_LTF_UNSPECIFIED,
 };
 
+/* multi-link device */
+#define IEEE80211_MLD_MAX_NUM_LINKS	15
+
 #endif /* LINUX_IEEE80211_H */
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 80f41446b1f0..b3afb02c8a4e 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -1158,6 +1158,7 @@ struct cfg80211_mbssid_elems {
 
 /**
  * struct cfg80211_beacon_data - beacon data
+ * @link_id: the link ID for the AP MLD link sending this beacon
  * @head: head portion of beacon (before TIM IE)
  *	or %NULL if not changed
  * @tail: tail portion of beacon (after TIM IE)
@@ -1188,6 +1189,8 @@ struct cfg80211_mbssid_elems {
  *	attribute is present in beacon data or not.
  */
 struct cfg80211_beacon_data {
+	unsigned int link_id;
+
 	const u8 *head, *tail;
 	const u8 *beacon_ies;
 	const u8 *proberesp_ies;
@@ -4201,7 +4204,8 @@ struct cfg80211_ops {
 			    struct cfg80211_ap_settings *settings);
 	int	(*change_beacon)(struct wiphy *wiphy, struct net_device *dev,
 				 struct cfg80211_beacon_data *info);
-	int	(*stop_ap)(struct wiphy *wiphy, struct net_device *dev);
+	int	(*stop_ap)(struct wiphy *wiphy, struct net_device *dev,
+			   unsigned int link_id);
 
 
 	int	(*add_station)(struct wiphy *wiphy, struct net_device *dev,
@@ -4309,6 +4313,7 @@ struct cfg80211_ops {
 
 	int	(*set_bitrate_mask)(struct wiphy *wiphy,
 				    struct net_device *dev,
+				    unsigned int link_id,
 				    const u8 *peer,
 				    const struct cfg80211_bitrate_mask *mask);
 
@@ -4384,6 +4389,7 @@ struct cfg80211_ops {
 
 	int	(*get_channel)(struct wiphy *wiphy,
 			       struct wireless_dev *wdev,
+			       unsigned int link_id,
 			       struct cfg80211_chan_def *chandef);
 
 	int	(*start_p2p_device)(struct wiphy *wiphy,
@@ -4420,6 +4426,7 @@ struct cfg80211_ops {
 			       struct cfg80211_qos_map *qos_map);
 
 	int	(*set_ap_chanwidth)(struct wiphy *wiphy, struct net_device *dev,
+				    unsigned int link_id,
 				    struct cfg80211_chan_def *chandef);
 
 	int	(*add_tx_ts)(struct wiphy *wiphy, struct net_device *dev,
@@ -4545,10 +4552,14 @@ struct cfg80211_ops {
  * @WIPHY_FLAG_HAS_STATIC_WEP: The device supports static WEP key installation
  *	before connection.
  * @WIPHY_FLAG_SUPPORTS_EXT_KEK_KCK: The device supports bigger kek and kck keys
+ * @WIPHY_FLAG_SUPPORTS_MLO: This is a temporary flag gating the MLO APIs,
+ *	in order to not have them reachable in normal drivers, until we have
+ *	complete feature/interface combinations/etc. advertisement. No driver
+ *	should set this flag for now.
  */
 enum wiphy_flags {
 	WIPHY_FLAG_SUPPORTS_EXT_KEK_KCK		= BIT(0),
-	/* use hole at 1 */
+	WIPHY_FLAG_SUPPORTS_MLO			= BIT(1),
 	WIPHY_FLAG_SPLIT_SCAN_6GHZ		= BIT(2),
 	WIPHY_FLAG_NETNS_OK			= BIT(3),
 	WIPHY_FLAG_PS_ON_BY_DEFAULT		= BIT(4),
@@ -5505,6 +5516,8 @@ static inline void wiphy_unlock(struct wiphy *wiphy)
  * @netdev: (private) Used to reference back to the netdev, may be %NULL
  * @identifier: (private) Identifier used in nl80211 to identify this
  *	wireless device if it has no netdev
+ * @connected_addr: (private) BSSID or AP MLD address if connected
+ * @connected: indicates if connected or not (STA mode)
  * @current_bss: (private) Used by the internal configuration code
  * @chandef: (private) Used by the internal configuration code to track
  *	the user-set channel definition.
@@ -5585,8 +5598,6 @@ struct wireless_dev {
 	u8 address[ETH_ALEN] __aligned(sizeof(u16));
 
 	/* currently used for IBSS and SME - might be rearranged later */
-	u8 ssid[IEEE80211_MAX_SSID_LEN];
-	u8 ssid_len, mesh_id_len, mesh_id_up_len;
 	struct cfg80211_conn *conn;
 	struct cfg80211_cached_keys *connect_keys;
 	enum ieee80211_bss_type conn_bss_type;
@@ -5598,20 +5609,17 @@ struct wireless_dev {
 	struct list_head event_list;
 	spinlock_t event_lock;
 
-	struct cfg80211_internal_bss *current_bss; /* associated / joined */
-	struct cfg80211_chan_def preset_chandef;
-	struct cfg80211_chan_def chandef;
+	u8 connected:1;
 
 	bool ps;
 	int ps_timeout;
 
-	int beacon_interval;
-
 	u32 ap_unexpected_nlportid;
 
 	u32 owner_nlportid;
 	bool nl_owner_dead;
 
+	/* FIXME: need to rework radar detection for MLO */
 	bool cac_started;
 	unsigned long cac_start_time;
 	unsigned int cac_time_ms;
@@ -5639,6 +5647,50 @@ struct wireless_dev {
 	struct work_struct pmsr_free_wk;
 
 	unsigned long unprot_beacon_reported;
+
+	union {
+		struct {
+			u8 connected_addr[ETH_ALEN] __aligned(2);
+			u8 ssid[IEEE80211_MAX_SSID_LEN];
+			u8 ssid_len;
+		} client;
+		struct {
+			int beacon_interval;
+			struct cfg80211_chan_def preset_chandef;
+			struct cfg80211_chan_def chandef;
+			u8 id[IEEE80211_MAX_SSID_LEN];
+			u8 id_len, id_up_len;
+		} mesh;
+		struct {
+			struct cfg80211_chan_def preset_chandef;
+			u8 ssid[IEEE80211_MAX_SSID_LEN];
+			u8 ssid_len;
+		} ap;
+		struct {
+			struct cfg80211_internal_bss *current_bss;
+			struct cfg80211_chan_def chandef;
+			int beacon_interval;
+			u8 ssid[IEEE80211_MAX_SSID_LEN];
+			u8 ssid_len;
+		} ibss;
+		struct {
+			struct cfg80211_chan_def chandef;
+		} ocb;
+	} u;
+
+	struct {
+		u8 addr[ETH_ALEN] __aligned(2);
+		union {
+			struct {
+				unsigned int beacon_interval;
+				struct cfg80211_chan_def chandef;
+			} ap;
+			struct {
+				struct cfg80211_internal_bss *current_bss;
+			} client;
+		};
+	} links[IEEE80211_MLD_MAX_NUM_LINKS];
+	u16 valid_links;
 };
 
 static inline const u8 *wdev_address(struct wireless_dev *wdev)
@@ -5667,6 +5719,31 @@ static inline void *wdev_priv(struct wireless_dev *wdev)
 	return wiphy_priv(wdev->wiphy);
 }
 
+/**
+ * wdev_chandef - return chandef pointer from wireless_dev
+ * @wdev: the wdev
+ * @link_id: the link ID for MLO
+ *
+ * Return: The chandef depending on the mode, or %NULL.
+ */
+struct cfg80211_chan_def *wdev_chandef(struct wireless_dev *wdev,
+				       unsigned int link_id);
+
+static inline void WARN_INVALID_LINK_ID(struct wireless_dev *wdev,
+					unsigned int link_id)
+{
+	WARN_ON(link_id && !wdev->valid_links);
+	WARN_ON(wdev->valid_links &&
+		!(wdev->valid_links & BIT(link_id)));
+}
+
+#define for_each_valid_link(wdev, link_id)					\
+	for (link_id = 0;							\
+	     link_id < ((wdev)->valid_links ? ARRAY_SIZE((wdev)->links) : 1);	\
+	     link_id++)								\
+		if (!(wdev)->valid_links ||					\
+		    ((wdev)->valid_links & BIT(link_id)))
+
 /**
  * DOC: Utility functions
  *
@@ -7882,12 +7959,14 @@ bool cfg80211_reg_can_beacon_relax(struct wiphy *wiphy,
  * cfg80211_ch_switch_notify - update wdev channel and notify userspace
  * @dev: the device which switched channels
  * @chandef: the new channel definition
+ * @link_id: the link ID for MLO, must be 0 for non-MLO
  *
  * Caller must acquire wdev_lock, therefore must only be called from sleepable
  * driver context!
  */
 void cfg80211_ch_switch_notify(struct net_device *dev,
-			       struct cfg80211_chan_def *chandef);
+			       struct cfg80211_chan_def *chandef,
+			       unsigned int link_id);
 
 /*
  * cfg80211_ch_switch_started_notify - notify channel switch start
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index d9490e3062a7..509253bf4d11 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -323,6 +323,17 @@
  * Once the association is done, the driver cleans the FILS AAD data.
  */
 
+/**
+ * DOC: Multi-Link Operation
+ *
+ * In Multi-Link Operation, a connection between to MLDs utilizes multiple
+ * links. To use this in nl80211, various commands and responses now need
+ * to or will include the new %NL80211_ATTR_MLO_LINKS attribute.
+ * Additionally, various commands that need to operate on a specific link
+ * now need to be given the %NL80211_ATTR_MLO_LINK_ID attribute, e.g. to
+ * use %NL80211_CMD_START_AP or similar functions.
+ */
+
 /**
  * enum nl80211_commands - supported nl80211 commands
  *
@@ -1237,6 +1248,12 @@
  *      to describe the BSSID address of the AP and %NL80211_ATTR_TIMEOUT to
  *      specify the timeout value.
  *
+ * @NL80211_CMD_ADD_LINK: Add a new link to an interface. The
+ *	%NL80211_ATTR_MLO_LINK_ID attribute is used for the new link.
+ * @NL80211_CMD_REMOVE_LINK: Remove a link from an interface. This may come
+ *	without %NL80211_ATTR_MLO_LINK_ID as an easy way to remove all links
+ *	in preparation for e.g. roaming to a regular (non-MLO) AP.
+ *
  * @NL80211_CMD_MAX: highest used command number
  * @__NL80211_CMD_AFTER_LAST: internal use
  */
@@ -1481,6 +1498,9 @@ enum nl80211_commands {
 
 	NL80211_CMD_ASSOC_COMEBACK,
 
+	NL80211_CMD_ADD_LINK,
+	NL80211_CMD_REMOVE_LINK,
+
 	/* add new commands above here */
 
 	/* used to define NL80211_CMD_MAX below */
@@ -2663,6 +2683,11 @@ enum nl80211_commands {
  *	association request when used with NL80211_CMD_NEW_STATION). Can be set
  *	only if %NL80211_STA_FLAG_WME is set.
  *
+ * @NL80211_ATTR_MLO_LINK_ID: A (u8) link ID for use with MLO, to be used with
+ *	various commands that need a link ID to operate.
+ * @NL80211_ATTR_MLO_LINKS: A nested array of links, each containing some
+ *	per-link information and a link ID.
+ *
  * @NUM_NL80211_ATTR: total number of nl80211_attrs available
  * @NL80211_ATTR_MAX: highest attribute number currently defined
  * @__NL80211_ATTR_AFTER_LAST: internal use
@@ -3177,6 +3202,9 @@ enum nl80211_attrs {
 
 	NL80211_ATTR_DISABLE_EHT,
 
+	NL80211_ATTR_MLO_LINKS,
+	NL80211_ATTR_MLO_LINK_ID,
+
 	/* add attributes here, update the policy in nl80211.c */
 
 	__NL80211_ATTR_AFTER_LAST,
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 4ddf297f40f2..30ccaa6cb9f3 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1358,7 +1358,8 @@ static void ieee80211_free_next_beacon(struct ieee80211_sub_if_data *sdata)
 	sdata->u.ap.next_beacon = NULL;
 }
 
-static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev)
+static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev,
+			     unsigned int link_id)
 {
 	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
 	struct ieee80211_sub_if_data *vlan;
@@ -3065,6 +3066,7 @@ static int ieee80211_set_cqm_rssi_range_config(struct wiphy *wiphy,
 
 static int ieee80211_set_bitrate_mask(struct wiphy *wiphy,
 				      struct net_device *dev,
+				      unsigned int link_id,
 				      const u8 *addr,
 				      const struct cfg80211_bitrate_mask *mask)
 {
@@ -3406,7 +3408,7 @@ static int __ieee80211_csa_finalize(struct ieee80211_sub_if_data *sdata)
 	if (err)
 		return err;
 
-	cfg80211_ch_switch_notify(sdata->dev, &sdata->csa_chandef);
+	cfg80211_ch_switch_notify(sdata->dev, &sdata->csa_chandef, 0);
 
 	return 0;
 }
@@ -3914,6 +3916,7 @@ static int ieee80211_probe_client(struct wiphy *wiphy, struct net_device *dev,
 
 static int ieee80211_cfg_get_channel(struct wiphy *wiphy,
 				     struct wireless_dev *wdev,
+				     unsigned int link_id,
 				     struct cfg80211_chan_def *chandef)
 {
 	struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
@@ -3974,6 +3977,7 @@ static int ieee80211_set_qos_map(struct wiphy *wiphy,
 
 static int ieee80211_set_ap_chanwidth(struct wiphy *wiphy,
 				      struct net_device *dev,
+				      unsigned int link_id,
 				      struct cfg80211_chan_def *chandef)
 {
 	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 58d48dcae030..62fa93f2636e 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -1314,7 +1314,7 @@ static void ieee80211_chswitch_post_beacon(struct ieee80211_sub_if_data *sdata)
 		return;
 	}
 
-	cfg80211_ch_switch_notify(sdata->dev, &sdata->reserved_chandef);
+	cfg80211_ch_switch_notify(sdata->dev, &sdata->reserved_chandef, 0);
 }
 
 void ieee80211_chswitch_done(struct ieee80211_vif *vif, bool success)
diff --git a/net/wireless/ap.c b/net/wireless/ap.c
index 550ac9d827fe..e68923200018 100644
--- a/net/wireless/ap.c
+++ b/net/wireless/ap.c
@@ -1,4 +1,8 @@
 // SPDX-License-Identifier: GPL-2.0
+/*
+ * Parts of this file are
+ * Copyright (C) 2022 Intel Corporation
+ */
 #include <linux/ieee80211.h>
 #include <linux/export.h>
 #include <net/cfg80211.h>
@@ -7,8 +11,9 @@
 #include "rdev-ops.h"
 
 
-int __cfg80211_stop_ap(struct cfg80211_registered_device *rdev,
-		       struct net_device *dev, bool notify)
+static int ___cfg80211_stop_ap(struct cfg80211_registered_device *rdev,
+			       struct net_device *dev, unsigned int link_id,
+			       bool notify)
 {
 	struct wireless_dev *wdev = dev->ieee80211_ptr;
 	int err;
@@ -22,15 +27,16 @@ int __cfg80211_stop_ap(struct cfg80211_registered_device *rdev,
 	    dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO)
 		return -EOPNOTSUPP;
 
-	if (!wdev->beacon_interval)
+	if (!wdev->links[link_id].ap.beacon_interval)
 		return -ENOENT;
 
-	err = rdev_stop_ap(rdev, dev);
+	err = rdev_stop_ap(rdev, dev, link_id);
 	if (!err) {
 		wdev->conn_owner_nlportid = 0;
-		wdev->beacon_interval = 0;
-		memset(&wdev->chandef, 0, sizeof(wdev->chandef));
-		wdev->ssid_len = 0;
+		wdev->links[link_id].ap.beacon_interval = 0;
+		memset(&wdev->links[link_id].ap.chandef, 0,
+		       sizeof(wdev->links[link_id].ap.chandef));
+		wdev->u.ap.ssid_len = 0;
 		rdev_set_qos_map(rdev, dev, NULL);
 		if (notify)
 			nl80211_send_ap_stopped(wdev);
@@ -46,14 +52,36 @@ int __cfg80211_stop_ap(struct cfg80211_registered_device *rdev,
 	return err;
 }
 
+int __cfg80211_stop_ap(struct cfg80211_registered_device *rdev,
+		       struct net_device *dev, int link_id,
+		       bool notify)
+{
+	unsigned int link;
+	int ret = 0;
+
+	if (link_id >= 0)
+		return ___cfg80211_stop_ap(rdev, dev, link_id, notify);
+
+	for_each_valid_link(dev->ieee80211_ptr, link) {
+		int ret1 = ___cfg80211_stop_ap(rdev, dev, link, notify);
+
+		if (ret1)
+			ret = ret1;
+		/* try the next one also if one errored */
+	}
+
+	return ret;
+}
+
 int cfg80211_stop_ap(struct cfg80211_registered_device *rdev,
-		     struct net_device *dev, bool notify)
+		     struct net_device *dev, int link_id,
+		     bool notify)
 {
 	struct wireless_dev *wdev = dev->ieee80211_ptr;
 	int err;
 
 	wdev_lock(wdev);
-	err = __cfg80211_stop_ap(rdev, dev, notify);
+	err = __cfg80211_stop_ap(rdev, dev, link_id, notify);
 	wdev_unlock(wdev);
 
 	return err;
diff --git a/net/wireless/chan.c b/net/wireless/chan.c
index f74f176e0d9d..efc2de4bab57 100644
--- a/net/wireless/chan.c
+++ b/net/wireless/chan.c
@@ -672,14 +672,21 @@ bool cfg80211_chandef_dfs_usable(struct wiphy *wiphy,
  * range of chandef.
  */
 bool cfg80211_is_sub_chan(struct cfg80211_chan_def *chandef,
-			  struct ieee80211_channel *chan)
+			  struct ieee80211_channel *chan,
+			  bool primary_only)
 {
 	int width;
 	u32 freq;
 
+	if (!chandef->chan)
+		return false;
+
 	if (chandef->chan->center_freq == chan->center_freq)
 		return true;
 
+	if (primary_only)
+		return false;
+
 	width = cfg80211_chandef_get_width(chandef);
 	if (width <= 20)
 		return false;
@@ -704,23 +711,25 @@ bool cfg80211_is_sub_chan(struct cfg80211_chan_def *chandef,
 
 bool cfg80211_beaconing_iface_active(struct wireless_dev *wdev)
 {
-	bool active = false;
+	unsigned int link;
 
 	ASSERT_WDEV_LOCK(wdev);
 
-	if (!wdev->chandef.chan)
-		return false;
-
 	switch (wdev->iftype) {
 	case NL80211_IFTYPE_AP:
 	case NL80211_IFTYPE_P2P_GO:
-		active = wdev->beacon_interval != 0;
+		for_each_valid_link(wdev, link) {
+			if (wdev->links[link].ap.beacon_interval)
+				return true;
+		}
 		break;
 	case NL80211_IFTYPE_ADHOC:
-		active = wdev->ssid_len != 0;
+		if (wdev->u.ibss.ssid_len)
+			return true;
 		break;
 	case NL80211_IFTYPE_MESH_POINT:
-		active = wdev->mesh_id_len != 0;
+		if (wdev->u.mesh.id_len)
+			return true;
 		break;
 	case NL80211_IFTYPE_STATION:
 	case NL80211_IFTYPE_OCB:
@@ -737,7 +746,35 @@ bool cfg80211_beaconing_iface_active(struct wireless_dev *wdev)
 		WARN_ON(1);
 	}
 
-	return active;
+	return false;
+}
+
+bool cfg80211_wdev_on_sub_chan(struct wireless_dev *wdev,
+			       struct ieee80211_channel *chan,
+			       bool primary_only)
+{
+	unsigned int link;
+
+	switch (wdev->iftype) {
+	case NL80211_IFTYPE_AP:
+	case NL80211_IFTYPE_P2P_GO:
+		for_each_valid_link(wdev, link) {
+			if (cfg80211_is_sub_chan(&wdev->links[link].ap.chandef,
+						 chan, primary_only))
+				return true;
+		}
+		break;
+	case NL80211_IFTYPE_ADHOC:
+		return cfg80211_is_sub_chan(&wdev->u.ibss.chandef, chan,
+					    primary_only);
+	case NL80211_IFTYPE_MESH_POINT:
+		return cfg80211_is_sub_chan(&wdev->u.mesh.chandef, chan,
+					    primary_only);
+	default:
+		break;
+	}
+
+	return false;
 }
 
 static bool cfg80211_is_wiphy_oper_chan(struct wiphy *wiphy,
@@ -752,7 +789,7 @@ static bool cfg80211_is_wiphy_oper_chan(struct wiphy *wiphy,
 			continue;
 		}
 
-		if (cfg80211_is_sub_chan(&wdev->chandef, chan)) {
+		if (cfg80211_wdev_on_sub_chan(wdev, chan, false)) {
 			wdev_unlock(wdev);
 			return true;
 		}
@@ -772,7 +809,8 @@ cfg80211_offchan_chain_is_active(struct cfg80211_registered_device *rdev,
 	if (!cfg80211_chandef_valid(&rdev->background_radar_chandef))
 		return false;
 
-	return cfg80211_is_sub_chan(&rdev->background_radar_chandef, channel);
+	return cfg80211_is_sub_chan(&rdev->background_radar_chandef, channel,
+				    false);
 }
 
 bool cfg80211_any_wiphy_oper_chan(struct wiphy *wiphy,
@@ -1176,6 +1214,68 @@ bool cfg80211_chandef_usable(struct wiphy *wiphy,
 }
 EXPORT_SYMBOL(cfg80211_chandef_usable);
 
+static bool cfg80211_ir_permissive_check_wdev(enum nl80211_iftype iftype,
+					      struct wireless_dev *wdev,
+					      struct ieee80211_channel *chan)
+{
+	struct ieee80211_channel *other_chan = NULL;
+	unsigned int link_id;
+	int r1, r2;
+
+	for_each_valid_link(wdev, link_id) {
+		if (wdev->iftype == NL80211_IFTYPE_STATION &&
+		    wdev->links[link_id].client.current_bss)
+			other_chan = wdev->links[link_id].client.current_bss->pub.channel;
+
+		/*
+		 * If a GO already operates on the same GO_CONCURRENT channel,
+		 * this one (maybe the same one) can beacon as well. We allow
+		 * the operation even if the station we relied on with
+		 * GO_CONCURRENT is disconnected now. But then we must make sure
+		 * we're not outdoor on an indoor-only channel.
+		 */
+		if (iftype == NL80211_IFTYPE_P2P_GO &&
+		    wdev->iftype == NL80211_IFTYPE_P2P_GO &&
+		    wdev->links[link_id].ap.beacon_interval &&
+		    !(chan->flags & IEEE80211_CHAN_INDOOR_ONLY))
+			other_chan = wdev->links[link_id].ap.chandef.chan;
+
+		if (!other_chan)
+			continue;
+
+		if (chan == other_chan)
+			return true;
+
+		if (chan->band != NL80211_BAND_5GHZ &&
+		    chan->band != NL80211_BAND_6GHZ)
+			continue;
+
+		r1 = cfg80211_get_unii(chan->center_freq);
+		r2 = cfg80211_get_unii(other_chan->center_freq);
+
+		if (r1 != -EINVAL && r1 == r2) {
+			/*
+			 * At some locations channels 149-165 are considered a
+			 * bundle, but at other locations, e.g., Indonesia,
+			 * channels 149-161 are considered a bundle while
+			 * channel 165 is left out and considered to be in a
+			 * different bundle. Thus, in case that there is a
+			 * station interface connected to an AP on channel 165,
+			 * it is assumed that channels 149-161 are allowed for
+			 * GO operations. However, having a station interface
+			 * connected to an AP on channels 149-161, does not
+			 * allow GO operation on channel 165.
+			 */
+			if (chan->center_freq == 5825 &&
+			    other_chan->center_freq != 5825)
+				continue;
+			return true;
+		}
+	}
+
+	return false;
+}
+
 /*
  * Check if the channel can be used under permissive conditions mandated by
  * some regulatory bodies, i.e., the channel is marked with
@@ -1219,59 +1319,14 @@ static bool cfg80211_ir_permissive_chan(struct wiphy *wiphy,
 	 * the current registered device.
 	 */
 	list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
-		struct ieee80211_channel *other_chan = NULL;
-		int r1, r2;
+		bool ret;
 
 		wdev_lock(wdev);
-		if (wdev->iftype == NL80211_IFTYPE_STATION &&
-		    wdev->current_bss)
-			other_chan = wdev->current_bss->pub.channel;
-
-		/*
-		 * If a GO already operates on the same GO_CONCURRENT channel,
-		 * this one (maybe the same one) can beacon as well. We allow
-		 * the operation even if the station we relied on with
-		 * GO_CONCURRENT is disconnected now. But then we must make sure
-		 * we're not outdoor on an indoor-only channel.
-		 */
-		if (iftype == NL80211_IFTYPE_P2P_GO &&
-		    wdev->iftype == NL80211_IFTYPE_P2P_GO &&
-		    wdev->beacon_interval &&
-		    !(chan->flags & IEEE80211_CHAN_INDOOR_ONLY))
-			other_chan = wdev->chandef.chan;
+		ret = cfg80211_ir_permissive_check_wdev(iftype, wdev, chan);
 		wdev_unlock(wdev);
 
-		if (!other_chan)
-			continue;
-
-		if (chan == other_chan)
-			return true;
-
-		if (chan->band != NL80211_BAND_5GHZ &&
-		    chan->band != NL80211_BAND_6GHZ)
-			continue;
-
-		r1 = cfg80211_get_unii(chan->center_freq);
-		r2 = cfg80211_get_unii(other_chan->center_freq);
-
-		if (r1 != -EINVAL && r1 == r2) {
-			/*
-			 * At some locations channels 149-165 are considered a
-			 * bundle, but at other locations, e.g., Indonesia,
-			 * channels 149-161 are considered a bundle while
-			 * channel 165 is left out and considered to be in a
-			 * different bundle. Thus, in case that there is a
-			 * station interface connected to an AP on channel 165,
-			 * it is assumed that channels 149-161 are allowed for
-			 * GO operations. However, having a station interface
-			 * connected to an AP on channels 149-161, does not
-			 * allow GO operation on channel 165.
-			 */
-			if (chan->center_freq == 5825 &&
-			    other_chan->center_freq != 5825)
-				continue;
-			return true;
-		}
+		if (ret)
+			return ret;
 	}
 
 	return false;
@@ -1374,3 +1429,24 @@ bool cfg80211_any_usable_channels(struct wiphy *wiphy,
 	return false;
 }
 EXPORT_SYMBOL(cfg80211_any_usable_channels);
+
+struct cfg80211_chan_def *wdev_chandef(struct wireless_dev *wdev,
+				       unsigned int link_id)
+{
+	ASSERT_WDEV_LOCK(wdev);
+
+	switch (wdev->iftype) {
+	case NL80211_IFTYPE_MESH_POINT:
+		return &wdev->u.mesh.chandef;
+	case NL80211_IFTYPE_ADHOC:
+		return &wdev->u.ibss.chandef;
+	case NL80211_IFTYPE_OCB:
+		return &wdev->u.ocb.chandef;
+	case NL80211_IFTYPE_AP:
+	case NL80211_IFTYPE_P2P_GO:
+		return &wdev->links[link_id].ap.chandef;
+	default:
+		return NULL;
+	}
+}
+EXPORT_SYMBOL(wdev_chandef);
diff --git a/net/wireless/core.c b/net/wireless/core.c
index f08d4b3bb148..3e5d12040726 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -1118,6 +1118,7 @@ static void _cfg80211_unregister_wdev(struct wireless_dev *wdev,
 				      bool unregister_netdev)
 {
 	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
+	unsigned int link_id;
 
 	ASSERT_RTNL();
 	lockdep_assert_held(&rdev->wiphy.mtx);
@@ -1167,11 +1168,22 @@ static void _cfg80211_unregister_wdev(struct wireless_dev *wdev,
 	 */
 	cfg80211_process_wdev_events(wdev);
 
-	if (WARN_ON(wdev->current_bss)) {
-		cfg80211_unhold_bss(wdev->current_bss);
-		cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub);
-		wdev->current_bss = NULL;
+	if (wdev->iftype == NL80211_IFTYPE_STATION ||
+	    wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) {
+		for (link_id = 0; link_id < ARRAY_SIZE(wdev->links); link_id++) {
+			struct cfg80211_internal_bss *curbss;
+
+			curbss = wdev->links[link_id].client.current_bss;
+
+			if (WARN_ON(curbss)) {
+				cfg80211_unhold_bss(curbss);
+				cfg80211_put_bss(wdev->wiphy, &curbss->pub);
+				wdev->links[link_id].client.current_bss = NULL;
+			}
+		}
 	}
+
+	wdev->connected = false;
 }
 
 void cfg80211_unregister_wdev(struct wireless_dev *wdev)
@@ -1233,7 +1245,7 @@ void __cfg80211_leave(struct cfg80211_registered_device *rdev,
 		break;
 	case NL80211_IFTYPE_AP:
 	case NL80211_IFTYPE_P2P_GO:
-		__cfg80211_stop_ap(rdev, dev, true);
+		__cfg80211_stop_ap(rdev, dev, -1, true);
 		break;
 	case NL80211_IFTYPE_OCB:
 		__cfg80211_leave_ocb(rdev, dev);
@@ -1463,9 +1475,9 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
 				memcpy(&setup, &default_mesh_setup,
 						sizeof(setup));
 				 /* back compat only needed for mesh_id */
-				setup.mesh_id = wdev->ssid;
-				setup.mesh_id_len = wdev->mesh_id_up_len;
-				if (wdev->mesh_id_up_len)
+				setup.mesh_id = wdev->u.mesh.id;
+				setup.mesh_id_len = wdev->u.mesh.id_up_len;
+				if (wdev->u.mesh.id_up_len)
 					__cfg80211_join_mesh(rdev, dev,
 							&setup,
 							&default_mesh_config);
diff --git a/net/wireless/core.h b/net/wireless/core.h
index 5436ada91b1a..2c195067ddff 100644
--- a/net/wireless/core.h
+++ b/net/wireless/core.h
@@ -307,6 +307,7 @@ void cfg80211_bss_expire(struct cfg80211_registered_device *rdev);
 void cfg80211_bss_age(struct cfg80211_registered_device *rdev,
                       unsigned long age_secs);
 void cfg80211_update_assoc_bss_entry(struct wireless_dev *wdev,
+				     unsigned int link,
 				     struct ieee80211_channel *channel);
 
 /* IBSS */
@@ -353,9 +354,11 @@ int cfg80211_leave_ocb(struct cfg80211_registered_device *rdev,
 
 /* AP */
 int __cfg80211_stop_ap(struct cfg80211_registered_device *rdev,
-		       struct net_device *dev, bool notify);
+		       struct net_device *dev, int link,
+		       bool notify);
 int cfg80211_stop_ap(struct cfg80211_registered_device *rdev,
-		     struct net_device *dev, bool notify);
+		     struct net_device *dev, int link,
+		     bool notify);
 
 /* MLME */
 int cfg80211_mlme_auth(struct cfg80211_registered_device *rdev,
@@ -507,7 +510,11 @@ bool cfg80211_any_wiphy_oper_chan(struct wiphy *wiphy,
 bool cfg80211_beaconing_iface_active(struct wireless_dev *wdev);
 
 bool cfg80211_is_sub_chan(struct cfg80211_chan_def *chandef,
-			  struct ieee80211_channel *chan);
+			  struct ieee80211_channel *chan,
+			  bool primary_only);
+bool cfg80211_wdev_on_sub_chan(struct wireless_dev *wdev,
+			       struct ieee80211_channel *chan,
+			       bool primary_only);
 
 static inline unsigned int elapsed_jiffies_msecs(unsigned long start)
 {
diff --git a/net/wireless/ibss.c b/net/wireless/ibss.c
index 5d89eec2869a..4935f94d1acc 100644
--- a/net/wireless/ibss.c
+++ b/net/wireless/ibss.c
@@ -28,7 +28,7 @@ void __cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid,
 	if (WARN_ON(wdev->iftype != NL80211_IFTYPE_ADHOC))
 		return;
 
-	if (!wdev->ssid_len)
+	if (!wdev->u.ibss.ssid_len)
 		return;
 
 	bss = cfg80211_get_bss(wdev->wiphy, channel, bssid, NULL, 0,
@@ -37,13 +37,13 @@ void __cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid,
 	if (WARN_ON(!bss))
 		return;
 
-	if (wdev->current_bss) {
-		cfg80211_unhold_bss(wdev->current_bss);
-		cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub);
+	if (wdev->u.ibss.current_bss) {
+		cfg80211_unhold_bss(wdev->u.ibss.current_bss);
+		cfg80211_put_bss(wdev->wiphy, &wdev->u.ibss.current_bss->pub);
 	}
 
 	cfg80211_hold_bss(bss_from_pub(bss));
-	wdev->current_bss = bss_from_pub(bss);
+	wdev->u.ibss.current_bss = bss_from_pub(bss);
 
 	if (!(wdev->wiphy->flags & WIPHY_FLAG_HAS_STATIC_WEP))
 		cfg80211_upload_connect_keys(wdev);
@@ -96,7 +96,7 @@ int __cfg80211_join_ibss(struct cfg80211_registered_device *rdev,
 	lockdep_assert_held(&rdev->wiphy.mtx);
 	ASSERT_WDEV_LOCK(wdev);
 
-	if (wdev->ssid_len)
+	if (wdev->u.ibss.ssid_len)
 		return -EALREADY;
 
 	if (!params->basic_rates) {
@@ -131,7 +131,7 @@ int __cfg80211_join_ibss(struct cfg80211_registered_device *rdev,
 		kfree_sensitive(wdev->connect_keys);
 	wdev->connect_keys = connkeys;
 
-	wdev->chandef = params->chandef;
+	wdev->u.ibss.chandef = params->chandef;
 	if (connkeys) {
 		params->wep_keys = connkeys->params;
 		params->wep_tx_key = connkeys->def;
@@ -146,8 +146,8 @@ int __cfg80211_join_ibss(struct cfg80211_registered_device *rdev,
 		return err;
 	}
 
-	memcpy(wdev->ssid, params->ssid, params->ssid_len);
-	wdev->ssid_len = params->ssid_len;
+	memcpy(wdev->u.ibss.ssid, params->ssid, params->ssid_len);
+	wdev->u.ibss.ssid_len = params->ssid_len;
 
 	return 0;
 }
@@ -173,14 +173,14 @@ static void __cfg80211_clear_ibss(struct net_device *dev, bool nowext)
 		for (i = 0; i < 6; i++)
 			rdev_del_key(rdev, dev, i, false, NULL);
 
-	if (wdev->current_bss) {
-		cfg80211_unhold_bss(wdev->current_bss);
-		cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub);
+	if (wdev->u.ibss.current_bss) {
+		cfg80211_unhold_bss(wdev->u.ibss.current_bss);
+		cfg80211_put_bss(wdev->wiphy, &wdev->u.ibss.current_bss->pub);
 	}
 
-	wdev->current_bss = NULL;
-	wdev->ssid_len = 0;
-	memset(&wdev->chandef, 0, sizeof(wdev->chandef));
+	wdev->u.ibss.current_bss = NULL;
+	wdev->u.ibss.ssid_len = 0;
+	memset(&wdev->u.ibss.chandef, 0, sizeof(wdev->u.ibss.chandef));
 #ifdef CONFIG_CFG80211_WEXT
 	if (!nowext)
 		wdev->wext.ibss.ssid_len = 0;
@@ -205,7 +205,7 @@ int __cfg80211_leave_ibss(struct cfg80211_registered_device *rdev,
 
 	ASSERT_WDEV_LOCK(wdev);
 
-	if (!wdev->ssid_len)
+	if (!wdev->u.ibss.ssid_len)
 		return -ENOLINK;
 
 	err = rdev_leave_ibss(rdev, dev);
@@ -339,7 +339,7 @@ int cfg80211_ibss_wext_siwfreq(struct net_device *dev,
 
 	wdev_lock(wdev);
 	err = 0;
-	if (wdev->ssid_len)
+	if (wdev->u.ibss.ssid_len)
 		err = __cfg80211_leave_ibss(rdev, dev, true);
 	wdev_unlock(wdev);
 
@@ -374,8 +374,8 @@ int cfg80211_ibss_wext_giwfreq(struct net_device *dev,
 		return -EINVAL;
 
 	wdev_lock(wdev);
-	if (wdev->current_bss)
-		chan = wdev->current_bss->pub.channel;
+	if (wdev->u.ibss.current_bss)
+		chan = wdev->u.ibss.current_bss->pub.channel;
 	else if (wdev->wext.ibss.chandef.chan)
 		chan = wdev->wext.ibss.chandef.chan;
 	wdev_unlock(wdev);
@@ -408,7 +408,7 @@ int cfg80211_ibss_wext_siwessid(struct net_device *dev,
 
 	wdev_lock(wdev);
 	err = 0;
-	if (wdev->ssid_len)
+	if (wdev->u.ibss.ssid_len)
 		err = __cfg80211_leave_ibss(rdev, dev, true);
 	wdev_unlock(wdev);
 
@@ -419,8 +419,8 @@ int cfg80211_ibss_wext_siwessid(struct net_device *dev,
 	if (len > 0 && ssid[len - 1] == '\0')
 		len--;
 
-	memcpy(wdev->ssid, ssid, len);
-	wdev->wext.ibss.ssid = wdev->ssid;
+	memcpy(wdev->u.ibss.ssid, ssid, len);
+	wdev->wext.ibss.ssid = wdev->u.ibss.ssid;
 	wdev->wext.ibss.ssid_len = len;
 
 	wdev_lock(wdev);
@@ -443,10 +443,10 @@ int cfg80211_ibss_wext_giwessid(struct net_device *dev,
 	data->flags = 0;
 
 	wdev_lock(wdev);
-	if (wdev->ssid_len) {
+	if (wdev->u.ibss.ssid_len) {
 		data->flags = 1;
-		data->length = wdev->ssid_len;
-		memcpy(ssid, wdev->ssid, data->length);
+		data->length = wdev->u.ibss.ssid_len;
+		memcpy(ssid, wdev->u.ibss.ssid, data->length);
 	} else if (wdev->wext.ibss.ssid && wdev->wext.ibss.ssid_len) {
 		data->flags = 1;
 		data->length = wdev->wext.ibss.ssid_len;
@@ -494,7 +494,7 @@ int cfg80211_ibss_wext_siwap(struct net_device *dev,
 
 	wdev_lock(wdev);
 	err = 0;
-	if (wdev->ssid_len)
+	if (wdev->u.ibss.ssid_len)
 		err = __cfg80211_leave_ibss(rdev, dev, true);
 	wdev_unlock(wdev);
 
@@ -527,8 +527,9 @@ int cfg80211_ibss_wext_giwap(struct net_device *dev,
 	ap_addr->sa_family = ARPHRD_ETHER;
 
 	wdev_lock(wdev);
-	if (wdev->current_bss)
-		memcpy(ap_addr->sa_data, wdev->current_bss->pub.bssid, ETH_ALEN);
+	if (wdev->u.ibss.current_bss)
+		memcpy(ap_addr->sa_data, wdev->u.ibss.current_bss->pub.bssid,
+		       ETH_ALEN);
 	else if (wdev->wext.ibss.bssid)
 		memcpy(ap_addr->sa_data, wdev->wext.ibss.bssid, ETH_ALEN);
 	else
diff --git a/net/wireless/mesh.c b/net/wireless/mesh.c
index e4e363138279..59a3c5c092b1 100644
--- a/net/wireless/mesh.c
+++ b/net/wireless/mesh.c
@@ -1,4 +1,8 @@
 // SPDX-License-Identifier: GPL-2.0
+/*
+ * Portions
+ * Copyright (C) 2022 Intel Corporation
+ */
 #include <linux/ieee80211.h>
 #include <linux/export.h>
 #include <net/cfg80211.h>
@@ -114,7 +118,7 @@ int __cfg80211_join_mesh(struct cfg80211_registered_device *rdev,
 	      setup->is_secure)
 		return -EOPNOTSUPP;
 
-	if (wdev->mesh_id_len)
+	if (wdev->u.mesh.id_len)
 		return -EALREADY;
 
 	if (!setup->mesh_id_len)
@@ -125,7 +129,7 @@ int __cfg80211_join_mesh(struct cfg80211_registered_device *rdev,
 
 	if (!setup->chandef.chan) {
 		/* if no channel explicitly given, use preset channel */
-		setup->chandef = wdev->preset_chandef;
+		setup->chandef = wdev->u.mesh.preset_chandef;
 	}
 
 	if (!setup->chandef.chan) {
@@ -209,10 +213,10 @@ int __cfg80211_join_mesh(struct cfg80211_registered_device *rdev,
 
 	err = rdev_join_mesh(rdev, dev, conf, setup);
 	if (!err) {
-		memcpy(wdev->ssid, setup->mesh_id, setup->mesh_id_len);
-		wdev->mesh_id_len = setup->mesh_id_len;
-		wdev->chandef = setup->chandef;
-		wdev->beacon_interval = setup->beacon_interval;
+		memcpy(wdev->u.mesh.id, setup->mesh_id, setup->mesh_id_len);
+		wdev->u.mesh.id_len = setup->mesh_id_len;
+		wdev->u.mesh.chandef = setup->chandef;
+		wdev->u.mesh.beacon_interval = setup->beacon_interval;
 	}
 
 	return err;
@@ -241,15 +245,15 @@ int cfg80211_set_mesh_channel(struct cfg80211_registered_device *rdev,
 		err = rdev_libertas_set_mesh_channel(rdev, wdev->netdev,
 						     chandef->chan);
 		if (!err)
-			wdev->chandef = *chandef;
+			wdev->u.mesh.chandef = *chandef;
 
 		return err;
 	}
 
-	if (wdev->mesh_id_len)
+	if (wdev->u.mesh.id_len)
 		return -EBUSY;
 
-	wdev->preset_chandef = *chandef;
+	wdev->u.mesh.preset_chandef = *chandef;
 	return 0;
 }
 
@@ -267,15 +271,16 @@ int __cfg80211_leave_mesh(struct cfg80211_registered_device *rdev,
 	if (!rdev->ops->leave_mesh)
 		return -EOPNOTSUPP;
 
-	if (!wdev->mesh_id_len)
+	if (!wdev->u.mesh.id_len)
 		return -ENOTCONN;
 
 	err = rdev_leave_mesh(rdev, dev);
 	if (!err) {
 		wdev->conn_owner_nlportid = 0;
-		wdev->mesh_id_len = 0;
-		wdev->beacon_interval = 0;
-		memset(&wdev->chandef, 0, sizeof(wdev->chandef));
+		wdev->u.mesh.id_len = 0;
+		wdev->u.mesh.beacon_interval = 0;
+		memset(&wdev->u.mesh.chandef, 0,
+		       sizeof(wdev->u.mesh.chandef));
 		rdev_set_qos_map(rdev, dev, NULL);
 		cfg80211_sched_dfs_chan_update(rdev);
 	}
diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c
index c8155a483ec2..fab2d6206cdd 100644
--- a/net/wireless/mlme.c
+++ b/net/wireless/mlme.c
@@ -92,8 +92,7 @@ static void cfg80211_process_deauth(struct wireless_dev *wdev,
 
 	nl80211_send_deauth(rdev, wdev->netdev, buf, len, reconnect, GFP_KERNEL);
 
-	if (!wdev->current_bss ||
-	    !ether_addr_equal(wdev->current_bss->pub.bssid, bssid))
+	if (!wdev->connected || !ether_addr_equal(wdev->u.client.connected_addr, bssid))
 		return;
 
 	__cfg80211_disconnected(wdev->netdev, NULL, 0, reason_code, from_ap);
@@ -113,8 +112,8 @@ static void cfg80211_process_disassoc(struct wireless_dev *wdev,
 	nl80211_send_disassoc(rdev, wdev->netdev, buf, len, reconnect,
 			      GFP_KERNEL);
 
-	if (WARN_ON(!wdev->current_bss ||
-		    !ether_addr_equal(wdev->current_bss->pub.bssid, bssid)))
+	if (WARN_ON(!wdev->connected ||
+		    !ether_addr_equal(wdev->u.client.connected_addr, bssid)))
 		return;
 
 	__cfg80211_disconnected(wdev->netdev, NULL, 0, reason_code, from_ap);
@@ -260,8 +259,8 @@ int cfg80211_mlme_auth(struct cfg80211_registered_device *rdev,
 		if (!key || !key_len || key_idx < 0 || key_idx > 3)
 			return -EINVAL;
 
-	if (wdev->current_bss &&
-	    ether_addr_equal(bssid, wdev->current_bss->pub.bssid))
+	if (wdev->connected &&
+	    ether_addr_equal(bssid, wdev->u.client.connected_addr))
 		return -EALREADY;
 
 	req.bss = cfg80211_get_bss(&rdev->wiphy, chan, bssid, ssid, ssid_len,
@@ -322,9 +321,9 @@ int cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev,
 
 	ASSERT_WDEV_LOCK(wdev);
 
-	if (wdev->current_bss &&
-	    (!req->prev_bssid || !ether_addr_equal(wdev->current_bss->pub.bssid,
-						   req->prev_bssid)))
+	if (wdev->connected &&
+	    (!req->prev_bssid ||
+	     !ether_addr_equal(wdev->u.client.connected_addr, req->prev_bssid)))
 		return -EALREADY;
 
 	cfg80211_oper_and_ht_capa(&req->ht_capa_mask,
@@ -364,13 +363,13 @@ int cfg80211_mlme_deauth(struct cfg80211_registered_device *rdev,
 	ASSERT_WDEV_LOCK(wdev);
 
 	if (local_state_change &&
-	    (!wdev->current_bss ||
-	     !ether_addr_equal(wdev->current_bss->pub.bssid, bssid)))
+	    (!wdev->connected ||
+	     !ether_addr_equal(wdev->u.client.connected_addr, bssid)))
 		return 0;
 
 	if (ether_addr_equal(wdev->disconnect_bssid, bssid) ||
-	    (wdev->current_bss &&
-	     ether_addr_equal(wdev->current_bss->pub.bssid, bssid)))
+	    (wdev->connected &&
+	     ether_addr_equal(wdev->u.client.connected_addr, bssid)))
 		wdev->conn_owner_nlportid = 0;
 
 	return rdev_deauth(rdev, dev, &req);
@@ -392,11 +391,12 @@ int cfg80211_mlme_disassoc(struct cfg80211_registered_device *rdev,
 
 	ASSERT_WDEV_LOCK(wdev);
 
-	if (!wdev->current_bss)
+	if (!wdev->connected)
 		return -ENOTCONN;
 
-	if (ether_addr_equal(wdev->current_bss->pub.bssid, bssid))
-		req.bss = &wdev->current_bss->pub;
+	if (ether_addr_equal(wdev->links[0].client.current_bss->pub.bssid,
+			     bssid))
+		req.bss = &wdev->links[0].client.current_bss->pub;
 	else
 		return -ENOTCONN;
 
@@ -405,7 +405,7 @@ int cfg80211_mlme_disassoc(struct cfg80211_registered_device *rdev,
 		return err;
 
 	/* driver should have reported the disassoc */
-	WARN_ON(wdev->current_bss);
+	WARN_ON(wdev->connected);
 	return 0;
 }
 
@@ -420,10 +420,10 @@ void cfg80211_mlme_down(struct cfg80211_registered_device *rdev,
 	if (!rdev->ops->deauth)
 		return;
 
-	if (!wdev->current_bss)
+	if (!wdev->connected)
 		return;
 
-	memcpy(bssid, wdev->current_bss->pub.bssid, ETH_ALEN);
+	memcpy(bssid, wdev->u.client.connected_addr, ETH_ALEN);
 	cfg80211_mlme_deauth(rdev, dev, bssid, NULL, 0,
 			     WLAN_REASON_DEAUTH_LEAVING, false);
 }
@@ -676,28 +676,34 @@ int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev,
 
 		switch (wdev->iftype) {
 		case NL80211_IFTYPE_ADHOC:
+			/*
+			 * check for IBSS DA must be done by driver as
+			 * cfg80211 doesn't track the stations
+			 */
+			if (!wdev->u.ibss.current_bss ||
+			    !ether_addr_equal(wdev->u.ibss.current_bss->pub.bssid,
+					      mgmt->bssid)) {
+				err = -ENOTCONN;
+				break;
+			}
+			break;
 		case NL80211_IFTYPE_STATION:
 		case NL80211_IFTYPE_P2P_CLIENT:
-			if (!wdev->current_bss) {
+			if (!wdev->connected) {
 				err = -ENOTCONN;
 				break;
 			}
 
-			if (!ether_addr_equal(wdev->current_bss->pub.bssid,
+			/* FIXME: MLD may address this differently */
+
+			if (!ether_addr_equal(wdev->u.client.connected_addr,
 					      mgmt->bssid)) {
 				err = -ENOTCONN;
 				break;
 			}
 
-			/*
-			 * check for IBSS DA must be done by driver as
-			 * cfg80211 doesn't track the stations
-			 */
-			if (wdev->iftype == NL80211_IFTYPE_ADHOC)
-				break;
-
 			/* for station, check that DA is the AP */
-			if (!ether_addr_equal(wdev->current_bss->pub.bssid,
+			if (!ether_addr_equal(wdev->u.client.connected_addr,
 					      mgmt->da)) {
 				err = -ENOTCONN;
 				break;
@@ -743,12 +749,12 @@ int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev,
 		if (!ieee80211_is_action(mgmt->frame_control) ||
 		    mgmt->u.action.category != WLAN_CATEGORY_PUBLIC)
 			return -EINVAL;
-		if (!wdev->current_bss &&
+		if (!wdev->connected &&
 		    !wiphy_ext_feature_isset(
 			    &rdev->wiphy,
 			    NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA))
 			return -EINVAL;
-		if (wdev->current_bss &&
+		if (wdev->connected &&
 		    !wiphy_ext_feature_isset(
 			    &rdev->wiphy,
 			    NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED))
@@ -940,12 +946,16 @@ void cfg80211_cac_event(struct net_device *netdev,
 	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
 	unsigned long timeout;
 
+	/* not yet supported */
+	if (wdev->valid_links)
+		return;
+
 	trace_cfg80211_cac_event(netdev, event);
 
 	if (WARN_ON(!wdev->cac_started && event != NL80211_RADAR_CAC_STARTED))
 		return;
 
-	if (WARN_ON(!wdev->chandef.chan))
+	if (WARN_ON(!wdev->links[0].ap.chandef.chan))
 		return;
 
 	switch (event) {
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 740b29481bc6..af31978fc9cc 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -792,6 +792,10 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
 				 NL80211_EHT_MIN_CAPABILITY_LEN,
 				 NL80211_EHT_MAX_CAPABILITY_LEN),
 	[NL80211_ATTR_DISABLE_EHT] = { .type = NLA_FLAG },
+	[NL80211_ATTR_MLO_LINKS] =
+		NLA_POLICY_NESTED_ARRAY(nl80211_policy),
+	[NL80211_ATTR_MLO_LINK_ID] =
+		NLA_POLICY_RANGE(NLA_U8, 0, IEEE80211_MLD_MAX_NUM_LINKS),
 };
 
 /* policy for the key attributes */
@@ -1225,6 +1229,37 @@ static bool nl80211_put_txq_stats(struct sk_buff *msg,
 
 /* netlink command implementations */
 
+/**
+ * nl80211_link_id - return link ID
+ * @attrs: attributes to look at
+ *
+ * Returns: the link ID or 0 if not given
+ *
+ * Note this function doesn't do any validation of the link
+ * ID validity wrt. links that were actually added, so it must
+ * be called only from ops with %NL80211_FLAG_MLO_VALID_LINK_ID
+ * or if additional validation is done.
+ */
+static unsigned int nl80211_link_id(struct nlattr **attrs)
+{
+	struct nlattr *linkid = attrs[NL80211_ATTR_MLO_LINK_ID];
+
+	if (!linkid)
+		return 0;
+
+	return nla_get_u8(linkid);
+}
+
+static int nl80211_link_id_or_invalid(struct nlattr **attrs)
+{
+	struct nlattr *linkid = attrs[NL80211_ATTR_MLO_LINK_ID];
+
+	if (!linkid)
+		return -1;
+
+	return nla_get_u8(linkid);
+}
+
 struct key_parse {
 	struct key_params p;
 	int idx;
@@ -1496,11 +1531,15 @@ static int nl80211_key_allowed(struct wireless_dev *wdev)
 	case NL80211_IFTYPE_MESH_POINT:
 		break;
 	case NL80211_IFTYPE_ADHOC:
+		if (wdev->u.ibss.current_bss)
+			return 0;
+		return -ENOLINK;
 	case NL80211_IFTYPE_STATION:
 	case NL80211_IFTYPE_P2P_CLIENT:
-		if (!wdev->current_bss)
-			return -ENOLINK;
-		break;
+		/* for MLO, require driver validation of the link ID */
+		if (wdev->connected)
+			return 0;
+		return -ENOLINK;
 	case NL80211_IFTYPE_UNSPECIFIED:
 	case NL80211_IFTYPE_OCB:
 	case NL80211_IFTYPE_MONITOR:
@@ -3232,12 +3271,14 @@ int nl80211_parse_chandef(struct cfg80211_registered_device *rdev,
 
 static int __nl80211_set_channel(struct cfg80211_registered_device *rdev,
 				 struct net_device *dev,
-				 struct genl_info *info)
+				 struct genl_info *info,
+				 int _link_id)
 {
 	struct cfg80211_chan_def chandef;
 	int result;
 	enum nl80211_iftype iftype = NL80211_IFTYPE_MONITOR;
 	struct wireless_dev *wdev = NULL;
+	int link_id = _link_id;
 
 	if (dev)
 		wdev = dev->ieee80211_ptr;
@@ -3246,6 +3287,12 @@ static int __nl80211_set_channel(struct cfg80211_registered_device *rdev,
 	if (wdev)
 		iftype = wdev->iftype;
 
+	if (link_id < 0) {
+		if (wdev && wdev->valid_links)
+			return -EINVAL;
+		link_id = 0;
+	}
+
 	result = nl80211_parse_chandef(rdev, info, &chandef);
 	if (result)
 		return result;
@@ -3254,49 +3301,48 @@ static int __nl80211_set_channel(struct cfg80211_registered_device *rdev,
 	case NL80211_IFTYPE_AP:
 	case NL80211_IFTYPE_P2P_GO:
 		if (!cfg80211_reg_can_beacon_relax(&rdev->wiphy, &chandef,
-						   iftype)) {
-			result = -EINVAL;
-			break;
-		}
-		if (wdev->beacon_interval) {
+						   iftype))
+			return -EINVAL;
+		if (wdev->links[link_id].ap.beacon_interval) {
+			struct ieee80211_channel *cur_chan;
+
 			if (!dev || !rdev->ops->set_ap_chanwidth ||
 			    !(rdev->wiphy.features &
-			      NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE)) {
-				result = -EBUSY;
-				break;
-			}
+			      NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE))
+				return -EBUSY;
 
 			/* Only allow dynamic channel width changes */
-			if (chandef.chan != wdev->preset_chandef.chan) {
-				result = -EBUSY;
-				break;
-			}
-			result = rdev_set_ap_chanwidth(rdev, dev, &chandef);
+			cur_chan = wdev->links[link_id].ap.chandef.chan;
+			if (chandef.chan != cur_chan)
+				return -EBUSY;
+
+			result = rdev_set_ap_chanwidth(rdev, dev, link_id,
+						       &chandef);
 			if (result)
-				break;
+				return result;
+			wdev->links[link_id].ap.chandef = chandef;
+		} else {
+			wdev->u.ap.preset_chandef = chandef;
 		}
-		wdev->preset_chandef = chandef;
-		result = 0;
-		break;
+		return 0;
 	case NL80211_IFTYPE_MESH_POINT:
-		result = cfg80211_set_mesh_channel(rdev, wdev, &chandef);
-		break;
+		return cfg80211_set_mesh_channel(rdev, wdev, &chandef);
 	case NL80211_IFTYPE_MONITOR:
-		result = cfg80211_set_monitor_channel(rdev, &chandef);
-		break;
+		return cfg80211_set_monitor_channel(rdev, &chandef);
 	default:
-		result = -EINVAL;
+		break;
 	}
 
-	return result;
+	return -EINVAL;
 }
 
 static int nl80211_set_channel(struct sk_buff *skb, struct genl_info *info)
 {
 	struct cfg80211_registered_device *rdev = info->user_ptr[0];
+	int link_id = nl80211_link_id_or_invalid(info->attrs);
 	struct net_device *netdev = info->user_ptr[1];
 
-	return __nl80211_set_channel(rdev, netdev, info);
+	return __nl80211_set_channel(rdev, netdev, info, link_id);
 }
 
 static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info)
@@ -3411,7 +3457,7 @@ static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info)
 		result = __nl80211_set_channel(
 			rdev,
 			nl80211_can_set_dev_channel(wdev) ? netdev : NULL,
-			info);
+			info, -1);
 		if (result)
 			goto out;
 	}
@@ -3696,15 +3742,13 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flag
 	    nla_put_u8(msg, NL80211_ATTR_4ADDR, wdev->use_4addr))
 		goto nla_put_failure;
 
-	if (rdev->ops->get_channel) {
-		int ret;
+	if (rdev->ops->get_channel && !wdev->valid_links) {
 		struct cfg80211_chan_def chandef = {};
+		int ret;
 
-		ret = rdev_get_channel(rdev, wdev, &chandef);
-		if (ret == 0) {
-			if (nl80211_send_chandef(msg, &chandef))
-				goto nla_put_failure;
-		}
+		ret = rdev_get_channel(rdev, wdev, 0, &chandef);
+		if (ret == 0 && nl80211_send_chandef(msg, &chandef))
+			goto nla_put_failure;
 	}
 
 	if (rdev->ops->get_tx_power) {
@@ -3721,27 +3765,24 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flag
 	switch (wdev->iftype) {
 	case NL80211_IFTYPE_AP:
 	case NL80211_IFTYPE_P2P_GO:
-		if (wdev->ssid_len &&
-		    nla_put(msg, NL80211_ATTR_SSID, wdev->ssid_len, wdev->ssid))
+		if (wdev->u.ap.ssid_len &&
+		    nla_put(msg, NL80211_ATTR_SSID, wdev->u.ap.ssid_len,
+			    wdev->u.ap.ssid))
 			goto nla_put_failure_locked;
 		break;
 	case NL80211_IFTYPE_STATION:
 	case NL80211_IFTYPE_P2P_CLIENT:
-	case NL80211_IFTYPE_ADHOC: {
-		const struct element *ssid_elem;
-
-		if (!wdev->current_bss)
-			break;
-		rcu_read_lock();
-		ssid_elem = ieee80211_bss_get_elem(&wdev->current_bss->pub,
-						   WLAN_EID_SSID);
-		if (ssid_elem &&
-		    nla_put(msg, NL80211_ATTR_SSID, ssid_elem->datalen,
-			    ssid_elem->data))
-			goto nla_put_failure_rcu_locked;
-		rcu_read_unlock();
+		if (wdev->u.client.ssid_len &&
+		    nla_put(msg, NL80211_ATTR_SSID, wdev->u.client.ssid_len,
+			    wdev->u.client.ssid))
+			goto nla_put_failure_locked;
+		break;
+	case NL80211_IFTYPE_ADHOC:
+		if (wdev->u.ibss.ssid_len &&
+		    nla_put(msg, NL80211_ATTR_SSID, wdev->u.ibss.ssid_len,
+			    wdev->u.ibss.ssid))
+			goto nla_put_failure_locked;
 		break;
-		}
 	default:
 		/* nothing */
 		break;
@@ -3761,8 +3802,6 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flag
 	genlmsg_end(msg, hdr);
 	return 0;
 
- nla_put_failure_rcu_locked:
-	rcu_read_unlock();
  nla_put_failure_locked:
 	wdev_unlock(wdev);
  nla_put_failure:
@@ -4014,10 +4053,11 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info)
 		wdev_lock(wdev);
 		BUILD_BUG_ON(IEEE80211_MAX_SSID_LEN !=
 			     IEEE80211_MAX_MESH_ID_LEN);
-		wdev->mesh_id_up_len =
+		wdev->u.mesh.id_up_len =
 			nla_len(info->attrs[NL80211_ATTR_MESH_ID]);
-		memcpy(wdev->ssid, nla_data(info->attrs[NL80211_ATTR_MESH_ID]),
-		       wdev->mesh_id_up_len);
+		memcpy(wdev->u.mesh.id,
+		       nla_data(info->attrs[NL80211_ATTR_MESH_ID]),
+		       wdev->u.mesh.id_up_len);
 		wdev_unlock(wdev);
 	}
 
@@ -4122,10 +4162,11 @@ static int _nl80211_new_interface(struct sk_buff *skb, struct genl_info *info)
 		wdev_lock(wdev);
 		BUILD_BUG_ON(IEEE80211_MAX_SSID_LEN !=
 			     IEEE80211_MAX_MESH_ID_LEN);
-		wdev->mesh_id_up_len =
+		wdev->u.mesh.id_up_len =
 			nla_len(info->attrs[NL80211_ATTR_MESH_ID]);
-		memcpy(wdev->ssid, nla_data(info->attrs[NL80211_ATTR_MESH_ID]),
-		       wdev->mesh_id_up_len);
+		memcpy(wdev->u.mesh.id,
+		       nla_data(info->attrs[NL80211_ATTR_MESH_ID]),
+		       wdev->u.mesh.id_up_len);
 		wdev_unlock(wdev);
 		break;
 	case NL80211_IFTYPE_NAN:
@@ -4662,7 +4703,7 @@ static int nl80211_set_mac_acl(struct sk_buff *skb, struct genl_info *info)
 	    dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO)
 		return -EOPNOTSUPP;
 
-	if (!dev->ieee80211_ptr->beacon_interval)
+	if (!dev->ieee80211_ptr->links[0].ap.beacon_interval)
 		return -EINVAL;
 
 	acl = parse_acl_data(&rdev->wiphy, info);
@@ -4818,14 +4859,24 @@ static void he_build_mcs_mask(u16 he_mcs_map,
 	}
 }
 
-static u16 he_get_txmcsmap(struct genl_info *info,
+static u16 he_get_txmcsmap(struct genl_info *info, unsigned int link_id,
 			   const struct ieee80211_sta_he_cap *he_cap)
 {
 	struct net_device *dev = info->user_ptr[1];
 	struct wireless_dev *wdev = dev->ieee80211_ptr;
-	__le16	tx_mcs;
+	struct cfg80211_chan_def *chandef;
+	__le16 tx_mcs;
 
-	switch (wdev->chandef.width) {
+	chandef = wdev_chandef(wdev, link_id);
+	if (!chandef) {
+		/*
+		 * This is probably broken, but we never maintained
+		 * a chandef in these cases, so it always was.
+		 */
+		return le16_to_cpu(he_cap->he_mcs_nss_supp.tx_mcs_80);
+	}
+
+	switch (chandef->width) {
 	case NL80211_CHAN_WIDTH_80P80:
 		tx_mcs = he_cap->he_mcs_nss_supp.tx_mcs_80p80;
 		break;
@@ -4836,6 +4887,7 @@ static u16 he_get_txmcsmap(struct genl_info *info,
 		tx_mcs = he_cap->he_mcs_nss_supp.tx_mcs_80;
 		break;
 	}
+
 	return le16_to_cpu(tx_mcs);
 }
 
@@ -4843,7 +4895,8 @@ static bool he_set_mcs_mask(struct genl_info *info,
 			    struct wireless_dev *wdev,
 			    struct ieee80211_supported_band *sband,
 			    struct nl80211_txrate_he *txrate,
-			    u16 mcs[NL80211_HE_NSS_MAX])
+			    u16 mcs[NL80211_HE_NSS_MAX],
+			    unsigned int link_id)
 {
 	const struct ieee80211_sta_he_cap *he_cap;
 	u16 tx_mcs_mask[NL80211_HE_NSS_MAX] = {};
@@ -4856,7 +4909,7 @@ static bool he_set_mcs_mask(struct genl_info *info,
 
 	memset(mcs, 0, sizeof(u16) * NL80211_HE_NSS_MAX);
 
-	tx_mcs_map = he_get_txmcsmap(info, he_cap);
+	tx_mcs_map = he_get_txmcsmap(info, link_id, he_cap);
 
 	/* Build he_mcs_mask from HE capabilities */
 	he_build_mcs_mask(tx_mcs_map, tx_mcs_mask);
@@ -4876,7 +4929,8 @@ static int nl80211_parse_tx_bitrate_mask(struct genl_info *info,
 					 enum nl80211_attrs attr,
 					 struct cfg80211_bitrate_mask *mask,
 					 struct net_device *dev,
-					 bool default_all_enabled)
+					 bool default_all_enabled,
+					 unsigned int link_id)
 {
 	struct nlattr *tb[NL80211_TXRATE_MAX + 1];
 	struct cfg80211_registered_device *rdev = info->user_ptr[0];
@@ -4913,7 +4967,7 @@ static int nl80211_parse_tx_bitrate_mask(struct genl_info *info,
 		if (!he_cap)
 			continue;
 
-		he_tx_mcs_map = he_get_txmcsmap(info, he_cap);
+		he_tx_mcs_map = he_get_txmcsmap(info, link_id, he_cap);
 		he_build_mcs_mask(he_tx_mcs_map, mask->control[i].he_mcs);
 
 		mask->control[i].he_gi = 0xFF;
@@ -4978,7 +5032,8 @@ static int nl80211_parse_tx_bitrate_mask(struct genl_info *info,
 		if (tb[NL80211_TXRATE_HE] &&
 		    !he_set_mcs_mask(info, wdev, sband,
 				     nla_data(tb[NL80211_TXRATE_HE]),
-				     mask->control[band].he_mcs))
+				     mask->control[band].he_mcs,
+				     link_id))
 			return -EINVAL;
 
 		if (tb[NL80211_TXRATE_HE_GI])
@@ -5215,6 +5270,8 @@ static int nl80211_parse_beacon(struct cfg80211_registered_device *rdev,
 
 	memset(bcn, 0, sizeof(*bcn));
 
+	bcn->link_id = nl80211_link_id(attrs);
+
 	if (attrs[NL80211_ATTR_BEACON_HEAD]) {
 		bcn->head = nla_data(attrs[NL80211_ATTR_BEACON_HEAD]);
 		bcn->head_len = nla_len(attrs[NL80211_ATTR_BEACON_HEAD]);
@@ -5468,22 +5525,20 @@ static bool nl80211_get_ap_channel(struct cfg80211_registered_device *rdev,
 				   struct cfg80211_ap_settings *params)
 {
 	struct wireless_dev *wdev;
-	bool ret = false;
 
 	list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
 		if (wdev->iftype != NL80211_IFTYPE_AP &&
 		    wdev->iftype != NL80211_IFTYPE_P2P_GO)
 			continue;
 
-		if (!wdev->preset_chandef.chan)
+		if (!wdev->u.ap.preset_chandef.chan)
 			continue;
 
-		params->chandef = wdev->preset_chandef;
-		ret = true;
-		break;
+		params->chandef = wdev->u.ap.preset_chandef;
+		return true;
 	}
 
-	return ret;
+	return false;
 }
 
 static bool nl80211_valid_auth_type(struct cfg80211_registered_device *rdev,
@@ -5541,6 +5596,7 @@ static bool nl80211_valid_auth_type(struct cfg80211_registered_device *rdev,
 static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
 {
 	struct cfg80211_registered_device *rdev = info->user_ptr[0];
+	unsigned int link_id = nl80211_link_id(info->attrs);
 	struct net_device *dev = info->user_ptr[1];
 	struct wireless_dev *wdev = dev->ieee80211_ptr;
 	struct cfg80211_ap_settings *params;
@@ -5553,7 +5609,7 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
 	if (!rdev->ops->start_ap)
 		return -EOPNOTSUPP;
 
-	if (wdev->beacon_interval)
+	if (wdev->links[link_id].ap.beacon_interval)
 		return -EALREADY;
 
 	/* these are required for START_AP */
@@ -5595,6 +5651,18 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
 			err = -EINVAL;
 			goto out;
 		}
+
+		if (wdev->u.ap.ssid_len &&
+		    (wdev->u.ap.ssid_len != params->ssid_len ||
+		     memcmp(wdev->u.ap.ssid, params->ssid, params->ssid_len))) {
+			/* require identical SSID for MLO */
+			err = -EINVAL;
+			goto out;
+		}
+	} else if (wdev->valid_links) {
+		/* require SSID for MLO */
+		err = -EINVAL;
+		goto out;
 	}
 
 	if (info->attrs[NL80211_ATTR_HIDDEN_SSID])
@@ -5662,8 +5730,12 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
 		err = nl80211_parse_chandef(rdev, info, &params->chandef);
 		if (err)
 			goto out;
-	} else if (wdev->preset_chandef.chan) {
-		params->chandef = wdev->preset_chandef;
+	} else if (wdev->valid_links) {
+		/* with MLD need to specify the channel configuration */
+		err = -EINVAL;
+		goto out;
+	} else if (wdev->u.ap.preset_chandef.chan) {
+		params->chandef = wdev->u.ap.preset_chandef;
 	} else if (!nl80211_get_ap_channel(rdev, params)) {
 		err = -EINVAL;
 		goto out;
@@ -5679,7 +5751,7 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
 		err = nl80211_parse_tx_bitrate_mask(info, info->attrs,
 						    NL80211_ATTR_TX_RATES,
 						    &params->beacon_rate,
-						    dev, false);
+						    dev, false, link_id);
 		if (err)
 			goto out;
 
@@ -5779,19 +5851,28 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
 		params->flags |= NL80211_AP_SETTINGS_EXTERNAL_AUTH_SUPPORT;
 
 	wdev_lock(wdev);
+	if (wdev->conn_owner_nlportid &&
+	    info->attrs[NL80211_ATTR_SOCKET_OWNER] &&
+	    wdev->conn_owner_nlportid != info->snd_portid) {
+		err = -EINVAL;
+		goto out_unlock;
+	}
+
+	/* FIXME: validate MLO/link-id against driver capabilities */
+
 	err = rdev_start_ap(rdev, dev, params);
 	if (!err) {
-		wdev->preset_chandef = params->chandef;
-		wdev->beacon_interval = params->beacon_interval;
-		wdev->chandef = params->chandef;
-		wdev->ssid_len = params->ssid_len;
-		memcpy(wdev->ssid, params->ssid, wdev->ssid_len);
+		wdev->links[link_id].ap.beacon_interval = params->beacon_interval;
+		wdev->links[link_id].ap.chandef = params->chandef;
+		wdev->u.ap.ssid_len = params->ssid_len;
+		memcpy(wdev->u.ap.ssid, params->ssid,
+		       params->ssid_len);
 
 		if (info->attrs[NL80211_ATTR_SOCKET_OWNER])
 			wdev->conn_owner_nlportid = info->snd_portid;
 	}
+out_unlock:
 	wdev_unlock(wdev);
-
 out:
 	kfree(params->acl);
 	kfree(params->beacon.mbssid_ies);
@@ -5807,6 +5888,7 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
 static int nl80211_set_beacon(struct sk_buff *skb, struct genl_info *info)
 {
 	struct cfg80211_registered_device *rdev = info->user_ptr[0];
+	unsigned int link_id = nl80211_link_id(info->attrs);
 	struct net_device *dev = info->user_ptr[1];
 	struct wireless_dev *wdev = dev->ieee80211_ptr;
 	struct cfg80211_beacon_data params;
@@ -5819,7 +5901,7 @@ static int nl80211_set_beacon(struct sk_buff *skb, struct genl_info *info)
 	if (!rdev->ops->change_beacon)
 		return -EOPNOTSUPP;
 
-	if (!wdev->beacon_interval)
+	if (!wdev->links[link_id].ap.beacon_interval)
 		return -EINVAL;
 
 	err = nl80211_parse_beacon(rdev, info->attrs, &params);
@@ -5838,9 +5920,10 @@ static int nl80211_set_beacon(struct sk_buff *skb, struct genl_info *info)
 static int nl80211_stop_ap(struct sk_buff *skb, struct genl_info *info)
 {
 	struct cfg80211_registered_device *rdev = info->user_ptr[0];
+	unsigned int link_id = nl80211_link_id(info->attrs);
 	struct net_device *dev = info->user_ptr[1];
 
-	return cfg80211_stop_ap(rdev, dev, false);
+	return cfg80211_stop_ap(rdev, dev, link_id, false);
 }
 
 static const struct nla_policy sta_flags_policy[NL80211_STA_FLAG_MAX + 1] = {
@@ -7590,7 +7673,7 @@ static int nl80211_get_mesh_config(struct sk_buff *skb,
 
 	wdev_lock(wdev);
 	/* If not connected, get default parameters */
-	if (!wdev->mesh_id_len)
+	if (!wdev->u.mesh.id_len)
 		memcpy(&cur_params, &default_mesh_config, sizeof(cur_params));
 	else
 		err = rdev_get_mesh_config(rdev, dev, &cur_params);
@@ -7971,7 +8054,7 @@ static int nl80211_update_mesh_config(struct sk_buff *skb,
 		return err;
 
 	wdev_lock(wdev);
-	if (!wdev->mesh_id_len)
+	if (!wdev->u.mesh.id_len)
 		err = -ENOLINK;
 
 	if (!err)
@@ -8463,14 +8546,44 @@ int nl80211_parse_random_mac(struct nlattr **attrs,
 	return 0;
 }
 
-static bool cfg80211_off_channel_oper_allowed(struct wireless_dev *wdev)
+static bool cfg80211_off_channel_oper_allowed(struct wireless_dev *wdev,
+					      struct ieee80211_channel *chan)
 {
+	unsigned int link_id;
+	bool all_ok = true;
+
 	ASSERT_WDEV_LOCK(wdev);
 
 	if (!cfg80211_beaconing_iface_active(wdev))
 		return true;
 
-	if (!(wdev->chandef.chan->flags & IEEE80211_CHAN_RADAR))
+	/*
+	 * FIXME: check if we have a free HW resource/link for chan
+	 *
+	 * This, as well as the FIXME below, requires knowing the link
+	 * capabilities of the hardware.
+	 */
+
+	/* we cannot leave radar channels */
+	for_each_valid_link(wdev, link_id) {
+		struct cfg80211_chan_def *chandef;
+
+		chandef = wdev_chandef(wdev, link_id);
+		if (!chandef)
+			continue;
+
+		/*
+		 * FIXME: don't require all_ok, but rather check only the
+		 *	  correct HW resource/link onto which 'chan' falls,
+		 *	  as only that link leaves the channel for doing
+		 *	  the off-channel operation.
+		 */
+
+		if (chandef->chan->flags & IEEE80211_CHAN_RADAR)
+			all_ok = false;
+	}
+
+	if (all_ok)
 		return true;
 
 	return regulatory_pre_cac_allowed(wdev->wiphy);
@@ -8553,7 +8666,7 @@ nl80211_check_scan_flags(struct wiphy *wiphy, struct wireless_dev *wdev,
 		int err;
 
 		if (!(wiphy->features & randomness_flag) ||
-		    (wdev && wdev->current_bss))
+		    (wdev && wdev->connected))
 			return -EOPNOTSUPP;
 
 		err = nl80211_parse_random_mac(attrs, mac_addr, mac_addr_mask);
@@ -8690,17 +8803,14 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
 	request->n_channels = i;
 
 	wdev_lock(wdev);
-	if (!cfg80211_off_channel_oper_allowed(wdev)) {
-		struct ieee80211_channel *chan;
+	for (i = 0; i < request->n_channels; i++) {
+		struct ieee80211_channel *chan = request->channels[i];
 
-		if (request->n_channels != 1) {
-			wdev_unlock(wdev);
-			err = -EBUSY;
-			goto out_free;
-		}
+		/* if we can go off-channel to the target channel we're good */
+		if (cfg80211_off_channel_oper_allowed(wdev, chan))
+			continue;
 
-		chan = request->channels[0];
-		if (chan->center_freq != wdev->chandef.chan->center_freq) {
+		if (!cfg80211_wdev_on_sub_chan(wdev, chan, true)) {
 			wdev_unlock(wdev);
 			err = -EBUSY;
 			goto out_free;
@@ -9445,7 +9555,7 @@ static int nl80211_start_radar_detection(struct sk_buff *skb,
 
 	err = rdev_start_radar_detection(rdev, dev, &chandef, cac_time_ms);
 	if (!err) {
-		wdev->chandef = chandef;
+		wdev->links[0].ap.chandef = chandef;
 		wdev->cac_started = true;
 		wdev->cac_start_time = jiffies;
 		wdev->cac_time_ms = cac_time_ms;
@@ -9513,6 +9623,7 @@ static int nl80211_notify_radar_detection(struct sk_buff *skb,
 static int nl80211_channel_switch(struct sk_buff *skb, struct genl_info *info)
 {
 	struct cfg80211_registered_device *rdev = info->user_ptr[0];
+	unsigned int link_id = nl80211_link_id(info->attrs);
 	struct net_device *dev = info->user_ptr[1];
 	struct wireless_dev *wdev = dev->ieee80211_ptr;
 	struct cfg80211_csa_settings params;
@@ -9539,15 +9650,15 @@ static int nl80211_channel_switch(struct sk_buff *skb, struct genl_info *info)
 		need_handle_dfs_flag = false;
 
 		/* useless if AP is not running */
-		if (!wdev->beacon_interval)
+		if (!wdev->links[link_id].ap.beacon_interval)
 			return -ENOTCONN;
 		break;
 	case NL80211_IFTYPE_ADHOC:
-		if (!wdev->ssid_len)
+		if (!wdev->u.ibss.ssid_len)
 			return -ENOTCONN;
 		break;
 	case NL80211_IFTYPE_MESH_POINT:
-		if (!wdev->mesh_id_len)
+		if (!wdev->u.mesh.id_len)
 			return -ENOTCONN;
 		break;
 	default:
@@ -9718,6 +9829,7 @@ static int nl80211_send_bss(struct sk_buff *msg, struct netlink_callback *cb,
 {
 	struct cfg80211_bss *res = &intbss->pub;
 	const struct cfg80211_bss_ies *ies;
+	unsigned int link_id;
 	void *hdr;
 	struct nlattr *bss;
 
@@ -9822,13 +9934,15 @@ static int nl80211_send_bss(struct sk_buff *msg, struct netlink_callback *cb,
 	switch (wdev->iftype) {
 	case NL80211_IFTYPE_P2P_CLIENT:
 	case NL80211_IFTYPE_STATION:
-		if (intbss == wdev->current_bss &&
-		    nla_put_u32(msg, NL80211_BSS_STATUS,
-				NL80211_BSS_STATUS_ASSOCIATED))
-			goto nla_put_failure;
+		for_each_valid_link(wdev, link_id) {
+			if (intbss == wdev->links[link_id].client.current_bss &&
+			    nla_put_u32(msg, NL80211_BSS_STATUS,
+					NL80211_BSS_STATUS_ASSOCIATED))
+				goto nla_put_failure;
+		}
 		break;
 	case NL80211_IFTYPE_ADHOC:
-		if (intbss == wdev->current_bss &&
+		if (intbss == wdev->u.ibss.current_bss &&
 		    nla_put_u32(msg, NL80211_BSS_STATUS,
 				NL80211_BSS_STATUS_IBSS_JOINED))
 			goto nla_put_failure;
@@ -11362,7 +11476,7 @@ static int nl80211_update_connect_params(struct sk_buff *skb,
 	}
 
 	wdev_lock(dev->ieee80211_ptr);
-	if (!wdev->current_bss)
+	if (!wdev->connected)
 		ret = -ENOLINK;
 	else
 		ret = rdev_update_connect_params(rdev, dev, &connect, changed);
@@ -11575,9 +11689,9 @@ static int nl80211_remain_on_channel(struct sk_buff *skb,
 				     struct genl_info *info)
 {
 	struct cfg80211_registered_device *rdev = info->user_ptr[0];
+	unsigned int link_id = nl80211_link_id(info->attrs);
 	struct wireless_dev *wdev = info->user_ptr[1];
 	struct cfg80211_chan_def chandef;
-	const struct cfg80211_chan_def *compat_chandef;
 	struct sk_buff *msg;
 	void *hdr;
 	u64 cookie;
@@ -11607,10 +11721,22 @@ static int nl80211_remain_on_channel(struct sk_buff *skb,
 		return err;
 
 	wdev_lock(wdev);
-	if (!cfg80211_off_channel_oper_allowed(wdev) &&
-	    !cfg80211_chandef_identical(&wdev->chandef, &chandef)) {
-		compat_chandef = cfg80211_chandef_compatible(&wdev->chandef,
-							     &chandef);
+	if (!cfg80211_off_channel_oper_allowed(wdev, chandef.chan)) {
+		const struct cfg80211_chan_def *oper_chandef, *compat_chandef;
+
+		oper_chandef = wdev_chandef(wdev, link_id);
+
+		if (WARN_ON(!oper_chandef)) {
+			/* cannot happen since we must beacon to get here */
+			WARN_ON(1);
+			wdev_unlock(wdev);
+			return -EBUSY;
+		}
+
+		/* note: returns first one if identical chandefs */
+		compat_chandef = cfg80211_chandef_compatible(&chandef,
+							     oper_chandef);
+
 		if (compat_chandef != &chandef) {
 			wdev_unlock(wdev);
 			return -EBUSY;
@@ -11672,6 +11798,7 @@ static int nl80211_set_tx_bitrate_mask(struct sk_buff *skb,
 				       struct genl_info *info)
 {
 	struct cfg80211_bitrate_mask mask;
+	unsigned int link_id = nl80211_link_id(info->attrs);
 	struct cfg80211_registered_device *rdev = info->user_ptr[0];
 	struct net_device *dev = info->user_ptr[1];
 	struct wireless_dev *wdev = dev->ieee80211_ptr;
@@ -11683,11 +11810,11 @@ static int nl80211_set_tx_bitrate_mask(struct sk_buff *skb,
 	wdev_lock(wdev);
 	err = nl80211_parse_tx_bitrate_mask(info, info->attrs,
 					    NL80211_ATTR_TX_RATES, &mask,
-					    dev, true);
+					    dev, true, link_id);
 	if (err)
 		goto out;
 
-	err = rdev_set_bitrate_mask(rdev, dev, NULL, &mask);
+	err = rdev_set_bitrate_mask(rdev, dev, link_id, NULL, &mask);
 out:
 	wdev_unlock(wdev);
 	return err;
@@ -11812,7 +11939,8 @@ static int nl80211_tx_mgmt(struct sk_buff *skb, struct genl_info *info)
 		return -EINVAL;
 
 	wdev_lock(wdev);
-	if (params.offchan && !cfg80211_off_channel_oper_allowed(wdev)) {
+	if (params.offchan &&
+	    !cfg80211_off_channel_oper_allowed(wdev, chandef.chan)) {
 		wdev_unlock(wdev);
 		return -EBUSY;
 	}
@@ -12030,12 +12158,13 @@ static int cfg80211_cqm_rssi_update(struct cfg80211_registered_device *rdev,
 	 * connection is established and enough beacons received to calculate
 	 * the average.
 	 */
-	if (!wdev->cqm_config->last_rssi_event_value && wdev->current_bss &&
+	if (!wdev->cqm_config->last_rssi_event_value &&
+	    wdev->links[0].client.current_bss &&
 	    rdev->ops->get_station) {
 		struct station_info sinfo = {};
 		u8 *mac_addr;
 
-		mac_addr = wdev->current_bss->pub.bssid;
+		mac_addr = wdev->links[0].client.current_bss->pub.bssid;
 
 		err = rdev_get_station(rdev, dev, mac_addr, &sinfo);
 		if (err)
@@ -12298,7 +12427,7 @@ static int nl80211_join_mesh(struct sk_buff *skb, struct genl_info *info)
 		err = nl80211_parse_tx_bitrate_mask(info, info->attrs,
 						    NL80211_ATTR_TX_RATES,
 						    &setup.beacon_rate,
-						    dev, false);
+						    dev, false, 0);
 		if (err)
 			return err;
 
@@ -13268,7 +13397,7 @@ static int nl80211_set_rekey_data(struct sk_buff *skb, struct genl_info *info)
 		rekey_data.akm = nla_get_u32(tb[NL80211_REKEY_DATA_AKM]);
 
 	wdev_lock(wdev);
-	if (!wdev->current_bss) {
+	if (!wdev->connected) {
 		err = -ENOTCONN;
 		goto out;
 	}
@@ -14537,7 +14666,7 @@ static int nl80211_add_tx_ts(struct sk_buff *skb, struct genl_info *info)
 	switch (wdev->iftype) {
 	case NL80211_IFTYPE_STATION:
 	case NL80211_IFTYPE_P2P_CLIENT:
-		if (wdev->current_bss)
+		if (wdev->connected)
 			break;
 		err = -ENOTCONN;
 		goto out;
@@ -14710,13 +14839,13 @@ static int nl80211_set_pmk(struct sk_buff *skb, struct genl_info *info)
 		return -EINVAL;
 
 	wdev_lock(wdev);
-	if (!wdev->current_bss) {
+	if (!wdev->connected) {
 		ret = -ENOTCONN;
 		goto out;
 	}
 
 	pmk_conf.aa = nla_data(info->attrs[NL80211_ATTR_MAC]);
-	if (memcmp(pmk_conf.aa, wdev->current_bss->pub.bssid, ETH_ALEN)) {
+	if (memcmp(pmk_conf.aa, wdev->u.client.connected_addr, ETH_ALEN)) {
 		ret = -EINVAL;
 		goto out;
 	}
@@ -14844,9 +14973,13 @@ static int nl80211_tx_control_port(struct sk_buff *skb, struct genl_info *info)
 	case NL80211_IFTYPE_MESH_POINT:
 		break;
 	case NL80211_IFTYPE_ADHOC:
+		if (wdev->u.ibss.current_bss)
+			break;
+		err = -ENOTCONN;
+		goto out;
 	case NL80211_IFTYPE_STATION:
 	case NL80211_IFTYPE_P2P_CLIENT:
-		if (wdev->current_bss)
+		if (wdev->connected)
 			break;
 		err = -ENOTCONN;
 		goto out;
@@ -14882,12 +15015,14 @@ static int nl80211_get_ftm_responder_stats(struct sk_buff *skb,
 	struct net_device *dev = info->user_ptr[1];
 	struct wireless_dev *wdev = dev->ieee80211_ptr;
 	struct cfg80211_ftm_responder_stats ftm_stats = {};
+	unsigned int link_id = nl80211_link_id(info->attrs);
 	struct sk_buff *msg;
 	void *hdr;
 	struct nlattr *ftm_stats_attr;
 	int err;
 
-	if (wdev->iftype != NL80211_IFTYPE_AP || !wdev->beacon_interval)
+	if (wdev->iftype != NL80211_IFTYPE_AP ||
+	    !wdev->links[link_id].ap.beacon_interval)
 		return -EOPNOTSUPP;
 
 	err = rdev_get_ftm_responder_stats(rdev, dev, &ftm_stats);
@@ -15017,7 +15152,8 @@ static int nl80211_probe_mesh_link(struct sk_buff *skb, struct genl_info *info)
 static int parse_tid_conf(struct cfg80211_registered_device *rdev,
 			  struct nlattr *attrs[], struct net_device *dev,
 			  struct cfg80211_tid_cfg *tid_conf,
-			  struct genl_info *info, const u8 *peer)
+			  struct genl_info *info, const u8 *peer,
+			  unsigned int link_id)
 {
 	struct netlink_ext_ack *extack = info->extack;
 	u64 mask;
@@ -15092,7 +15228,7 @@ static int parse_tid_conf(struct cfg80211_registered_device *rdev,
 			attr = NL80211_TID_CONFIG_ATTR_TX_RATE;
 			err = nl80211_parse_tx_bitrate_mask(info, attrs, attr,
 						    &tid_conf->txrate_mask, dev,
-						    true);
+						    true, link_id);
 			if (err)
 				return err;
 
@@ -15119,6 +15255,7 @@ static int nl80211_set_tid_config(struct sk_buff *skb,
 {
 	struct cfg80211_registered_device *rdev = info->user_ptr[0];
 	struct nlattr *attrs[NL80211_TID_CONFIG_ATTR_MAX + 1];
+	unsigned int link_id = nl80211_link_id(info->attrs);
 	struct net_device *dev = info->user_ptr[1];
 	struct cfg80211_tid_config *tid_config;
 	struct nlattr *tid;
@@ -15156,7 +15293,7 @@ static int nl80211_set_tid_config(struct sk_buff *skb,
 
 		ret = parse_tid_conf(rdev, attrs, dev,
 				     &tid_config->tid_conf[conf_idx],
-				     info, tid_config->peer);
+				     info, tid_config->peer, link_id);
 		if (ret)
 			goto bad_tid_conf;
 
@@ -15295,6 +15432,62 @@ static int nl80211_set_fils_aad(struct sk_buff *skb,
 	return rdev_set_fils_aad(rdev, dev, &fils_aad);
 }
 
+static int nl80211_add_link(struct sk_buff *skb, struct genl_info *info)
+{
+	unsigned int link_id = nl80211_link_id(info->attrs);
+	struct net_device *dev = info->user_ptr[1];
+	struct wireless_dev *wdev = dev->ieee80211_ptr;
+
+	if (!(wdev->wiphy->flags & WIPHY_FLAG_SUPPORTS_MLO))
+		return -EINVAL;
+
+	switch (wdev->iftype) {
+	case NL80211_IFTYPE_AP:
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	if (!info->attrs[NL80211_ATTR_MAC] ||
+	    !is_valid_ether_addr(nla_data(info->attrs[NL80211_ATTR_MAC])))
+		return -EINVAL;
+
+	wdev_lock(wdev);
+	wdev->valid_links |= BIT(link_id);
+	ether_addr_copy(wdev->links[link_id].addr,
+			nla_data(info->attrs[NL80211_ATTR_MAC]));
+	wdev_unlock(wdev);
+
+	return 0;
+}
+
+static int nl80211_remove_link(struct sk_buff *skb, struct genl_info *info)
+{
+	unsigned int link_id = nl80211_link_id(info->attrs);
+	struct net_device *dev = info->user_ptr[1];
+	struct wireless_dev *wdev = dev->ieee80211_ptr;
+
+	/* cannot remove if there's no link */
+	if (!info->attrs[NL80211_ATTR_MLO_LINK_ID])
+		return -EINVAL;
+
+	switch (wdev->iftype) {
+	case NL80211_IFTYPE_AP:
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	/* FIXME: stop the link operations first */
+
+	wdev_lock(wdev);
+	wdev->valid_links &= ~BIT(link_id);
+	eth_zero_addr(wdev->links[link_id].addr);
+	wdev_unlock(wdev);
+
+	return 0;
+}
+
 #define NL80211_FLAG_NEED_WIPHY		0x01
 #define NL80211_FLAG_NEED_NETDEV	0x02
 #define NL80211_FLAG_NEED_RTNL		0x04
@@ -15307,6 +15500,8 @@ static int nl80211_set_fils_aad(struct sk_buff *skb,
 					 NL80211_FLAG_CHECK_NETDEV_UP)
 #define NL80211_FLAG_CLEAR_SKB		0x20
 #define NL80211_FLAG_NO_WIPHY_MTX	0x40
+#define NL80211_FLAG_MLO_VALID_LINK_ID	0x80
+#define NL80211_FLAG_MLO_UNSUPPORTED	0x100
 
 #define INTERNAL_FLAG_SELECTORS(__sel)			\
 	SELECTOR(__sel, NONE, 0) /* must be first */	\
@@ -15316,6 +15511,12 @@ static int nl80211_set_fils_aad(struct sk_buff *skb,
 		 NL80211_FLAG_NEED_WDEV)		\
 	SELECTOR(__sel, NETDEV,				\
 		 NL80211_FLAG_NEED_NETDEV)		\
+	SELECTOR(__sel, NETDEV_LINK,			\
+		 NL80211_FLAG_NEED_NETDEV |		\
+		 NL80211_FLAG_MLO_VALID_LINK_ID)	\
+	SELECTOR(__sel, NETDEV_NO_MLO,			\
+		 NL80211_FLAG_NEED_NETDEV |		\
+		 NL80211_FLAG_MLO_UNSUPPORTED)	\
 	SELECTOR(__sel, WIPHY_RTNL,			\
 		 NL80211_FLAG_NEED_WIPHY |		\
 		 NL80211_FLAG_NEED_RTNL)		\
@@ -15331,14 +15532,31 @@ static int nl80211_set_fils_aad(struct sk_buff *skb,
 		 NL80211_FLAG_NEED_RTNL)		\
 	SELECTOR(__sel, NETDEV_UP,			\
 		 NL80211_FLAG_NEED_NETDEV_UP)		\
+	SELECTOR(__sel, NETDEV_UP_LINK,			\
+		 NL80211_FLAG_NEED_NETDEV_UP |		\
+		 NL80211_FLAG_MLO_VALID_LINK_ID)	\
+	SELECTOR(__sel, NETDEV_UP_NO_MLO,		\
+		 NL80211_FLAG_NEED_NETDEV_UP |		\
+		 NL80211_FLAG_MLO_UNSUPPORTED)		\
+	SELECTOR(__sel, NETDEV_UP_NO_MLO_CLEAR,		\
+		 NL80211_FLAG_NEED_NETDEV_UP |		\
+		 NL80211_FLAG_CLEAR_SKB |		\
+		 NL80211_FLAG_MLO_UNSUPPORTED)		\
 	SELECTOR(__sel, NETDEV_UP_NOTMX,		\
 		 NL80211_FLAG_NEED_NETDEV_UP |		\
 		 NL80211_FLAG_NO_WIPHY_MTX)		\
+	SELECTOR(__sel, NETDEV_UP_NOTMX_NOMLO,		\
+		 NL80211_FLAG_NEED_NETDEV_UP |		\
+		 NL80211_FLAG_NO_WIPHY_MTX |		\
+		 NL80211_FLAG_MLO_UNSUPPORTED)		\
 	SELECTOR(__sel, NETDEV_UP_CLEAR,		\
 		 NL80211_FLAG_NEED_NETDEV_UP |		\
 		 NL80211_FLAG_CLEAR_SKB)		\
 	SELECTOR(__sel, WDEV_UP,			\
 		 NL80211_FLAG_NEED_WDEV_UP)		\
+	SELECTOR(__sel, WDEV_UP_LINK,			\
+		 NL80211_FLAG_NEED_WDEV_UP |		\
+		 NL80211_FLAG_MLO_VALID_LINK_ID)	\
 	SELECTOR(__sel, WDEV_UP_RTNL,			\
 		 NL80211_FLAG_NEED_WDEV_UP |		\
 		 NL80211_FLAG_NEED_RTNL)		\
@@ -15362,9 +15580,10 @@ static int nl80211_pre_doit(const struct genl_ops *ops, struct sk_buff *skb,
 			    struct genl_info *info)
 {
 	struct cfg80211_registered_device *rdev = NULL;
-	struct wireless_dev *wdev;
-	struct net_device *dev;
+	struct wireless_dev *wdev = NULL;
+	struct net_device *dev = NULL;
 	u32 internal_flags;
+	int err;
 
 	if (WARN_ON(ops->internal_flags >= ARRAY_SIZE(nl80211_internal_flags)))
 		return -EINVAL;
@@ -15375,8 +15594,8 @@ static int nl80211_pre_doit(const struct genl_ops *ops, struct sk_buff *skb,
 	if (internal_flags & NL80211_FLAG_NEED_WIPHY) {
 		rdev = cfg80211_get_dev_from_info(genl_info_net(info), info);
 		if (IS_ERR(rdev)) {
-			rtnl_unlock();
-			return PTR_ERR(rdev);
+			err = PTR_ERR(rdev);
+			goto out_unlock;
 		}
 		info->user_ptr[0] = rdev;
 	} else if (internal_flags & NL80211_FLAG_NEED_NETDEV ||
@@ -15384,17 +15603,18 @@ static int nl80211_pre_doit(const struct genl_ops *ops, struct sk_buff *skb,
 		wdev = __cfg80211_wdev_from_attrs(NULL, genl_info_net(info),
 						  info->attrs);
 		if (IS_ERR(wdev)) {
-			rtnl_unlock();
-			return PTR_ERR(wdev);
+			err = PTR_ERR(wdev);
+			goto out_unlock;
 		}
 
 		dev = wdev->netdev;
+		dev_hold(dev);
 		rdev = wiphy_to_rdev(wdev->wiphy);
 
 		if (internal_flags & NL80211_FLAG_NEED_NETDEV) {
 			if (!dev) {
-				rtnl_unlock();
-				return -EINVAL;
+				err = -EINVAL;
+				goto out_unlock;
 			}
 
 			info->user_ptr[1] = dev;
@@ -15404,14 +15624,44 @@ static int nl80211_pre_doit(const struct genl_ops *ops, struct sk_buff *skb,
 
 		if (internal_flags & NL80211_FLAG_CHECK_NETDEV_UP &&
 		    !wdev_running(wdev)) {
-			rtnl_unlock();
-			return -ENETDOWN;
+			err = -ENETDOWN;
+			goto out_unlock;
 		}
 
-		dev_hold(dev);
 		info->user_ptr[0] = rdev;
 	}
 
+	if (internal_flags & NL80211_FLAG_MLO_VALID_LINK_ID) {
+		struct nlattr *link_id = info->attrs[NL80211_ATTR_MLO_LINK_ID];
+
+		if (!wdev) {
+			err = -EINVAL;
+			goto out_unlock;
+		}
+
+		/* MLO -> require valid link ID */
+		if (wdev->valid_links &&
+		    (!link_id ||
+		     !(wdev->valid_links & BIT(nla_get_u16(link_id))))) {
+			err = -EINVAL;
+			goto out_unlock;
+		}
+
+		/* non-MLO -> no link ID attribute accepted */
+		if (!wdev->valid_links && link_id) {
+			err = -EINVAL;
+			goto out_unlock;
+		}
+	}
+
+	if (internal_flags & NL80211_FLAG_MLO_UNSUPPORTED) {
+		if (info->attrs[NL80211_ATTR_MLO_LINK_ID] ||
+		    (wdev && wdev->valid_links)) {
+			err = -EINVAL;
+			goto out_unlock;
+		}
+	}
+
 	if (rdev && !(internal_flags & NL80211_FLAG_NO_WIPHY_MTX)) {
 		wiphy_lock(&rdev->wiphy);
 		/* we keep the mutex locked until post_doit */
@@ -15421,6 +15671,10 @@ static int nl80211_pre_doit(const struct genl_ops *ops, struct sk_buff *skb,
 		rtnl_unlock();
 
 	return 0;
+out_unlock:
+	rtnl_unlock();
+	dev_put(dev);
+	return err;
 }
 
 static void nl80211_post_doit(const struct genl_ops *ops, struct sk_buff *skb,
@@ -15636,6 +15890,7 @@ static const struct genl_small_ops nl80211_small_ops[] = {
 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
 		.doit = nl80211_set_key,
 		.flags = GENL_UNS_ADMIN_PERM,
+		/* cannot use NL80211_FLAG_MLO_VALID_LINK_ID, depends on key */
 		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
 					 NL80211_FLAG_CLEAR_SKB),
 	},
@@ -15659,21 +15914,24 @@ static const struct genl_small_ops nl80211_small_ops[] = {
 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
 		.flags = GENL_UNS_ADMIN_PERM,
 		.doit = nl80211_set_beacon,
-		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
+		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
+					 NL80211_FLAG_MLO_VALID_LINK_ID),
 	},
 	{
 		.cmd = NL80211_CMD_START_AP,
 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
 		.flags = GENL_UNS_ADMIN_PERM,
 		.doit = nl80211_start_ap,
-		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
+		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
+					 NL80211_FLAG_MLO_VALID_LINK_ID),
 	},
 	{
 		.cmd = NL80211_CMD_STOP_AP,
 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
 		.flags = GENL_UNS_ADMIN_PERM,
 		.doit = nl80211_stop_ap,
-		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
+		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
+					 NL80211_FLAG_MLO_VALID_LINK_ID),
 	},
 	{
 		.cmd = NL80211_CMD_GET_STATION,
@@ -15939,7 +16197,9 @@ static const struct genl_small_ops nl80211_small_ops[] = {
 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
 		.doit = nl80211_remain_on_channel,
 		.flags = GENL_UNS_ADMIN_PERM,
-		.internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV_UP),
+		/* FIXME: requiring a link ID here is probably not good */
+		.internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV_UP |
+					 NL80211_FLAG_MLO_VALID_LINK_ID),
 	},
 	{
 		.cmd = NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL,
@@ -15953,7 +16213,8 @@ static const struct genl_small_ops nl80211_small_ops[] = {
 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
 		.doit = nl80211_set_tx_bitrate_mask,
 		.flags = GENL_UNS_ADMIN_PERM,
-		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
+		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV |
+					 NL80211_FLAG_MLO_VALID_LINK_ID),
 	},
 	{
 		.cmd = NL80211_CMD_REGISTER_FRAME,
@@ -16002,7 +16263,8 @@ static const struct genl_small_ops nl80211_small_ops[] = {
 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
 		.doit = nl80211_set_channel,
 		.flags = GENL_UNS_ADMIN_PERM,
-		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
+		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV |
+					 NL80211_FLAG_MLO_VALID_LINK_ID),
 	},
 	{
 		.cmd = NL80211_CMD_JOIN_MESH,
@@ -16163,7 +16425,8 @@ static const struct genl_small_ops nl80211_small_ops[] = {
 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
 		.doit = nl80211_set_mac_acl,
 		.flags = GENL_UNS_ADMIN_PERM,
-		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
+		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV |
+					 NL80211_FLAG_MLO_UNSUPPORTED),
 	},
 	{
 		.cmd = NL80211_CMD_RADAR_DETECT,
@@ -16171,7 +16434,8 @@ static const struct genl_small_ops nl80211_small_ops[] = {
 		.doit = nl80211_start_radar_detection,
 		.flags = GENL_UNS_ADMIN_PERM,
 		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
-					 NL80211_FLAG_NO_WIPHY_MTX),
+					 NL80211_FLAG_NO_WIPHY_MTX |
+					 NL80211_FLAG_MLO_UNSUPPORTED),
 	},
 	{
 		.cmd = NL80211_CMD_GET_PROTOCOL_FEATURES,
@@ -16217,7 +16481,8 @@ static const struct genl_small_ops nl80211_small_ops[] = {
 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
 		.doit = nl80211_channel_switch,
 		.flags = GENL_UNS_ADMIN_PERM,
-		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
+		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
+					 NL80211_FLAG_MLO_VALID_LINK_ID),
 	},
 	{
 		.cmd = NL80211_CMD_VENDOR,
@@ -16240,7 +16505,8 @@ static const struct genl_small_ops nl80211_small_ops[] = {
 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
 		.doit = nl80211_add_tx_ts,
 		.flags = GENL_UNS_ADMIN_PERM,
-		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
+		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
+					 NL80211_FLAG_MLO_UNSUPPORTED),
 	},
 	{
 		.cmd = NL80211_CMD_DEL_TX_TS,
@@ -16301,7 +16567,8 @@ static const struct genl_small_ops nl80211_small_ops[] = {
 		.cmd = NL80211_CMD_GET_FTM_RESPONDER_STATS,
 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
 		.doit = nl80211_get_ftm_responder_stats,
-		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
+		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV |
+					 NL80211_FLAG_MLO_VALID_LINK_ID),
 	},
 	{
 		.cmd = NL80211_CMD_PEER_MEASUREMENT_START,
@@ -16333,7 +16600,8 @@ static const struct genl_small_ops nl80211_small_ops[] = {
 		.cmd = NL80211_CMD_SET_TID_CONFIG,
 		.doit = nl80211_set_tid_config,
 		.flags = GENL_UNS_ADMIN_PERM,
-		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
+		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV |
+					 NL80211_FLAG_MLO_VALID_LINK_ID),
 	},
 	{
 		.cmd = NL80211_CMD_SET_SAR_SPECS,
@@ -16357,6 +16625,19 @@ static const struct genl_small_ops nl80211_small_ops[] = {
 		.flags = GENL_UNS_ADMIN_PERM,
 		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
 	},
+	{
+		.cmd = NL80211_CMD_ADD_LINK,
+		.doit = nl80211_add_link,
+		.flags = GENL_UNS_ADMIN_PERM,
+		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
+	},
+	{
+		.cmd = NL80211_CMD_REMOVE_LINK,
+		.doit = nl80211_remove_link,
+		.flags = GENL_UNS_ADMIN_PERM,
+		.internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
+					 NL80211_FLAG_MLO_VALID_LINK_ID),
+	},
 };
 
 static struct genl_family nl80211_fam __ro_after_init = {
@@ -17984,23 +18265,37 @@ static void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev,
 }
 
 void cfg80211_ch_switch_notify(struct net_device *dev,
-			       struct cfg80211_chan_def *chandef)
+			       struct cfg80211_chan_def *chandef,
+			       unsigned int link_id)
 {
 	struct wireless_dev *wdev = dev->ieee80211_ptr;
 	struct wiphy *wiphy = wdev->wiphy;
 	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
 
 	ASSERT_WDEV_LOCK(wdev);
+	WARN_INVALID_LINK_ID(wdev, link_id);
 
-	trace_cfg80211_ch_switch_notify(dev, chandef);
-
-	wdev->chandef = *chandef;
-	wdev->preset_chandef = *chandef;
+	trace_cfg80211_ch_switch_notify(dev, chandef, link_id);
 
-	if ((wdev->iftype == NL80211_IFTYPE_STATION ||
-	     wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) &&
-	    !WARN_ON(!wdev->current_bss))
-		cfg80211_update_assoc_bss_entry(wdev, chandef->chan);
+	switch (wdev->iftype) {
+	case NL80211_IFTYPE_STATION:
+	case NL80211_IFTYPE_P2P_CLIENT:
+		if (!WARN_ON(!wdev->links[link_id].client.current_bss))
+			cfg80211_update_assoc_bss_entry(wdev, link_id,
+							chandef->chan);
+		break;
+	case NL80211_IFTYPE_MESH_POINT:
+		wdev->u.mesh.chandef = *chandef;
+		wdev->u.mesh.preset_chandef = *chandef;
+		break;
+	case NL80211_IFTYPE_AP:
+	case NL80211_IFTYPE_P2P_GO:
+		wdev->links[link_id].ap.chandef = *chandef;
+		break;
+	default:
+		WARN_ON(1);
+		break;
+	}
 
 	cfg80211_sched_dfs_chan_update(rdev);
 
diff --git a/net/wireless/ocb.c b/net/wireless/ocb.c
index 2d26a6d980bf..27a1732264f9 100644
--- a/net/wireless/ocb.c
+++ b/net/wireless/ocb.c
@@ -4,6 +4,7 @@
  *
  * Copyright: (c) 2014 Czech Technical University in Prague
  *            (c) 2014 Volkswagen Group Research
+ * Copyright (C) 2022 Intel Corporation
  * Author:    Rostislav Lisovy <rostislav.lisovy@fel.cvut.cz>
  * Funded by: Volkswagen Group Research
  */
@@ -34,7 +35,7 @@ int __cfg80211_join_ocb(struct cfg80211_registered_device *rdev,
 
 	err = rdev_join_ocb(rdev, dev, setup);
 	if (!err)
-		wdev->chandef = setup->chandef;
+		wdev->u.ocb.chandef = setup->chandef;
 
 	return err;
 }
@@ -69,7 +70,7 @@ int __cfg80211_leave_ocb(struct cfg80211_registered_device *rdev,
 
 	err = rdev_leave_ocb(rdev, dev);
 	if (!err)
-		memset(&wdev->chandef, 0, sizeof(wdev->chandef));
+		memset(&wdev->u.ocb.chandef, 0, sizeof(wdev->u.ocb.chandef));
 
 	return err;
 }
diff --git a/net/wireless/rdev-ops.h b/net/wireless/rdev-ops.h
index 439bcf52369c..d2300eff03ae 100644
--- a/net/wireless/rdev-ops.h
+++ b/net/wireless/rdev-ops.h
@@ -1,4 +1,9 @@
 /* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Portions of this file
+ * Copyright(c) 2016-2017 Intel Deutschland GmbH
+ * Copyright (C) 2018, 2021-2022 Intel Corporation
+ */
 #ifndef __CFG80211_RDEV_OPS
 #define __CFG80211_RDEV_OPS
 
@@ -172,11 +177,11 @@ static inline int rdev_change_beacon(struct cfg80211_registered_device *rdev,
 }
 
 static inline int rdev_stop_ap(struct cfg80211_registered_device *rdev,
-			       struct net_device *dev)
+			       struct net_device *dev, unsigned int link_id)
 {
 	int ret;
-	trace_rdev_stop_ap(&rdev->wiphy, dev);
-	ret = rdev->ops->stop_ap(&rdev->wiphy, dev);
+	trace_rdev_stop_ap(&rdev->wiphy, dev, link_id);
+	ret = rdev->ops->stop_ap(&rdev->wiphy, dev, link_id);
 	trace_rdev_return_int(&rdev->wiphy, ret);
 	return ret;
 }
@@ -651,12 +656,14 @@ static inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev,
 
 static inline int
 rdev_set_bitrate_mask(struct cfg80211_registered_device *rdev,
-		      struct net_device *dev, const u8 *peer,
+		      struct net_device *dev, unsigned int link_id,
+		      const u8 *peer,
 		      const struct cfg80211_bitrate_mask *mask)
 {
 	int ret;
-	trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, peer, mask);
-	ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, peer, mask);
+	trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, link_id, peer, mask);
+	ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, link_id,
+					  peer, mask);
 	trace_rdev_return_int(&rdev->wiphy, ret);
 	return ret;
 }
@@ -944,12 +951,13 @@ static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev,
 static inline int
 rdev_get_channel(struct cfg80211_registered_device *rdev,
 		 struct wireless_dev *wdev,
+		 unsigned int link_id,
 		 struct cfg80211_chan_def *chandef)
 {
 	int ret;
 
-	trace_rdev_get_channel(&rdev->wiphy, wdev);
-	ret = rdev->ops->get_channel(&rdev->wiphy, wdev, chandef);
+	trace_rdev_get_channel(&rdev->wiphy, wdev, link_id);
+	ret = rdev->ops->get_channel(&rdev->wiphy, wdev, link_id, chandef);
 	trace_rdev_return_chandef(&rdev->wiphy, ret, chandef);
 
 	return ret;
@@ -1107,12 +1115,14 @@ static inline int rdev_set_qos_map(struct cfg80211_registered_device *rdev,
 
 static inline int
 rdev_set_ap_chanwidth(struct cfg80211_registered_device *rdev,
-		      struct net_device *dev, struct cfg80211_chan_def *chandef)
+		      struct net_device *dev,
+		      unsigned int link_id,
+		      struct cfg80211_chan_def *chandef)
 {
 	int ret;
 
-	trace_rdev_set_ap_chanwidth(&rdev->wiphy, dev, chandef);
-	ret = rdev->ops->set_ap_chanwidth(&rdev->wiphy, dev, chandef);
+	trace_rdev_set_ap_chanwidth(&rdev->wiphy, dev, link_id, chandef);
+	ret = rdev->ops->set_ap_chanwidth(&rdev->wiphy, dev, link_id, chandef);
 	trace_rdev_return_int(&rdev->wiphy, ret);
 
 	return ret;
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index 58e83ce642ad..c7383ede794f 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -5,7 +5,7 @@
  * Copyright 2008-2011	Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
  * Copyright 2013-2014  Intel Mobile Communications GmbH
  * Copyright      2017  Intel Deutschland GmbH
- * Copyright (C) 2018 - 2021 Intel Corporation
+ * Copyright (C) 2018 - 2022 Intel Corporation
  *
  * Permission to use, copy, modify, and/or distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -2370,6 +2370,7 @@ static bool reg_wdev_chan_valid(struct wiphy *wiphy, struct wireless_dev *wdev)
 	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
 	enum nl80211_iftype iftype;
 	bool ret;
+	int link;
 
 	wdev_lock(wdev);
 	iftype = wdev->iftype;
@@ -2378,62 +2379,83 @@ static bool reg_wdev_chan_valid(struct wiphy *wiphy, struct wireless_dev *wdev)
 	if (!wdev->netdev || !netif_running(wdev->netdev))
 		goto wdev_inactive_unlock;
 
-	switch (iftype) {
-	case NL80211_IFTYPE_AP:
-	case NL80211_IFTYPE_P2P_GO:
-	case NL80211_IFTYPE_MESH_POINT:
-		if (!wdev->beacon_interval)
-			goto wdev_inactive_unlock;
-		chandef = wdev->chandef;
-		break;
-	case NL80211_IFTYPE_ADHOC:
-		if (!wdev->ssid_len)
-			goto wdev_inactive_unlock;
-		chandef = wdev->chandef;
-		break;
-	case NL80211_IFTYPE_STATION:
-	case NL80211_IFTYPE_P2P_CLIENT:
-		if (!wdev->current_bss ||
-		    !wdev->current_bss->pub.channel)
-			goto wdev_inactive_unlock;
-
-		if (!rdev->ops->get_channel ||
-		    rdev_get_channel(rdev, wdev, &chandef))
-			cfg80211_chandef_create(&chandef,
-						wdev->current_bss->pub.channel,
-						NL80211_CHAN_NO_HT);
-		break;
-	case NL80211_IFTYPE_MONITOR:
-	case NL80211_IFTYPE_AP_VLAN:
-	case NL80211_IFTYPE_P2P_DEVICE:
-		/* no enforcement required */
-		break;
-	default:
-		/* others not implemented for now */
-		WARN_ON(1);
-		break;
-	}
+	for (link = 0; link < ARRAY_SIZE(wdev->links); link++) {
+		struct ieee80211_channel *chan;
 
-	wdev_unlock(wdev);
+		if (!wdev->valid_links && link > 0)
+			break;
+		if (!(wdev->valid_links & BIT(link)))
+			continue;
+		switch (iftype) {
+		case NL80211_IFTYPE_AP:
+		case NL80211_IFTYPE_P2P_GO:
+		case NL80211_IFTYPE_MESH_POINT:
+			if (!wdev->u.mesh.beacon_interval)
+				continue;
+			chandef = wdev->u.mesh.chandef;
+			break;
+		case NL80211_IFTYPE_ADHOC:
+			if (!wdev->u.ibss.ssid_len)
+				continue;
+			chandef = wdev->u.ibss.chandef;
+			break;
+		case NL80211_IFTYPE_STATION:
+		case NL80211_IFTYPE_P2P_CLIENT:
+			/* Maybe we could consider disabling that link only? */
+			if (!wdev->links[link].client.current_bss)
+				continue;
 
-	switch (iftype) {
-	case NL80211_IFTYPE_AP:
-	case NL80211_IFTYPE_P2P_GO:
-	case NL80211_IFTYPE_ADHOC:
-	case NL80211_IFTYPE_MESH_POINT:
-		wiphy_lock(wiphy);
-		ret = cfg80211_reg_can_beacon_relax(wiphy, &chandef, iftype);
-		wiphy_unlock(wiphy);
+			chan = wdev->links[link].client.current_bss->pub.channel;
+			if (!chan)
+				continue;
 
-		return ret;
-	case NL80211_IFTYPE_STATION:
-	case NL80211_IFTYPE_P2P_CLIENT:
-		return cfg80211_chandef_usable(wiphy, &chandef,
-					       IEEE80211_CHAN_DISABLED);
-	default:
-		break;
+			if (!rdev->ops->get_channel ||
+			    rdev_get_channel(rdev, wdev, link, &chandef))
+				cfg80211_chandef_create(&chandef, chan,
+							NL80211_CHAN_NO_HT);
+			break;
+		case NL80211_IFTYPE_MONITOR:
+		case NL80211_IFTYPE_AP_VLAN:
+		case NL80211_IFTYPE_P2P_DEVICE:
+			/* no enforcement required */
+			break;
+		default:
+			/* others not implemented for now */
+			WARN_ON(1);
+			break;
+		}
+
+		wdev_unlock(wdev);
+
+		switch (iftype) {
+		case NL80211_IFTYPE_AP:
+		case NL80211_IFTYPE_P2P_GO:
+		case NL80211_IFTYPE_ADHOC:
+		case NL80211_IFTYPE_MESH_POINT:
+			wiphy_lock(wiphy);
+			ret = cfg80211_reg_can_beacon_relax(wiphy, &chandef,
+							    iftype);
+			wiphy_unlock(wiphy);
+
+			if (!ret)
+				return ret;
+			break;
+		case NL80211_IFTYPE_STATION:
+		case NL80211_IFTYPE_P2P_CLIENT:
+			ret = cfg80211_chandef_usable(wiphy, &chandef,
+						      IEEE80211_CHAN_DISABLED);
+			if (!ret)
+				return ret;
+			break;
+		default:
+			break;
+		}
+
+		wdev_lock(wdev);
 	}
 
+	wdev_unlock(wdev);
+
 	return true;
 
 wdev_inactive_unlock:
@@ -4215,8 +4237,17 @@ static void cfg80211_check_and_end_cac(struct cfg80211_registered_device *rdev)
 	 * In both cases we should end the CAC on the wdev.
 	 */
 	list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
-		if (wdev->cac_started &&
-		    !cfg80211_chandef_dfs_usable(&rdev->wiphy, &wdev->chandef))
+		struct cfg80211_chan_def *chandef;
+
+		if (!wdev->cac_started)
+			continue;
+
+		/* FIXME: radar detection is tied to link 0 for now */
+		chandef = wdev_chandef(wdev, 0);
+		if (!chandef)
+			continue;
+
+		if (!cfg80211_chandef_dfs_usable(&rdev->wiphy, chandef))
 			rdev_end_cac(rdev, wdev->netdev);
 	}
 }
diff --git a/net/wireless/scan.c b/net/wireless/scan.c
index 6d82bd9eaf8c..0134e5d5c81a 100644
--- a/net/wireless/scan.c
+++ b/net/wireless/scan.c
@@ -5,7 +5,7 @@
  * Copyright 2008 Johannes Berg <johannes@sipsolutions.net>
  * Copyright 2013-2014  Intel Mobile Communications GmbH
  * Copyright 2016	Intel Deutschland GmbH
- * Copyright (C) 2018-2021 Intel Corporation
+ * Copyright (C) 2018-2022 Intel Corporation
  */
 #include <linux/kernel.h>
 #include <linux/slab.h>
@@ -2617,7 +2617,8 @@ void cfg80211_bss_iter(struct wiphy *wiphy,
 	spin_lock_bh(&rdev->bss_lock);
 
 	list_for_each_entry(bss, &rdev->bss_list, list) {
-		if (!chandef || cfg80211_is_sub_chan(chandef, bss->pub.channel))
+		if (!chandef || cfg80211_is_sub_chan(chandef, bss->pub.channel,
+						     false))
 			iter(wiphy, &bss->pub, iter_data);
 	}
 
@@ -2626,11 +2627,12 @@ void cfg80211_bss_iter(struct wiphy *wiphy,
 EXPORT_SYMBOL(cfg80211_bss_iter);
 
 void cfg80211_update_assoc_bss_entry(struct wireless_dev *wdev,
+				     unsigned int link_id,
 				     struct ieee80211_channel *chan)
 {
 	struct wiphy *wiphy = wdev->wiphy;
 	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
-	struct cfg80211_internal_bss *cbss = wdev->current_bss;
+	struct cfg80211_internal_bss *cbss = wdev->links[link_id].client.current_bss;
 	struct cfg80211_internal_bss *new = NULL;
 	struct cfg80211_internal_bss *bss;
 	struct cfg80211_bss *nontrans_bss;
diff --git a/net/wireless/sme.c b/net/wireless/sme.c
index 607a68911047..ca674649d787 100644
--- a/net/wireless/sme.c
+++ b/net/wireless/sme.c
@@ -5,7 +5,7 @@
  * (for nl80211's connect() and wext)
  *
  * Copyright 2009	Johannes Berg <johannes@sipsolutions.net>
- * Copyright (C) 2009, 2020 Intel Corporation. All rights reserved.
+ * Copyright (C) 2009, 2020, 2022 Intel Corporation. All rights reserved.
  * Copyright 2017	Intel Deutschland GmbH
  */
 
@@ -454,6 +454,20 @@ void cfg80211_sme_abandon_assoc(struct wireless_dev *wdev)
 	schedule_work(&rdev->conn_work);
 }
 
+static void cfg80211_wdev_release_bsses(struct wireless_dev *wdev)
+{
+	unsigned int link;
+
+	for_each_valid_link(wdev, link) {
+		if (!wdev->links[link].client.current_bss)
+			continue;
+		cfg80211_unhold_bss(wdev->links[link].client.current_bss);
+		cfg80211_put_bss(wdev->wiphy,
+				 &wdev->links[link].client.current_bss->pub);
+		wdev->links[link].client.current_bss = NULL;
+	}
+}
+
 static int cfg80211_sme_get_conn_ies(struct wireless_dev *wdev,
 				     const u8 *ies, size_t ies_len,
 				     const u8 **out_ies, size_t *out_ies_len)
@@ -521,12 +535,11 @@ static int cfg80211_sme_connect(struct wireless_dev *wdev,
 	if (!rdev->ops->auth || !rdev->ops->assoc)
 		return -EOPNOTSUPP;
 
-	if (wdev->current_bss) {
-		cfg80211_unhold_bss(wdev->current_bss);
-		cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub);
-		wdev->current_bss = NULL;
+	cfg80211_wdev_release_bsses(wdev);
 
+	if (wdev->connected) {
 		cfg80211_sme_free(wdev);
+		wdev->connected = false;
 	}
 
 	if (wdev->conn)
@@ -563,8 +576,8 @@ static int cfg80211_sme_connect(struct wireless_dev *wdev,
 		wdev->conn->auto_auth = false;
 	}
 
-	wdev->conn->params.ssid = wdev->ssid;
-	wdev->conn->params.ssid_len = wdev->ssid_len;
+	wdev->conn->params.ssid = wdev->u.client.ssid;
+	wdev->conn->params.ssid_len = wdev->u.client.ssid_len;
 
 	/* see if we have the bss already */
 	bss = cfg80211_get_conn_bss(wdev);
@@ -648,7 +661,7 @@ static bool cfg80211_is_all_idle(void)
 	list_for_each_entry(rdev, &cfg80211_rdev_list, list) {
 		list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
 			wdev_lock(wdev);
-			if (wdev->conn || wdev->current_bss ||
+			if (wdev->conn || wdev->connected ||
 			    cfg80211_beaconing_iface_active(wdev))
 				is_all_idle = false;
 			wdev_unlock(wdev);
@@ -668,7 +681,6 @@ static void disconnect_work(struct work_struct *work)
 
 DECLARE_WORK(cfg80211_disconnect_work, disconnect_work);
 
-
 /*
  * API calls for drivers implementing connect/disconnect and
  * SME event handling
@@ -729,23 +741,19 @@ void __cfg80211_connect_result(struct net_device *dev,
 	if (!cr->bss && (cr->status == WLAN_STATUS_SUCCESS)) {
 		WARN_ON_ONCE(!wiphy_to_rdev(wdev->wiphy)->ops->connect);
 		cr->bss = cfg80211_get_bss(wdev->wiphy, NULL, cr->bssid,
-					   wdev->ssid, wdev->ssid_len,
+					   wdev->u.client.ssid, wdev->u.client.ssid_len,
 					   wdev->conn_bss_type,
 					   IEEE80211_PRIVACY_ANY);
 		if (cr->bss)
 			cfg80211_hold_bss(bss_from_pub(cr->bss));
 	}
 
-	if (wdev->current_bss) {
-		cfg80211_unhold_bss(wdev->current_bss);
-		cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub);
-		wdev->current_bss = NULL;
-	}
+	cfg80211_wdev_release_bsses(wdev);
 
 	if (cr->status != WLAN_STATUS_SUCCESS) {
 		kfree_sensitive(wdev->connect_keys);
 		wdev->connect_keys = NULL;
-		wdev->ssid_len = 0;
+		wdev->u.client.ssid_len = 0;
 		wdev->conn_owner_nlportid = 0;
 		if (cr->bss) {
 			cfg80211_unhold_bss(bss_from_pub(cr->bss));
@@ -758,7 +766,9 @@ void __cfg80211_connect_result(struct net_device *dev,
 	if (WARN_ON(!cr->bss))
 		return;
 
-	wdev->current_bss = bss_from_pub(cr->bss);
+	wdev->links[0].client.current_bss = bss_from_pub(cr->bss);
+	wdev->connected = true;
+	ether_addr_copy(wdev->u.client.connected_addr, cr->bss->bssid);
 
 	if (!(wdev->wiphy->flags & WIPHY_FLAG_HAS_STATIC_WEP))
 		cfg80211_upload_connect_keys(wdev);
@@ -801,7 +811,7 @@ void cfg80211_connect_done(struct net_device *dev,
 
 			found = cfg80211_get_bss(wdev->wiphy, NULL,
 						 params->bss->bssid,
-						 wdev->ssid, wdev->ssid_len,
+						 wdev->u.client.ssid, wdev->u.client.ssid_len,
 						 wdev->conn_bss_type,
 						 IEEE80211_PRIVACY_ANY);
 			if (found) {
@@ -906,18 +916,17 @@ void __cfg80211_roamed(struct wireless_dev *wdev,
 		    wdev->iftype != NL80211_IFTYPE_P2P_CLIENT))
 		goto out;
 
-	if (WARN_ON(!wdev->current_bss))
+	if (WARN_ON(!wdev->connected))
 		goto out;
 
-	cfg80211_unhold_bss(wdev->current_bss);
-	cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub);
-	wdev->current_bss = NULL;
+	cfg80211_wdev_release_bsses(wdev);
 
 	if (WARN_ON(!info->bss))
 		return;
 
 	cfg80211_hold_bss(bss_from_pub(info->bss));
-	wdev->current_bss = bss_from_pub(info->bss);
+	wdev->links[0].client.current_bss = bss_from_pub(info->bss);
+	ether_addr_copy(wdev->u.client.connected_addr, info->bss->bssid);
 
 	wdev->unprot_beacon_reported = 0;
 	nl80211_send_roamed(wiphy_to_rdev(wdev->wiphy),
@@ -963,8 +972,8 @@ void cfg80211_roamed(struct net_device *dev, struct cfg80211_roam_info *info,
 
 	if (!info->bss) {
 		info->bss = cfg80211_get_bss(wdev->wiphy, info->channel,
-					     info->bssid, wdev->ssid,
-					     wdev->ssid_len,
+					     info->bssid, wdev->u.client.ssid,
+					     wdev->u.client.ssid_len,
 					     wdev->conn_bss_type,
 					     IEEE80211_PRIVACY_ANY);
 	}
@@ -1035,8 +1044,8 @@ void __cfg80211_port_authorized(struct wireless_dev *wdev, const u8 *bssid)
 		    wdev->iftype != NL80211_IFTYPE_P2P_CLIENT))
 		return;
 
-	if (WARN_ON(!wdev->current_bss) ||
-	    WARN_ON(!ether_addr_equal(wdev->current_bss->pub.bssid, bssid)))
+	if (WARN_ON(!wdev->connected) ||
+	    WARN_ON(!ether_addr_equal(wdev->u.client.connected_addr, bssid)))
 		return;
 
 	nl80211_send_port_authorized(wiphy_to_rdev(wdev->wiphy), wdev->netdev,
@@ -1088,13 +1097,9 @@ void __cfg80211_disconnected(struct net_device *dev, const u8 *ie,
 		    wdev->iftype != NL80211_IFTYPE_P2P_CLIENT))
 		return;
 
-	if (wdev->current_bss) {
-		cfg80211_unhold_bss(wdev->current_bss);
-		cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub);
-	}
-
-	wdev->current_bss = NULL;
-	wdev->ssid_len = 0;
+	cfg80211_wdev_release_bsses(wdev);
+	wdev->connected = false;
+	wdev->u.client.ssid_len = 0;
 	wdev->conn_owner_nlportid = 0;
 	kfree_sensitive(wdev->connect_keys);
 	wdev->connect_keys = NULL;
@@ -1183,19 +1188,20 @@ int cfg80211_connect(struct cfg80211_registered_device *rdev,
 	 * already connected, so reject a new SSID unless it's the
 	 * same (which is the case for re-association.)
 	 */
-	if (wdev->ssid_len &&
-	    (wdev->ssid_len != connect->ssid_len ||
-	     memcmp(wdev->ssid, connect->ssid, wdev->ssid_len)))
+	if (wdev->u.client.ssid_len &&
+	    (wdev->u.client.ssid_len != connect->ssid_len ||
+	     memcmp(wdev->u.client.ssid, connect->ssid, wdev->u.client.ssid_len)))
 		return -EALREADY;
 
 	/*
 	 * If connected, reject (re-)association unless prev_bssid
 	 * matches the current BSSID.
 	 */
-	if (wdev->current_bss) {
+	if (wdev->connected) {
 		if (!prev_bssid)
 			return -EALREADY;
-		if (!ether_addr_equal(prev_bssid, wdev->current_bss->pub.bssid))
+		if (!ether_addr_equal(prev_bssid,
+				      wdev->u.client.connected_addr))
 			return -ENOTCONN;
 	}
 
@@ -1246,8 +1252,8 @@ int cfg80211_connect(struct cfg80211_registered_device *rdev,
 	}
 
 	wdev->connect_keys = connkeys;
-	memcpy(wdev->ssid, connect->ssid, connect->ssid_len);
-	wdev->ssid_len = connect->ssid_len;
+	memcpy(wdev->u.client.ssid, connect->ssid, connect->ssid_len);
+	wdev->u.client.ssid_len = connect->ssid_len;
 
 	wdev->conn_bss_type = connect->pbss ? IEEE80211_BSS_TYPE_PBSS :
 					      IEEE80211_BSS_TYPE_ESS;
@@ -1263,8 +1269,8 @@ int cfg80211_connect(struct cfg80211_registered_device *rdev,
 		 * This could be reassoc getting refused, don't clear
 		 * ssid_len in that case.
 		 */
-		if (!wdev->current_bss)
-			wdev->ssid_len = 0;
+		if (!wdev->connected)
+			wdev->u.client.ssid_len = 0;
 		return err;
 	}
 
@@ -1288,7 +1294,7 @@ int cfg80211_disconnect(struct cfg80211_registered_device *rdev,
 		err = cfg80211_sme_disconnect(wdev, reason);
 	else if (!rdev->ops->disconnect)
 		cfg80211_mlme_down(rdev, dev);
-	else if (wdev->ssid_len)
+	else if (wdev->u.client.ssid_len)
 		err = rdev_disconnect(rdev, dev, reason);
 
 	/*
@@ -1296,8 +1302,8 @@ int cfg80211_disconnect(struct cfg80211_registered_device *rdev,
 	 * in which case cfg80211_disconnected() will take care of
 	 * this later.
 	 */
-	if (!wdev->current_bss)
-		wdev->ssid_len = 0;
+	if (!wdev->connected)
+		wdev->u.client.ssid_len = 0;
 
 	return err;
 }
@@ -1321,7 +1327,7 @@ void cfg80211_autodisconnect_wk(struct work_struct *work)
 			break;
 		case NL80211_IFTYPE_AP:
 		case NL80211_IFTYPE_P2P_GO:
-			__cfg80211_stop_ap(rdev, wdev->netdev, false);
+			__cfg80211_stop_ap(rdev, wdev->netdev, -1, false);
 			break;
 		case NL80211_IFTYPE_MESH_POINT:
 			__cfg80211_leave_mesh(rdev, wdev->netdev);
@@ -1333,7 +1339,7 @@ void cfg80211_autodisconnect_wk(struct work_struct *work)
 			 * ops->disconnect not implemented.  Otherwise we can
 			 * use cfg80211_disconnect.
 			 */
-			if (rdev->ops->disconnect || wdev->current_bss)
+			if (rdev->ops->disconnect || wdev->connected)
 				cfg80211_disconnect(rdev, wdev->netdev,
 						    WLAN_REASON_DEAUTH_LEAVING,
 						    true);
diff --git a/net/wireless/trace.h b/net/wireless/trace.h
index 228079d7690a..3b2c956b8d78 100644
--- a/net/wireless/trace.h
+++ b/net/wireless/trace.h
@@ -569,6 +569,7 @@ TRACE_EVENT(rdev_start_ap,
 		__field(bool, privacy)
 		__field(enum nl80211_auth_type, auth_type)
 		__field(int, inactivity_timeout)
+		__field(unsigned int, link_id)
 	),
 	TP_fast_assign(
 		WIPHY_ASSIGN;
@@ -583,16 +584,17 @@ TRACE_EVENT(rdev_start_ap,
 		__entry->inactivity_timeout = settings->inactivity_timeout;
 		memset(__entry->ssid, 0, IEEE80211_MAX_SSID_LEN + 1);
 		memcpy(__entry->ssid, settings->ssid, settings->ssid_len);
+		__entry->link_id = settings->beacon.link_id;
 	),
 	TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", AP settings - ssid: %s, "
 		  CHAN_DEF_PR_FMT ", beacon interval: %d, dtim period: %d, "
 		  "hidden ssid: %d, wpa versions: %u, privacy: %s, "
-		  "auth type: %d, inactivity timeout: %d",
+		  "auth type: %d, inactivity timeout: %d, link_id: %d",
 		  WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->ssid, CHAN_DEF_PR_ARG,
 		  __entry->beacon_interval, __entry->dtim_period,
 		  __entry->hidden_ssid, __entry->wpa_ver,
 		  BOOL_TO_STR(__entry->privacy), __entry->auth_type,
-		  __entry->inactivity_timeout)
+		  __entry->inactivity_timeout, __entry->link_id)
 );
 
 TRACE_EVENT(rdev_change_beacon,
@@ -602,6 +604,7 @@ TRACE_EVENT(rdev_change_beacon,
 	TP_STRUCT__entry(
 		WIPHY_ENTRY
 		NETDEV_ENTRY
+		__field(int, link_id)
 		__dynamic_array(u8, head, info ? info->head_len : 0)
 		__dynamic_array(u8, tail, info ? info->tail_len : 0)
 		__dynamic_array(u8, beacon_ies, info ? info->beacon_ies_len : 0)
@@ -615,6 +618,7 @@ TRACE_EVENT(rdev_change_beacon,
 		WIPHY_ASSIGN;
 		NETDEV_ASSIGN;
 		if (info) {
+			__entry->link_id = info->link_id;
 			if (info->head)
 				memcpy(__get_dynamic_array(head), info->head,
 				       info->head_len);
@@ -635,9 +639,30 @@ TRACE_EVENT(rdev_change_beacon,
 			if (info->probe_resp)
 				memcpy(__get_dynamic_array(probe_resp),
 				       info->probe_resp, info->probe_resp_len);
+		} else {
+			__entry->link_id = -1;
 		}
 	),
-	TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT, WIPHY_PR_ARG, NETDEV_PR_ARG)
+	TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", link_id:%d",
+		  WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->link_id)
+);
+
+TRACE_EVENT(rdev_stop_ap,
+	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
+		 unsigned int link_id),
+	TP_ARGS(wiphy, netdev, link_id),
+	TP_STRUCT__entry(
+		WIPHY_ENTRY
+		NETDEV_ENTRY
+		__field(unsigned int, link_id)
+	),
+	TP_fast_assign(
+		WIPHY_ASSIGN;
+		NETDEV_ASSIGN;
+		__entry->link_id = link_id;
+	),
+	TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", link_id: %d",
+		  WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->link_id)
 );
 
 DECLARE_EVENT_CLASS(wiphy_netdev_evt,
@@ -654,11 +679,6 @@ DECLARE_EVENT_CLASS(wiphy_netdev_evt,
 	TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT, WIPHY_PR_ARG, NETDEV_PR_ARG)
 );
 
-DEFINE_EVENT(wiphy_netdev_evt, rdev_stop_ap,
-	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev),
-	TP_ARGS(wiphy, netdev)
-);
-
 DEFINE_EVENT(wiphy_netdev_evt, rdev_set_rekey_data,
 	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev),
 	TP_ARGS(wiphy, netdev)
@@ -1619,20 +1639,24 @@ TRACE_EVENT(rdev_testmode_dump,
 
 TRACE_EVENT(rdev_set_bitrate_mask,
 	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
+		 unsigned int link_id,
 		 const u8 *peer, const struct cfg80211_bitrate_mask *mask),
-	TP_ARGS(wiphy, netdev, peer, mask),
+	TP_ARGS(wiphy, netdev, link_id, peer, mask),
 	TP_STRUCT__entry(
 		WIPHY_ENTRY
 		NETDEV_ENTRY
+		__field(unsigned int, link_id)
 		MAC_ENTRY(peer)
 	),
 	TP_fast_assign(
 		WIPHY_ASSIGN;
 		NETDEV_ASSIGN;
+		__entry->link_id = link_id;
 		MAC_ASSIGN(peer, peer);
 	),
-	TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", peer: " MAC_PR_FMT,
-		  WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(peer))
+	TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", link_id: %d, peer: " MAC_PR_FMT,
+		  WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->link_id,
+		  MAC_PR_ARG(peer))
 );
 
 TRACE_EVENT(rdev_update_mgmt_frame_registrations,
@@ -2040,9 +2064,22 @@ TRACE_EVENT(rdev_set_noack_map,
 		  WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->noack_map)
 );
 
-DEFINE_EVENT(wiphy_wdev_evt, rdev_get_channel,
-	TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev),
-	TP_ARGS(wiphy, wdev)
+TRACE_EVENT(rdev_get_channel,
+	TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev,
+		 unsigned int link_id),
+	TP_ARGS(wiphy, wdev, link_id),
+	TP_STRUCT__entry(
+		WIPHY_ENTRY
+		WDEV_ENTRY
+		__field(unsigned int, link_id)
+	),
+	TP_fast_assign(
+		WIPHY_ASSIGN;
+		WDEV_ASSIGN;
+		__entry->link_id = link_id;
+	),
+	TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT ", link_id: %u",
+		  WIPHY_PR_ARG, WDEV_PR_ARG, __entry->link_id)
 );
 
 TRACE_EVENT(rdev_return_chandef,
@@ -2296,20 +2333,24 @@ TRACE_EVENT(rdev_set_qos_map,
 
 TRACE_EVENT(rdev_set_ap_chanwidth,
 	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
+		 unsigned int link_id,
 		 struct cfg80211_chan_def *chandef),
-	TP_ARGS(wiphy, netdev, chandef),
+	TP_ARGS(wiphy, netdev, link_id, chandef),
 	TP_STRUCT__entry(
 		WIPHY_ENTRY
 		NETDEV_ENTRY
 		CHAN_DEF_ENTRY
+		__field(unsigned int, link_id)
 	),
 	TP_fast_assign(
 		WIPHY_ASSIGN;
 		NETDEV_ASSIGN;
 		CHAN_DEF_ASSIGN(chandef);
+		__entry->link_id = link_id;
 	),
-	TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", " CHAN_DEF_PR_FMT,
-		  WIPHY_PR_ARG, NETDEV_PR_ARG, CHAN_DEF_PR_ARG)
+	TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", " CHAN_DEF_PR_FMT ", link:%d",
+		  WIPHY_PR_ARG, NETDEV_PR_ARG, CHAN_DEF_PR_ARG,
+		  __entry->link_id)
 );
 
 TRACE_EVENT(rdev_add_tx_ts,
@@ -3022,18 +3063,21 @@ TRACE_EVENT(cfg80211_chandef_dfs_required,
 
 TRACE_EVENT(cfg80211_ch_switch_notify,
 	TP_PROTO(struct net_device *netdev,
-		 struct cfg80211_chan_def *chandef),
-	TP_ARGS(netdev, chandef),
+		 struct cfg80211_chan_def *chandef,
+		 unsigned int link_id),
+	TP_ARGS(netdev, chandef, link_id),
 	TP_STRUCT__entry(
 		NETDEV_ENTRY
 		CHAN_DEF_ENTRY
+		__field(unsigned int, link_id)
 	),
 	TP_fast_assign(
 		NETDEV_ASSIGN;
 		CHAN_DEF_ASSIGN(chandef);
+		__entry->link_id = link_id;
 	),
-	TP_printk(NETDEV_PR_FMT ", " CHAN_DEF_PR_FMT,
-		  NETDEV_PR_ARG, CHAN_DEF_PR_ARG)
+	TP_printk(NETDEV_PR_FMT ", " CHAN_DEF_PR_FMT ", link:%d",
+		  NETDEV_PR_ARG, CHAN_DEF_PR_ARG, __entry->link_id)
 );
 
 TRACE_EVENT(cfg80211_ch_switch_started_notify,
diff --git a/net/wireless/util.c b/net/wireless/util.c
index a60d7d638e72..b7257862e0fe 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -5,7 +5,7 @@
  * Copyright 2007-2009	Johannes Berg <johannes@sipsolutions.net>
  * Copyright 2013-2014  Intel Mobile Communications GmbH
  * Copyright 2017	Intel Deutschland GmbH
- * Copyright (C) 2018-2021 Intel Corporation
+ * Copyright (C) 2018-2022 Intel Corporation
  */
 #include <linux/export.h>
 #include <linux/bitops.h>
@@ -1041,7 +1041,6 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
 			return -EBUSY;
 
 		dev->ieee80211_ptr->use_4addr = false;
-		dev->ieee80211_ptr->mesh_id_up_len = 0;
 		wdev_lock(dev->ieee80211_ptr);
 		rdev_set_qos_map(rdev, dev, NULL);
 		wdev_unlock(dev->ieee80211_ptr);
@@ -1049,7 +1048,7 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
 		switch (otype) {
 		case NL80211_IFTYPE_AP:
 		case NL80211_IFTYPE_P2P_GO:
-			cfg80211_stop_ap(rdev, dev, true);
+			cfg80211_stop_ap(rdev, dev, -1, true);
 			break;
 		case NL80211_IFTYPE_ADHOC:
 			cfg80211_leave_ibss(rdev, dev, false);
@@ -1073,6 +1072,11 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
 
 		cfg80211_process_rdev_events(rdev);
 		cfg80211_mlme_purge_registrations(dev->ieee80211_ptr);
+
+		memset(&dev->ieee80211_ptr->u, 0,
+		       sizeof(dev->ieee80211_ptr->u));
+		memset(&dev->ieee80211_ptr->links, 0,
+		       sizeof(dev->ieee80211_ptr->links));
 	}
 
 	err = rdev_change_virtual_intf(rdev, dev, ntype, params);
@@ -1930,6 +1934,24 @@ bool ieee80211_chandef_to_operating_class(struct cfg80211_chan_def *chandef,
 }
 EXPORT_SYMBOL(ieee80211_chandef_to_operating_class);
 
+static int cfg80211_wdev_bi(struct wireless_dev *wdev)
+{
+	switch (wdev->iftype) {
+	case NL80211_IFTYPE_AP:
+	case NL80211_IFTYPE_P2P_GO:
+		WARN_ON(wdev->valid_links);
+		return wdev->links[0].ap.beacon_interval;
+	case NL80211_IFTYPE_MESH_POINT:
+		return wdev->u.mesh.beacon_interval;
+	case NL80211_IFTYPE_ADHOC:
+		return wdev->u.ibss.beacon_interval;
+	default:
+		break;
+	}
+
+	return 0;
+}
+
 static void cfg80211_calculate_bi_data(struct wiphy *wiphy, u32 new_beacon_int,
 				       u32 *beacon_int_gcd,
 				       bool *beacon_int_different)
@@ -1940,19 +1962,27 @@ static void cfg80211_calculate_bi_data(struct wiphy *wiphy, u32 new_beacon_int,
 	*beacon_int_different = false;
 
 	list_for_each_entry(wdev, &wiphy->wdev_list, list) {
-		if (!wdev->beacon_interval)
+		int wdev_bi;
+
+		/* this feature isn't supported with MLO */
+		if (wdev->valid_links)
+			continue;
+
+		wdev_bi = cfg80211_wdev_bi(wdev);
+
+		if (!wdev_bi)
 			continue;
 
 		if (!*beacon_int_gcd) {
-			*beacon_int_gcd = wdev->beacon_interval;
+			*beacon_int_gcd = wdev_bi;
 			continue;
 		}
 
-		if (wdev->beacon_interval == *beacon_int_gcd)
+		if (wdev_bi == *beacon_int_gcd)
 			continue;
 
 		*beacon_int_different = true;
-		*beacon_int_gcd = gcd(*beacon_int_gcd, wdev->beacon_interval);
+		*beacon_int_gcd = gcd(*beacon_int_gcd, wdev_bi);
 	}
 
 	if (new_beacon_int && *beacon_int_gcd != new_beacon_int) {
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c
index a32065d600a1..a9767bfe7330 100644
--- a/net/wireless/wext-compat.c
+++ b/net/wireless/wext-compat.c
@@ -7,7 +7,7 @@
  * we directly assign the wireless handlers of wireless interfaces.
  *
  * Copyright 2008-2009	Johannes Berg <johannes@sipsolutions.net>
- * Copyright (C) 2019-2021 Intel Corporation
+ * Copyright (C) 2019-2022 Intel Corporation
  */
 
 #include <linux/export.h>
@@ -415,6 +415,9 @@ static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev,
 	int err, i;
 	bool rejoin = false;
 
+	if (wdev->valid_links)
+		return -EINVAL;
+
 	if (pairwise && !addr)
 		return -EINVAL;
 
@@ -437,7 +440,7 @@ static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev,
 		return -EOPNOTSUPP;
 
 	if (params->cipher == WLAN_CIPHER_SUITE_AES_CMAC) {
-		if (!wdev->current_bss)
+		if (!wdev->connected)
 			return -ENOLINK;
 
 		if (!rdev->ops->set_default_mgmt_key)
@@ -450,7 +453,9 @@ static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev,
 
 	if (remove) {
 		err = 0;
-		if (wdev->current_bss) {
+		if (wdev->connected ||
+		    (wdev->iftype == NL80211_IFTYPE_ADHOC &&
+		     wdev->u.ibss.current_bss)) {
 			/*
 			 * If removing the current TX key, we will need to
 			 * join a new IBSS without the privacy bit clear.
@@ -501,7 +506,9 @@ static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev,
 		return -EINVAL;
 
 	err = 0;
-	if (wdev->current_bss)
+	if (wdev->connected ||
+	    (wdev->iftype == NL80211_IFTYPE_ADHOC &&
+	     wdev->u.ibss.current_bss))
 		err = rdev_add_key(rdev, dev, idx, pairwise, addr, params);
 	else if (params->cipher != WLAN_CIPHER_SUITE_WEP40 &&
 		 params->cipher != WLAN_CIPHER_SUITE_WEP104)
@@ -526,7 +533,9 @@ static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev,
 	if ((params->cipher == WLAN_CIPHER_SUITE_WEP40 ||
 	     params->cipher == WLAN_CIPHER_SUITE_WEP104) &&
 	    (tx_key || (!addr && wdev->wext.default_key == -1))) {
-		if (wdev->current_bss) {
+		if (wdev->connected ||
+		    (wdev->iftype == NL80211_IFTYPE_ADHOC &&
+		     wdev->u.ibss.current_bss)) {
 			/*
 			 * If we are getting a new TX key from not having
 			 * had one before we need to join a new IBSS with
@@ -549,7 +558,9 @@ static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev,
 
 	if (params->cipher == WLAN_CIPHER_SUITE_AES_CMAC &&
 	    (tx_key || (!addr && wdev->wext.default_mgmt_key == -1))) {
-		if (wdev->current_bss)
+		if (wdev->connected ||
+		    (wdev->iftype == NL80211_IFTYPE_ADHOC &&
+		     wdev->u.ibss.current_bss))
 			err = rdev_set_default_mgmt_key(rdev, dev, idx);
 		if (!err)
 			wdev->wext.default_mgmt_key = idx;
@@ -595,6 +606,11 @@ static int cfg80211_wext_siwencode(struct net_device *dev,
 		return -EOPNOTSUPP;
 
 	wiphy_lock(&rdev->wiphy);
+	if (wdev->valid_links) {
+		err = -EOPNOTSUPP;
+		goto out;
+	}
+
 	idx = erq->flags & IW_ENCODE_INDEX;
 	if (idx == 0) {
 		idx = wdev->wext.default_key;
@@ -613,7 +629,9 @@ static int cfg80211_wext_siwencode(struct net_device *dev,
 		/* No key data - just set the default TX key index */
 		err = 0;
 		wdev_lock(wdev);
-		if (wdev->current_bss)
+		if (wdev->connected ||
+		    (wdev->iftype == NL80211_IFTYPE_ADHOC &&
+		     wdev->u.ibss.current_bss))
 			err = rdev_set_default_key(rdev, dev, idx, true,
 						   true);
 		if (!err)
@@ -865,7 +883,7 @@ static int cfg80211_wext_giwfreq(struct net_device *dev,
 			break;
 		}
 
-		ret = rdev_get_channel(rdev, wdev, &chandef);
+		ret = rdev_get_channel(rdev, wdev, 0, &chandef);
 		if (ret)
 			break;
 		freq->m = chandef.chan->center_freq;
@@ -1270,7 +1288,10 @@ static int cfg80211_wext_siwrate(struct net_device *dev,
 		return -EINVAL;
 
 	wiphy_lock(&rdev->wiphy);
-	ret = rdev_set_bitrate_mask(rdev, dev, NULL, &mask);
+	if (dev->ieee80211_ptr->valid_links)
+		ret = -EOPNOTSUPP;
+	else
+		ret = rdev_set_bitrate_mask(rdev, dev, 0, NULL, &mask);
 	wiphy_unlock(&rdev->wiphy);
 
 	return ret;
@@ -1294,8 +1315,9 @@ static int cfg80211_wext_giwrate(struct net_device *dev,
 
 	err = 0;
 	wdev_lock(wdev);
-	if (wdev->current_bss)
-		memcpy(addr, wdev->current_bss->pub.bssid, ETH_ALEN);
+	if (!wdev->valid_links && wdev->links[0].client.current_bss)
+		memcpy(addr, wdev->links[0].client.current_bss->pub.bssid,
+		       ETH_ALEN);
 	else
 		err = -EOPNOTSUPP;
 	wdev_unlock(wdev);
@@ -1339,11 +1361,11 @@ static struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev)
 
 	/* Grab BSSID of current BSS, if any */
 	wdev_lock(wdev);
-	if (!wdev->current_bss) {
+	if (wdev->valid_links || !wdev->links[0].client.current_bss) {
 		wdev_unlock(wdev);
 		return NULL;
 	}
-	memcpy(bssid, wdev->current_bss->pub.bssid, ETH_ALEN);
+	memcpy(bssid, wdev->links[0].client.current_bss->pub.bssid, ETH_ALEN);
 	wdev_unlock(wdev);
 
 	memset(&sinfo, 0, sizeof(sinfo));
diff --git a/net/wireless/wext-sme.c b/net/wireless/wext-sme.c
index cd09a9042261..68f45afc352d 100644
--- a/net/wireless/wext-sme.c
+++ b/net/wireless/wext-sme.c
@@ -3,7 +3,7 @@
  * cfg80211 wext compat for managed mode.
  *
  * Copyright 2009	Johannes Berg <johannes@sipsolutions.net>
- * Copyright (C) 2009, 2020-2021 Intel Corporation.
+ * Copyright (C) 2009, 2020-2022 Intel Corporation
  */
 
 #include <linux/export.h>
@@ -124,9 +124,12 @@ int cfg80211_mgd_wext_giwfreq(struct net_device *dev,
 	if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION))
 		return -EINVAL;
 
+	if (wdev->valid_links)
+		return -EOPNOTSUPP;
+
 	wdev_lock(wdev);
-	if (wdev->current_bss)
-		chan = wdev->current_bss->pub.channel;
+	if (wdev->links[0].client.current_bss)
+		chan = wdev->links[0].client.current_bss->pub.channel;
 	else if (wdev->wext.connect.channel)
 		chan = wdev->wext.connect.channel;
 	wdev_unlock(wdev);
@@ -208,15 +211,19 @@ int cfg80211_mgd_wext_giwessid(struct net_device *dev,
 	if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION))
 		return -EINVAL;
 
+	if (wdev->valid_links)
+		return -EINVAL;
+
 	data->flags = 0;
 
 	wdev_lock(wdev);
-	if (wdev->current_bss) {
+	if (wdev->links[0].client.current_bss) {
 		const struct element *ssid_elem;
 
 		rcu_read_lock();
-		ssid_elem = ieee80211_bss_get_elem(&wdev->current_bss->pub,
-						   WLAN_EID_SSID);
+		ssid_elem = ieee80211_bss_get_elem(
+				&wdev->links[0].client.current_bss->pub,
+				WLAN_EID_SSID);
 		if (ssid_elem) {
 			data->flags = 1;
 			data->length = ssid_elem->datalen;
@@ -300,8 +307,14 @@ int cfg80211_mgd_wext_giwap(struct net_device *dev,
 	ap_addr->sa_family = ARPHRD_ETHER;
 
 	wdev_lock(wdev);
-	if (wdev->current_bss)
-		memcpy(ap_addr->sa_data, wdev->current_bss->pub.bssid, ETH_ALEN);
+	if (wdev->valid_links) {
+		wdev_unlock(wdev);
+		return -EOPNOTSUPP;
+	}
+	if (wdev->links[0].client.current_bss)
+		memcpy(ap_addr->sa_data,
+		       wdev->links[0].client.current_bss->pub.bssid,
+		       ETH_ALEN);
 	else
 		eth_zero_addr(ap_addr->sa_data);
 	wdev_unlock(wdev);
-- 
2.35.1




  parent reply	other threads:[~2022-08-15 23:49 UTC|newest]

Thread overview: 1184+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-15 17:49 [PATCH 5.19 0000/1157] 5.19.2-rc1 review Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0001/1157] Makefile: link with -z noexecstack --no-warn-rwx-segments Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0002/1157] x86: link vdso and boot " Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0003/1157] Revert "pNFS: nfs3_set_ds_client should set NFS_CS_NOPING" Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0004/1157] scsi: Revert "scsi: qla2xxx: Fix disk failure to rediscover" Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0005/1157] pNFS/flexfiles: Report RDMA connection errors to the server Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0006/1157] nfsd: eliminate the NFSD_FILE_BREAK_* flags Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0007/1157] ALSA: usb-audio: Add quirk for Behringer UMC202HD Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0008/1157] ALSA: bcd2000: Fix a UAF bug on the error path of probing Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0009/1157] ALSA: hda/realtek: Add quirk for Clevo NV45PZ Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0010/1157] ALSA: hda/realtek: Add quirk for HP Spectre x360 15-eb0xxx Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0011/1157] ALSA: hda/realtek: Add quirk for Lenovo Yoga9 14IAP7 Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0012/1157] ASoC: amd: yc: Update DMI table entries Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0013/1157] hwmon: (nct6775) Fix platform driver suspend regression Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0014/1157] wifi: mac80211_hwsim: fix race condition in pending packet Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0015/1157] wifi: mac80211_hwsim: add back erroneously removed cast Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0016/1157] wifi: mac80211_hwsim: use 32-bit skb cookie Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0017/1157] add barriers to buffer_uptodate and set_buffer_uptodate Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0018/1157] lockd: detect and reject lock arguments that overflow Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0019/1157] HID: hid-input: add Surface Go battery quirk Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0022/1157] HID: wacom: Dont register pad_input for touch switch Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0023/1157] KVM: nVMX: Snapshot pre-VM-Enter BNDCFGS for !nested_run_pending case Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0024/1157] KVM: nVMX: Snapshot pre-VM-Enter DEBUGCTL " Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0025/1157] KVM: SVM: Dont BUG if userspace injects an interrupt with GIF=0 Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0026/1157] KVM: s390: pv: dont present the ecall interrupt twice Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0027/1157] KVM: Drop unused @gpa param from gfn=>pfn caches __release_gpc() helper Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0028/1157] KVM: Put the extra pfn reference when reusing a pfn in the gpc cache Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0029/1157] KVM: Fully serialize gfn=>pfn cache refresh via mutex Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0030/1157] KVM: Fix multiple races in gfn=>pfn cache refresh Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0031/1157] KVM: Do not incorporate page offset into gfn=>pfn cache user address Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0032/1157] KVM: x86: Split kvm_is_valid_cr4() and export only the non-vendor bits Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0033/1157] KVM: nVMX: Let userspace set nVMX MSR to any _host_ supported value Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0034/1157] KVM: nVMX: Account for KVM reserved CR4 bits in consistency checks Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0035/1157] KVM: nVMX: Inject #UD if VMXON is attempted with incompatible CR0/CR4 Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0036/1157] KVM: x86: Mark TSS busy during LTR emulation _after_ all fault checks Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0037/1157] KVM: x86: Set error code to segment selector on LLDT/LTR non-canonical #GP Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0038/1157] KVM: x86/mmu: Treat NX as a valid SPTE bit for NPT Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0039/1157] KVM: SVM: Disable SEV-ES support if MMIO caching is disable Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0040/1157] KVM: x86: Tag kvm_mmu_x86_module_init() with __init Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0041/1157] KVM: x86/mmu: Fully re-evaluate MMIO caching when SPTE masks change Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0042/1157] KVM: x86: do not report preemption if the steal time cache is stale Greg Kroah-Hartman
2022-08-15 17:49 ` [PATCH 5.19 0043/1157] KVM: x86: revalidate steal time cache if MSR value changes Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0044/1157] KVM: x86/xen: Initialize Xen timer only once Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0045/1157] KVM: x86/xen: Stop Xen timer before changing IRQ Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0046/1157] ALSA: hda/conexant: Add quirk for LENOVO 20149 Notebook model Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0047/1157] ALSA: hda/cirrus - support for iMac 12,1 model Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0048/1157] ALSA: hda/realtek: Add quirk for another Asus K42JZ model Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0049/1157] ALSA: hda/realtek: Add a quirk for HP OMEN 15 (8786) mute LED Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0050/1157] LoongArch: cpuinfo: Fix a warning for CONFIG_CPUMASK_OFFSTACK Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0051/1157] tty: 8250: Add support for Brainboxes PX cards Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0052/1157] tty: vt: initialize unicode screen buffer Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0053/1157] vfs: Check the truncate maximum size in inode_newsize_ok() Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0054/1157] fs: Add missing umask strip in vfs_tmpfile Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0055/1157] thermal: sysfs: Fix cooling_device_stats_setup() error code path Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0056/1157] fbcon: Fix boundary checks for fbcon=vc:n1-n2 parameters Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0057/1157] fbcon: Fix accelerated fbdev scrolling while logo is still shown Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0058/1157] usbnet: Fix linkwatch use-after-free on disconnect Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0059/1157] usbnet: smsc95xx: Fix deadlock on runtime resume Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0060/1157] fix short copy handling in copy_mc_pipe_to_iter() Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0061/1157] crypto: ccp - Use kzalloc for sev ioctl interfaces to prevent kernel memory leak Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0062/1157] ovl: drop WARN_ON() dentry is NULL in ovl_encode_fh() Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0063/1157] parisc: Fix device names in /proc/iomem Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0064/1157] parisc: Drop pa_swapper_pg_lock spinlock Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0065/1157] parisc: Check the return value of ioremap() in lba_driver_probe() Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0066/1157] parisc: io_pgetevents_time64() needs compat syscall in 32-bit compat mode Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0067/1157] riscv:uprobe fix SR_SPIE set/clear handling Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0068/1157] riscv: lib: uaccess: fix CSR_STATUS SR_SUM bit Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0069/1157] dt-bindings: riscv: fix SiFive l2-caches cache-sets Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0070/1157] riscv: dts: starfive: correct number of external interrupts Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0071/1157] RISC-V: cpu_ops_spinwait.c should include head.h Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0072/1157] RISC-V: Declare cpu_ops_spinwait in <asm/cpu_ops.h> Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0073/1157] RISC-V: kexec: Fixup use of smp_processor_id() in preemptible context Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0074/1157] RISC-V: Fixup get incorrect user mode PC for kernel mode regs Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0075/1157] RISC-V: Fixup schedule out issue in machine_crash_shutdown() Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0076/1157] RISC-V: Add modules to virtual kernel memory layout dump Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0077/1157] RISC-V: Fix counter restart during overflow for RV32 Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0078/1157] RISC-V: Fix SBI PMU calls " Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0079/1157] RISC-V: Update user page mapping only once during start Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0080/1157] wireguard: selftests: set CONFIG_NONPORTABLE on riscv32 Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0081/1157] rtc: rx8025: fix 12/24 hour mode detection on RX-8035 Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0082/1157] drm/gem: Properly annotate WW context on drm_gem_lock_reservations() error Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0083/1157] drm/shmem-helper: Add missing vunmap on error Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0084/1157] drm/vc4: hdmi: Disable audio if dmas property is present but empty Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0085/1157] drm/ingenic: Use the highest possible DMA burst size Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0086/1157] drm/fb-helper: Fix out-of-bounds access Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0087/1157] drm/hyperv-drm: Include framebuffer and EDID headers Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0088/1157] drm/dp/mst: Read the extended DPCD capabilities during system resume Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0089/1157] drm/nouveau: fix another off-by-one in nvbios_addr Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0090/1157] drm/nouveau: Dont pm_runtime_put_sync(), only pm_runtime_put_autosuspend() Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0091/1157] drm/nouveau/acpi: Dont print error when we get -EINPROGRESS from pm_runtime Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0092/1157] drm/nouveau/kms: Fix failure path for creating DP connectors Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0093/1157] drm/tegra: Fix vmapping of prime buffers Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0094/1157] drm/amdgpu: Check BOs requested pinning domains against its preferred_domains Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0095/1157] bpf: Fix KASAN use-after-free Read in compute_effective_progs Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0096/1157] btrfs: reject log replay if there is unsupported RO compat flag Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0097/1157] mtd: rawnand: arasan: Fix clock rate in NV-DDR Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0098/1157] mtd: rawnand: arasan: Update NAND bus clock instead of system clock Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0099/1157] um: Remove straying parenthesis Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0100/1157] um: seed rng using host OS rng Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0101/1157] iio: fix iio_format_avail_range() printing for none IIO_VAL_INT Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0102/1157] iio: light: isl29028: Fix the warning in isl29028_remove() Greg Kroah-Hartman
2022-08-15 17:50 ` [PATCH 5.19 0103/1157] scsi: lpfc: Remove extra atomic_inc on cmd_pending in queuecommand after VMID Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0104/1157] scsi: sg: Allow waiting for commands to complete on removed device Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0105/1157] scsi: qla2xxx: Fix incorrect display of max frame size Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0106/1157] scsi: qla2xxx: Zero undefined mailbox IN registers Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0107/1157] soundwire: qcom: Check device status before reading devid Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0108/1157] ksmbd: fix memory leak in smb2_handle_negotiate Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0109/1157] ksmbd: prevent out of bound read for SMB2_TREE_CONNNECT Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0110/1157] ksmbd: prevent out of bound read for SMB2_WRITE Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0111/1157] ksmbd: fix use-after-free bug in smb2_tree_disconect Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0112/1157] ksmbd: fix heap-based overflow in set_ntacl_dacl() Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0113/1157] fuse: limit nsec Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0114/1157] fuse: ioctl: translate ENOSYS Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0115/1157] fuse: write inode in fuse_release() Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0116/1157] fuse: fix deadlock between atomic O_TRUNC and page invalidation Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0117/1157] serial: mvebu-uart: uart2 error bits clearing Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0118/1157] md-raid: destroy the bitmap after destroying the thread Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0119/1157] md-raid10: fix KASAN warning Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0120/1157] mbcache: dont reclaim used entries Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0121/1157] mbcache: add functions to delete entry if unused Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0122/1157] media: isl7998x: select V4L2_FWNODE to fix build error Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0123/1157] media: [PATCH] pci: atomisp_cmd: fix three missing checks on list iterator Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0124/1157] ia64, processor: fix -Wincompatible-pointer-types in ia64_get_irr() Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0125/1157] powerpc: Restore CONFIG_DEBUG_INFO in defconfigs Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0126/1157] powerpc/64e: Fix early TLB miss with KUAP Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0127/1157] powerpc/fsl-pci: Fix Class Code of PCIe Root Port Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0128/1157] powerpc/ptdump: Fix display of RW pages on FSL_BOOK3E Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0129/1157] powerpc/powernv: Avoid crashing if rng is NULL Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0130/1157] MIPS: cpuinfo: Fix a warning for CONFIG_CPUMASK_OFFSTACK Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0131/1157] coresight: Clear the connection field properly Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0132/1157] usb: typec: ucsi: Acknowledge the GET_ERROR_STATUS command completion Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0133/1157] USB: HCD: Fix URB giveback issue in tasklet function Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0134/1157] Revert "net: usb: ax88179_178a needs FLAG_SEND_ZLP" Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0135/1157] ARM: dts: uniphier: Fix USB interrupts for PXs2 SoC Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0136/1157] arm64: dts: uniphier: Fix USB interrupts for PXs3 SoC Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0137/1157] USB: gadget: Fix use-after-free Read in usb_udc_uevent() Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0138/1157] usb: dwc3: gadget: refactor dwc3_repare_one_trb Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0139/1157] usb: dwc3: gadget: fix high speed multiplier setting Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0140/1157] netfilter: nf_tables: do not allow SET_ID to refer to another table Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0141/1157] netfilter: nf_tables: do not allow CHAIN_ID " Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0142/1157] netfilter: nf_tables: do not allow RULE_ID to refer to another chain Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0143/1157] netfilter: nf_tables: upfront validation of data via nft_data_init() Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0144/1157] netfilter: nf_tables: disallow jump to implicit chain from set element Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0145/1157] netfilter: nf_tables: fix null deref due to zeroed list head Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0146/1157] epoll: autoremove wakers even more aggressively Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0147/1157] x86: Handle idle=nomwait cmdline properly for x86_idle Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0148/1157] arch: make TRACE_IRQFLAGS_NMI_SUPPORT generic Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0149/1157] arm64: kasan: do not instrument stacktrace.c Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0150/1157] arm64: stacktrace: use non-atomic __set_bit Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0151/1157] arm64: Do not forget syscall when starting a new thread Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0152/1157] arm64: fix oops in concurrently setting insn_emulation sysctls Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0153/1157] arm64: kasan: Revert "arm64: mte: reset the page tag in page->flags" Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0154/1157] arm64: errata: Remove AES hwcap for COMPAT tasks Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0155/1157] ext2: Add more validity checks for inode counts Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0156/1157] sched/fair: Introduce SIS_UTIL to search idle CPU based on sum of util_avg Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0157/1157] genirq: Dont return error on missing optional irq_request_resources() Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0158/1157] irqchip/mips-gic: Only register IPI domain when SMP is enabled Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0159/1157] genirq: GENERIC_IRQ_IPI depends on SMP Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0160/1157] sched/fair: fix case with reduced capacity CPU Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0161/1157] sched/core: Always flush pending blk_plug Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0162/1157] irqchip/mips-gic: Check the return value of ioremap() in gic_of_init() Greg Kroah-Hartman
2022-08-15 17:51 ` [PATCH 5.19 0163/1157] ARM: dts: imx6ul: add missing properties for sram Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0164/1157] ARM: dts: imx6ul: change operating-points to uint32-matrix Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0165/1157] ARM: dts: imx6ul: fix keypad compatible Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0166/1157] ARM: dts: imx6ul: fix csi node compatible Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0167/1157] ARM: dts: imx6ul: fix lcdif " Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0168/1157] ARM: dts: imx6ul: fix qspi " Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0169/1157] ARM: dts: BCM5301X: Add DT for Meraki MR26 Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0170/1157] ARM: dts: ux500: Fix Janice accelerometer mounting matrix Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0171/1157] ARM: dts: ux500: Fix Codina " Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0172/1157] ARM: dts: ux500: Fix Gavini " Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0173/1157] arm64: dts: qcom: timer should use only 32-bit size Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0174/1157] spi: synquacer: Add missing clk_disable_unprepare() Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0175/1157] ARM: OMAP2+: display: Fix refcount leak bug Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0176/1157] ARM: OMAP2+: pdata-quirks: " Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0177/1157] ACPI: EC: Remove duplicate ThinkPad X1 Carbon 6th entry from DMI quirks Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0178/1157] ACPI: EC: Drop the EC_FLAGS_IGNORE_DSDT_GPE quirk Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0179/1157] ACPI: PM: save NVS memory for Lenovo G40-45 Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0180/1157] ACPI: LPSS: Fix missing check in register_device_clock() Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0181/1157] ARM: dts: qcom: sdx55: Fix the IRQ trigger type for UART Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0182/1157] arm64: dts: qcom: sc7280: Rename sar sensor labels Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0183/1157] arm64: dts: qcom: add missing AOSS QMP compatible fallback Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0184/1157] arm64: dts: qcom: ipq8074: fix NAND node name Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0185/1157] arm64: dts: allwinner: a64: orangepi-win: Fix LED " Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0186/1157] ARM: shmobile: rcar-gen2: Increase refcount for new reference Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0187/1157] firmware: tegra: Fix error check return value of debugfs_create_file() Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0188/1157] hwmon: (dell-smm) Add Dell XPS 13 7390 to fan control whitelist Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0189/1157] PM: EM: convert power field to micro-Watts precision and align drivers Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0190/1157] ACPI: video: Use native backlight on Dell Inspiron N4010 Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0191/1157] hwmon: (sht15) Fix wrong assumptions in device remove callback Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0192/1157] PM: hibernate: defer device probing when resuming from hibernation Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0193/1157] selinux: fix memleak in security_read_state_kernel() Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0194/1157] selinux: Add boundary check in put_entry() Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0195/1157] io_uring: fix io_uring_cqe_overflow trace format Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0196/1157] kasan: test: Silence GCC 12 warnings Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0197/1157] wait: Fix __wait_event_hrtimeout for RT/DL tasks Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0198/1157] meson-mx-socinfo: Fix refcount leak in meson_mx_socinfo_init Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0199/1157] arm64: dts: renesas: beacon: Fix regulator node names Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0200/1157] spi: spi-altera-dfl: Fix an error handling path Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0201/1157] ARM: bcm: Fix refcount leak in bcm_kona_smc_init Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0202/1157] ACPI: processor/idle: Annotate more functions to live in cpuidle section Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0203/1157] ARM: dts: imx7d-colibri-emmc: add cpu1 supply Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0204/1157] ARM: dts: imx7-colibri: overhaul display/touch functionality Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0205/1157] ARM: dts: imx7-colibri: add usb dual-role switching using extcon Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0206/1157] ARM: dts: imx7-colibri: improve wake-up with gpio key Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0207/1157] ARM: dts: imx7-colibri: move aliases, chosen, extcon and gpio-keys Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0208/1157] ARM: dts: imx7-colibri-eval-v3: correct can controller comment Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0209/1157] soc: renesas: r8a779a0-sysc: Fix A2DP1 and A2CV[2357] PDR values Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0210/1157] soc: amlogic: Fix refcount leak in meson-secure-pwrc.c Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0211/1157] arm64: dts: renesas: Fix thermal-sensors on single-zone sensors Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0212/1157] Revert "ARM: dts: imx6qdl-apalis: Avoid underscore in node name" Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0213/1157] x86/pmem: Fix platform-device leak in error path Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0214/1157] ARM: dts: ast2500-evb: fix board compatible Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0215/1157] ARM: dts: ast2600-evb: " Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0216/1157] ARM: dts: ast2600-evb-a1: " Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0217/1157] arm64: dts: mt8192: Fix idle-states nodes naming scheme Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0218/1157] arm64: dts: mt8192: Fix idle-states entry-method Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0219/1157] arm64: select TRACE_IRQFLAGS_NMI_SUPPORT Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0220/1157] arm64: cpufeature: Allow different PMU versions in ID_DFR0_EL1 Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0221/1157] locking/lockdep: Fix lockdep_init_map_*() confusion Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0222/1157] arm64: dts: qcom: sc7180: Remove ipa_fw_mem node on trogdor Greg Kroah-Hartman
2022-08-15 17:52 ` [PATCH 5.19 0223/1157] soc: fsl: guts: machine variable might be unset Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0224/1157] spi: s3c64xx: constify fsd_spi_port_config Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0225/1157] block: fix infinite loop for invalid zone append Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0226/1157] arm64: dts: qcom: sdm845-akatsuki: Round down l22a regulator voltage Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0227/1157] ARM: dts: qcom: mdm9615: add missing PMIC GPIO reg Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0228/1157] ARM: OMAP2+: Fix refcount leak in omapdss_init_of Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0229/1157] ARM: OMAP2+: Fix refcount leak in omap3xxx_prm_late_init Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0230/1157] arm64: dts: qcom: sdm630: disable GPU by default Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0231/1157] arm64: dts: qcom: sdm630: fix the qusb2phy ref clock Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0232/1157] arm64: dts: qcom: sdm630: fix gpus interconnect path Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0233/1157] arm64: dts: qcom: sdm636-sony-xperia-ganges-mermaid: correct sdc2 pinconf Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0234/1157] cpufreq: zynq: Fix refcount leak in zynq_get_revision Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0235/1157] arm64: dts: renesas: r8a779m8: Drop operating points above 1.5 GHz Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0236/1157] arm64: dts: renesas: r9a07g054l2-smarc: Correct SoC name in comment Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0237/1157] regulator: qcom_smd: Fix pm8916_pldo range Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0238/1157] ACPI: APEI: Fix _EINJ vs EFI_MEMORY_SP Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0239/1157] ARM: dts: qcom: replace gcc PXO with pxo_board fixed clock Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0240/1157] ARM: dts: qcom-msm8974: fix irq type on blsp2_uart1 Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0241/1157] soc: qcom: ocmem: Fix refcount leak in of_get_ocmem Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0242/1157] soc: qcom: aoss: Fix refcount leak in qmp_cooling_devices_register Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0243/1157] ARM: dts: qcom: msm8974: add required ranges to OCMEM Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0244/1157] ARM: dts: qcom: pm8841: add required thermal-sensor-cells Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0245/1157] bus: hisi_lpc: fix missing platform_device_put() in hisi_lpc_acpi_probe() Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0246/1157] usercopy: use unsigned long instead of uintptr_t Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0247/1157] lib: overflow: Do not define 64-bit tests on 32-bit Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0248/1157] stack: Declare {randomize_,}kstack_offset to fix Sparse warnings Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0249/1157] arm64: dts: qcom: msm8916: Fix typo in pronto remoteproc node Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0250/1157] arm64: dts: qcom: msm8994: add required ranges to OCMEM Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0251/1157] perf/x86/intel: Fix PEBS memory access info encoding for ADL Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0252/1157] perf/x86/intel: Fix PEBS data source " Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0253/1157] arm64: dts: exynosautov9: correct spi11 pin names Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0254/1157] ACPI: VIOT: Fix ACS setup Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0255/1157] m68k: virt: Fix missing platform_device_unregister() on error in virt_platform_init() Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0256/1157] arm64: dts: qcom: sm6125: Move sdc2 pinctrl from seine-pdx201 to sm6125 Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0257/1157] arm64: dts: qcom: sm6125: Append -state suffix to pinctrl nodes Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0258/1157] arm64: dts: qcom: msm8996: correct #clock-cells for QMP PHY nodes Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0259/1157] arm64: dts: qcom: sc7280: drop PCIe PHY clock index Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0260/1157] arm64: dts: qcom: sm8250: add missing PCIe PHY clock-cells Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0261/1157] arm64: dts: mt7622: fix BPI-R64 WPS button Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0262/1157] arm64: tegra: Mark BPMP channels as no-memory-wc Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0263/1157] arm64: tegra: Fix SDMMC1 CD on P2888 Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0264/1157] arm64: dts: qcom: sc7280: fix PCIe clock reference Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0265/1157] erofs: wake up all waiters after z_erofs_lzma_head ready Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0266/1157] erofs: avoid consecutive detection for Highmem memory Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0267/1157] spi: Return deferred probe error when controller isnt yet available Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0268/1157] blk-mq: dont create hctx debugfs dir until q->debugfs_dir is created Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0269/1157] spi: dw: Fix IP-core versions macro Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0270/1157] spi: Fix simplification of devm_spi_register_controller Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0271/1157] spi: tegra20-slink: fix UAF in tegra_slink_remove() Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0272/1157] hwmon: (sch56xx-common) Add DMI override table Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0273/1157] hwmon: (drivetemp) Add module alias Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0274/1157] blktrace: Trace remapped requests correctly Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0275/1157] PM: domains: Ensure genpd_debugfs_dir exists before remove Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0276/1157] dm writecache: return void from functions Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0277/1157] dm writecache: count number of blocks read, not number of read bios Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0278/1157] dm writecache: count number of blocks written, not number of write bios Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0279/1157] dm writecache: count number of blocks discarded, not number of discard bios Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0280/1157] regulator: of: Fix refcount leak bug in of_get_regulation_constraints() Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0281/1157] soc: qcom: Make QCOM_RPMPD depend on PM Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0282/1157] soc: qcom: socinfo: Fix the id of SA8540P SoC Greg Kroah-Hartman
2022-08-15 17:53 ` [PATCH 5.19 0283/1157] arm64: dts: qcom: msm8998: Make regulator voltages multiple of step-size Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0284/1157] arm64: dts: qcom: qcs404: Fix incorrect USB2 PHYs assignment Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0285/1157] ARM: dts: qcom: msm8974: Disable remoteprocs by default Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0286/1157] irqdomain: Report irq number for NOMAP domains Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0287/1157] perf: RISC-V: Add of_node_put() when breaking out of for_each_of_cpu_node() Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0288/1157] drivers/perf: arm_spe: Fix consistency of SYS_PMSCR_EL1.CX Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0289/1157] nohz/full, sched/rt: Fix missed tick-reenabling bug in dequeue_task_rt() Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0290/1157] sched: only perform capability check on privileged operation Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0291/1157] sched/numa: Initialise numa_migrate_retry Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0292/1157] x86/extable: Fix ex_handler_msr() print condition Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0293/1157] io_uring: move to separate directory Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0294/1157] io_uring: define a prep and issue handler for each opcode Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0295/1157] io_uring: Dont require reinitable percpu_ref Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0296/1157] selftests/seccomp: Fix compile warning when CC=clang Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0297/1157] thermal/tools/tmon: Include pthread and time headers in tmon.h Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0298/1157] tools/power turbostat: Fix file pointer leak Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0299/1157] dm: return early from dm_pr_call() if DM device is suspended Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0300/1157] pwm: sifive: Simplify offset calculation for PWMCMP registers Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0301/1157] pwm: sifive: Ensure the clk is enabled exactly once per running PWM Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0302/1157] pwm: sifive: Shut down hardware only after pwmchip_remove() completed Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0303/1157] pwm: lpc18xx: Fix period handling Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0304/1157] erofs: update ctx->pos for every emitted dirent Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0305/1157] dt-bindings: display: bridge: ldb: Fill in reg property Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0306/1157] drm/i915: remove unused GEM_DEBUG_DECL() and GEM_DEBUG_BUG_ON() Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0307/1157] drm/rockchip: vop2: unlock on error path in vop2_crtc_atomic_enable() Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0308/1157] drm: bridge: DRM_FSL_LDB should depend on ARCH_MXC Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0309/1157] drm/bridge: anx7625: Use DPI bus type Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0310/1157] drm/mgag200: Acquire I/O lock while reading EDID Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0311/1157] drm/meson: Fix refcount leak in meson_encoder_hdmi_init Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0312/1157] drm/dp: Export symbol / kerneldoc fixes for DP AUX bus Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0313/1157] drm/bridge: tc358767: Handle dsi_lanes == 0 as invalid Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0314/1157] drm/bridge: tc358767: Make sure Refclk clock are enabled Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0315/1157] ath10k: do not enforce interrupt trigger type Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0316/1157] ath11k: Fix warning on variable sar dereference before check Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0317/1157] ath11k: Init hw_params before setting up AHB resources Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0318/1157] drm/edid: reset display info in drm_add_edid_modes() for NULL edid Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0319/1157] drm/bridge: lt9611: Use both bits for HDMI sensing Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0320/1157] drm/st7735r: Fix module autoloading for Okaya RH128128T Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0321/1157] drm/panel: Fix build error when CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=y && CONFIG_DRM_DISPLAY_HELPER=m Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0322/1157] drm: bridge: adv7511: Move CEC definitions to adv7511_cec.c Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0323/1157] wifi: rtlwifi: fix error codes in rtl_debugfs_set_write_h2c() Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0324/1157] wifi: wilc1000: use correct sequence of RESET for chip Power-UP/Down Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0325/1157] ath11k: fix netdev open race Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0326/1157] ath11k: fix IRQ affinity warning on shutdown Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0327/1157] drm/mipi-dbi: align max_chunk to 2 in spi_transfer Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0328/1157] drm/ssd130x: Only define a SPI device ID table when built as a module Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0329/1157] selftests/bpf: Fix test_run logic in fexit_stress.c Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0330/1157] sample: bpf: xdp_router_ipv4: Allow the kernel to send arp requests Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0331/1157] selftests/bpf: Fix tc_redirect_dtime Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0332/1157] libbpf: Fix is_pow_of_2 Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0333/1157] ath11k: fix missing skb drop on htc_tx_completion error Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0334/1157] ath11k: Fix incorrect debug_mask mappings Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0335/1157] ath11k: Avoid REO CMD failed prints during firmware recovery Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0336/1157] drm/radeon: fix potential buffer overflow in ni_set_mc_special_registers() Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0337/1157] drm/mediatek: Modify dsi funcs to atomic operations Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0338/1157] drm/mediatek: Separate poweron/poweroff from enable/disable and define new funcs Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0339/1157] drm/mediatek: Add pull-down MIPI operation in mtk_dsi_poweroff function Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0340/1157] drm/meson: encoder_cvbs: Fix refcount leak in meson_encoder_cvbs_init Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0341/1157] drm/meson: encoder_hdmi: Fix refcount leak in meson_encoder_hdmi_init Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0342/1157] drm/bridge: lt9611uxc: Cancel only drivers work Greg Kroah-Hartman
2022-08-15 17:54 ` [PATCH 5.19 0343/1157] drm/amdgpu: fix scratch register access method in SRIOV Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0344/1157] drm/amdgpu/display: Prepare for new interfaces Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0345/1157] i2c: npcm: Remove own slave addresses 2:10 Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0346/1157] i2c: npcm: Correct slave role behavior Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0347/1157] i2c: mxs: Silence a clang warning Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0348/1157] virtio-gpu: fix a missing check to avoid NULL dereference Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0349/1157] drm/virtio: Fix NULL vs IS_ERR checking in virtio_gpu_object_shmem_init Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0350/1157] libbpf: Fix uprobe symbol file offset calculation logic Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0351/1157] drm: adv7511: override i2c address of cec before accessing it Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0352/1157] crypto: sun8i-ss - fix error codes in allocate_flows() Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0353/1157] crypto: sun8i-ss - Fix error codes for dma_mapping_error() Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0354/1157] crypto: sun8i-ss - fix a NULL vs IS_ERR() check in sun8i_ss_hashkey Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0355/1157] net: fix sk_wmem_schedule() and sk_rmem_schedule() errors Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0356/1157] can: netlink: allow configuring of fixed bit rates without need for do_set_bittiming callback Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0357/1157] drm/vkms: check plane_composer->map[0] before using it Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0358/1157] can: netlink: allow configuring of fixed data bit rates without need for do_set_data_bittiming callback Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0359/1157] drm/bridge: anx7625: Zero error variable when panel bridge not present Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0360/1157] drm/bridge: it6505: Add missing CRYPTO_HASH dependency Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0361/1157] i2c: Fix a potential use after free Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0362/1157] libbpf: Fix internal USDT address translation logic for shared libraries Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0363/1157] selftests/bpf: Dont force lld on non-x86 architectures Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0364/1157] tcp: fix possible freeze in tx path under memory pressure Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0365/1157] crypto: sun8i-ss - fix infinite loop in sun8i_ss_setup_ivs() Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0366/1157] net: ag71xx: fix discards const qualifier warning Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0367/1157] ping: convert to RCU lookups, get rid of rwlock Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0368/1157] raw: use more conventional iterators Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0369/1157] raw: convert raw sockets to RCU Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0370/1157] raw: Fix mixed declarations error in raw_icmp_error() Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0371/1157] media: atmel: atmel-sama7g5-isc: fix warning in configs without OF Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0372/1157] media: camss: csid: fix wrong size passed to devm_kmalloc_array() Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0373/1157] media: tw686x: Register the irq at the end of probe Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0374/1157] media: amphion: return error if format is unsupported by vpu Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0375/1157] media: Hantro: Correct G2 init qp field Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0376/1157] media: imx-jpeg: Correct some definition according specification Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0377/1157] media: imx-jpeg: Leave a blank space before the configuration data Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0378/1157] media: imx-jpeg: Align upwards buffer size Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0379/1157] media: imx-jpeg: Implement drain using v4l2-mem2mem helpers Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0380/1157] media: rcar-vin: Fix channel routing for Ebisu Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0381/1157] ath9k: fix use-after-free in ath9k_hif_usb_rx_cb Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0382/1157] wifi: mac80211: set STA deflink addresses Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0383/1157] wifi: iwlegacy: 4965: fix potential off-by-one overflow in il4965_rs_fill_link_cmd() Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0384/1157] wifi: rtw89: 8852a: rfk: fix div 0 exception Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0385/1157] drm/radeon: fix incorrrect SPDX-License-Identifiers Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0386/1157] drm/amd: Dont show warning on reading vbios values for SMU13 3.1 Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0387/1157] drm/amdkfd: correct sdma queue number of sdma 6.0.1 Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0388/1157] torture: Adjust to again produce debugging information Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0389/1157] rcutorture: Fix ksoftirqd boosting timing and iteration Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0390/1157] test_bpf: fix incorrect netdev features Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0391/1157] drm/display: Fix build error without CONFIG_OF Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0392/1157] selftests/bpf: Fix rare segfault in sock_fields prog test Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0393/1157] crypto: ccp - During shutdown, check SEV data pointer before using Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0394/1157] drm: bridge: adv7511: Add check for mipi_dsi_driver_register Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0395/1157] media: imx-jpeg: Disable slot interrupt when frame done Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0396/1157] media: amphion: output firmware error message Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0397/1157] drm/mcde: Fix refcount leak in mcde_dsi_bind Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0398/1157] media: hdpvr: fix error value returns in hdpvr_read Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0399/1157] media: v4l2-mem2mem: prevent pollerr when last_buffer_dequeued is set Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0400/1157] media: sta2x11: remove VIRT_TO_BUS dependency Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0401/1157] media: mediatek: vcodec: Initialize decoder parameters after getting dec_capability Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0402/1157] media: mediatek: vcodec: Skip SOURCE_CHANGE & EOS events for stateless Greg Kroah-Hartman
2022-08-15 17:55 ` [PATCH 5.19 0403/1157] media: driver/nxp/imx-jpeg: fix a unexpected return value problem Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0404/1157] media: tw686x: Fix memory leak in tw686x_video_init Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0405/1157] media: mediatek: vcodec: Fix non subdev architecture open power fail Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0406/1157] drm/vc4: kms: Use maximum FIFO load for the HVS clock rate Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0407/1157] drm/vc4: plane: Remove subpixel positioning check Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0408/1157] drm/vc4: plane: Fix margin calculations for the right/bottom edges Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0409/1157] drm/vc4: dsi: Release workaround buffer and DMA Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0410/1157] drm/vc4: dsi: Correct DSI divider calculations Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0411/1157] drm/vc4: dsi: Correct pixel order for DSI0 Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0412/1157] drm/vc4: dsi: Register dsi0 as the correct vc4 encoder type Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0413/1157] drm/vc4: dsi: Fix dsi0 interrupt support Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0414/1157] drm/vc4: dsi: Add correct stop condition to vc4_dsi_encoder_disable iteration Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0415/1157] drm/vc4: hdmi: Add all the vc5 HDMI registers into the debugfs dumps Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0416/1157] drm/vc4: hdmi: Clear unused infoframe packet RAM registers Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0417/1157] drm/vc4: hdmi: Avoid full hdmi audio fifo writes Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0418/1157] drm/vc4: hdmi: Reset HDMI MISC_CONTROL register Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0419/1157] drm/vc4: hdmi: Switch to pm_runtime_status_suspended Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0420/1157] drm/vc4: hdmi: Move HDMI reset to pm_resume Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0421/1157] drm/vc4: hdmi: Fix timings for interlaced modes Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0422/1157] drm/vc4: hdmi: Force modeset when bpc or format changes Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0423/1157] drm/vc4: hdmi: Correct HDMI timing registers for interlaced modes Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0424/1157] drm/vc4: hdmi: Move pixel doubling from Pixelvalve to HDMI block Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0425/1157] mm: Account dirty folios properly during splits Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0426/1157] crypto: arm64/gcm - Select AEAD for GHASH_ARM64_CE Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0427/1157] selftests/xsk: Destroy BPF resources only when ctx refcount drops to 0 Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0428/1157] net: dsa: felix: update base time of time-aware shaper when adjusting PTP time Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0429/1157] net: dsa: felix: keep reference on entire tc-taprio config Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0430/1157] net: dsa: felix: drop oversized frames with tc-taprio instead of hanging the port Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0431/1157] selftests: net: fib_rule_tests: fix support for running individual tests Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0432/1157] drm/rockchip: vop: Dont crash for invalid duplicate_state() Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0433/1157] drm/rockchip: Fix an error handling path rockchip_dp_probe() Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0434/1157] drm/mediatek: dpi: Remove output format of YUV Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0435/1157] drm/mediatek: dpi: Only enable dpi after the bridge is enabled Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0436/1157] drm/msm/dpu: move intf and wb assignment to dpu_encoder_setup_display() Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0437/1157] drm/msm/dpu: fix maxlinewidth for writeback block Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0438/1157] drm/msm/dpu: remove hard-coded linewidth limit for writeback Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0439/1157] drm/msm/hdmi: fill the pwr_regs bulk regulators Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0440/1157] drm: bridge: sii8620: fix possible off-by-one Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0441/1157] drm/msm: Fix fence rollover issue Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0442/1157] net: sched: provide shim definitions for taprio_offload_{get,free} Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0443/1157] net: dsa: felix: build as module when tc-taprio is module Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0444/1157] hinic: Use the bitmap API when applicable Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0445/1157] net: hinic: fix bug that ethtool get wrong stats Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0446/1157] net: hinic: avoid kernel hung in hinic_get_stats64() Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0447/1157] drm/bridge: anx7625: Fix NULL pointer crash when using edp-panel Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0448/1157] drm/msm: Avoid unclocked GMU register access in 6xx gpu_busy Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0449/1157] libbpf, riscv: Use a0 for RC register Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0450/1157] drm/msm/mdp5: Fix global state lock backoff Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0451/1157] drm/radeon: avoid bogus "vram limit (0) must be a power of 2" warning Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0452/1157] crypto: hisilicon/sec - dont sleep when in softirq Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0453/1157] crypto: hisilicon - Kunpeng916 crypto driver " Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0454/1157] media: platform: mtk-mdp: Fix mdp_ipi_comm structure alignment Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0455/1157] media: amphion: release core lock before reset vpu core Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0456/1157] drm/msm/dpu: Fix for non-visible planes Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0457/1157] media: atomisp: revert "dont pass a pointer to a local variable" Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0458/1157] media: mediatek: vcodec: decoder: Fix 4K frame size enumeration Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0459/1157] media: mediatek: vcodec: decoder: Fix resolution clamping in TRY_FMT Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0460/1157] media: mediatek: vcodec: decoder: Skip alignment for default resolution Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0461/1157] media: mediatek: vcodec: decoder: Drop max_{width,height} from mtk_vcodec_ctx Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0462/1157] media: mediatek: vcodec: Initialize decoder parameters for each instance Greg Kroah-Hartman
2022-08-15 17:56 ` [PATCH 5.19 0463/1157] media: amphion: defer setting last_buffer_dequeued until resolution changes are processed Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0464/1157] media: hantro: Be more accurate on pixel formats step_width constraints Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0465/1157] media: hantro: Fix RK3399 H.264 format advertising Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0466/1157] media: amphion: sync buffer status with firmware during abort Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0467/1157] media: amphion: only insert the first sequence startcode for vc1l format Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0468/1157] mt76: mt7915: fix endianness in mt7915_rf_regval_get Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0469/1157] mt76: mt76x02u: fix possible memory leak in __mt76x02u_mcu_send_msg Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0470/1157] mt76: mt7915: fix endian bug in mt7915_rf_regval_set() Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0471/1157] mt76: mt7921s: fix firmware download random fail Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0472/1157] mt76: mt7921: not support beacon offload disable command Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0473/1157] wifi: mac80211: reject WEP or pairwise keys with key ID > 3 Greg Kroah-Hartman
2022-08-15 17:57 ` Greg Kroah-Hartman [this message]
2022-08-15 17:57 ` [PATCH 5.19 0475/1157] wifi: mac80211: move some future per-link data to bss_conf Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0476/1157] mt76: mt7615: do not update pm stats in case of error Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0477/1157] mt76: mt7921: do not update pm states " Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0478/1157] mt76: mt7921s: fix possible sdio deadlock in command fail Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0479/1157] mt76: mt7921: fix aggregation subframes setting to HE max Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0480/1157] mt76: mt7921: enlarge maximum VHT MPDU length to 11454 Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0481/1157] mt76: mt7921: rely on mt76_dev in mt7921_mac_write_txwi signature Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0482/1157] mt76: mt7915: rely on mt76_dev in mt7915_mac_write_txwi signature Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0483/1157] mt76: connac: move mac connac2 defs in mt76_connac2_mac.h Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0484/1157] mt76: connac: move connac2_mac_write_txwi in mt76_connac module Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0485/1157] mt76: mt7915: fix incorrect testmode ipg on band 1 caused by wmm_idx Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0486/1157] mt76: mt7615: fix throughput regression on DFS channels Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0487/1157] mediatek: mt76: mac80211: Fix missing of_node_put() in mt76_led_init() Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0488/1157] mediatek: mt76: eeprom: fix missing of_node_put() in mt76_find_power_limits_node() Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0489/1157] skmsg: Fix invalid last sg check in sk_msg_recvmsg() Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0490/1157] drm/exynos/exynos7_drm_decon: free resources when clk_set_parent() failed Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0491/1157] bpf, x64: Add predicate for bpf2bpf with tailcalls support in JIT Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0492/1157] bpf, x86: fix freeing of not-finalized bpf_prog_pack Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0493/1157] tcp: make retransmitted SKB fit into the send window Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0494/1157] libbpf: Fix the name of a reused map Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0495/1157] kunit: executor: Fix a memory leak on failure in kunit_filter_tests Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0496/1157] selftests: timers: valid-adjtimex: build fix for newer toolchains Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0497/1157] selftests: timers: clocksource-switch: fix passing errors from child Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0498/1157] bpf: Fix subprog names in stack traces Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0499/1157] wifi: nl80211: acquire wdev mutex for dump_survey Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0500/1157] media: v4l: async: Also match secondary fwnode endpoints Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0501/1157] media: ov7251: add missing disable functions on error in ov7251_set_power_on() Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0502/1157] fs: check FMODE_LSEEK to control internal pipe splicing Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0503/1157] media: cedrus: h265: Fix flag name Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0504/1157] media: uapi: HEVC: Change pic_order_cnt definition in v4l2_hevc_dpb_entry Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0505/1157] media: cedrus: h265: Fix logic for not low delay flag Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0506/1157] wifi: wil6210: debugfs: fix info leak in wil_write_file_wmi() Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0507/1157] wifi: p54: Fix an error handling path in p54spi_probe() Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0508/1157] wifi: p54: add missing parentheses in p54_flush() Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0509/1157] drm/amdgpu: use the same HDP flush registers for all nbio 7.4.x Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0510/1157] drm/amdgpu: use the same HDP flush registers for all nbio 2.3.x Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0511/1157] drm/amdgpu: restore original stable pstate on ctx fini Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0512/1157] bpf: fix potential 32-bit overflow when accessing ARRAY map element Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0513/1157] libbpf: make RINGBUF map size adjustments more eagerly Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0514/1157] selftests/bpf: fix a test for snprintf() overflow Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0515/1157] libbpf: fix an snprintf() overflow check Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0516/1157] can: pch_can: do not report txerr and rxerr during bus-off Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0517/1157] can: rcar_can: " Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0518/1157] can: sja1000: " Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0519/1157] can: hi311x: " Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0520/1157] can: sun4i_can: " Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0521/1157] can: kvaser_usb_hydra: " Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0522/1157] can: kvaser_usb_leaf: " Greg Kroah-Hartman
2022-08-15 17:57 ` [PATCH 5.19 0523/1157] can: usb_8dev: " Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0524/1157] can: error: specify the values of data[5..7] of CAN error frames Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0525/1157] libbpf: Fix str_has_sfx()s return value Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0526/1157] can: pch_can: pch_can_error(): initialize errc before using it Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0527/1157] Bluetooth: hci_intel: Add check for platform_driver_register Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0528/1157] Bluetooth: When HCI work queue is drained, only queue chained work Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0529/1157] Bluetooth: mgmt: Fix refresh cached connection info Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0530/1157] Bluetooth: hci_sync: Fix resuming scan after suspend resume Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0531/1157] Bluetooth: hci_sync: Fix not updating privacy_mode Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0532/1157] Bluetooth: Add default wakeup callback for HCI UART driver Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0533/1157] i2c: cadence: Support PEC for SMBus block read Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0534/1157] i2c: qcom-geni: Use the correct return value Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0535/1157] btrfs: update stripe_sectors::uptodate in steal_rbio Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0536/1157] ip_tunnels: Add new flow flags field to ip_tunnel_key Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0537/1157] bpf: Set flow flag to allow any source IP in bpf_tunnel_key Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0538/1157] bpf: Fix bpf_xdp_pointer return pointer Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0539/1157] i2c: mux-gpmux: Add of_node_put() when breaking out of loop Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0540/1157] wifi: ath11k: Fix register write failure on QCN9074 Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0541/1157] wifi: wil6210: debugfs: fix uninitialized variable use in `wil_write_file_wmi()` Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0542/1157] wifi: iwlwifi: mvm: fix double list_add at iwl_mvm_mac_wake_tx_queue Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0543/1157] wifi: libertas: Fix possible refcount leak in if_usb_probe() Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0544/1157] media: cedrus: hevc: Add check for invalid timestamp Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0545/1157] hantro: Remove incorrect HEVC SPS validation Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0546/1157] drm/amd/display: fix signedness bug in execute_synaptics_rc_command() Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0547/1157] net/mlx5e: Remove WARN_ON when trying to offload an unsupported TLS cipher/version Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0548/1157] net/mlx5e: TC, Fix post_act to not match on in_port metadata Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0549/1157] net/mlx5e: Fix the value of MLX5E_MAX_RQ_NUM_MTTS Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0550/1157] net/mlx5e: xsk: Account for XSK RQ UMRs when calculating ICOSQ size Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0551/1157] net/mlx5e: Fix calculations related to max MPWQE size Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0552/1157] net/mlx5e: Modify slow path rules to go to slow fdb Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0553/1157] net/mlx5: Adjust log_max_qp to be 18 at most Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0554/1157] net/mlx5: DR, Fix SMFS steering info dump format Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0555/1157] net/mlx5: Fix driver use of uninitialized timeout Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0556/1157] ax25: fix incorrect dev_tracker usage Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0557/1157] crypto: hisilicon/hpre - dont use GFP_KERNEL to alloc mem during softirq Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0558/1157] crypto: inside-secure - Add missing MODULE_DEVICE_TABLE for of Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0559/1157] crypto: hisilicon/sec - fix auth key size error Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0560/1157] net: allow unbound socket for packets in VRF when tcp_l3mdev_accept set Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0561/1157] netdevsim: fib: Fix reference count leak on route deletion failure Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0562/1157] wifi: rtw88: check the return value of alloc_workqueue() Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0563/1157] iavf: Fix max_rate limiting Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0564/1157] iavf: Fix tc qdisc show listing too many queues Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0565/1157] netdevsim: Avoid allocation warnings triggered from user space Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0566/1157] net: rose: fix netdev reference changes Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0567/1157] net: ice: fix error NETIF_F_HW_VLAN_CTAG_FILTER check in ice_vsi_sync_fltr() Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0568/1157] net: ionic: fix error check for vlan flags in ionic_set_nic_features() Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0569/1157] dccp: put dccp_qpolicy_full() and dccp_qpolicy_push() in the same lock Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0570/1157] net: usb: make USB_RTL8153_ECM non user configurable Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0571/1157] net/mlx5e: xsk: Discard unaligned XSK frames on striding RQ Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0572/1157] wireguard: ratelimiter: use hrtimer in selftest Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0573/1157] wireguard: allowedips: dont corrupt stack when detecting overflow Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0574/1157] HID: amd_sfh: Dont show client init failed as error when discovery fails Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0575/1157] clk: renesas: r9a06g032: Fix UART clkgrp bitsel Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0576/1157] mtd: maps: Fix refcount leak in of_flash_probe_versatile Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0577/1157] mtd: maps: Fix refcount leak in ap_flash_init Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0578/1157] mtd: rawnand: meson: Fix a potential double free issue Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0579/1157] clk: renesas: rzg2l: Fix reset status function Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0580/1157] of: check previous kernels ima-kexec-buffer against memory bounds Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0581/1157] scsi: qla2xxx: edif: Reduce Initiator-Initiator thrashing Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0582/1157] scsi: qla2xxx: edif: bsg refactor Greg Kroah-Hartman
2022-08-15 17:58 ` [PATCH 5.19 0583/1157] scsi: qla2xxx: edif: Wait for app to ack on sess down Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0584/1157] scsi: qla2xxx: edif: Add bsg interface to read doorbell events Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0585/1157] scsi: qla2xxx: edif: Fix potential stuck session in sa update Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0586/1157] scsi: qla2xxx: edif: Synchronize NPIV deletion with authentication application Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0587/1157] scsi: qla2xxx: edif: Add retry for ELS passthrough Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0588/1157] scsi: qla2xxx: edif: Fix n2n discovery issue with secure target Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0589/1157] scsi: qla2xxx: edif: Fix n2n login retry for secure device Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0590/1157] KVM: SVM: Unwind "speculative" RIP advancement if INTn injection "fails" Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0591/1157] KVM: SVM: Stuff next_rip on emulated INT3 injection if NRIPS is supported Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0592/1157] KVM: x86/mmu: Drop RWX=0 SPTEs during ept_sync_page() Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0593/1157] phy: samsung: exynosautov9-ufs: correct TSRV register configurations Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0594/1157] PCI: microchip: Fix refcount leak in mc_pcie_init_irq_domains() Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0595/1157] PCI: tegra194: Fix PM error handling in tegra_pcie_config_ep() Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0596/1157] HID: cp2112: prevent a buffer overflow in cp2112_xfer() Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0597/1157] mtd: sm_ftl: Fix deadlock caused by cancel_work_sync in sm_release Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0598/1157] mtd: partitions: Fix refcount leak in parse_redboot_of Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0599/1157] mtd: parsers: ofpart: Fix refcount leak in bcm4908_partitions_fw_offset Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0600/1157] mtd: spear_smi: Dont skip cleanup after mtd_device_unregister() failed Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0601/1157] mtd: st_spi_fsm: Add a clk_disable_unprepare() in .probe()s error path Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0602/1157] mtd: spear_smi: Drop if with an always false condition Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0603/1157] mtd: st_spi_fsm: Warn about failure to unregister mtd device Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0604/1157] mtd: st_spi_fsm: Disable clock only after device was unregistered Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0605/1157] PCI: mediatek-gen3: Fix refcount leak in mtk_pcie_init_irq_domains() Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0606/1157] fpga: altera-pr-ip: fix unsigned comparison with less than zero Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0607/1157] usb: host: Fix refcount leak in ehci_hcd_ppc_of_probe Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0608/1157] usb: cdns3: fix random warning message when driver load Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0609/1157] usb: gadget: uvc: Fix comment blocks style Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0610/1157] usb: ohci-nxp: Fix refcount leak in ohci_hcd_nxp_probe Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0611/1157] usb: gadget: tegra-xudc: Fix error check in tegra_xudc_powerdomain_init() Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0612/1157] usbip: vudc: Dont enable IRQs prematurely Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0613/1157] usb: host: ohci-at91: add support to enter suspend using SMC Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0614/1157] usb: xhci: tegra: Fix error check Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0615/1157] dmaengine: dw: dmamux: Export the module device table Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0616/1157] dmaengine: dw: dmamux: Fix build without CONFIG_OF Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0617/1157] netfilter: xtables: Bring SPDX identifier back Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0618/1157] scsi: qla2xxx: edif: Send LOGO for unexpected IKE message Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0619/1157] scsi: qla2xxx: edif: Reduce disruption due to multiple app start Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0620/1157] scsi: qla2xxx: edif: Fix no login after " Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0621/1157] scsi: qla2xxx: edif: Tear down session if keys have been removed Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0622/1157] scsi: qla2xxx: edif: Fix session thrash Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0623/1157] scsi: qla2xxx: edif: Fix no logout on delete for N2N Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0624/1157] scsi: qla2xxx: edif: Reduce N2N thrashing at app_start time Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0625/1157] iio: accel: bma400: Fix the scale min and max macro values Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0626/1157] platform/chrome: cros_ec: Always expose last resume result Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0627/1157] iio: sx9324: Fix register field spelling Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0628/1157] iio: accel: bma400: Reordering of header files Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0629/1157] iio: accel: bma400: conversion to device-managed function Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0630/1157] iio: accel: bma400: Add triggered buffer support Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0631/1157] iio: core: Fix IIO_ALIGN and rename as it was not sufficiently large Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0632/1157] iio: accel: adxl313: Fix alignment for DMA safety Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0633/1157] iio: accel: adxl355: " Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0634/1157] iio: accel: adxl367: " Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0635/1157] iio: accel: bma220: " Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0636/1157] iio: accel: sca3000: " Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0637/1157] iio: accel: sca3300: " Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0638/1157] iio: adc: ad7266: " Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0639/1157] iio: adc: ad7280a: " Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0640/1157] iio: adc: ad7292: " Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0641/1157] iio: adc: ad7298: " Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0642/1157] iio: adc: ad7476: " Greg Kroah-Hartman
2022-08-15 17:59 ` [PATCH 5.19 0643/1157] iio: adc: ad7606: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0644/1157] iio: adc: ad7766: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0645/1157] iio: adc: ad7768-1: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0646/1157] iio: adc: ad7887: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0647/1157] iio: adc: ad7923: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0648/1157] iio: adc: ad7949: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0649/1157] iio: adc: hi8435: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0650/1157] iio: adc: ltc2496: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0651/1157] iio: adc: ltc2497: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0652/1157] iio: adc: max1027: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0653/1157] iio: adc: max11100: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0654/1157] iio: adc: max1118: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0655/1157] iio: adc: max1241: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0656/1157] iio: adc: mcp320x: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0657/1157] iio: adc: ti-adc0832: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0658/1157] iio: adc: ti-adc084s021: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0659/1157] iio: adc: ti-adc108s102: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0660/1157] iio: adc: ti-adc12138: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0661/1157] iio: adc: ti-adc128s052: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0662/1157] iio: adc: ti-adc161s626: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0663/1157] iio: adc: ti-ads124s08: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0664/1157] iio: adc: ti-ads131e08: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0665/1157] iio: adc: ti-ads7950: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0666/1157] iio: adc: ti-ads8344: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0667/1157] iio: adc: ti-ads8688: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0668/1157] iio: adc: ti-tlc4541: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0669/1157] iio: addac: ad74413r: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0670/1157] iio: amplifiers: ad8366: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0671/1157] iio: common: ssp: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0672/1157] iio: dac: ad5064: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0673/1157] iio: dac: ad5360: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0674/1157] iio: dac: ad5421: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0675/1157] iio: dac: ad5449: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0676/1157] iio: dac: ad5504: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0677/1157] iio: dac: ad5592r: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0678/1157] iio: dac: ad5686: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0679/1157] iio: dac: ad5755: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0680/1157] iio: dac: ad5761: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0681/1157] iio: dac: ad5764: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0682/1157] iio: dac: ad5766: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0683/1157] iio: dac: ad5770r: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0684/1157] iio: dac: ad5791: Fix alignment for DMA saftey Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0685/1157] iio: dac: ad7293: Fix alignment for DMA safety Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0686/1157] iio: dac: ad7303: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0687/1157] iio: dac: ad8801: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0688/1157] iio: dac: ltc2688: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0689/1157] iio: dac: mcp4922: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0690/1157] iio: dac: ti-dac082s085: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0691/1157] iio: dac: ti-dac5571: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0692/1157] iio: dac: ti-dac7311: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0693/1157] iio: dac: ti-dac7612: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0694/1157] iio: frequency: ad9523: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0695/1157] iio: frequency: adf4350: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0696/1157] iio: frequency: adf4371: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0697/1157] iio: frequency: admv1013: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0698/1157] iio: frequency: admv1014: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0699/1157] iio: frequency: admv4420: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0700/1157] iio: frequency: adrf6780: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0701/1157] iio: gyro: adis16080: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0702/1157] iio: gyro: adis16130: " Greg Kroah-Hartman
2022-08-15 18:00 ` [PATCH 5.19 0703/1157] iio: gyro: adxrs450: " Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0704/1157] iio: gyro: fxas210002c: " Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0705/1157] iio: imu: fxos8700: " Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0706/1157] iio: imu: inv_icm42600: " Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0707/1157] iio: imu: inv_icm42600: Fix alignment for DMA safety in buffer code Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0708/1157] iio: imu: mpu6050: Fix alignment for DMA safety Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0709/1157] iio: potentiometer: ad5110: " Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0710/1157] iio: potentiometer: ad5272: " Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0711/1157] iio: potentiometer: max5481: " Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0712/1157] iio: potentiometer: mcp41010: " Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0713/1157] iio: potentiometer: mcp4131: " Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0714/1157] iio: proximity: as3935: " Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0715/1157] iio: resolver: ad2s1200: " Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0716/1157] iio: resolver: ad2s90: " Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0717/1157] iio: temp: ltc2983: " Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0718/1157] iio: temp: max31865: " Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0719/1157] iio: temp: maxim_thermocouple: " Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0720/1157] clk: mediatek: reset: Fix written reset bit offset Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0721/1157] clk: imx93: use adc_root as the parent clock of adc1 Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0722/1157] clk: imx93: correct nic_media parent Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0723/1157] clk: imx: clk-fracn-gppll: fix mfd value Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0724/1157] clk: imx: clk-fracn-gppll: Return rate in rate table properly in ->recalc_rate() Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0725/1157] clk: imx: clk-fracn-gppll: correct rdiv Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0726/1157] RDMA/rxe: fix xa_alloc_cycle() error return value check again Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0727/1157] lib/test_hmm: avoid accessing uninitialized pages Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0728/1157] mm/memremap: fix memunmap_pages() race with get_dev_pagemap() Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0729/1157] KVM: Dont set Accessed/Dirty bits for ZERO_PAGE Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0730/1157] KVM: selftests: Convert s390x/diag318_test_handler away from VCPU_ID Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0731/1157] KVM: selftests: Use vm_create_with_vcpus() in max_guest_memory_test Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0732/1157] devcoredump: remove the useless gfp_t parameter in dev_coredumpv and dev_coredumpm Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0733/1157] mwifiex: fix sleep in atomic context bugs caused by dev_coredumpv Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0734/1157] scsi: iscsi: Allow iscsi_if_stop_conn() to be called from kernel Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0735/1157] scsi: iscsi: Add helper to remove a session from the kernel Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0736/1157] scsi: iscsi: Fix session removal on shutdown Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0737/1157] dmaengine: dw-edma: Fix eDMA Rd/Wr-channels and DMA-direction semantics Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0738/1157] KVM: x86: Fix errant brace in KVM capability handling Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0739/1157] mtd: hyperbus: rpc-if: Fix RPM imbalance in probe error path Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0740/1157] mtd: dataflash: Add SPI ID table Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0741/1157] clk: qcom: camcc-sm8250: Fix halt on boot by reducing drivers init level Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0742/1157] misc: rtsx: Fix an error handling path in rtsx_pci_probe() Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0743/1157] driver core: fix potential deadlock in __driver_attach Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0744/1157] clk: qcom: clk-krait: unlock spin after mux completion Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0745/1157] coresight: configfs: Fix unload of configurations on module exit Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0746/1157] coresight: syscfg: Update load and unload operations Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0747/1157] usb: gadget: f_mass_storage: Make CD-ROM emulation works with Windows OS Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0748/1157] clk: qcom: gcc-msm8939: Add missing SYSTEM_MM_NOC_BFDCD_CLK_SRC Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0749/1157] clk: qcom: gcc-msm8939: Fix bimc_ddr_clk_src rcgr base address Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0750/1157] clk: qcom: gcc-msm8939: Add missing system_mm_noc_bfdcd_clk_src Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0751/1157] clk: qcom: gcc-msm8939: Point MM peripherals to system_mm_noc clock Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0752/1157] usb: host: xhci: use snprintf() in xhci_decode_trb() Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0753/1157] RDMA/rxe: Add a responder state for atomic reply Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0754/1157] RDMA/rxe: Fix deadlock in rxe_do_local_ops() Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0755/1157] clk: qcom: ipq8074: fix NSS core PLL-s Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0756/1157] clk: qcom: ipq8074: SW workaround for UBI32 PLL lock Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0757/1157] clk: qcom: ipq8074: fix NSS port frequency tables Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0758/1157] clk: qcom: ipq8074: set BRANCH_HALT_DELAY flag for UBI clocks Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0759/1157] clk: qcom: camcc-sdm845: Fix topology around titan_top power domain Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0760/1157] clk: qcom: camcc-sm8250: " Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0761/1157] clk: qcom: clk-rcg2: Fail Duty-Cycle configuration if MND divider is not enabled Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0762/1157] clk: qcom: clk-rcg2: Make sure to not write d=0 to the NMD register Greg Kroah-Hartman
2022-08-15 18:01 ` [PATCH 5.19 0763/1157] kernfs: fix potential NULL dereference in __kernfs_remove Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0764/1157] mm: rmap: use the correct parameter name for DEFINE_PAGE_VMA_WALK Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0765/1157] mm/migration: return errno when isolate_huge_page failed Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0766/1157] mm/migration: fix potential pte_unmap on an not mapped pte Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0767/1157] kasan: fix zeroing vmalloc memory with HW_TAGS Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0768/1157] mm/mempolicy: fix get_nodes out of bound access Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0769/1157] phy: ti: tusb1210: Dont check for write errors when powering on Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0770/1157] phy: rockchip-inno-usb2: Sync initial otg state Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0771/1157] PCI: dwc: Stop link on host_init errors and de-initialization Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0772/1157] PCI: dwc: Add unroll iATU space support to dw_pcie_disable_atu() Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0773/1157] PCI: dwc: Disable outbound windows only for controllers using iATU Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0774/1157] PCI: dwc: Set INCREASE_REGION_SIZE flag based on limit address Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0775/1157] PCI: dwc: Deallocate EPC memory on dw_pcie_ep_init() errors Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0776/1157] PCI: dwc: Always enable CDM check if "snps,enable-cdm-check" exists Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0777/1157] soundwire: bus_type: fix remove and shutdown support Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0778/1157] soundwire: revisit driver bind/unbind and callbacks Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0779/1157] KVM: arm64: Dont return from void function Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0780/1157] dmaengine: sf-pdma: Add multithread support for a DMA channel Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0781/1157] PCI: endpoint: Dont stop controller when unbinding endpoint function Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0782/1157] phy: qcom-qmp: fix the QSERDES_V5_COM_CMN_MODE register Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0783/1157] scsi: qla2xxx: Check correct variable in qla24xx_async_gffid() Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0784/1157] scsi: sd: Rework asynchronous resume support Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0785/1157] scsi: lpfc: Revert RSCN_MEMENTO workaround for misbehaved configuration Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0786/1157] intel_th: Fix a resource leak in an error handling path Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0787/1157] intel_th: msu-sink: Potential dereference of null pointer Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0788/1157] intel_th: msu: Fix vmalloced buffers Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0789/1157] binder: fix redefinition of seq_file attributes Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0790/1157] staging: rtl8192u: Fix sleep in atomic context bug in dm_fsync_timer_callback Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0791/1157] rtla/utils: Use calloc and check the potential memory allocation failure Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0792/1157] habanalabs: fix double unlock on error in map_device_va() Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0793/1157] dt-bindings: mmc: sdhci-msm: Fix issues in yaml bindings Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0794/1157] mmc: sdhci-of-esdhc: Fix refcount leak in esdhc_signal_voltage_switch Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0795/1157] mmc: mxcmmc: Silence a clang warning Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0796/1157] mmc: renesas_sdhi: Get the reset handle early in the probe Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0797/1157] memstick/ms_block: Fix some incorrect memory allocation Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0798/1157] memstick/ms_block: Fix a memory leak Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0799/1157] mmc: sdhci-of-at91: fix set_uhs_signaling rewriting of MC1R Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0800/1157] of: device: Fix missing of_node_put() in of_dma_set_restricted_buffer Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0801/1157] mmc: block: Add single read for 4k sector cards Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0802/1157] KVM: s390: pv: leak the topmost page table when destroy fails Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0803/1157] PCI/portdrv: Dont disable AER reporting in get_port_device_capability() Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0804/1157] PCI: qcom: Set up rev 2.1.0 PARF_PHY before enabling clocks Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0805/1157] scsi: smartpqi: Fix DMA direction for RAID requests Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0806/1157] xtensa: iss/network: provide release() callback Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0807/1157] xtensa: iss: fix handling error cases in iss_net_configure() Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0808/1157] usb: gadget: udc: amd5536 depends on HAS_DMA Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0809/1157] usb: aspeed-vhub: Fix refcount leak bug in ast_vhub_init_desc() Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0810/1157] usb: dwc3: core: Deprecate GCTL.CORESOFTRESET Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0811/1157] usb: dwc3: core: Do not perform GCTL_CORE_SOFTRESET during bootup Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0812/1157] usb: dwc3: qcom: fix missing optional irq warnings Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0813/1157] eeprom: idt_89hpesx: uninitialized data in idt_dbgfs_csr_write() Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0814/1157] phy: stm32: fix error return in stm32_usbphyc_phy_init Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0815/1157] phy: rockchip-inno-usb2: Ignore OTG IRQs in host mode Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0816/1157] interconnect: imx: fix max_node_id Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0817/1157] KVM: arm64: Fix hypervisor address symbolization Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0818/1157] um: random: Dont initialise hwrng struct with zero Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0819/1157] mm: percpu: use kmemleak_ignore_phys() instead of kmemleak_free() Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0820/1157] RDMA/irdma: Fix a window for use-after-free Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0821/1157] RDMA/irdma: Fix VLAN connection with wildcard address Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0822/1157] RDMA/irdma: Fix setting of QP context err_rq_idx_valid field Greg Kroah-Hartman
2022-08-15 18:02 ` [PATCH 5.19 0823/1157] RDMA/rtrs-srv: Fix modinfo output for stringify Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0824/1157] RDMA/rtrs-clt: Replace list_next_or_null_rr_rcu with an inline function Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0825/1157] RDMA/qedr: Fix potential memory leak in __qedr_alloc_mr() Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0826/1157] RDMA/hns: Fix incorrect clearing of interrupt status register Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0827/1157] RDMA/siw: Fix duplicated reported IW_CM_EVENT_CONNECT_REPLY event Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0828/1157] RDMA/rxe: Fix BUG: KASAN: null-ptr-deref in rxe_qp_do_cleanup Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0829/1157] iio: cros: Register FIFO callback after sensor is registered Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0830/1157] clk: qcom: Drop mmcx gdsc supply for dispcc and videocc Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0831/1157] clk: qcom: gdsc: Bump parent usage count when GDSC is found enabled Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0832/1157] clk: qcom: gcc-msm8939: Fix weird field spacing in ftbl_gcc_camss_cci_clk Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0833/1157] RDMA/hfi1: fix potential memory leak in setup_base_ctxt() Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0834/1157] gpio: gpiolib-of: Fix refcount bugs in of_mm_gpiochip_add_data() Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0835/1157] iio: adc: max1027: unlock on error path in max1027_read_single_value() Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0836/1157] HID: mcp2221: prevent a buffer overflow in mcp_smbus_write() Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0837/1157] HID: amd_sfh: Add NULL check for hid device Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0838/1157] dmaengine: imx-dma: Cast of_device_get_match_data() with (uintptr_t) Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0839/1157] scripts/gdb: fix lx-dmesg on 32 bits arch Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0840/1157] RDMA/rxe: Fix mw bind to allow any consumer key portion Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0841/1157] mmc: core: quirks: Add of_node_put() when breaking out of loop Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0842/1157] mmc: cavium-octeon: " Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0843/1157] mmc: cavium-thunderx: " Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0844/1157] HID: alps: Declare U1_UNICORN_LEGACY support Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0845/1157] RDMA/rxe: For invalidate compare according to set keys in mr Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0846/1157] RDMA/rxe: Fix rnr retry behavior Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0847/1157] PCI: tegra194: Fix Root Port interrupt handling Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0848/1157] PCI: tegra194: Fix link up retry sequence Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0849/1157] HID: amd_sfh: Handle condition of "no sensors" Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0850/1157] USB: serial: fix tty-port initialized comments Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0851/1157] usb: xhci_plat_remove: avoid NULL dereference Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0852/1157] usb: cdns3: change place of priv_ep assignment in cdns3_gadget_ep_dequeue(), cdns3_gadget_ep_enable() Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0853/1157] mtd: spi-nor: fix spi_nor_spimem_setup_op() call in spi_nor_erase_{sector,chip}() Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0854/1157] staging: fbtft: core: set smem_len before fb_deferred_io_init call Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0855/1157] KVM: nVMX: Set UMIP bit CR4_FIXED1 MSR when emulating UMIP Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0856/1157] tools/power/x86/intel-speed-select: Fix off by one check Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0857/1157] platform/x86: pmc_atom: Match all Lex BayTrail boards with critclk_systems DMI table Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0858/1157] platform/mellanox: mlxreg-lc: Fix error flow and extend verbosity Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0859/1157] platform/olpc: Fix uninitialized data in debugfs write Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0860/1157] RDMA/srpt: Duplicate port name members Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0861/1157] RDMA/srpt: Introduce a reference count in struct srpt_device Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0862/1157] RDMA/srpt: Fix a use-after-free Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0863/1157] android: binder: stop saving a pointer to the VMA Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0864/1157] mm/mmap.c: fix missing call to vm_unacct_memory in mmap_region Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0865/1157] selftests/vm: fix errno handling in mrelease_test Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0866/1157] tools/testing/selftests/vm/hugetlb-madvise.c: silence uninitialized variable warning Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0867/1157] selftest/vm: uninitialized variable in main() Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0868/1157] rtla: Fix Makefile when called from -C tools/ Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0869/1157] rtla: Fix double free Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0870/1157] virtio: replace restricted mem access flag with callback Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0871/1157] xen: dont require virtio with grants for non-PV guests Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0872/1157] selftests: kvm: set rax before vmcall Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0873/1157] of/fdt: declared return type does not match actual return type Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0874/1157] RDMA/mlx5: Add missing check for return value in get namespace flow Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0875/1157] RDMA/rxe: Fix error unwind in rxe_create_qp() Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0876/1157] block/rnbd-srv: Set keep_id to true after mutex_trylock Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0877/1157] null_blk: fix ida error handling in null_add_dev() Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0878/1157] nbd: add missing definition of pr_fmt Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0879/1157] mtip32xx: fix device removal Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0880/1157] nvme: use command_id instead of req->tag in trace_nvme_complete_rq() Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0881/1157] nvme: define compat_ioctl again to unbreak 32-bit userspace Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0882/1157] nvme: catch -ENODEV from nvme_revalidate_zones again Greg Kroah-Hartman
2022-08-15 18:03 ` [PATCH 5.19 0883/1157] block/bio: remove duplicate append pages code Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0884/1157] block: ensure iov_iter advances for added pages Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0885/1157] jbd2: fix outstanding credits assert in jbd2_journal_commit_transaction() Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0886/1157] ext4: recover csum seed of tmp_inode after migrating to extents Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0887/1157] jbd2: fix assertion jh->b_frozen_data == NULL failure when journal aborted Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0888/1157] usb: cdns3: Dont use priv_dev uninitialized in cdns3_gadget_ep_enable() Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0889/1157] opp: Fix error check in dev_pm_opp_attach_genpd() Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0890/1157] ASoC: cros_ec_codec: Fix refcount leak in cros_ec_codec_platform_probe Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0891/1157] ASoC: samsung: Fix error handling in aries_audio_probe Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0892/1157] ASoC: imx-audmux: Silence a clang warning Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0893/1157] ASoC: mediatek: mt8173: Fix refcount leak in mt8173_rt5650_rt5676_dev_probe Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0894/1157] ASoC: max98390: use linux/gpio/consumer.h to fix build Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0895/1157] ASoC: mt6797-mt6351: Fix refcount leak in mt6797_mt6351_dev_probe Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0896/1157] ASoC: codecs: da7210: add check for i2c_add_driver Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0897/1157] ASoC: mediatek: mt8173-rt5650: Fix refcount leak in mt8173_rt5650_dev_probe Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0898/1157] serial: pic32: fix missing clk_disable_unprepare() on error in pic32_uart_startup() Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0899/1157] serial: 8250: Create serial_lsr_in() Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0900/1157] serial: 8250: Get preserved flags using serial_lsr_in() Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0901/1157] serial: 8250_dw: Use serial_lsr_in() in dw8250_handle_irq() Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0902/1157] serial: 8250_dw: Store LSR into lsr_saved_flags in dw8250_tx_wait_empty() Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0903/1157] ASoC: SOF: make ctx_store and ctx_restore as optional Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0904/1157] ASoC: codecs: msm8916-wcd-digital: move gains from SX_TLV to S8_TLV Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0905/1157] ASoC: codecs: wcd9335: " Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0906/1157] ASoC: cs35l45: Add endianness flag in snd_soc_component_driver Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0907/1157] rpmsg: char: Add mutex protection for rpmsg_eptdev_open() Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0908/1157] rpmsg: mtk_rpmsg: Fix circular locking dependency Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0909/1157] remoteproc: k3-r5: Fix refcount leak in k3_r5_cluster_of_init Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0910/1157] selftests/livepatch: better synchronize test_klp_callbacks_busy Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0911/1157] profiling: fix shift too large makes kernel panic Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0912/1157] remoteproc: imx_rproc: Fix refcount leak in imx_rproc_addr_init Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0913/1157] KVM: PPC: Book3s: Fix warning about xics_rm_h_xirr_x Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0914/1157] rpmsg: Fix possible refcount leak in rpmsg_register_device_override() Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0915/1157] selftests/powerpc: Skip energy_scale_info test on older firmware Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0916/1157] ASoC: samsung: h1940_uda1380: include proepr GPIO consumer header Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0917/1157] powerpc/perf: Optimize clearing the pending PMI and remove WARN_ON for PMI check in power_pmu_disable Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0918/1157] ASoC: soc-core.c: fixup snd_soc_of_get_dai_link_cpus() Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0919/1157] ASoC: samsung: change gpiod_speaker_power and rx1950_audio from global to static variables Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0920/1157] serial: 8250_dw: Take port lock while accessing LSR Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0921/1157] ASoC: codecs: wsa881x: handle timeouts in resume path Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0922/1157] vfio/mlx5: Protect mlx5vf_disable_fds() upon close device Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0923/1157] vfio: Split migration ops from main device ops Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0924/1157] net/ice: fix initializing the bitmap in the switch code Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0925/1157] tty: n_gsm: fix user open not possible at responder until initiator open Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0926/1157] tty: n_gsm: fix tty registration before control channel open Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0927/1157] tty: n_gsm: fix wrong queuing behavior in gsm_dlci_data_output() Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0928/1157] tty: n_gsm: fix missing timer to handle stalled links Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0929/1157] tty: n_gsm: fix non flow control frames during mux flow off Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0930/1157] tty: n_gsm: fix packet re-transmission without open control channel Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0931/1157] tty: n_gsm: fix race condition in gsmld_write() Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0932/1157] tty: n_gsm: fix deadlock and link starvation in outgoing data path Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0933/1157] tty: n_gsm: fix resource allocation order in gsm_activate_mux() Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0934/1157] ASoC: qcom: Fix missing of_node_put() in asoc_qcom_lpass_cpu_platform_probe() Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0935/1157] MIPS: Loongson64: Fix section mismatch warning Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0936/1157] ASoC: imx-card: Fix DSD/PDM mclk frequency Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0937/1157] remoteproc: qcom: wcnss: Fix handling of IRQs Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0938/1157] vfio/ccw: Remove UUID from s390 debug log Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0939/1157] vfio/ccw: Fix FSM state if mdev probe fails Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0940/1157] vfio/ccw: Do not change FSM state in subchannel event Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0941/1157] ASoC: audio-graph-card2.c: use of_property_read_u32() for rate Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0942/1157] serial: 8250_fsl: Dont report FE, PE and OE twice Greg Kroah-Hartman
2022-08-15 18:04 ` [PATCH 5.19 0943/1157] tty: n_gsm: fix wrong T1 retry count handling Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0944/1157] tty: n_gsm: fix DM command Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0945/1157] tty: n_gsm: fix flow control handling in tx path Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0946/1157] tty: n_gsm: fix missing corner cases in gsmld_poll() Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0947/1157] MIPS: vdso: Utilize __pa() for gic_pfn Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0948/1157] ASoC: SOF: mediatek: fix mt8195 StatvectorSel wrong setting Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0949/1157] swiotlb: fail map correctly with failed io_tlb_default_mem Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0950/1157] lib/bitmap: fix off-by-one in bitmap_to_arr64() Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0951/1157] ASoC: SOF: ipc3-topology: Prevent double freeing of ipc_control_data via load_bytes Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0952/1157] cpufreq: mediatek: fix error return code in mtk_cpu_dvfs_info_init() Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0953/1157] ASoc: audio-graph-card2: Fix refcount leak bug in __graph_get_type() Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0954/1157] ASoC: mt6359: Fix refcount leak bug Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0955/1157] ASoC: SOF: ipc-msg-injector: fix copy in sof_msg_inject_ipc4_dfs_write() Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0956/1157] serial: 8250_bcm7271: Save/restore RTS in suspend/resume Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0957/1157] iommu/exynos: Handle failed IOMMU device registration properly Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0958/1157] 9p: Drop kref usage Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0959/1157] 9p: Add client parameter to p9_req_put() Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0960/1157] net: 9p: fix refcount leak in p9_read_work() error handling Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0961/1157] MIPS: Fixed __debug_virt_addr_valid() Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0962/1157] rpmsg: qcom_smd: Fix refcount leak in qcom_smd_parse_edge Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0963/1157] leds: pwm-multicolor: Dont show -EPROBE_DEFER as errors Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0964/1157] kfifo: fix kfifo_to_user() return type Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0965/1157] lib/smp_processor_id: fix imbalanced instrumentation_end() call Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0966/1157] proc: fix a dentry lock race between release_task and lookup Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0967/1157] remoteproc: qcom: pas: Check if coredump is enabled Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0968/1157] remoteproc: sysmon: Wait for SSCTL service to come up Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0969/1157] mfd: t7l66xb: Drop platform disable callback Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0970/1157] mfd: max77620: Fix refcount leak in max77620_initialise_fps Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0971/1157] ASoC: amd: yc: Decrease level of error message Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0972/1157] iommu/arm-smmu: qcom_iommu: Add of_node_put() when breaking out of loop Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0973/1157] perf tools: Fix dso_id inode generation comparison Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0974/1157] riscv: spinwait: Fix hartid variable type Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0975/1157] s390/crash: fix incorrect number of bytes to copy to user space Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0976/1157] s390/zcore: fix race when reading from hardware system area Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0977/1157] perf test: Fix test case 83 (perf stat CSV output linter) on s390 Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0978/1157] ASoC: fsl_asrc: force cast the asrc_format type Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0979/1157] ASoC: fsl-asoc-card: " Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0980/1157] ASoC: fsl_easrc: use snd_pcm_format_t type for sample_format Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0981/1157] ASoC: imx-card: use snd_pcm_format_t type for asrc_format Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0982/1157] ASoC: qcom: q6dsp: Fix an off-by-one in q6adm_alloc_copp() Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0983/1157] fuse: Remove the control interface for virtio-fs Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0984/1157] ASoC: audio-graph-card: Add of_node_put() in fail path Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0985/1157] ASoC: audio-graph-card2: " Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0986/1157] watchdog: f71808e_wdt: Add check for platform_driver_register Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0987/1157] watchdog: sp5100_tco: Fix a memory leak of EFCH MMIO resource Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0988/1157] watchdog: armada_37xx_wdt: check the return value of devm_ioremap() in armada_37xx_wdt_probe() Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0989/1157] ASoC: Intel: sof_rt5682: Perform quirk check first in card late probe Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0990/1157] video: fbdev: amba-clcd: Fix refcount leak bugs Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0991/1157] video: fbdev: sis: fix typos in SiS_GetModeID() Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0992/1157] ASoC: mchp-spdifrx: disable end of block interrupt on failures Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0993/1157] powerpc/32: Call mmu_mark_initmem_nx() regardless of data block mapping Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0994/1157] powerpc/32s: Fix boot failure with KASAN + SMP + JUMP_LABEL_FEATURE_CHECK_DEBUG Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0995/1157] powerpc/32: Do not allow selection of e5500 or e6500 CPUs on PPC32 Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0996/1157] video: fbdev: offb: Include missing linux/platform_device.h Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0997/1157] pseries/iommu/ddw: Fix kdump to work in absence of ibm,dma-window Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0998/1157] powerpc/iommu: Fix iommu_table_in_use for a small default DMA window case Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 0999/1157] powerpc/pci: Prefer PCI domain assignment via DT linux,pci-domain and alias Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 1000/1157] selftests/powerpc: Fix matrix multiply assist test Greg Kroah-Hartman
2022-08-15 18:05 ` [PATCH 5.19 1001/1157] serial: 8250_bcm2835aux: Add missing clk_disable_unprepare() Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220815180458.573136703@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=johannes.berg@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).