• Dedy Lansky's avatar
    wil6210: store bss object and use cfg80211_connect_bss() · bcdd49b0
    Dedy Lansky authored
    In a fast disconnect/connect sequence, cfg80211_connect_result() can
    fail to find the bss object which the driver is connecting to. Detailed
    sequence of events:
    * Driver is connected in STA mode
    * Disconnect request arrives from user space. Driver disconnects and
      calls cfg80211_disconnected() which adds new event to the
      cfg80211_wq worker thread
    * Connect request arrives from user space. cfg80211_connect() stores
      ssid/ssid_len and calls rdev_connect()
    * __cfg80211_disconnected() runs in worker thread and zero
      wdev->ssid_len
    * Connect succeeds. Driver calls cfg80211_connect_result() which fails
      to find the bss because wdev->ssid_len is zero
    
    To overcome this, upon connect request, store the bss object in the
    driver and upon connect completion pass it to kernel using
    cfg80211_connect_bss().
    Signed-off-by: default avatarDedy Lansky <qca_dlansky@qca.qualcomm.com>
    Signed-off-by: default avatarMaya Erez <qca_merez@qca.qualcomm.com>
    Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
    bcdd49b0
main.c 31.1 KB