[PATCH 3/3] ath10k: average ack rssi support for data frames
kbuild test robot
lkp at intel.com
Fri Apr 13 23:56:07 PDT 2018
Hi Balaji,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on next-20180411]
[cannot apply to ath6kl/ath-next v4.16 v4.16-rc7 v4.16-rc6 v4.16]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Balaji-Pothunoori/cfg80211-average-ack-rssi-support-for-data-frames/20180414-115825
reproduce:
# apt-get install sparse
make ARCH=x86_64 allmodconfig
make C=1 CF=-D__CHECK_ENDIAN__
sparse warnings: (new ones prefixed by >>)
drivers/net/wireless/ath/ath10k/htt_rx.c:236:23: sparse: expression using sizeof(void)
drivers/net/wireless/ath/ath10k/htt_rx.c:389:31: sparse: expression using sizeof(void)
drivers/net/wireless/ath/ath10k/htt_rx.c:402:39: sparse: expression using sizeof(void)
>> drivers/net/wireless/ath/ath10k/htt_rx.c:1911:30: sparse: cast to restricted __le16
>> drivers/net/wireless/ath/ath10k/htt_rx.c:1911:28: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] msdu_count @@ got unsignedrestricted __le16 [usertype] msdu_count @@
drivers/net/wireless/ath/ath10k/htt_rx.c:1911:28: expected restricted __le16 [usertype] msdu_count
drivers/net/wireless/ath/ath10k/htt_rx.c:1911:28: got unsigned short [unsigned] [usertype] <noident>
>> drivers/net/wireless/ath/ath10k/htt_rx.c:1925:29: sparse: restricted __le16 degrades to integer
drivers/net/wireless/ath/ath10k/htt_rx.c:1927:64: sparse: restricted __le16 degrades to integer
>> drivers/net/wireless/ath/ath10k/htt_rx.c:1926:50: sparse: incorrect type in assignment (different base types) @@ expected unsigned char [unsigned] [assigned] [usertype] ack_rssi @@ got igned] [usertype] ack_rssi @@
drivers/net/wireless/ath/ath10k/htt_rx.c:1926:50: expected unsigned char [unsigned] [assigned] [usertype] ack_rssi
drivers/net/wireless/ath/ath10k/htt_rx.c:1926:50: got restricted __le16 <noident>
drivers/net/wireless/ath/ath10k/htt_rx.c:1930:64: sparse: restricted __le16 degrades to integer
drivers/net/wireless/ath/ath10k/htt_rx.c:1929:50: sparse: incorrect type in assignment (different base types) @@ expected unsigned char [unsigned] [assigned] [usertype] ack_rssi @@ got igned] [usertype] ack_rssi @@
drivers/net/wireless/ath/ath10k/htt_rx.c:1929:50: expected unsigned char [unsigned] [assigned] [usertype] ack_rssi
drivers/net/wireless/ath/ath10k/htt_rx.c:1929:50: got restricted __le16 <noident>
drivers/net/wireless/ath/ath10k/htt_rx.c: In function 'ath10k_htt_t2h_msg_handler':
drivers/net/wireless/ath/ath10k/htt_rx.c:1886:9: warning: 'msdu_count' may be used uninitialized in this function [-Wmaybe-uninitialized]
__le16 msdu_count;
^~~~~~~~~~
vim +1911 drivers/net/wireless/ath/ath10k/htt_rx.c
1875
1876 static void ath10k_htt_rx_tx_compl_ind(struct ath10k *ar,
1877 struct sk_buff *skb)
1878 {
1879 struct ath10k_htt *htt = &ar->htt;
1880 struct htt_resp *resp = (struct htt_resp *)skb->data;
1881 struct htt_tx_done tx_done = {};
1882 int status = MS(resp->data_tx_completion.flags, HTT_DATA_TX_STATUS);
1883 __le16 msdu_id;
1884 int i;
1885 bool rssi_enabled;
1886 __le16 msdu_count;
1887
1888 switch (status) {
1889 case HTT_DATA_TX_STATUS_NO_ACK:
1890 tx_done.status = HTT_TX_COMPL_STATE_NOACK;
1891 break;
1892 case HTT_DATA_TX_STATUS_OK:
1893 tx_done.status = HTT_TX_COMPL_STATE_ACK;
1894 break;
1895 case HTT_DATA_TX_STATUS_DISCARD:
1896 case HTT_DATA_TX_STATUS_POSTPONE:
1897 case HTT_DATA_TX_STATUS_DOWNLOAD_FAIL:
1898 tx_done.status = HTT_TX_COMPL_STATE_DISCARD;
1899 break;
1900 default:
1901 ath10k_warn(ar, "unhandled tx completion status %d\n", status);
1902 tx_done.status = HTT_TX_COMPL_STATE_DISCARD;
1903 break;
1904 }
1905
1906 ath10k_dbg(ar, ATH10K_DBG_HTT, "htt tx completion num_msdus %d\n",
1907 resp->data_tx_completion.num_msdus);
1908
1909 if (resp->data_tx_completion.flags2 & HTT_TX_CMPL_FLAG_DATA_RSSI) {
1910 rssi_enabled = true;
> 1911 msdu_count = __le16_to_cpu(resp->data_tx_completion.num_msdus);
1912 } else {
1913 rssi_enabled = false;
1914 }
1915
1916 for (i = 0; i < resp->data_tx_completion.num_msdus; i++) {
1917 msdu_id = resp->data_tx_completion.msdus[i];
1918 tx_done.msdu_id = __le16_to_cpu(msdu_id);
1919
1920 if (rssi_enabled) {
1921 /* Total no of MSDUs should be even,
1922 * if odd MSDUs are sent firmware fills
1923 * last msdu id with 0xffff
1924 */
> 1925 if (msdu_count & 0x01)
> 1926 tx_done.ack_rssi =
1927 resp->data_tx_completion.msdus[msdu_count + i + 1];
1928 else
1929 tx_done.ack_rssi =
1930 resp->data_tx_completion.msdus[msdu_count + i];
1931 }
1932 /* kfifo_put: In practice firmware shouldn't fire off per-CE
1933 * interrupt and main interrupt (MSI/-X range case) for the same
1934 * HTC service so it should be safe to use kfifo_put w/o lock.
1935 *
1936 * From kfifo_put() documentation:
1937 * Note that with only one concurrent reader and one concurrent
1938 * writer, you don't need extra locking to use these macro.
1939 */
1940 if (!kfifo_put(&htt->txdone_fifo, tx_done)) {
1941 ath10k_warn(ar, "txdone fifo overrun, msdu_id %d status %d\n",
1942 tx_done.msdu_id, tx_done.status);
1943 ath10k_txrx_tx_unref(htt, &tx_done);
1944 }
1945 }
1946 }
1947
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
More information about the ath10k
mailing list