17e2091279
If a TX status event and RX event for a GO Negotiation frame gets delayed long enough to miss the initial wait, it was possible for reception of a GO Negotiation Response frame with status 1 to try to initiate a new p2p-listen work item to wait for the peer to become ready while a previous p2p-listen was already in progress due to that earlier timeout while waiting for peer. This would result in the new start_listen request getting rejected ("P2P: Reject start_listen since p2p_listen_work already exists") and the negotiation not proceeding. Work around this by using P2P_WAIT_PEER_CONNECT state instead of P2P_WAIT_PEER_IDLE if P2P_CONNECT_LISTEN state has already been entered when processing this special GO Negotiation Response status=1 case. This can avoid double-scheduling of p2p-listen and as such, completion of the GO negotiation even if the driver event or peer response are not received in time (the response is supposed to be there within 100 ms per spec, but there are number of deployed devices that do not really meet this requirement). Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com> |
||
---|---|---|
.. | ||
Makefile | ||
p2p.c | ||
p2p.h | ||
p2p_build.c | ||
p2p_dev_disc.c | ||
p2p_go_neg.c | ||
p2p_group.c | ||
p2p_i.h | ||
p2p_invitation.c | ||
p2p_parse.c | ||
p2p_pd.c | ||
p2p_sd.c | ||
p2p_utils.c |