Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'linux-can-next-for-4.1-20150323' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next

Marc Kleine-Budde says:

====================
pull-request: can-next 2015-03-23

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

A patch by Florian Westphal, converts the skb->destructor to use
sock_efree() instead of own destructor. Ahmed S. Darwish's patch
converts the kvaser_usb driver to use unregister_candev(). A patch by
me removes a return from a void function in the m_can driver. Yegor
Yefremov contributes a patch for combined rx/tx LED trigger support. A
sparse warning in the esd_usb2 driver was fixes by Thomas Körper. Ben
Dooks converts the at91_can driver to use endian agnostic IO accessors.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+33 -18
+2 -2
drivers/net/can/at91_can.c
··· 291 291 292 292 static inline u32 at91_read(const struct at91_priv *priv, enum at91_reg reg) 293 293 { 294 - return __raw_readl(priv->reg_base + reg); 294 + return readl_relaxed(priv->reg_base + reg); 295 295 } 296 296 297 297 static inline void at91_write(const struct at91_priv *priv, enum at91_reg reg, 298 298 u32 value) 299 299 { 300 - __raw_writel(value, priv->reg_base + reg); 300 + writel_relaxed(value, priv->reg_base + reg); 301 301 } 302 302 303 303 static inline void set_mb_mode_prio(const struct at91_priv *priv,
+19 -3
drivers/net/can/led.c
··· 30 30 case CAN_LED_EVENT_OPEN: 31 31 led_trigger_event(priv->tx_led_trig, LED_FULL); 32 32 led_trigger_event(priv->rx_led_trig, LED_FULL); 33 + led_trigger_event(priv->rxtx_led_trig, LED_FULL); 33 34 break; 34 35 case CAN_LED_EVENT_STOP: 35 36 led_trigger_event(priv->tx_led_trig, LED_OFF); 36 37 led_trigger_event(priv->rx_led_trig, LED_OFF); 38 + led_trigger_event(priv->rxtx_led_trig, LED_OFF); 37 39 break; 38 40 case CAN_LED_EVENT_TX: 39 - if (led_delay) 41 + if (led_delay) { 40 42 led_trigger_blink_oneshot(priv->tx_led_trig, 41 43 &led_delay, &led_delay, 1); 44 + led_trigger_blink_oneshot(priv->rxtx_led_trig, 45 + &led_delay, &led_delay, 1); 46 + } 42 47 break; 43 48 case CAN_LED_EVENT_RX: 44 - if (led_delay) 49 + if (led_delay) { 45 50 led_trigger_blink_oneshot(priv->rx_led_trig, 46 51 &led_delay, &led_delay, 1); 52 + led_trigger_blink_oneshot(priv->rxtx_led_trig, 53 + &led_delay, &led_delay, 1); 54 + } 47 55 break; 48 56 } 49 57 } ··· 63 55 64 56 led_trigger_unregister_simple(priv->tx_led_trig); 65 57 led_trigger_unregister_simple(priv->rx_led_trig); 58 + led_trigger_unregister_simple(priv->rxtx_led_trig); 66 59 } 67 60 68 61 /* Register CAN LED triggers for a CAN device ··· 85 76 "%s-tx", netdev->name); 86 77 snprintf(priv->rx_led_trig_name, sizeof(priv->rx_led_trig_name), 87 78 "%s-rx", netdev->name); 79 + snprintf(priv->rxtx_led_trig_name, sizeof(priv->rxtx_led_trig_name), 80 + "%s-rxtx", netdev->name); 88 81 89 82 led_trigger_register_simple(priv->tx_led_trig_name, 90 83 &priv->tx_led_trig); 91 84 led_trigger_register_simple(priv->rx_led_trig_name, 92 85 &priv->rx_led_trig); 86 + led_trigger_register_simple(priv->rxtx_led_trig_name, 87 + &priv->rxtx_led_trig); 93 88 94 89 devres_add(&netdev->dev, res); 95 90 } ··· 110 97 if (!priv) 111 98 return NOTIFY_DONE; 112 99 113 - if (!priv->tx_led_trig || !priv->rx_led_trig) 100 + if (!priv->tx_led_trig || !priv->rx_led_trig || !priv->rxtx_led_trig) 114 101 return NOTIFY_DONE; 115 102 116 103 if (msg == NETDEV_CHANGENAME) { ··· 119 106 120 107 snprintf(name, sizeof(name), "%s-rx", netdev->name); 121 108 led_trigger_rename_static(name, priv->rx_led_trig); 109 + 110 + snprintf(name, sizeof(name), "%s-rxtx", netdev->name); 111 + led_trigger_rename_static(name, priv->rxtx_led_trig); 122 112 } 123 113 124 114 return NOTIFY_DONE;
+2 -2
drivers/net/can/m_can/m_can.c
··· 312 312 static inline void m_can_fifo_write(const struct m_can_priv *priv, 313 313 u32 fpi, unsigned int offset, u32 val) 314 314 { 315 - return writel(val, priv->mram_base + priv->mcfg[MRAM_TXB].off + 316 - fpi * TXB_ELEMENT_SIZE + offset); 315 + writel(val, priv->mram_base + priv->mcfg[MRAM_TXB].off + 316 + fpi * TXB_ELEMENT_SIZE + offset); 317 317 } 318 318 319 319 static inline void m_can_config_endisable(const struct m_can_priv *priv,
+2 -2
drivers/net/can/usb/esd_usb2.c
··· 139 139 u8 cmd; 140 140 u8 net; 141 141 u8 dlc; 142 - __le32 hnd; 142 + u32 hnd; /* opaque handle, not used by device */ 143 143 __le32 id; /* upper 3 bits contain flags */ 144 144 u8 data[8]; 145 145 }; ··· 149 149 u8 cmd; 150 150 u8 net; 151 151 u8 status; 152 - __le32 hnd; 152 + u32 hnd; /* opaque handle, not used by device */ 153 153 __le32 ts; 154 154 }; 155 155
+1 -1
drivers/net/can/usb/kvaser_usb.c
··· 1856 1856 if (!dev->nets[i]) 1857 1857 continue; 1858 1858 1859 - unregister_netdev(dev->nets[i]->netdev); 1859 + unregister_candev(dev->nets[i]->netdev); 1860 1860 } 1861 1861 1862 1862 kvaser_usb_unlink_all_urbs(dev);
+2
include/linux/can/dev.h
··· 61 61 char tx_led_trig_name[CAN_LED_NAME_SZ]; 62 62 struct led_trigger *rx_led_trig; 63 63 char rx_led_trig_name[CAN_LED_NAME_SZ]; 64 + struct led_trigger *rxtx_led_trig; 65 + char rxtx_led_trig_name[CAN_LED_NAME_SZ]; 64 66 #endif 65 67 }; 66 68
+4 -2
include/linux/can/led.h
··· 21 21 22 22 #ifdef CONFIG_CAN_LEDS 23 23 24 - /* keep space for interface name + "-tx"/"-rx" suffix and null terminator */ 25 - #define CAN_LED_NAME_SZ (IFNAMSIZ + 4) 24 + /* keep space for interface name + "-tx"/"-rx"/"-rxtx" 25 + * suffix and null terminator 26 + */ 27 + #define CAN_LED_NAME_SZ (IFNAMSIZ + 6) 26 28 27 29 void can_led_event(struct net_device *netdev, enum can_led_event event); 28 30 void devm_can_led_init(struct net_device *netdev);
+1 -6
include/linux/can/skb.h
··· 44 44 skb_reserve(skb, sizeof(struct can_skb_priv)); 45 45 } 46 46 47 - static inline void can_skb_destructor(struct sk_buff *skb) 48 - { 49 - sock_put(skb->sk); 50 - } 51 - 52 47 static inline void can_skb_set_owner(struct sk_buff *skb, struct sock *sk) 53 48 { 54 49 if (sk) { 55 50 sock_hold(sk); 56 - skb->destructor = can_skb_destructor; 51 + skb->destructor = sock_efree; 57 52 skb->sk = sk; 58 53 } 59 54 }