summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWaldemar Rymarkiewicz <waldemar.rymarkiewicz@tieto.com>2012-09-20 06:59:11 (GMT)
committerSamuel Ortiz <sameo@linux.intel.com>2012-09-24 22:17:27 (GMT)
commit9010e39f508ee57dc9a7675073659cb9d019a802 (patch)
tree05945183ec2c8dc0c323f2c502fa7e7516bace38
parent96e324024b421b3753eb142d5d92fbe4ac5e7519 (diff)
downloadlinux-fsl-qoriq-9010e39f508ee57dc9a7675073659cb9d019a802.tar.xz
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>
-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 d54bfc5..a7931c7 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];