qcacld-3.0: Report congestion to the correct interface

Only report congestion vendor event to the interface that request it.

Change-Id: I3c6d4fca116f65a9ae930d428e45716d544f9806
CRs-Fixed: 2803920
This commit is contained in:
Min Liu
2020-10-23 15:30:51 +08:00
committed by snandini
parent 794d5e0131
commit bdba1fa76d
3 changed files with 13 additions and 4 deletions

View File

@@ -193,7 +193,8 @@ struct request_info {
void *cookie); void *cookie);
void (*get_peer_stats_cb)(struct stats_event *ev, void (*get_peer_stats_cb)(struct stats_event *ev,
void *cookie); void *cookie);
void (*congestion_notif_cb)(uint8_t congestion); void (*congestion_notif_cb)(uint8_t vdev_id,
uint8_t congestion);
} u; } u;
uint32_t vdev_id; uint32_t vdev_id;
uint32_t pdev_id; uint32_t pdev_id;

View File

@@ -704,7 +704,7 @@ tgt_mc_cp_stats_extract_congestion_stats(struct wlan_objmgr_psoc *psoc,
wlan_cp_stats_pdev_obj_unlock(pdev_cp_stats_priv); wlan_cp_stats_pdev_obj_unlock(pdev_cp_stats_priv);
if (last_req.u.congestion_notif_cb && is_congested) if (last_req.u.congestion_notif_cb && is_congested)
last_req.u.congestion_notif_cb(congestion); last_req.u.congestion_notif_cb(last_req.vdev_id, congestion);
out: out:
wlan_objmgr_pdev_release_ref(pdev, WLAN_CP_STATS_ID); wlan_objmgr_pdev_release_ref(pdev, WLAN_CP_STATS_ID);

View File

@@ -92,19 +92,27 @@ static int get_congestion_report_len(void)
/** /**
* hdd_congestion_notification_cb() - congestion notification callback function * hdd_congestion_notification_cb() - congestion notification callback function
* @vdev_id: vdev id
* @congestion: congestion percentage * @congestion: congestion percentage
* *
* Return: None * Return: None
*/ */
static void hdd_congestion_notification_cb(uint8_t congestion) static void hdd_congestion_notification_cb(uint8_t vdev_id, uint8_t congestion)
{ {
struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
struct hdd_adapter *adapter;
struct sk_buff *event; struct sk_buff *event;
if (wlan_hdd_validate_context(hdd_ctx)) if (wlan_hdd_validate_context(hdd_ctx))
return; return;
event = cfg80211_vendor_event_alloc(hdd_ctx->wiphy, NULL, adapter = hdd_get_adapter_by_vdev(hdd_ctx, vdev_id);
if (!adapter) {
hdd_err("Failed to find adapter of vdev %d", vdev_id);
return;
}
event = cfg80211_vendor_event_alloc(hdd_ctx->wiphy, &(adapter->wdev),
get_congestion_report_len(), get_congestion_report_len(),
QCA_NL80211_VENDOR_SUBCMD_MEDIUM_ASSESS_INDEX, QCA_NL80211_VENDOR_SUBCMD_MEDIUM_ASSESS_INDEX,
GFP_KERNEL); GFP_KERNEL);