Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753034AbcDUOp5 (ORCPT ); Thu, 21 Apr 2016 10:45:57 -0400 Received: from gw.hale.at ([83.64.51.210]:52609 "EHLO gw.hale.at" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752826AbcDUOow (ORCPT ); Thu, 21 Apr 2016 10:44:52 -0400 X-HALE-Mailborder-Watermark: 1461854686.32479@i8tIYYu5BeBW38df/szIwg X-HALE-Mailborder-From: michael.thalmeier@hale.at X-HALE-Mailborder-SpamCheck: not spam, SpamAssassin (zwischen gespeichert, Wertung=-2.899, benoetigt 3, autolearn=not spam, ALL_TRUSTED -1.00, BAYES_00 -1.90, URIBL_BLOCKED 0.00) X-HALE-Mailborder-IP-Protocol: IPv4 X-HALE-Mailborder: Found to be clean X-HALE-Mailborder-ID: 946812C14FA.A88F6 X-HALE-Mailborder-Information: Please contact your admin for more information From: Michael Thalmeier To: Samuel Ortiz Cc: Lauro Ramos Venancio , Aloisio Almeida Jr , linux-kernel@vger.kernel.org, linux-nfc@ml01.01.org, michael@thalmeier.at Subject: [PATCH 06/11] NFC: pn533: usb: fix errors when poll is stopped Date: Thu, 21 Apr 2016 16:43:54 +0200 Message-Id: <1461249839-16962-7-git-send-email-michael.thalmeier@hale.at> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1461249839-16962-1-git-send-email-michael.thalmeier@hale.at> References: <1461249839-16962-1-git-send-email-michael.thalmeier@hale.at> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1504 Lines: 57 When a poll ist stopped we need to kill the out_urb request too before starting a new request. Additionally check if cmd is set in pn533_recv_ack befor accessing its struct members. Signed-off-by: Michael Thalmeier --- drivers/nfc/pn533/usb.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/nfc/pn533/usb.c b/drivers/nfc/pn533/usb.c index 8ca0603..5500175 100644 --- a/drivers/nfc/pn533/usb.c +++ b/drivers/nfc/pn533/usb.c @@ -98,7 +98,8 @@ static void pn533_recv_ack(struct urb *urb) struct pn533_std_frame *in_frame; int rc; - cmd->status = urb->status; + if (cmd) + cmd->status = urb->status; switch (urb->status) { case 0: @@ -120,7 +121,8 @@ static void pn533_recv_ack(struct urb *urb) if (!pn533_rx_frame_is_ack(in_frame)) { nfc_err(&phy->udev->dev, "Received an invalid ack\n"); - cmd->status = -EIO; + if (cmd) + cmd->status = -EIO; goto sched_wq; } @@ -128,7 +130,8 @@ static void pn533_recv_ack(struct urb *urb) if (rc) { nfc_err(&phy->udev->dev, "usb_submit_urb failed with result %d\n", rc); - cmd->status = rc; + if (cmd) + cmd->status = rc; goto sched_wq; } @@ -209,6 +212,9 @@ static void pn533_usb_abort_cmd(struct pn533 *dev, gfp_t flags) if (dev->device_type == PN533_DEVICE_ACR122U) return; + /* cancel the out urb request */ + usb_kill_urb(phy->out_urb); + /* An ack will cancel the last issued command */ pn533_usb_send_ack(dev, flags); -- 2.5.5