Kalle Valo <kvalo@xxxxxxxxxx> writes: > Kang Yang <quic_kangyang@xxxxxxxxxxx> writes: > >> The NoA(Notice of Absence) attribute is used by the P2P Group Owner to >> signal its absence due to power save timing, concurrent operation, or >> off-channel scanning. It is also used in the P2P Presence Request-Response >> mechanism. >> >> The NoA attribute shall be present in the P2P IE in the beacon frames >> transmitted by a P2P Group Owner when a NoA schedule is being advertised, >> or when the CTWindow is non-zero. >> >> So add support to update P2P information after P2P GO is up through >> event WMI_P2P_NOA_EVENTID, and always put it in probe resp. >> >> Create p2p.c and p2p.h for P2P related functions and definitions. >> >> Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3 >> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1 >> >> Signed-off-by: Kang Yang <quic_kangyang@xxxxxxxxxxx> > > [...] > >> +static int ath12k_wmi_p2p_noa_event(struct ath12k_base *ab, >> + struct sk_buff *skb) >> +{ >> + const void **tb; >> + const struct wmi_p2p_noa_event *ev; >> + const struct ath12k_wmi_p2p_noa_info *noa; >> + struct ath12k *ar; >> + int ret, vdev_id; >> + >> + tb = ath12k_wmi_tlv_parse_alloc(ab, skb, GFP_ATOMIC); >> + if (IS_ERR(tb)) { >> + ret = PTR_ERR(tb); >> + ath12k_warn(ab, "failed to parse tlv: %d\n", ret); >> + return ret; >> + } >> + >> + ev = tb[WMI_TAG_P2P_NOA_EVENT]; >> + noa = tb[WMI_TAG_P2P_NOA_INFO]; >> + >> + if (!ev || !noa) { >> + kfree(tb); >> + return -EPROTO; >> + } >> + >> + vdev_id = __le32_to_cpu(ev->vdev_id); >> + >> + ath12k_dbg(ab, ATH12K_DBG_WMI, >> + "wmi tlv p2p noa vdev_id %i descriptors %u\n", >> + vdev_id, le32_get_bits(noa->noa_attr, WMI_P2P_NOA_INFO_DESC_NUM)); >> + ar = ath12k_mac_get_ar_by_vdev_id(ab, vdev_id); >> + if (!ar) { >> + ath12k_warn(ab, "invalid vdev id %d in P2P NoA event\n", >> + vdev_id); >> + return -EINVAL; >> + } > > Aren't we leaking tb here? In this function I revamped the error > handling to use the out label to make sure we are freeing tb in every > error. Please review: > > https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?h=pending&id=12e182b47078a48169e873c51d438d7417e7e0c8 I realised that ret was uninitialised when no error, new version: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?h=pending&id=43f3069f6580b8a67969a6f32377d35aa7dd8d9a -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches