mirror of
https://github.com/torvalds/linux.git
synced 2024-12-03 09:31:26 +00:00
linux-can-fixes-for-5.5-20191203
-----BEGIN PGP SIGNATURE----- iQFHBAABCgAxFiEEmvEkXzgOfc881GuFWsYho5HknSAFAl3mOAwTHG1rbEBwZW5n dXRyb25peC5kZQAKCRBaxiGjkeSdIPq9B/951kXPnxKh/U7Uto4CdWKOAnI7juIA 29mM21yFMME4FCsrvowNfQfQ1o4b4mQ39lPJW9jvwqVPyxsp14O+gyeAYPlRaiDI AngYoUER4lHOAu948GlRqLCxXD68zOSptMO3sJwBKp3hGocDctja+2t4UMCSHnGs +s4S/U73gsdSW16DUYomhzl0dCPonUeXh/DGh13pImc7zKz8M1Pu8Ukb/4wGO9lg HDqT3l7cXtrrbuwkENLTXLvEg7+kS31fZCF1j2jWTGfjwA4g5zA1LETZtz2aou8o OPs1XrQ5KntBKsyljA3pL914DuJpJSnfuxpN60Fxpb3+x8284BTnL11I =yhsG -----END PGP SIGNATURE----- Merge tag 'linux-can-fixes-for-5.5-20191203' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can Marc Kleine-Budde says: ==================== pull-request: can 2019-12-03 this is a pull request of 6 patches for net/master. The first two patches are against the MAINTAINERS file and adds Appana Durga Kedareswara rao as maintainer for the xilinx-can driver and Sriram Dash for the m_can (mmio) driver. The next patch is by Jouni Hogander and fixes a use-after-free in the slcan driver. Johan Hovold's patch for the ucan driver fixes the non-atomic allocation in the completion handler. The last two patches target the xilinx-can driver. The first one is by Venkatesh Yadav Abbarapu and skips the error message on deferred probe, the second one is by Srinivas Neeli and fixes the usage of the skb after can_put_echo_skb(). ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
56e7a2f83d
17
MAINTAINERS
17
MAINTAINERS
@ -10094,6 +10094,15 @@ W: https://linuxtv.org
|
||||
S: Maintained
|
||||
F: drivers/media/radio/radio-maxiradio*
|
||||
|
||||
MCAN MMIO DEVICE DRIVER
|
||||
M: Sriram Dash <sriram.dash@samsung.com>
|
||||
L: linux-can@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/net/can/m_can.txt
|
||||
F: drivers/net/can/m_can/m_can.c
|
||||
F: drivers/net/can/m_can/m_can.h
|
||||
F: drivers/net/can/m_can/m_can_platform.c
|
||||
|
||||
MCP4018 AND MCP4531 MICROCHIP DIGITAL POTENTIOMETER DRIVERS
|
||||
M: Peter Rosin <peda@axentia.se>
|
||||
L: linux-iio@vger.kernel.org
|
||||
@ -18103,6 +18112,14 @@ M: Radhey Shyam Pandey <radhey.shyam.pandey@xilinx.com>
|
||||
S: Maintained
|
||||
F: drivers/net/ethernet/xilinx/xilinx_axienet*
|
||||
|
||||
XILINX CAN DRIVER
|
||||
M: Appana Durga Kedareswara rao <appana.durga.rao@xilinx.com>
|
||||
R: Naga Sureshkumar Relli <naga.sureshkumar.relli@xilinx.com>
|
||||
L: linux-can@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/net/can/xilinx_can.txt
|
||||
F: drivers/net/can/xilinx_can.c
|
||||
|
||||
XILINX UARTLITE SERIAL DRIVER
|
||||
M: Peter Korsgaard <jacmet@sunsite.dk>
|
||||
L: linux-serial@vger.kernel.org
|
||||
|
@ -617,6 +617,7 @@ err_free_chan:
|
||||
sl->tty = NULL;
|
||||
tty->disc_data = NULL;
|
||||
clear_bit(SLF_INUSE, &sl->flags);
|
||||
slc_free_netdev(sl->dev);
|
||||
free_netdev(sl->dev);
|
||||
|
||||
err_exit:
|
||||
|
@ -792,7 +792,7 @@ resubmit:
|
||||
up);
|
||||
|
||||
usb_anchor_urb(urb, &up->rx_urbs);
|
||||
ret = usb_submit_urb(urb, GFP_KERNEL);
|
||||
ret = usb_submit_urb(urb, GFP_ATOMIC);
|
||||
|
||||
if (ret < 0) {
|
||||
netdev_err(up->netdev,
|
||||
|
@ -542,16 +542,17 @@ static int xcan_do_set_mode(struct net_device *ndev, enum can_mode mode)
|
||||
|
||||
/**
|
||||
* xcan_write_frame - Write a frame to HW
|
||||
* @priv: Driver private data structure
|
||||
* @ndev: Pointer to net_device structure
|
||||
* @skb: sk_buff pointer that contains data to be Txed
|
||||
* @frame_offset: Register offset to write the frame to
|
||||
*/
|
||||
static void xcan_write_frame(struct xcan_priv *priv, struct sk_buff *skb,
|
||||
static void xcan_write_frame(struct net_device *ndev, struct sk_buff *skb,
|
||||
int frame_offset)
|
||||
{
|
||||
u32 id, dlc, data[2] = {0, 0};
|
||||
struct canfd_frame *cf = (struct canfd_frame *)skb->data;
|
||||
u32 ramoff, dwindex = 0, i;
|
||||
struct xcan_priv *priv = netdev_priv(ndev);
|
||||
|
||||
/* Watch carefully on the bit sequence */
|
||||
if (cf->can_id & CAN_EFF_FLAG) {
|
||||
@ -587,6 +588,14 @@ static void xcan_write_frame(struct xcan_priv *priv, struct sk_buff *skb,
|
||||
dlc |= XCAN_DLCR_EDL_MASK;
|
||||
}
|
||||
|
||||
if (!(priv->devtype.flags & XCAN_FLAG_TX_MAILBOXES) &&
|
||||
(priv->devtype.flags & XCAN_FLAG_TXFEMP))
|
||||
can_put_echo_skb(skb, ndev, priv->tx_head % priv->tx_max);
|
||||
else
|
||||
can_put_echo_skb(skb, ndev, 0);
|
||||
|
||||
priv->tx_head++;
|
||||
|
||||
priv->write_reg(priv, XCAN_FRAME_ID_OFFSET(frame_offset), id);
|
||||
/* If the CAN frame is RTR frame this write triggers transmission
|
||||
* (not on CAN FD)
|
||||
@ -638,13 +647,9 @@ static int xcan_start_xmit_fifo(struct sk_buff *skb, struct net_device *ndev)
|
||||
XCAN_SR_TXFLL_MASK))
|
||||
return -ENOSPC;
|
||||
|
||||
can_put_echo_skb(skb, ndev, priv->tx_head % priv->tx_max);
|
||||
|
||||
spin_lock_irqsave(&priv->tx_lock, flags);
|
||||
|
||||
priv->tx_head++;
|
||||
|
||||
xcan_write_frame(priv, skb, XCAN_TXFIFO_OFFSET);
|
||||
xcan_write_frame(ndev, skb, XCAN_TXFIFO_OFFSET);
|
||||
|
||||
/* Clear TX-FIFO-empty interrupt for xcan_tx_interrupt() */
|
||||
if (priv->tx_max > 1)
|
||||
@ -675,13 +680,9 @@ static int xcan_start_xmit_mailbox(struct sk_buff *skb, struct net_device *ndev)
|
||||
BIT(XCAN_TX_MAILBOX_IDX)))
|
||||
return -ENOSPC;
|
||||
|
||||
can_put_echo_skb(skb, ndev, 0);
|
||||
|
||||
spin_lock_irqsave(&priv->tx_lock, flags);
|
||||
|
||||
priv->tx_head++;
|
||||
|
||||
xcan_write_frame(priv, skb,
|
||||
xcan_write_frame(ndev, skb,
|
||||
XCAN_TXMSG_FRAME_OFFSET(XCAN_TX_MAILBOX_IDX));
|
||||
|
||||
/* Mark buffer as ready for transmit */
|
||||
@ -1772,7 +1773,8 @@ static int xcan_probe(struct platform_device *pdev)
|
||||
|
||||
priv->bus_clk = devm_clk_get(&pdev->dev, devtype->bus_clk_name);
|
||||
if (IS_ERR(priv->bus_clk)) {
|
||||
dev_err(&pdev->dev, "bus clock not found\n");
|
||||
if (PTR_ERR(priv->bus_clk) != -EPROBE_DEFER)
|
||||
dev_err(&pdev->dev, "bus clock not found\n");
|
||||
ret = PTR_ERR(priv->bus_clk);
|
||||
goto err_free;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user