Commit 79d891c1 authored by David S. Miller's avatar David S. Miller

Merge tag 'linux-can-next-for-4.16-20180105' of...

Merge tag 'linux-can-next-for-4.16-20180105' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next

Marc Kleine-Budde says:

====================
pull-request: can-next 2017-12-01,Re: pull-request: can-next

this is a pull request of 7 patches for net-next/master.

All patches are by me. Patch 6 is for the "can_raw" protocol and add
error checking to the bind() function. All other patches clean up the
coding style and remove unused parameters in various CAN drivers and
infrastructure.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 5138eb9b ff847ee4
...@@ -256,7 +256,7 @@ int can_rx_offload_add_timestamp(struct net_device *dev, struct can_rx_offload * ...@@ -256,7 +256,7 @@ int can_rx_offload_add_timestamp(struct net_device *dev, struct can_rx_offload *
weight = offload->mb_first - offload->mb_last; weight = offload->mb_first - offload->mb_last;
} }
return can_rx_offload_init_queue(dev, offload, weight);; return can_rx_offload_init_queue(dev, offload, weight);
} }
EXPORT_SYMBOL_GPL(can_rx_offload_add_timestamp); EXPORT_SYMBOL_GPL(can_rx_offload_add_timestamp);
......
...@@ -508,7 +508,7 @@ static void slc_sync(void) ...@@ -508,7 +508,7 @@ static void slc_sync(void)
} }
/* Find a free SLCAN channel, and link in this `tty' line. */ /* Find a free SLCAN channel, and link in this `tty' line. */
static struct slcan *slc_alloc(dev_t line) static struct slcan *slc_alloc(void)
{ {
int i; int i;
char name[IFNAMSIZ]; char name[IFNAMSIZ];
...@@ -583,7 +583,7 @@ static int slcan_open(struct tty_struct *tty) ...@@ -583,7 +583,7 @@ static int slcan_open(struct tty_struct *tty)
/* OK. Find a free SLCAN channel to use. */ /* OK. Find a free SLCAN channel to use. */
err = -ENFILE; err = -ENFILE;
sl = slc_alloc(tty_devnum(tty)); sl = slc_alloc();
if (sl == NULL) if (sl == NULL)
goto err_exit; goto err_exit;
......
...@@ -612,8 +612,7 @@ static int mcp251x_do_set_bittiming(struct net_device *net) ...@@ -612,8 +612,7 @@ static int mcp251x_do_set_bittiming(struct net_device *net)
return 0; return 0;
} }
static int mcp251x_setup(struct net_device *net, struct mcp251x_priv *priv, static int mcp251x_setup(struct net_device *net, struct spi_device *spi)
struct spi_device *spi)
{ {
mcp251x_do_set_bittiming(net); mcp251x_do_set_bittiming(net);
...@@ -775,7 +774,7 @@ static void mcp251x_restart_work_handler(struct work_struct *ws) ...@@ -775,7 +774,7 @@ static void mcp251x_restart_work_handler(struct work_struct *ws)
mutex_lock(&priv->mcp_lock); mutex_lock(&priv->mcp_lock);
if (priv->after_suspend) { if (priv->after_suspend) {
mcp251x_hw_reset(spi); mcp251x_hw_reset(spi);
mcp251x_setup(net, priv, spi); mcp251x_setup(net, spi);
if (priv->after_suspend & AFTER_SUSPEND_RESTART) { if (priv->after_suspend & AFTER_SUSPEND_RESTART) {
mcp251x_set_normal_mode(spi); mcp251x_set_normal_mode(spi);
} else if (priv->after_suspend & AFTER_SUSPEND_UP) { } else if (priv->after_suspend & AFTER_SUSPEND_UP) {
...@@ -971,7 +970,7 @@ static int mcp251x_open(struct net_device *net) ...@@ -971,7 +970,7 @@ static int mcp251x_open(struct net_device *net)
mcp251x_open_clean(net); mcp251x_open_clean(net);
goto open_unlock; goto open_unlock;
} }
ret = mcp251x_setup(net, priv, spi); ret = mcp251x_setup(net, spi);
if (ret) { if (ret) {
mcp251x_open_clean(net); mcp251x_open_clean(net);
goto open_unlock; goto open_unlock;
......
...@@ -243,7 +243,7 @@ static struct gs_tx_context *gs_get_tx_context(struct gs_can *dev, ...@@ -243,7 +243,7 @@ static struct gs_tx_context *gs_get_tx_context(struct gs_can *dev,
return NULL; return NULL;
} }
static int gs_cmd_reset(struct gs_usb *gsusb, struct gs_can *gsdev) static int gs_cmd_reset(struct gs_can *gsdev)
{ {
struct gs_device_mode *dm; struct gs_device_mode *dm;
struct usb_interface *intf = gsdev->iface; struct usb_interface *intf = gsdev->iface;
...@@ -709,7 +709,7 @@ static int gs_can_close(struct net_device *netdev) ...@@ -709,7 +709,7 @@ static int gs_can_close(struct net_device *netdev)
atomic_set(&dev->active_tx_urbs, 0); atomic_set(&dev->active_tx_urbs, 0);
/* reset the device */ /* reset the device */
rc = gs_cmd_reset(parent, dev); rc = gs_cmd_reset(dev);
if (rc < 0) if (rc < 0)
netdev_warn(netdev, "Couldn't shutdown device (err=%d)", rc); netdev_warn(netdev, "Couldn't shutdown device (err=%d)", rc);
......
...@@ -158,7 +158,7 @@ void peak_usb_get_ts_time(struct peak_time_ref *time_ref, u32 ts, ktime_t *time) ...@@ -158,7 +158,7 @@ void peak_usb_get_ts_time(struct peak_time_ref *time_ref, u32 ts, ktime_t *time)
* post received skb after having set any hw timestamp * post received skb after having set any hw timestamp
*/ */
int peak_usb_netif_rx(struct sk_buff *skb, int peak_usb_netif_rx(struct sk_buff *skb,
struct peak_time_ref *time_ref, u32 ts_low, u32 ts_high) struct peak_time_ref *time_ref, u32 ts_low)
{ {
struct skb_shared_hwtstamps *hwts = skb_hwtstamps(skb); struct skb_shared_hwtstamps *hwts = skb_hwtstamps(skb);
......
...@@ -153,7 +153,7 @@ void peak_usb_update_ts_now(struct peak_time_ref *time_ref, u32 ts_now); ...@@ -153,7 +153,7 @@ void peak_usb_update_ts_now(struct peak_time_ref *time_ref, u32 ts_now);
void peak_usb_set_ts_now(struct peak_time_ref *time_ref, u32 ts_now); void peak_usb_set_ts_now(struct peak_time_ref *time_ref, u32 ts_now);
void peak_usb_get_ts_time(struct peak_time_ref *time_ref, u32 ts, ktime_t *tv); void peak_usb_get_ts_time(struct peak_time_ref *time_ref, u32 ts, ktime_t *tv);
int peak_usb_netif_rx(struct sk_buff *skb, int peak_usb_netif_rx(struct sk_buff *skb,
struct peak_time_ref *time_ref, u32 ts_low, u32 ts_high); struct peak_time_ref *time_ref, u32 ts_low);
void peak_usb_async_complete(struct urb *urb); void peak_usb_async_complete(struct urb *urb);
void peak_usb_restart_complete(struct peak_usb_device *dev); void peak_usb_restart_complete(struct peak_usb_device *dev);
......
...@@ -513,8 +513,7 @@ static int pcan_usb_fd_decode_canmsg(struct pcan_usb_fd_if *usb_if, ...@@ -513,8 +513,7 @@ static int pcan_usb_fd_decode_canmsg(struct pcan_usb_fd_if *usb_if,
else else
memcpy(cfd->data, rm->d, cfd->len); memcpy(cfd->data, rm->d, cfd->len);
peak_usb_netif_rx(skb, &usb_if->time_ref, peak_usb_netif_rx(skb, &usb_if->time_ref, le32_to_cpu(rm->ts_low));
le32_to_cpu(rm->ts_low), le32_to_cpu(rm->ts_high));
netdev->stats.rx_packets++; netdev->stats.rx_packets++;
netdev->stats.rx_bytes += cfd->len; netdev->stats.rx_bytes += cfd->len;
...@@ -574,8 +573,7 @@ static int pcan_usb_fd_decode_status(struct pcan_usb_fd_if *usb_if, ...@@ -574,8 +573,7 @@ static int pcan_usb_fd_decode_status(struct pcan_usb_fd_if *usb_if,
if (!skb) if (!skb)
return -ENOMEM; return -ENOMEM;
peak_usb_netif_rx(skb, &usb_if->time_ref, peak_usb_netif_rx(skb, &usb_if->time_ref, le32_to_cpu(sm->ts_low));
le32_to_cpu(sm->ts_low), le32_to_cpu(sm->ts_high));
netdev->stats.rx_packets++; netdev->stats.rx_packets++;
netdev->stats.rx_bytes += cf->can_dlc; netdev->stats.rx_bytes += cf->can_dlc;
...@@ -617,8 +615,7 @@ static int pcan_usb_fd_decode_overrun(struct pcan_usb_fd_if *usb_if, ...@@ -617,8 +615,7 @@ static int pcan_usb_fd_decode_overrun(struct pcan_usb_fd_if *usb_if,
cf->can_id |= CAN_ERR_CRTL; cf->can_id |= CAN_ERR_CRTL;
cf->data[1] |= CAN_ERR_CRTL_RX_OVERFLOW; cf->data[1] |= CAN_ERR_CRTL_RX_OVERFLOW;
peak_usb_netif_rx(skb, &usb_if->time_ref, peak_usb_netif_rx(skb, &usb_if->time_ref, le32_to_cpu(ov->ts_low));
le32_to_cpu(ov->ts_low), le32_to_cpu(ov->ts_high));
netdev->stats.rx_over_errors++; netdev->stats.rx_over_errors++;
netdev->stats.rx_errors++; netdev->stats.rx_errors++;
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
struct dev_rcv_lists; struct can_dev_rcv_lists;
struct s_stats; struct s_stats;
struct s_pstats; struct s_pstats;
...@@ -28,7 +28,7 @@ struct netns_can { ...@@ -28,7 +28,7 @@ struct netns_can {
#endif #endif
/* receive filters subscribed for 'all' CAN devices */ /* receive filters subscribed for 'all' CAN devices */
struct dev_rcv_lists *can_rx_alldev_list; struct can_dev_rcv_lists *can_rx_alldev_list;
spinlock_t can_rcvlists_lock; spinlock_t can_rcvlists_lock;
struct timer_list can_stattimer;/* timer for statistics update */ struct timer_list can_stattimer;/* timer for statistics update */
struct s_stats *can_stats; /* packet statistics */ struct s_stats *can_stats; /* packet statistics */
......
...@@ -321,13 +321,13 @@ EXPORT_SYMBOL(can_send); ...@@ -321,13 +321,13 @@ EXPORT_SYMBOL(can_send);
* af_can rx path * af_can rx path
*/ */
static struct dev_rcv_lists *find_dev_rcv_lists(struct net *net, static struct can_dev_rcv_lists *find_dev_rcv_lists(struct net *net,
struct net_device *dev) struct net_device *dev)
{ {
if (!dev) if (!dev)
return net->can.can_rx_alldev_list; return net->can.can_rx_alldev_list;
else else
return (struct dev_rcv_lists *)dev->ml_priv; return (struct can_dev_rcv_lists *)dev->ml_priv;
} }
/** /**
...@@ -381,7 +381,7 @@ static unsigned int effhash(canid_t can_id) ...@@ -381,7 +381,7 @@ static unsigned int effhash(canid_t can_id)
* Reduced can_id to have a preprocessed filter compare value. * Reduced can_id to have a preprocessed filter compare value.
*/ */
static struct hlist_head *find_rcv_list(canid_t *can_id, canid_t *mask, static struct hlist_head *find_rcv_list(canid_t *can_id, canid_t *mask,
struct dev_rcv_lists *d) struct can_dev_rcv_lists *d)
{ {
canid_t inv = *can_id & CAN_INV_FILTER; /* save flag before masking */ canid_t inv = *can_id & CAN_INV_FILTER; /* save flag before masking */
...@@ -464,7 +464,7 @@ int can_rx_register(struct net *net, struct net_device *dev, canid_t can_id, ...@@ -464,7 +464,7 @@ int can_rx_register(struct net *net, struct net_device *dev, canid_t can_id,
{ {
struct receiver *r; struct receiver *r;
struct hlist_head *rl; struct hlist_head *rl;
struct dev_rcv_lists *d; struct can_dev_rcv_lists *d;
struct s_pstats *can_pstats = net->can.can_pstats; struct s_pstats *can_pstats = net->can.can_pstats;
int err = 0; int err = 0;
...@@ -542,7 +542,7 @@ void can_rx_unregister(struct net *net, struct net_device *dev, canid_t can_id, ...@@ -542,7 +542,7 @@ void can_rx_unregister(struct net *net, struct net_device *dev, canid_t can_id,
struct receiver *r = NULL; struct receiver *r = NULL;
struct hlist_head *rl; struct hlist_head *rl;
struct s_pstats *can_pstats = net->can.can_pstats; struct s_pstats *can_pstats = net->can.can_pstats;
struct dev_rcv_lists *d; struct can_dev_rcv_lists *d;
if (dev && dev->type != ARPHRD_CAN) if (dev && dev->type != ARPHRD_CAN)
return; return;
...@@ -615,7 +615,7 @@ static inline void deliver(struct sk_buff *skb, struct receiver *r) ...@@ -615,7 +615,7 @@ static inline void deliver(struct sk_buff *skb, struct receiver *r)
r->matches++; r->matches++;
} }
static int can_rcv_filter(struct dev_rcv_lists *d, struct sk_buff *skb) static int can_rcv_filter(struct can_dev_rcv_lists *d, struct sk_buff *skb)
{ {
struct receiver *r; struct receiver *r;
int matches = 0; int matches = 0;
...@@ -682,7 +682,7 @@ static int can_rcv_filter(struct dev_rcv_lists *d, struct sk_buff *skb) ...@@ -682,7 +682,7 @@ static int can_rcv_filter(struct dev_rcv_lists *d, struct sk_buff *skb)
static void can_receive(struct sk_buff *skb, struct net_device *dev) static void can_receive(struct sk_buff *skb, struct net_device *dev)
{ {
struct dev_rcv_lists *d; struct can_dev_rcv_lists *d;
struct net *net = dev_net(dev); struct net *net = dev_net(dev);
struct s_stats *can_stats = net->can.can_stats; struct s_stats *can_stats = net->can.can_stats;
int matches; int matches;
...@@ -829,7 +829,7 @@ static int can_notifier(struct notifier_block *nb, unsigned long msg, ...@@ -829,7 +829,7 @@ static int can_notifier(struct notifier_block *nb, unsigned long msg,
void *ptr) void *ptr)
{ {
struct net_device *dev = netdev_notifier_info_to_dev(ptr); struct net_device *dev = netdev_notifier_info_to_dev(ptr);
struct dev_rcv_lists *d; struct can_dev_rcv_lists *d;
if (dev->type != ARPHRD_CAN) if (dev->type != ARPHRD_CAN)
return NOTIFY_DONE; return NOTIFY_DONE;
...@@ -874,7 +874,7 @@ static int can_pernet_init(struct net *net) ...@@ -874,7 +874,7 @@ static int can_pernet_init(struct net *net)
{ {
spin_lock_init(&net->can.can_rcvlists_lock); spin_lock_init(&net->can.can_rcvlists_lock);
net->can.can_rx_alldev_list = net->can.can_rx_alldev_list =
kzalloc(sizeof(struct dev_rcv_lists), GFP_KERNEL); kzalloc(sizeof(struct can_dev_rcv_lists), GFP_KERNEL);
if (!net->can.can_rx_alldev_list) if (!net->can.can_rx_alldev_list)
goto out; goto out;
net->can.can_stats = kzalloc(sizeof(struct s_stats), GFP_KERNEL); net->can.can_stats = kzalloc(sizeof(struct s_stats), GFP_KERNEL);
...@@ -920,7 +920,7 @@ static void can_pernet_exit(struct net *net) ...@@ -920,7 +920,7 @@ static void can_pernet_exit(struct net *net)
rcu_read_lock(); rcu_read_lock();
for_each_netdev_rcu(net, dev) { for_each_netdev_rcu(net, dev) {
if (dev->type == ARPHRD_CAN && dev->ml_priv) { if (dev->type == ARPHRD_CAN && dev->ml_priv) {
struct dev_rcv_lists *d = dev->ml_priv; struct can_dev_rcv_lists *d = dev->ml_priv;
BUG_ON(d->entries); BUG_ON(d->entries);
kfree(d); kfree(d);
......
...@@ -67,7 +67,7 @@ struct receiver { ...@@ -67,7 +67,7 @@ struct receiver {
enum { RX_ERR, RX_ALL, RX_FIL, RX_INV, RX_MAX }; enum { RX_ERR, RX_ALL, RX_FIL, RX_INV, RX_MAX };
/* per device receive filters linked at dev->ml_priv */ /* per device receive filters linked at dev->ml_priv */
struct dev_rcv_lists { struct can_dev_rcv_lists {
struct hlist_head rx[RX_MAX]; struct hlist_head rx[RX_MAX];
struct hlist_head rx_sff[CAN_SFF_RCV_ARRAY_SZ]; struct hlist_head rx_sff[CAN_SFF_RCV_ARRAY_SZ];
struct hlist_head rx_eff[CAN_EFF_RCV_ARRAY_SZ]; struct hlist_head rx_eff[CAN_EFF_RCV_ARRAY_SZ];
......
...@@ -338,7 +338,7 @@ static const struct file_operations can_version_proc_fops = { ...@@ -338,7 +338,7 @@ static const struct file_operations can_version_proc_fops = {
static inline void can_rcvlist_proc_show_one(struct seq_file *m, int idx, static inline void can_rcvlist_proc_show_one(struct seq_file *m, int idx,
struct net_device *dev, struct net_device *dev,
struct dev_rcv_lists *d) struct can_dev_rcv_lists *d)
{ {
if (!hlist_empty(&d->rx[idx])) { if (!hlist_empty(&d->rx[idx])) {
can_print_recv_banner(m); can_print_recv_banner(m);
...@@ -353,7 +353,7 @@ static int can_rcvlist_proc_show(struct seq_file *m, void *v) ...@@ -353,7 +353,7 @@ static int can_rcvlist_proc_show(struct seq_file *m, void *v)
/* double cast to prevent GCC warning */ /* double cast to prevent GCC warning */
int idx = (int)(long)PDE_DATA(m->file->f_inode); int idx = (int)(long)PDE_DATA(m->file->f_inode);
struct net_device *dev; struct net_device *dev;
struct dev_rcv_lists *d; struct can_dev_rcv_lists *d;
struct net *net = m->private; struct net *net = m->private;
seq_printf(m, "\nreceive list '%s':\n", rx_list_name[idx]); seq_printf(m, "\nreceive list '%s':\n", rx_list_name[idx]);
...@@ -417,7 +417,7 @@ static inline void can_rcvlist_proc_show_array(struct seq_file *m, ...@@ -417,7 +417,7 @@ static inline void can_rcvlist_proc_show_array(struct seq_file *m,
static int can_rcvlist_sff_proc_show(struct seq_file *m, void *v) static int can_rcvlist_sff_proc_show(struct seq_file *m, void *v)
{ {
struct net_device *dev; struct net_device *dev;
struct dev_rcv_lists *d; struct can_dev_rcv_lists *d;
struct net *net = m->private; struct net *net = m->private;
/* RX_SFF */ /* RX_SFF */
...@@ -461,7 +461,7 @@ static const struct file_operations can_rcvlist_sff_proc_fops = { ...@@ -461,7 +461,7 @@ static const struct file_operations can_rcvlist_sff_proc_fops = {
static int can_rcvlist_eff_proc_show(struct seq_file *m, void *v) static int can_rcvlist_eff_proc_show(struct seq_file *m, void *v)
{ {
struct net_device *dev; struct net_device *dev;
struct dev_rcv_lists *d; struct can_dev_rcv_lists *d;
struct net *net = m->private; struct net *net = m->private;
/* RX_EFF */ /* RX_EFF */
......
...@@ -401,6 +401,8 @@ static int raw_bind(struct socket *sock, struct sockaddr *uaddr, int len) ...@@ -401,6 +401,8 @@ static int raw_bind(struct socket *sock, struct sockaddr *uaddr, int len)
if (len < sizeof(*addr)) if (len < sizeof(*addr))
return -EINVAL; return -EINVAL;
if (addr->can_family != AF_CAN)
return -EINVAL;
lock_sock(sk); lock_sock(sk);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment