summaryrefslogtreecommitdiffstats
path: root/net/nfc/hci
diff options
context:
space:
mode:
authorWaldemar Rymarkiewicz <waldemar.rymarkiewicz@tieto.com>2012-09-20 08:59:11 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2012-09-25 00:17:27 +0200
commit9010e39f508ee57dc9a7675073659cb9d019a802 (patch)
tree05945183ec2c8dc0c323f2c502fa7e7516bace38 /net/nfc/hci
parentNFC: xmit from hci ops must return 0 or negative (diff)
downloadlinux-9010e39f508ee57dc9a7675073659cb9d019a802.tar.xz
linux-9010e39f508ee57dc9a7675073659cb9d019a802.zip
NFC: Handle RSET in SHDLC_CONNECTING state
As queue_work() does not guarantee immediate execution of sm_work it can happen in crossover RSET usecase that connect timer will constantly change the shdlc state from NEGOTIATING to CONNECTING before shdlc has chance to handle incoming frame. Signed-off-by: Waldemar Rymarkiewicz <waldemar.rymarkiewicz@tieto.com> Acked-by: Eric Lapuyade <eric.lapuyade@intel.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'net/nfc/hci')
-rw-r--r--net/nfc/hci/llc_shdlc.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/nfc/hci/llc_shdlc.c b/net/nfc/hci/llc_shdlc.c
index d54bfc51c693..a7931c7c57f2 100644
--- a/net/nfc/hci/llc_shdlc.c
+++ b/net/nfc/hci/llc_shdlc.c
@@ -414,7 +414,8 @@ static void llc_shdlc_rcv_u_frame(struct llc_shdlc *shdlc,
switch (u_frame_modifier) {
case U_FRAME_RSET:
- if (shdlc->state == SHDLC_NEGOCIATING) {
+ if ((shdlc->state == SHDLC_NEGOCIATING) ||
+ (shdlc->state == SHDLC_CONNECTING)) {
/* we sent RSET, but chip wants to negociate */
if (skb->len > 0)
w = skb->data[0];