From: Ladislav Michl <ladis@linux-mips.org>
To: linux-usb@vger.kernel.org
Cc: Felipe Balbi <balbi@kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: [PATCH 2/3] usb: gadget: u_serial: Remove console specific alloc/free req functions
Date: Wed, 3 Jul 2019 18:34:57 +0200 [thread overview]
Message-ID: <20190703163457.GC28579@lenoch> (raw)
In-Reply-To: <20190703163355.GA28579@lenoch>
Driver already contains request allocation and deallocation
functions, so use them also for console_req.
While console_req is always null when calling gs_console_connect
remove check and put access under con_lock as we are racing with
gs_console_thread.
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
drivers/usb/gadget/function/u_serial.c | 43 +++++++-------------------
1 file changed, 11 insertions(+), 32 deletions(-)
diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c
index f8abb9c68e62..04b4338b4ae1 100644
--- a/drivers/usb/gadget/function/u_serial.c
+++ b/drivers/usb/gadget/function/u_serial.c
@@ -892,30 +892,6 @@ static struct tty_driver *gs_tty_driver;
static struct gscons_info gscons_info;
static struct console gserial_cons;
-static struct usb_request *gs_request_new(struct usb_ep *ep)
-{
- struct usb_request *req = usb_ep_alloc_request(ep, GFP_ATOMIC);
- if (!req)
- return NULL;
-
- req->buf = kmalloc(ep->maxpacket, GFP_ATOMIC);
- if (!req->buf) {
- usb_ep_free_request(ep, req);
- return NULL;
- }
-
- return req;
-}
-
-static void gs_request_free(struct usb_request *req, struct usb_ep *ep)
-{
- if (!req)
- return;
-
- kfree(req->buf);
- usb_ep_free_request(ep, req);
-}
-
static void gs_complete_out(struct usb_ep *ep, struct usb_request *req)
{
struct gscons_info *info = &gscons_info;
@@ -954,15 +930,15 @@ static int gs_console_connect(int port_num)
port = ports[port_num].port;
ep = port->port_usb->in;
+ spin_lock(&info->con_lock);
+ info->console_req = gs_alloc_req(ep, ep->maxpacket, GFP_ATOMIC);
if (!info->console_req) {
- info->console_req = gs_request_new(ep);
- if (!info->console_req)
- return -ENOMEM;
- info->console_req->complete = gs_complete_out;
+ spin_unlock(&info->con_lock);
+ return -ENOMEM;
}
+ info->console_req->complete = gs_complete_out;
info->port = port;
- spin_lock(&info->con_lock);
info->req_busy = 0;
spin_unlock(&info->con_lock);
pr_vdebug("port[%d] console connect!\n", port_num);
@@ -972,10 +948,13 @@ static int gs_console_connect(int port_num)
static void gs_console_disconnect(struct usb_ep *ep)
{
struct gscons_info *info = &gscons_info;
- struct usb_request *req = info->console_req;
- gs_request_free(req, ep);
- info->console_req = NULL;
+ spin_lock(&info->con_lock);
+ if (info->console_req) {
+ gs_free_req(ep, info->console_req);
+ info->console_req = NULL;
+ }
+ spin_unlock(&info->con_lock);
}
static int gs_console_thread(void *data)
--
2.20.1
next prev parent reply other threads:[~2019-07-03 16:35 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-03 16:33 [PATCH 0/3] usb: gadget: u_serial: Fix and cleanup Ladislav Michl
2019-07-03 16:34 ` [PATCH 1/3] usb: gadget: u_serial: Fix console_req complete event race Ladislav Michl
2019-07-03 16:34 ` Ladislav Michl [this message]
2019-07-03 16:35 ` [PATCH 3/3] usb: gadget: u_serial: Use bool for req_busy Ladislav Michl
2019-07-04 16:32 ` [PATCH 0/3] usb: gadget: u_serial: Fix and cleanup Ladislav Michl
2019-07-04 22:10 ` Ladislav Michl
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190703163457.GC28579@lenoch \
--to=ladis@linux-mips.org \
--cc=balbi@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-usb@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).