[lkml]   [2022]   [Jun]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Subject[PATCH v5 0/7] can: refactoring of can-dev module and of Kbuild
Aside of calc_bittiming.o which can be configured with
CAN_CALC_BITTIMING, all objects from drivers/net/can/dev/ get linked
unconditionally to can-dev.o even if not needed by the user.

This series first goal it to split the can-dev modules so that the
user can decide which features get built in during
compilation. Additionally, the CAN Device Drivers menu is moved from
the "Networking support" category to the "Device Drivers" category
(where all drivers are supposed to be).

Below diagrams illustrate the changes made.
The arrow symbol "x --> y" denotes that "y depends on x".

* menu before this series *

CAN bus subsystem support
symbol: CONFIG_CAN
+-> CAN Device Drivers
(no symbol)
+-> software/virtual CAN device drivers
| (at time of writing: slcan, vcan, vxcan)
+-> Platform CAN drivers with Netlink support
+-> CAN bit-timing calculation (optional for hardware drivers)
+-> All other CAN devices

* menu after this series *

Network device support
+-> CAN Device Drivers
+-> software/virtual CAN device drivers
| (at time of writing: slcan, vcan, vxcan)
+-> CAN device drivers with Netlink support
symbol: CONFIG_CAN_NETLINK (matches previous CONFIG_CAN_DEV)
+-> CAN bit-timing calculation (optional for all drivers)
+-> All other CAN devices not relying on RX offload
+-> CAN rx offload
+-> CAN devices relying on rx offload
(at time of writing: flexcan, m_can, mcp251xfd and ti_hecc)

Patches 1 to 5 of this series do above modification.

The last two patches add a check toward CAN_CTRLMODE_LISTENONLY in
can_dropped_invalid_skb() to discard tx skb (such skb can potentially
reach the driver if injected via the packet socket). In more details,
patch 6 moves can_dropped_invalid_skb() from skb.h to skb.o and patch
7 is the actual change.

Those last two patches are actually connected to the first five ones:
because slcan and v(x)can requires can_dropped_invalid_skb(), it was
necessary to add those three devices to the scope of can-dev before
moving the function to skb.o.

This design results from the lengthy discussion in [1].


** Changelog **

v4 -> v5:

* m_can is also requires RX offload. Add the "select CAN_RX_OFFLOAD"
to its Makefile.

* Reorder the lines of drivers/net/can/dev/Makefile.

* Remove duplicated rx-offload.o target in drivers/net/can/dev/Makefile

* Remove the Nota Bene in the cover letter.

v3 -> v4:

* Five additional patches added to split can-dev module and refactor
Kbuild. c.f. below (lengthy) thread:

v2 -> v3:

* Apply can_dropped_invalid_skb() to slcan.

* Make vcan, vxcan and slcan dependent of CONFIG_CAN_DEV by
modifying Kbuild.

* fix small typos.

v1 -> v2:

* move can_dropped_invalid_skb() to skb.c instead of dev.h

* also move can_skb_headroom_valid() to skb.c

Vincent Mailhol (7):
can: Kbuild: rename config symbol CAN_DEV into CAN_NETLINK
can: Kconfig: turn menu "CAN Device Drivers" into a menuconfig using
can: bittiming: move bittiming calculation functions to
can: Kconfig: add CONFIG_CAN_RX_OFFLOAD
net: Kconfig: move the CAN device menu to the "Device Drivers" section
can: skb: move can_dropped_invalid_skb() and can_skb_headroom_valid()
to skb.c
can: skb: drop tx skb if in listen only mode

drivers/net/Kconfig | 2 +
drivers/net/can/Kconfig | 66 +++++++--
drivers/net/can/dev/Makefile | 17 ++-
drivers/net/can/dev/bittiming.c | 197 -------------------------
drivers/net/can/dev/calc_bittiming.c | 202 ++++++++++++++++++++++++++
drivers/net/can/dev/dev.c | 9 +-
drivers/net/can/dev/skb.c | 72 +++++++++
drivers/net/can/m_can/Kconfig | 1 +
drivers/net/can/spi/mcp251xfd/Kconfig | 1 +
include/linux/can/skb.h | 59 +-------
net/can/Kconfig | 5 +-
11 files changed, 349 insertions(+), 282 deletions(-)
create mode 100644 drivers/net/can/dev/calc_bittiming.c


 \ /
  Last update: 2022-06-04 18:33    [W:0.780 / U:0.892 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site