lkml.org 
[lkml]   [2021]   [Jan]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 55/77] USB: usblp: fix DMA to stack
    Date
    From: Johan Hovold <johan@kernel.org>

    commit 020a1f453449294926ca548d8d5ca970926e8dfd upstream.

    Stack-allocated buffers cannot be used for DMA (on all architectures).

    Replace the HP-channel macro with a helper function that allocates a
    dedicated transfer buffer so that it can continue to be used with
    arguments from the stack.

    Note that the buffer is cleared on allocation as usblp_ctrl_msg()
    returns success also on short transfers (the buffer is only used for
    debugging).

    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20210104145302.2087-1-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/class/usblp.c | 21 +++++++++++++++++++--
    1 file changed, 19 insertions(+), 2 deletions(-)

    --- a/drivers/usb/class/usblp.c
    +++ b/drivers/usb/class/usblp.c
    @@ -274,8 +274,25 @@ static int usblp_ctrl_msg(struct usblp *
    #define usblp_reset(usblp)\
    usblp_ctrl_msg(usblp, USBLP_REQ_RESET, USB_TYPE_CLASS, USB_DIR_OUT, USB_RECIP_OTHER, 0, NULL, 0)

    -#define usblp_hp_channel_change_request(usblp, channel, buffer) \
    - usblp_ctrl_msg(usblp, USBLP_REQ_HP_CHANNEL_CHANGE_REQUEST, USB_TYPE_VENDOR, USB_DIR_IN, USB_RECIP_INTERFACE, channel, buffer, 1)
    +static int usblp_hp_channel_change_request(struct usblp *usblp, int channel, u8 *new_channel)
    +{
    + u8 *buf;
    + int ret;
    +
    + buf = kzalloc(1, GFP_KERNEL);
    + if (!buf)
    + return -ENOMEM;
    +
    + ret = usblp_ctrl_msg(usblp, USBLP_REQ_HP_CHANNEL_CHANGE_REQUEST,
    + USB_TYPE_VENDOR, USB_DIR_IN, USB_RECIP_INTERFACE,
    + channel, buf, 1);
    + if (ret == 0)
    + *new_channel = buf[0];
    +
    + kfree(buf);
    +
    + return ret;
    +}

    /*
    * See the description for usblp_select_alts() below for the usage

    \
     
     \ /
      Last update: 2021-01-11 14:52    [W:4.147 / U:0.640 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site