[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAHp75VeSbC3QBswCxZpoVpT4cL4pXC5eouCc9YtvBtXG3YddTg@mail.gmail.com>
Date:   Wed, 30 May 2018 03:55:39 +0300
From:   Andy Shevchenko <andy.shevchenko@...il.com>
To:     Marcus Folkesson <marcus.folkesson@...il.com>
Cc:     Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        Jonathan Corbet <corbet@....net>,
        Felipe Balbi <balbi@...nel.org>,
        "David S. Miller" <davem@...emloft.net>,
        Mauro Carvalho Chehab <mchehab+samsung@...nel.org>,
        Andrew Morton <akpm@...ux-foundation.org>,
        Randy Dunlap <rdunlap@...radead.org>,
        Ruslan Bilovol <ruslan.bilovol@...il.com>,
        Thomas Gleixner <tglx@...utronix.de>,
        Kate Stewart <kstewart@...uxfoundation.org>,
        USB <linux-usb@...r.kernel.org>,
        Linux Documentation List <linux-doc@...r.kernel.org>,
        Linux Kernel Mailing List <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH v3 1/3] usb: gadget: ccid: add support for USB CCID Gadget Device
On Tue, May 29, 2018 at 9:50 PM, Marcus Folkesson
<marcus.folkesson@...il.com> wrote:
> Chip Card Interface Device (CCID) protocol is a USB protocol that
> allows a smartcard device to be connected to a computer via a card
> reader using a standard USB interface, without the need for each manufacturer
> of smartcards to provide its own reader or protocol.
>
> This gadget driver makes Linux show up as a CCID device to the host and let a
> userspace daemon act as the smartcard.
>
> This is useful when the Linux gadget itself should act as a cryptographic
> device or forward APDUs to an embedded smartcard device.
> + * Copyright (C) 2018 Marcus Folkesson <marcus.folkesson@...il.com>
> + *
Redundant line
> +static DEFINE_IDA(ccidg_ida);
Where is it destroyed?
> +               ccidg_class = NULL;
> +               return PTR_ERR(ccidg_class);
Are you sure?
> +       if (!list_empty(head)) {
> +               req = list_first_entry(head, struct usb_request, list);
list_first_entry_or_null()
> +       req->length = len;
Perhaps assign this obly if malloc successedeed ?
> +       req->buf = kmalloc(len, GFP_ATOMIC);
> +       if (req->buf == NULL) {
if (!req->buf) ?
> +               usb_ep_free_request(ep, req);
> +               return ERR_PTR(-ENOMEM);
> +       }
> +static void ccidg_request_free(struct usb_request *req, struct usb_ep *ep)
> +{
> +       if (req) {
Is it even possible?
What about
if (!req)
 return;
?
> +               kfree(req->buf);
> +               usb_ep_free_request(ep, req);
> +       }
> +}
> +                       *(__le32 *) req->buf = ccid_class_desc.dwDefaultClock;
Hmm... put_unaligned()? cpu_to_le32()? cpu_to_le32p()?
> +                       *(__le32 *) req->buf = ccid_class_desc.dwDataRate;
Ditto.
> +               }
> +               }
Indentation.
> +       /* responded with data transfer or status phase? */
> +       if (ret >= 0) {
Why not
if (ret < 0)
 return ret;
?
> +       }
> +
> +       return ret;
> +}
> +       atomic_set(&ccidg->online, 1);
> +       return ret;
return 0; ?
> +       struct f_ccidg *ccidg;
> +       ccidg = container_of(inode->i_cdev, struct f_ccidg, cdev);
One line ?
> +       xfer = (req->actual < count) ? req->actual : count;
min_t()
> +       ret = wait_event_interruptible(bulk_dev->write_wq,
> +               ((req = ccidg_req_get(ccidg, &bulk_dev->tx_idle))));
> +
> +       if (ret < 0)
> +               return -ERESTARTSYS;
Redundant blank line above.
> +static void ccidg_function_free(struct usb_function *f)
> +{
> +       struct f_ccidg_opts *opts;
> +       opts = container_of(f->fi, struct f_ccidg_opts, func_inst);
One line.
> +       mutex_lock(&opts->lock);
> +       --opts->refcnt;
-- will work
> +       mutex_unlock(&opts->lock);
> +}
> +       struct f_ccidg_opts *opts;
> +       opts = container_of(fi, struct f_ccidg_opts, func_inst);
Perhaps one line ?
> +       ++opts->refcnt;
X++ would work as well.
> +       struct f_ccidg_opts *opts;
> +
> +       opts = container_of(f, struct f_ccidg_opts, func_inst);
Perhaps one line?
> +#define CCID_PINSUPOORT_NONE           0x00
(0 << 0)
 ?
for sake of consistency
> +#define CCID_PINSUPOORT_VERIFICATION   (1 << 1)
> +#define CCID_PINSUPOORT_MODIFICATION   (1 << 2)
-- 
With Best Regards,
Andy Shevchenko
Powered by blists - more mailing lists