Jeff Johnson <quic_jjohnson@xxxxxxxxxxx> writes: >> @@ -1244,9 +1249,23 @@ int ath12k_wmi_send_peer_create_cmd(struct ath12k *ar, >> cmd->peer_type = cpu_to_le32(arg->peer_type); >> cmd->vdev_id = cpu_to_le32(arg->vdev_id); >> >> + ptr = skb->data + sizeof(*cmd); >> + tlv = ptr; >> + tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, >> + sizeof(*ml_param)); > > using the same TLV size both here and for the TLV that follows doesn't seem > logical. is this missing + TLV_HDR_SIZE to account for its own TLV header? I have forgotten the details of WMI voodoo so I can't really comment right now :) >> + ptr += TLV_HDR_SIZE; >> + ml_param = ptr; >> + ml_param->tlv_header = >> + ath12k_wmi_tlv_cmd_hdr(WMI_TAG_MLO_PEER_CREATE_PARAMS, >> + sizeof(*ml_param)); But did you notice that here is used ath12k_wmi_tlv_cmd_hdr() and it reduces the header size: static __le32 ath12k_wmi_tlv_cmd_hdr(u32 cmd, u32 len) { return ath12k_wmi_tlv_hdr(cmd, len - TLV_HDR_SIZE); } -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches