[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <202006190422.VymyEbuu%lkp@intel.com>
Date: Fri, 19 Jun 2020 04:37:24 +0800
From: kernel test robot <lkp@...el.com>
To: Joseph Chuang <joseph.chuang@...ress.com>
Cc: kbuild-all@...ts.01.org, linux-kernel@...r.kernel.org,
Kalle Valo <kvalo@...eaurora.org>
Subject: drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c:1710:40:
sparse: sparse: incorrect type in initializer (different base types)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 5e857ce6eae7ca21b2055cca4885545e29228fe2
commit: 9c29da3f4e7ef9810bdfaf3d8aa5e6d2e33136f8 brcmfmac: Fix P2P Group Formation failure via Go-neg method
date: 6 weeks ago
config: riscv-randconfig-s032-20200618 (attached as .config)
compiler: riscv64-linux-gcc (GCC) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.2-rc1-10-gc17b1b06-dirty
git checkout 9c29da3f4e7ef9810bdfaf3d8aa5e6d2e33136f8
# save the attached .config to linux build tree
make W=1 C=1 ARCH=riscv CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@...el.com>
sparse warnings: (new ones prefixed by >>)
>> drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c:1710:40: sparse: sparse: incorrect type in initializer (different base types) @@ expected signed int [usertype] requested_dwell @@ got restricted __le32 [usertype] dwell_time @@
>> drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c:1710:40: sparse: expected signed int [usertype] requested_dwell
>> drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c:1710:40: sparse: got restricted __le32 [usertype] dwell_time
drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c:2202:5: sparse: sparse: symbol 'brcmf_p2p_get_conn_idx' was not declared. Should it be static?
vim +1710 drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
1671
1672 static bool brcmf_p2p_check_dwell_overflow(s32 requested_dwell,
1673 unsigned long dwell_jiffies)
1674 {
1675 if ((requested_dwell & CUSTOM_RETRY_MASK) &&
1676 (jiffies_to_msecs(jiffies - dwell_jiffies) >
1677 (requested_dwell & ~CUSTOM_RETRY_MASK))) {
1678 brcmf_err("Action frame TX retry time over dwell time!\n");
1679 return true;
1680 }
1681 return false;
1682 }
1683 /**
1684 * brcmf_p2p_send_action_frame() - send action frame .
1685 *
1686 * @cfg: driver private data for cfg80211 interface.
1687 * @ndev: net device to transmit on.
1688 * @af_params: configuration data for action frame.
1689 */
1690 bool brcmf_p2p_send_action_frame(struct brcmf_cfg80211_info *cfg,
1691 struct net_device *ndev,
1692 struct brcmf_fil_af_params_le *af_params)
1693 {
1694 struct brcmf_p2p_info *p2p = &cfg->p2p;
1695 struct brcmf_if *ifp = netdev_priv(ndev);
1696 struct brcmf_fil_action_frame_le *action_frame;
1697 struct brcmf_config_af_params config_af_params;
1698 struct afx_hdl *afx_hdl = &p2p->afx_hdl;
1699 struct brcmf_pub *drvr = cfg->pub;
1700 u16 action_frame_len;
1701 bool ack = false;
1702 u8 category;
1703 u8 action;
1704 s32 tx_retry;
1705 s32 extra_listen_time;
1706 uint delta_ms;
1707 unsigned long dwell_jiffies = 0;
1708 bool dwell_overflow = false;
1709
> 1710 s32 requested_dwell = af_params->dwell_time;
1711
1712 action_frame = &af_params->action_frame;
1713 action_frame_len = le16_to_cpu(action_frame->len);
1714
1715 brcmf_p2p_print_actframe(true, action_frame->data, action_frame_len);
1716
1717 /* Add the default dwell time. Dwell time to stay off-channel */
1718 /* to wait for a response action frame after transmitting an */
1719 /* GO Negotiation action frame */
1720 af_params->dwell_time = cpu_to_le32(P2P_AF_DWELL_TIME);
1721
1722 category = action_frame->data[DOT11_ACTION_CAT_OFF];
1723 action = action_frame->data[DOT11_ACTION_ACT_OFF];
1724
1725 /* initialize variables */
1726 p2p->next_af_subtype = P2P_PAF_SUBTYPE_INVALID;
1727 p2p->gon_req_action = false;
1728
1729 /* config parameters */
1730 config_af_params.mpc_onoff = -1;
1731 config_af_params.search_channel = false;
1732 config_af_params.extra_listen = false;
1733
1734 if (brcmf_p2p_is_pub_action(action_frame->data, action_frame_len)) {
1735 /* p2p public action frame process */
1736 if (brcmf_p2p_pub_af_tx(cfg, af_params, &config_af_params)) {
1737 /* Just send unknown subtype frame with */
1738 /* default parameters. */
1739 bphy_err(drvr, "P2P Public action frame, unknown subtype.\n");
1740 }
1741 } else if (brcmf_p2p_is_gas_action(action_frame->data,
1742 action_frame_len)) {
1743 /* service discovery process */
1744 if (action == P2PSD_ACTION_ID_GAS_IREQ ||
1745 action == P2PSD_ACTION_ID_GAS_CREQ) {
1746 /* configure service discovery query frame */
1747 config_af_params.search_channel = true;
1748
1749 /* save next af suptype to cancel */
1750 /* remaining dwell time */
1751 p2p->next_af_subtype = action + 1;
1752
1753 af_params->dwell_time =
1754 cpu_to_le32(P2P_AF_MED_DWELL_TIME);
1755 } else if (action == P2PSD_ACTION_ID_GAS_IRESP ||
1756 action == P2PSD_ACTION_ID_GAS_CRESP) {
1757 /* configure service discovery response frame */
1758 af_params->dwell_time =
1759 cpu_to_le32(P2P_AF_MIN_DWELL_TIME);
1760 } else {
1761 bphy_err(drvr, "Unknown action type: %d\n", action);
1762 goto exit;
1763 }
1764 } else if (brcmf_p2p_is_p2p_action(action_frame->data,
1765 action_frame_len)) {
1766 /* do not configure anything. it will be */
1767 /* sent with a default configuration */
1768 } else {
1769 bphy_err(drvr, "Unknown Frame: category 0x%x, action 0x%x\n",
1770 category, action);
1771 return false;
1772 }
1773
1774 /* if connecting on primary iface, sleep for a while before sending
1775 * af tx for VSDB
1776 */
1777 if (test_bit(BRCMF_VIF_STATUS_CONNECTING,
1778 &p2p->bss_idx[P2PAPI_BSSCFG_PRIMARY].vif->sme_state))
1779 msleep(50);
1780
1781 /* if scan is ongoing, abort current scan. */
1782 if (test_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status))
1783 brcmf_abort_scanning(cfg);
1784
1785 memcpy(afx_hdl->tx_dst_addr, action_frame->da, ETH_ALEN);
1786
1787 /* To make sure to send successfully action frame, turn off mpc */
1788 if (config_af_params.mpc_onoff == 0)
1789 brcmf_set_mpc(ifp, 0);
1790
1791 /* set status and destination address before sending af */
1792 if (p2p->next_af_subtype != P2P_PAF_SUBTYPE_INVALID) {
1793 /* set status to cancel the remained dwell time in rx process */
1794 set_bit(BRCMF_P2P_STATUS_WAITING_NEXT_ACT_FRAME, &p2p->status);
1795 }
1796
1797 p2p->af_sent_channel = 0;
1798 set_bit(BRCMF_P2P_STATUS_SENDING_ACT_FRAME, &p2p->status);
1799 /* validate channel and p2p ies */
1800 if (config_af_params.search_channel &&
1801 IS_P2P_SOCIAL_CHANNEL(le32_to_cpu(af_params->channel)) &&
1802 p2p->bss_idx[P2PAPI_BSSCFG_DEVICE].vif->saved_ie.probe_req_ie_len) {
1803 afx_hdl = &p2p->afx_hdl;
1804 afx_hdl->peer_listen_chan = le32_to_cpu(af_params->channel);
1805
1806 if (brcmf_p2p_af_searching_channel(p2p) ==
1807 P2P_INVALID_CHANNEL) {
1808 bphy_err(drvr, "Couldn't find peer's channel.\n");
1809 goto exit;
1810 }
1811
1812 /* Abort scan even for VSDB scenarios. Scan gets aborted in
1813 * firmware but after the check of piggyback algorithm. To take
1814 * care of current piggback algo, lets abort the scan here
1815 * itself.
1816 */
1817 brcmf_notify_escan_complete(cfg, ifp, true, true);
1818
1819 /* update channel */
1820 af_params->channel = cpu_to_le32(afx_hdl->peer_chan);
1821 }
1822 dwell_jiffies = jiffies;
1823 dwell_overflow = brcmf_p2p_check_dwell_overflow(requested_dwell,
1824 dwell_jiffies);
1825
1826 tx_retry = 0;
1827 while (!p2p->block_gon_req_tx &&
1828 (!ack) && (tx_retry < P2P_AF_TX_MAX_RETRY) &&
1829 !dwell_overflow) {
1830 ack = !brcmf_p2p_tx_action_frame(p2p, af_params);
1831 tx_retry++;
1832 dwell_overflow = brcmf_p2p_check_dwell_overflow(requested_dwell,
1833 dwell_jiffies);
1834 }
1835 if (ack == false) {
1836 bphy_err(drvr, "Failed to send Action Frame(retry %d)\n",
1837 tx_retry);
1838 clear_bit(BRCMF_P2P_STATUS_GO_NEG_PHASE, &p2p->status);
1839 }
1840
1841 exit:
1842 clear_bit(BRCMF_P2P_STATUS_SENDING_ACT_FRAME, &p2p->status);
1843
1844 /* WAR: sometimes dongle does not keep the dwell time of 'actframe'.
1845 * if we coundn't get the next action response frame and dongle does
1846 * not keep the dwell time, go to listen state again to get next action
1847 * response frame.
1848 */
1849 if (ack && config_af_params.extra_listen && !p2p->block_gon_req_tx &&
1850 test_bit(BRCMF_P2P_STATUS_WAITING_NEXT_ACT_FRAME, &p2p->status) &&
1851 p2p->af_sent_channel == afx_hdl->my_listen_chan) {
1852 delta_ms = jiffies_to_msecs(jiffies - p2p->af_tx_sent_jiffies);
1853 if (le32_to_cpu(af_params->dwell_time) > delta_ms)
1854 extra_listen_time = le32_to_cpu(af_params->dwell_time) -
1855 delta_ms;
1856 else
1857 extra_listen_time = 0;
1858 if (extra_listen_time > 50) {
1859 set_bit(BRCMF_P2P_STATUS_WAITING_NEXT_AF_LISTEN,
1860 &p2p->status);
1861 brcmf_dbg(INFO, "Wait more time! actual af time:%d, calculated extra listen:%d\n",
1862 le32_to_cpu(af_params->dwell_time),
1863 extra_listen_time);
1864 extra_listen_time += 100;
1865 if (!brcmf_p2p_discover_listen(p2p,
1866 p2p->af_sent_channel,
1867 extra_listen_time)) {
1868 unsigned long duration;
1869
1870 extra_listen_time += 100;
1871 duration = msecs_to_jiffies(extra_listen_time);
1872 wait_for_completion_timeout(&p2p->wait_next_af,
1873 duration);
1874 }
1875 clear_bit(BRCMF_P2P_STATUS_WAITING_NEXT_AF_LISTEN,
1876 &p2p->status);
1877 }
1878 }
1879
1880 if (p2p->block_gon_req_tx) {
1881 /* if ack is true, supplicant will wait more time(100ms).
1882 * so we will return it as a success to get more time .
1883 */
1884 p2p->block_gon_req_tx = false;
1885 ack = true;
1886 }
1887
1888 clear_bit(BRCMF_P2P_STATUS_WAITING_NEXT_ACT_FRAME, &p2p->status);
1889 /* if all done, turn mpc on again */
1890 if (config_af_params.mpc_onoff == 1)
1891 brcmf_set_mpc(ifp, 1);
1892
1893 return ack;
1894 }
1895
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Download attachment ".config.gz" of type "application/gzip" (33141 bytes)
Powered by blists - more mailing lists