2 CAN: Add new PF_CAN protocol family, try #9
5 Hello Dave, hello Patrick,
7 this is the nineth post of the patch series that adds the PF_CAN
8 protocol family for the Controller Area Network.
10 Since our last post we have changed the following:
12 * Changes suggested by Arnaldo Carvalho de Melo:
13 - Use gfp_any() instead of checking in_interrupt().
14 - Don't kfree() the sk_protinfo field.
15 * Fixed licence text as pointed out by Yoshifuji Hideaki and Patrick McHardy.
16 * Added IFF_ECHO to include/linux/if.h and use that instead of IFF_LOOPBACK,
17 as suggested by Eric W. Biederman. IFF_LOOPBACK is only for the normal
20 The changes in try #8 were:
22 * Some changes in debug code, following suggestions from Joe Perches:
23 - Remove dynamically allocated buffer for debug output.
24 - Use kernel functions for hexdumps.
25 - Don't interpret printf-style %-sequences in can_debug_cframe().
26 - Specify the fixed argument "fmt" to DBG() macro and use
27 GCC ## mechanism to remove , when args is empty.
28 * Removed CAN_RAW_USER and CAN_BCM_USER Kconfig options following a
29 suggestion from Patrick.
30 * Prevent overflow in statistics calculation.
33 The changes in try #7 were:
35 * Changes suggested by Patrick:
36 - protect proto_tab[] by a lock.
37 - add _rcu to some hlist traversals.
38 - use printk_ratelimit() for module autoload failures.
39 - make can_proto_unregister() and can_rx_unregister() return void.
40 - use return value of can_proto_register() and can_rx_register()
41 (this also removed a flaw in behavior of raw_bind() and raw_setsockopt()
42 in case of failure to can_rx_register() their filters).
43 - call kzalloc() with GFP_KERNEL in case NETDEV_REGISTER.
44 - use round_jiffies() to calculate expiration times.
45 - make some variables static and/or __read_mostly.
46 - in can_create() check for net namespace before auto loading modules.
47 - add build time check for struct sizes.
48 - use skb_share_chack() in vcan.
49 - fixed some comments.
50 * Typos in documentation as pointed out by Randy Dunlap and Bill Fink.
52 The changes in try #6 were:
54 * Update code to work with namespaces in net-2.6.24.
55 * Remove SET_MODULE_OWNER() from vcan.
57 The changes in try #5 were:
59 * Remove slab destructor from calls to kmem_cache_alloc().
60 * Add comments about types defined in can.h.
61 * Update comment on vcan loopback module parameter.
62 * Fix typo in documentation.
64 The changes in try #4 were:
66 * Change vcan network driver to use the new RTNL API, as suggested by
68 * Revert our change to use skb->iif instead of skb->cb. After
69 discussion with Patrick and Jamal it turned out, our first
70 implementation was correct.
71 * Use skb_tail_pointer() instead of skb->tail directly.
72 * Coding style changes to satisfy linux/scripts/checkpatch.pl.
73 * Minor changes for 64-bit-cleanliness.
74 * Minor cleanup of #include's
76 The changes in try #3 were:
78 * Use sbk->sk and skb->pkt_type instead of skb->cb to pass loopback
79 flags and originating socket down to the driver and back to the
80 receiving socket. Thanks to Patrick McHardy for pointing out our
82 * Use skb->iif instead of skb->cb to pass receiving interface from
83 raw_rcv() and bcm_rcv() up to raw_recvmsg() and bcm_recvmsg().
84 * Set skb->protocol when sending CAN frames to netdevices.
85 * Removed struct raw_opt and struct bcm_opt and integrated these
86 directly into struct raw_sock and bcm_sock resp., like most other
87 proto implementations do.
88 * We have found and fixed race conditions between raw_bind(),
89 raw_{set,get}sockopt() and raw_notifier(). This resulted in
90 - complete removal of our own notifier list infrastructure in
91 af_can.c. raw.c and bcm.c now use normal netdevice notifiers.
92 - removal of ro->lock spinlock. We use lock_sock(sk) now.
93 - changed deletion of dev_rcv_lists, which are now marked for
94 deletion in the netdevice notifier in af_can.c and are actually
95 deleted when all entries have been deleted using can_rx_unregister().
96 * Follow changes in 2.6.22 (e.g. ktime_t timestamps in skb).
97 * Removed obsolete code from vcan.c, as pointed out by Stephen Hemminger.
99 The changes in try #2 were:
101 * reduced RCU callback overhead when deleting receiver lists (thx to
102 feedback from Paul E. McKenney).
103 * eliminated some code duplication in net/can/proc.c.
104 * renamed slock-29 and sk_lock-29 to slock-AF_CAN and sk_lock-AF_CAN in
106 * added entry for can.txt in Documentation/networking/00-INDEX
107 * added error frame definitions in include/linux/can/error.h, which are to
108 be used by CAN network drivers.
111 This patch series applies against net-2.6.24 and is derived from Subversion
112 revision r511 of http://svn.berlios.de/svnroot/repos/socketcan.
113 It can be found in the directory
114 http://svn.berlios.de/svnroot/repos/socketcan/trunk/patch-series/<version>.
116 Thanks very much for your work!