From nobody Fri Dec 19 18:46:38 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id ABCD4CCA473 for ; Mon, 25 Jul 2022 06:55:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232772AbiGYGz0 (ORCPT ); Mon, 25 Jul 2022 02:55:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38188 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232417AbiGYGzA (ORCPT ); Mon, 25 Jul 2022 02:55:00 -0400 Received: from mail-ej1-x62a.google.com (mail-ej1-x62a.google.com [IPv6:2a00:1450:4864:20::62a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E358912747 for ; Sun, 24 Jul 2022 23:54:32 -0700 (PDT) Received: by mail-ej1-x62a.google.com with SMTP id oy13so18855949ejb.1 for ; Sun, 24 Jul 2022 23:54:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qsO3FO8JgkL2eEGAFz/IqcQFBC6RPDGVM/v5Nl88GZc=; b=DDAXmyNUZ8AadIbDZexvUGtNxH16qExpXW7ZnSpyXqSPGDgESxXfwkpkOytnmn+FYC hK7BjBbhMaUIAwJNG9HiBwHMPnMDRy+fUnIzTX/bU20sIKHz1nvgqwLtcB6O/SLhyXi+ BQ03QxIxBxFQ6dDGednxZOSEFjp2kG8lugnlk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qsO3FO8JgkL2eEGAFz/IqcQFBC6RPDGVM/v5Nl88GZc=; b=oME5xjb8qqXeEDnyq22hEKz+JO4pUhMIuzT3EdfOO28m59XUae49bAHyuss48yylag f9oAcXnwNgSm+XBGJqdCwBbat1B/2plxKylVA8ZTsCpCp01h27haBzBJCACUbAjCKZHt hszX5OTUl1siwyrkZRD9G6U/bDqY0xBAT5PkhnMncZ1FthOV1P2IPp29Fqgtes6WkYvJ B1Y+yQSBqgSgXwoSIoOMAD00kXi/OSqltNm8MeCiwz8wqdOMiiN/Wf8pOHAG4n6XBWZR LiIByHK+RhyEjB9ec0/fNGR+jcdWp3nSyClwSFhFtw3KVoJYbbsGKd8jyJt4KQqf8idE ZOfQ== X-Gm-Message-State: AJIora/i3n1EKRL9UTOpexpFZNu9J0YeycnEyd5MzTc2EuQS4/2uM3QY hk6bcPZAz6NiHof9wmzNnZPGi4JIjmXqbg== X-Google-Smtp-Source: AGRyM1thfMcjNltPAPoL06ihoDhX0dNExFvtEv/6fgOma/iRFbrtxb4ZH+0zUeCJg/tJ19rTwMEzhg== X-Received: by 2002:a17:906:9b95:b0:72f:c504:45e with SMTP id dd21-20020a1709069b9500b0072fc504045emr7913376ejc.345.1658732065462; Sun, 24 Jul 2022 23:54:25 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-87-14-98-67.retail.telecomitalia.it. [87.14.98.67]) by smtp.gmail.com with ESMTPSA id r2-20020a1709060d4200b00722e57fa051sm4967711ejh.90.2022.07.24.23.54.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jul 2022 23:54:24 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Jeroen Hofstee , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Marc Kleine-Budde , Paolo Abeni , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v2 1/6] can: slcan: remove useless header inclusions Date: Mon, 25 Jul 2022 08:54:14 +0200 Message-Id: <20220725065419.3005015-2-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220725065419.3005015-1-dario.binacchi@amarulasolutions.com> References: <20220725065419.3005015-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Include only the necessary headers. Signed-off-by: Dario Binacchi --- Changes in v2: - Re-add headers that export at least one symbol used by the module. drivers/net/can/slcan/slcan-core.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/net/can/slcan/slcan-core.c b/drivers/net/can/slcan/slc= an-core.c index dfd1baba4130..c3dd7468a066 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -46,9 +46,6 @@ #include #include #include -#include -#include -#include #include #include #include --=20 2.32.0 From nobody Fri Dec 19 18:46:38 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 71D7BC43334 for ; Mon, 25 Jul 2022 06:55:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233046AbiGYGz3 (ORCPT ); Mon, 25 Jul 2022 02:55:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38200 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232440AbiGYGzC (ORCPT ); Mon, 25 Jul 2022 02:55:02 -0400 Received: from mail-ej1-x636.google.com (mail-ej1-x636.google.com [IPv6:2a00:1450:4864:20::636]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 183931055A for ; Sun, 24 Jul 2022 23:54:37 -0700 (PDT) Received: by mail-ej1-x636.google.com with SMTP id bp15so18847581ejb.6 for ; Sun, 24 Jul 2022 23:54:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=oX2R4w1wEhycH7uORVP6P9jgeQIkVPnZpKFdAOjlClo=; b=Vw/fuY3uxKeFT9XJweaa4y3ssNWKFXMSTzo19UK6mErE8WZl9oe3hSx+74wuNhvLxi gGlK8rAnRHgWHKE/f7SyYC09YY8bcvQ0vyNyIk3xVy63mm8hb+oF9dvkLB6OmLiyBRQj /ZP96I1RGDJC7e7UMmm8mDcVYEdKA9QP9kw3I= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=oX2R4w1wEhycH7uORVP6P9jgeQIkVPnZpKFdAOjlClo=; b=rvielbngisq8E5lL/5XuvNB6TXyhLNxhIYfMwzOWNayNKXrcUSUCDZOIk/Y9IdsyrV ljFZVwGOTAcYHcyAZvu1SvEL2OPEaxmX4J9LiwWB1u4iF4V8otMPcHy7/VaF8oyXgfgU c8wuHd8gqZbBazKd0/L6pPLg7ag+cA6bXmyVlhwg2I6mVKcev2omb4xWXbbKv/ppN0AE fB6/heykdR+mipkmk5qQkP9njAWinqDMdeYs2zcA5fHpVyOJDdamCEqavY+qQR6k+IFQ a3VRM0LqS774FN+NcCs5J9hNo4CMX2b46hmOACl78+uFnPFOgxyZiXOPhH1yEwn/p3D5 rTwg== X-Gm-Message-State: AJIora+0McWSKy5kdxfchLVcrll3BCbShT5oVF1EY5nXQ0nrumorjUHb gqmNR1PPD8uBTyWT8Uvzc6fyhUsxI8tW1w== X-Google-Smtp-Source: AGRyM1sJTYNR7Pc05e7bg9LTtAtAOkdEg1+yTQ7i3OCjAp34DtDl0lrtrvS73wXr9Gex+ulELJ6BYA== X-Received: by 2002:a17:906:58c9:b0:72f:4646:1f6f with SMTP id e9-20020a17090658c900b0072f46461f6fmr9049659ejs.181.1658732066866; Sun, 24 Jul 2022 23:54:26 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-87-14-98-67.retail.telecomitalia.it. [87.14.98.67]) by smtp.gmail.com with ESMTPSA id r2-20020a1709060d4200b00722e57fa051sm4967711ejh.90.2022.07.24.23.54.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jul 2022 23:54:26 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Jeroen Hofstee , Oliver Hartkopp , Dario Binacchi , Max Staudt , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Marc Kleine-Budde , Paolo Abeni , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v2 2/6] can: slcan: remove legacy infrastructure Date: Mon, 25 Jul 2022 08:54:15 +0200 Message-Id: <20220725065419.3005015-3-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220725065419.3005015-1-dario.binacchi@amarulasolutions.com> References: <20220725065419.3005015-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Taking inspiration from the drivers/net/can/can327.c driver and at the suggestion of its author Max Staudt, I removed legacy stuff like `SLCAN_MAGIC' and `slcan_devs' resulting in simplification of the code and its maintainability. The use of slcan_devs is derived from a very old kernel, since slip.c is about 30 years old, so today's kernel allows us to remove it. The .hangup() ldisc function, which only called the ldisc .close(), has been removed since the ldisc layer calls .close() in a good place anyway. The old slcanX name has been dropped in order to use the standard canX interface naming. It has been assumed that this change does not break the user space as the slcan driver provides an ioctl to resolve from tty fd to netdev name. The `maxdev' module parameter has also been removed. CC: Max Staudt Signed-off-by: Dario Binacchi --- Changes in v2: - Update the commit description. - Drop the old "slcan" name to use the standard canX interface naming. drivers/net/can/slcan/slcan-core.c | 318 ++++++----------------------- 1 file changed, 63 insertions(+), 255 deletions(-) diff --git a/drivers/net/can/slcan/slcan-core.c b/drivers/net/can/slcan/slc= an-core.c index c3dd7468a066..2c546f4a7981 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -1,11 +1,14 @@ /* * slcan.c - serial line CAN interface driver (using tty line discipline) * - * This file is derived from linux/drivers/net/slip/slip.c + * This file is derived from linux/drivers/net/slip/slip.c and got + * inspiration from linux/drivers/net/can/can327.c for the rework made + * on the line discipline code. * * slip.c Authors : Laurence Culhane * Fred N. van Kempen * slcan.c Author : Oliver Hartkopp + * can327.c Author : Max Staudt * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -36,7 +39,6 @@ */ =20 #include -#include =20 #include #include @@ -46,7 +48,6 @@ #include #include #include -#include #include #include #include @@ -61,15 +62,6 @@ MODULE_DESCRIPTION("serial line CAN interface"); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Oliver Hartkopp "); =20 -#define SLCAN_MAGIC 0x53CA - -static int maxdev =3D 10; /* MAX number of SLCAN channels; - * This can be overridden with - * insmod slcan.ko maxdev=3Dnnn - */ -module_param(maxdev, int, 0); -MODULE_PARM_DESC(maxdev, "Maximum number of slcan interfaces"); - /* maximum rx buffer len: extended CAN frame with timestamp */ #define SLC_MTU (sizeof("T1111222281122334455667788EA5F\r") + 1) =20 @@ -83,7 +75,6 @@ MODULE_PARM_DESC(maxdev, "Maximum number of slcan interfa= ces"); SLC_STATE_BE_TXCNT_LEN) struct slcan { struct can_priv can; - int magic; =20 /* Various fields. */ struct tty_struct *tty; /* ptr to TTY structure */ @@ -99,17 +90,14 @@ struct slcan { int xleft; /* bytes left in XMIT queue */ =20 unsigned long flags; /* Flag values/ mode etc */ -#define SLF_INUSE 0 /* Channel in use */ -#define SLF_ERROR 1 /* Parity, etc. error */ -#define SLF_XCMD 2 /* Command transmission */ +#define SLF_ERROR 0 /* Parity, etc. error */ +#define SLF_XCMD 1 /* Command transmission */ unsigned long cmd_flags; /* Command flags */ #define CF_ERR_RST 0 /* Reset errors on open */ wait_queue_head_t xcmd_wait; /* Wait queue for commands */ /* transmission */ }; =20 -static struct net_device **slcan_devs; - static const u32 slcan_bitrate_const[] =3D { 10000, 20000, 50000, 100000, 125000, 250000, 500000, 800000, 1000000 @@ -553,9 +541,8 @@ static void slcan_transmit(struct work_struct *work) =20 spin_lock_bh(&sl->lock); /* First make sure we're connected. */ - if (!sl->tty || sl->magic !=3D SLCAN_MAGIC || - (unlikely(!netif_running(sl->dev)) && - likely(!test_bit(SLF_XCMD, &sl->flags)))) { + if (unlikely(!netif_running(sl->dev)) && + likely(!test_bit(SLF_XCMD, &sl->flags))) { spin_unlock_bh(&sl->lock); return; } @@ -590,13 +577,9 @@ static void slcan_transmit(struct work_struct *work) */ static void slcan_write_wakeup(struct tty_struct *tty) { - struct slcan *sl; + struct slcan *sl =3D (struct slcan *)tty->disc_data; =20 - rcu_read_lock(); - sl =3D rcu_dereference(tty->disc_data); - if (sl) - schedule_work(&sl->tx_work); - rcu_read_unlock(); + schedule_work(&sl->tx_work); } =20 /* Send a can_frame to a TTY queue. */ @@ -667,25 +650,21 @@ static int slc_close(struct net_device *dev) struct slcan *sl =3D netdev_priv(dev); int err; =20 - spin_lock_bh(&sl->lock); - if (sl->tty) { - if (sl->can.bittiming.bitrate && - sl->can.bittiming.bitrate !=3D CAN_BITRATE_UNKNOWN) { - spin_unlock_bh(&sl->lock); - err =3D slcan_transmit_cmd(sl, "C\r"); - spin_lock_bh(&sl->lock); - if (err) - netdev_warn(dev, - "failed to send close command 'C\\r'\n"); - } - - /* TTY discipline is running. */ - clear_bit(TTY_DO_WRITE_WAKEUP, &sl->tty->flags); + if (sl->can.bittiming.bitrate && + sl->can.bittiming.bitrate !=3D CAN_BITRATE_UNKNOWN) { + err =3D slcan_transmit_cmd(sl, "C\r"); + if (err) + netdev_warn(dev, + "failed to send close command 'C\\r'\n"); } + + /* TTY discipline is running. */ + clear_bit(TTY_DO_WRITE_WAKEUP, &sl->tty->flags); + flush_work(&sl->tx_work); + netif_stop_queue(dev); sl->rcount =3D 0; sl->xleft =3D 0; - spin_unlock_bh(&sl->lock); close_candev(dev); sl->can.state =3D CAN_STATE_STOPPED; if (sl->can.bittiming.bitrate =3D=3D CAN_BITRATE_UNKNOWN) @@ -701,9 +680,6 @@ static int slc_open(struct net_device *dev) unsigned char cmd[SLC_MTU]; int err, s; =20 - if (!sl->tty) - return -ENODEV; - /* The baud rate is not set with the command * `ip link set type can bitrate ' and therefore * can.bittiming.bitrate is CAN_BITRATE_UNSET (0), causing @@ -718,8 +694,6 @@ static int slc_open(struct net_device *dev) return err; } =20 - sl->flags &=3D BIT(SLF_INUSE); - if (sl->can.bittiming.bitrate !=3D CAN_BITRATE_UNKNOWN) { for (s =3D 0; s < ARRAY_SIZE(slcan_bitrate_const); s++) { if (sl->can.bittiming.bitrate =3D=3D slcan_bitrate_const[s]) @@ -763,14 +737,6 @@ static int slc_open(struct net_device *dev) return err; } =20 -static void slc_dealloc(struct slcan *sl) -{ - int i =3D sl->dev->base_addr; - - free_candev(sl->dev); - slcan_devs[i] =3D NULL; -} - static int slcan_change_mtu(struct net_device *dev, int new_mtu) { return -EINVAL; @@ -800,7 +766,7 @@ static void slcan_receive_buf(struct tty_struct *tty, { struct slcan *sl =3D (struct slcan *)tty->disc_data; =20 - if (!sl || sl->magic !=3D SLCAN_MAGIC || !netif_running(sl->dev)) + if (!netif_running(sl->dev)) return; =20 /* Read the characters out of the buffer */ @@ -815,80 +781,15 @@ static void slcan_receive_buf(struct tty_struct *tty, } } =20 -/************************************ - * slcan_open helper routines. - ************************************/ - -/* Collect hanged up channels */ -static void slc_sync(void) -{ - int i; - struct net_device *dev; - struct slcan *sl; - - for (i =3D 0; i < maxdev; i++) { - dev =3D slcan_devs[i]; - if (!dev) - break; - - sl =3D netdev_priv(dev); - if (sl->tty) - continue; - if (dev->flags & IFF_UP) - dev_close(dev); - } -} - -/* Find a free SLCAN channel, and link in this `tty' line. */ -static struct slcan *slc_alloc(void) -{ - int i; - struct net_device *dev =3D NULL; - struct slcan *sl; - - for (i =3D 0; i < maxdev; i++) { - dev =3D slcan_devs[i]; - if (!dev) - break; - } - - /* Sorry, too many, all slots in use */ - if (i >=3D maxdev) - return NULL; - - dev =3D alloc_candev(sizeof(*sl), 1); - if (!dev) - return NULL; - - snprintf(dev->name, sizeof(dev->name), "slcan%d", i); - dev->netdev_ops =3D &slc_netdev_ops; - dev->base_addr =3D i; - slcan_set_ethtool_ops(dev); - sl =3D netdev_priv(dev); - - /* Initialize channel control data */ - sl->magic =3D SLCAN_MAGIC; - sl->dev =3D dev; - sl->can.bitrate_const =3D slcan_bitrate_const; - sl->can.bitrate_const_cnt =3D ARRAY_SIZE(slcan_bitrate_const); - spin_lock_init(&sl->lock); - INIT_WORK(&sl->tx_work, slcan_transmit); - init_waitqueue_head(&sl->xcmd_wait); - slcan_devs[i] =3D dev; - - return sl; -} - /* Open the high-level part of the SLCAN channel. * This function is called by the TTY module when the - * SLCAN line discipline is called for. Because we are - * sure the tty line exists, we only have to link it to - * a free SLCAN channel... + * SLCAN line discipline is called for. * * Called in process context serialized from other ldisc calls. */ static int slcan_open(struct tty_struct *tty) { + struct net_device *dev; struct slcan *sl; int err; =20 @@ -898,72 +799,49 @@ static int slcan_open(struct tty_struct *tty) if (!tty->ops->write) return -EOPNOTSUPP; =20 - /* RTnetlink lock is misused here to serialize concurrent - * opens of slcan channels. There are better ways, but it is - * the simplest one. - */ - rtnl_lock(); + dev =3D alloc_candev(sizeof(*sl), 1); + if (!dev) + return -ENFILE; =20 - /* Collect hanged up channels. */ - slc_sync(); + sl =3D netdev_priv(dev); =20 - sl =3D tty->disc_data; + /* Configure TTY interface */ + tty->receive_room =3D 65536; /* We don't flow control */ + sl->rcount =3D 0; + sl->xleft =3D 0; + spin_lock_init(&sl->lock); + INIT_WORK(&sl->tx_work, slcan_transmit); + init_waitqueue_head(&sl->xcmd_wait); =20 - err =3D -EEXIST; - /* First make sure we're not already connected. */ - if (sl && sl->magic =3D=3D SLCAN_MAGIC) - goto err_exit; + /* Configure CAN metadata */ + sl->can.bitrate_const =3D slcan_bitrate_const; + sl->can.bitrate_const_cnt =3D ARRAY_SIZE(slcan_bitrate_const); =20 - /* OK. Find a free SLCAN channel to use. */ - err =3D -ENFILE; - sl =3D slc_alloc(); - if (!sl) - goto err_exit; + /* Configure netdev interface */ + sl->dev =3D dev; + dev->netdev_ops =3D &slc_netdev_ops; + slcan_set_ethtool_ops(dev); =20 + /* Mark ldisc channel as alive */ sl->tty =3D tty; tty->disc_data =3D sl; =20 - if (!test_bit(SLF_INUSE, &sl->flags)) { - /* Perform the low-level SLCAN initialization. */ - sl->rcount =3D 0; - sl->xleft =3D 0; - - set_bit(SLF_INUSE, &sl->flags); - - rtnl_unlock(); - err =3D register_candev(sl->dev); - if (err) { - pr_err("slcan: can't register candev\n"); - goto err_free_chan; - } - } else { - rtnl_unlock(); + err =3D register_candev(dev); + if (err) { + free_candev(dev); + pr_err("slcan: can't register candev\n"); + return err; } =20 - tty->receive_room =3D 65536; /* We don't flow control */ - + netdev_info(dev, "slcan on %s.\n", tty->name); /* TTY layer expects 0 on success */ return 0; - -err_free_chan: - rtnl_lock(); - sl->tty =3D NULL; - tty->disc_data =3D NULL; - clear_bit(SLF_INUSE, &sl->flags); - slc_dealloc(sl); - rtnl_unlock(); - return err; - -err_exit: - rtnl_unlock(); - - /* Count references from TTY module */ - return err; } =20 /* Close down a SLCAN channel. * This means flushing out any pending queues, and then returning. This * call is serialized against other ldisc functions. + * Once this is called, no other ldisc function of ours is entered. * * We also use this method for a hangup event. */ @@ -971,28 +849,20 @@ static void slcan_close(struct tty_struct *tty) { struct slcan *sl =3D (struct slcan *)tty->disc_data; =20 - /* First make sure we're connected. */ - if (!sl || sl->magic !=3D SLCAN_MAGIC || sl->tty !=3D tty) - return; + /* unregister_netdev() calls .ndo_stop() so we don't have to. + * Our .ndo_stop() also flushes the TTY write wakeup handler, + * so we can safely set sl->tty =3D NULL after this. + */ + unregister_candev(sl->dev); =20 + /* Mark channel as dead */ spin_lock_bh(&sl->lock); - rcu_assign_pointer(tty->disc_data, NULL); + tty->disc_data =3D NULL; sl->tty =3D NULL; spin_unlock_bh(&sl->lock); =20 - synchronize_rcu(); - flush_work(&sl->tx_work); - - slc_close(sl->dev); - unregister_candev(sl->dev); - rtnl_lock(); - slc_dealloc(sl); - rtnl_unlock(); -} - -static void slcan_hangup(struct tty_struct *tty) -{ - slcan_close(tty); + netdev_info(sl->dev, "slcan off %s.\n", tty->name); + free_candev(sl->dev); } =20 /* Perform I/O control on an active SLCAN channel. */ @@ -1002,10 +872,6 @@ static int slcan_ioctl(struct tty_struct *tty, unsign= ed int cmd, struct slcan *sl =3D (struct slcan *)tty->disc_data; unsigned int tmp; =20 - /* First make sure we're connected. */ - if (!sl || sl->magic !=3D SLCAN_MAGIC) - return -EINVAL; - switch (cmd) { case SIOCGIFNAME: tmp =3D strlen(sl->dev->name) + 1; @@ -1027,7 +893,6 @@ static struct tty_ldisc_ops slc_ldisc =3D { .name =3D "slcan", .open =3D slcan_open, .close =3D slcan_close, - .hangup =3D slcan_hangup, .ioctl =3D slcan_ioctl, .receive_buf =3D slcan_receive_buf, .write_wakeup =3D slcan_write_wakeup, @@ -1037,78 +902,21 @@ static int __init slcan_init(void) { int status; =20 - if (maxdev < 4) - maxdev =3D 4; /* Sanity */ - pr_info("slcan: serial line CAN interface driver\n"); - pr_info("slcan: %d dynamic interface channels.\n", maxdev); - - slcan_devs =3D kcalloc(maxdev, sizeof(struct net_device *), GFP_KERNEL); - if (!slcan_devs) - return -ENOMEM; =20 /* Fill in our line protocol discipline, and register it */ status =3D tty_register_ldisc(&slc_ldisc); - if (status) { + if (status) pr_err("slcan: can't register line discipline\n"); - kfree(slcan_devs); - } + return status; } =20 static void __exit slcan_exit(void) { - int i; - struct net_device *dev; - struct slcan *sl; - unsigned long timeout =3D jiffies + HZ; - int busy =3D 0; - - if (!slcan_devs) - return; - - /* First of all: check for active disciplines and hangup them. - */ - do { - if (busy) - msleep_interruptible(100); - - busy =3D 0; - for (i =3D 0; i < maxdev; i++) { - dev =3D slcan_devs[i]; - if (!dev) - continue; - sl =3D netdev_priv(dev); - spin_lock_bh(&sl->lock); - if (sl->tty) { - busy++; - tty_hangup(sl->tty); - } - spin_unlock_bh(&sl->lock); - } - } while (busy && time_before(jiffies, timeout)); - - /* FIXME: hangup is async so we should wait when doing this second - * phase + /* This will only be called when all channels have been closed by + * userspace - tty_ldisc.c takes care of the module's refcount. */ - - for (i =3D 0; i < maxdev; i++) { - dev =3D slcan_devs[i]; - if (!dev) - continue; - - sl =3D netdev_priv(dev); - if (sl->tty) - netdev_err(dev, "tty discipline still running\n"); - - slc_close(dev); - unregister_candev(dev); - slc_dealloc(sl); - } - - kfree(slcan_devs); - slcan_devs =3D NULL; - tty_unregister_ldisc(&slc_ldisc); } =20 --=20 2.32.0 From nobody Fri Dec 19 18:46:38 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F31E7C43334 for ; Mon, 25 Jul 2022 06:55:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229573AbiGYGzk (ORCPT ); Mon, 25 Jul 2022 02:55:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38224 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232905AbiGYGzF (ORCPT ); Mon, 25 Jul 2022 02:55:05 -0400 Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [IPv6:2a00:1450:4864:20::635]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4520412757 for ; Sun, 24 Jul 2022 23:54:40 -0700 (PDT) Received: by mail-ej1-x635.google.com with SMTP id ss3so18743124ejc.11 for ; Sun, 24 Jul 2022 23:54:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UaPOtdBDZe4x/dJbeCjrVF6QNzv0ZLfNcWq1YThRP0s=; b=BLx3Ps5aXOQoYNERMx9mxKMUeJBLJ/g5inPVuzeBuIE9nVD/ihwRY3DvryBbNKbpoY z7GIvM3MAFHFl/6WUk9EWMKyqkDvG/HWMOlrGf1edBw8DXJpW30j/PofGAUcxPAb9Jlz VHnJnE0616l8W4kqmhmkMBdlc7prSw5ka12sA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UaPOtdBDZe4x/dJbeCjrVF6QNzv0ZLfNcWq1YThRP0s=; b=GMxhZkp/YMRzP7SwsEMOCD0w5qoDSjMEjzm+v9KXP+5wYbX5RDAs192lavKPuVB153 uXK245H5EzmT6tBMlbr+JOkwaKJR7hFmog5/kGMjAxX+OpYzi3jbzn6vJ8rRuso69XAx lIvJgTvSeEID0um0njN5hPvbA6DbmjVVmUUAF0bua3mubA8sXlmaC7zBInlamSqLHNiC J4LAg9tnwhWDXKHpA1//lWEco34EOZxecxjCED7clo3SkZDOlloy3L1wO1a7glPA/hbQ Xe/s56C6IF2qJOTPQozliDSLgPK2CsyMEfPodPxvaEYPdq3kQ3onv2vfUMSUbhrGMoMa gczg== X-Gm-Message-State: AJIora80ho4v+2ncLf5+KSD9CIrNInZXVJ2fKYoPwV9eNqXFFSWLGUA8 J4hPkFhNbdhnTD6jBciKQqdM9/6PdeBWaw== X-Google-Smtp-Source: AGRyM1v3m8urn3TQz8UTcb4KI+FAccpxNWpzA2MGf7rKncAGwAd9kI8tU5gfLCoQmY7Gf8NXY1EV2g== X-Received: by 2002:a17:907:a063:b0:72b:52f7:feea with SMTP id ia3-20020a170907a06300b0072b52f7feeamr9037282ejc.740.1658732068258; Sun, 24 Jul 2022 23:54:28 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-87-14-98-67.retail.telecomitalia.it. [87.14.98.67]) by smtp.gmail.com with ESMTPSA id r2-20020a1709060d4200b00722e57fa051sm4967711ejh.90.2022.07.24.23.54.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jul 2022 23:54:27 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Jeroen Hofstee , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Marc Kleine-Budde , Paolo Abeni , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v2 3/6] can: slcan: change every `slc' occurrence in `slcan' Date: Mon, 25 Jul 2022 08:54:16 +0200 Message-Id: <20220725065419.3005015-4-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220725065419.3005015-1-dario.binacchi@amarulasolutions.com> References: <20220725065419.3005015-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" In the driver there are parts of code where the prefix `slc' is used and others where the prefix `slcan' is used instead. The patch replaces every occurrence of `slc' with `slcan', except for the netdev functions where, to avoid compilation conflicts, it was necessary to replace `slc' with `slcan_netdev'. The patch does not make any functional changes. Signed-off-by: Dario Binacchi --- (no changes since v1) drivers/net/can/slcan/slcan-core.c | 109 +++++++++++++++-------------- 1 file changed, 56 insertions(+), 53 deletions(-) diff --git a/drivers/net/can/slcan/slcan-core.c b/drivers/net/can/slcan/slc= an-core.c index 2c546f4a7981..09d4abbbd9f4 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -63,16 +63,17 @@ MODULE_LICENSE("GPL"); MODULE_AUTHOR("Oliver Hartkopp "); =20 /* maximum rx buffer len: extended CAN frame with timestamp */ -#define SLC_MTU (sizeof("T1111222281122334455667788EA5F\r") + 1) - -#define SLC_CMD_LEN 1 -#define SLC_SFF_ID_LEN 3 -#define SLC_EFF_ID_LEN 8 -#define SLC_STATE_LEN 1 -#define SLC_STATE_BE_RXCNT_LEN 3 -#define SLC_STATE_BE_TXCNT_LEN 3 -#define SLC_STATE_FRAME_LEN (1 + SLC_CMD_LEN + SLC_STATE_BE_RXCNT_LE= N + \ - SLC_STATE_BE_TXCNT_LEN) +#define SLCAN_MTU (sizeof("T1111222281122334455667788EA5F\r") + 1) + +#define SLCAN_CMD_LEN 1 +#define SLCAN_SFF_ID_LEN 3 +#define SLCAN_EFF_ID_LEN 8 +#define SLCAN_STATE_LEN 1 +#define SLCAN_STATE_BE_RXCNT_LEN 3 +#define SLCAN_STATE_BE_TXCNT_LEN 3 +#define SLCAN_STATE_FRAME_LEN (1 + SLCAN_CMD_LEN + \ + SLCAN_STATE_BE_RXCNT_LEN + \ + SLCAN_STATE_BE_TXCNT_LEN) struct slcan { struct can_priv can; =20 @@ -83,9 +84,9 @@ struct slcan { struct work_struct tx_work; /* Flushes transmit buffer */ =20 /* These are pointers to the malloc()ed frame buffers. */ - unsigned char rbuff[SLC_MTU]; /* receiver buffer */ + unsigned char rbuff[SLCAN_MTU]; /* receiver buffer */ int rcount; /* received chars counter */ - unsigned char xbuff[SLC_MTU]; /* transmitter buffer */ + unsigned char xbuff[SLCAN_MTU]; /* transmitter buffer*/ unsigned char *xhead; /* pointer to next XMIT byte */ int xleft; /* bytes left in XMIT queue */ =20 @@ -164,7 +165,7 @@ int slcan_enable_err_rst_on_open(struct net_device *nde= v, bool on) *************************************************************************/ =20 /* Send one completely decapsulated can_frame to the network layer */ -static void slc_bump_frame(struct slcan *sl) +static void slcan_bump_frame(struct slcan *sl) { struct sk_buff *skb; struct can_frame *cf; @@ -184,10 +185,10 @@ static void slc_bump_frame(struct slcan *sl) fallthrough; case 't': /* store dlc ASCII value and terminate SFF CAN ID string */ - cf->len =3D sl->rbuff[SLC_CMD_LEN + SLC_SFF_ID_LEN]; - sl->rbuff[SLC_CMD_LEN + SLC_SFF_ID_LEN] =3D 0; + cf->len =3D sl->rbuff[SLCAN_CMD_LEN + SLCAN_SFF_ID_LEN]; + sl->rbuff[SLCAN_CMD_LEN + SLCAN_SFF_ID_LEN] =3D 0; /* point to payload data behind the dlc */ - cmd +=3D SLC_CMD_LEN + SLC_SFF_ID_LEN + 1; + cmd +=3D SLCAN_CMD_LEN + SLCAN_SFF_ID_LEN + 1; break; case 'R': cf->can_id =3D CAN_RTR_FLAG; @@ -195,16 +196,16 @@ static void slc_bump_frame(struct slcan *sl) case 'T': cf->can_id |=3D CAN_EFF_FLAG; /* store dlc ASCII value and terminate EFF CAN ID string */ - cf->len =3D sl->rbuff[SLC_CMD_LEN + SLC_EFF_ID_LEN]; - sl->rbuff[SLC_CMD_LEN + SLC_EFF_ID_LEN] =3D 0; + cf->len =3D sl->rbuff[SLCAN_CMD_LEN + SLCAN_EFF_ID_LEN]; + sl->rbuff[SLCAN_CMD_LEN + SLCAN_EFF_ID_LEN] =3D 0; /* point to payload data behind the dlc */ - cmd +=3D SLC_CMD_LEN + SLC_EFF_ID_LEN + 1; + cmd +=3D SLCAN_CMD_LEN + SLCAN_EFF_ID_LEN + 1; break; default: goto decode_failed; } =20 - if (kstrtou32(sl->rbuff + SLC_CMD_LEN, 16, &tmpid)) + if (kstrtou32(sl->rbuff + SLCAN_CMD_LEN, 16, &tmpid)) goto decode_failed; =20 cf->can_id |=3D tmpid; @@ -251,7 +252,7 @@ static void slc_bump_frame(struct slcan *sl) * sb256256 : state bus-off: rx counter 256, tx counter 256 * sa057033 : state active, rx counter 57, tx counter 33 */ -static void slc_bump_state(struct slcan *sl) +static void slcan_bump_state(struct slcan *sl) { struct net_device *dev =3D sl->dev; struct sk_buff *skb; @@ -277,16 +278,16 @@ static void slc_bump_state(struct slcan *sl) return; } =20 - if (state =3D=3D sl->can.state || sl->rcount < SLC_STATE_FRAME_LEN) + if (state =3D=3D sl->can.state || sl->rcount < SLCAN_STATE_FRAME_LEN) return; =20 - cmd +=3D SLC_STATE_BE_RXCNT_LEN + SLC_CMD_LEN + 1; - cmd[SLC_STATE_BE_TXCNT_LEN] =3D 0; + cmd +=3D SLCAN_STATE_BE_RXCNT_LEN + SLCAN_CMD_LEN + 1; + cmd[SLCAN_STATE_BE_TXCNT_LEN] =3D 0; if (kstrtou32(cmd, 10, &txerr)) return; =20 *cmd =3D 0; - cmd -=3D SLC_STATE_BE_RXCNT_LEN; + cmd -=3D SLCAN_STATE_BE_RXCNT_LEN; if (kstrtou32(cmd, 10, &rxerr)) return; =20 @@ -314,7 +315,7 @@ static void slc_bump_state(struct slcan *sl) * e1a : len 1, errors: ACK error * e3bcO: len 3, errors: Bit0 error, CRC error, Tx overrun error */ -static void slc_bump_err(struct slcan *sl) +static void slcan_bump_err(struct slcan *sl) { struct net_device *dev =3D sl->dev; struct sk_buff *skb; @@ -330,7 +331,7 @@ static void slc_bump_err(struct slcan *sl) else return; =20 - if ((len + SLC_CMD_LEN + 1) > sl->rcount) + if ((len + SLCAN_CMD_LEN + 1) > sl->rcount) return; =20 skb =3D alloc_can_err_skb(dev, &cf); @@ -338,7 +339,7 @@ static void slc_bump_err(struct slcan *sl) if (skb) cf->can_id |=3D CAN_ERR_PROT | CAN_ERR_BUSERROR; =20 - cmd +=3D SLC_CMD_LEN + 1; + cmd +=3D SLCAN_CMD_LEN + 1; for (i =3D 0; i < len; i++, cmd++) { switch (*cmd) { case 'a': @@ -427,7 +428,7 @@ static void slc_bump_err(struct slcan *sl) netif_rx(skb); } =20 -static void slc_bump(struct slcan *sl) +static void slcan_bump(struct slcan *sl) { switch (sl->rbuff[0]) { case 'r': @@ -437,11 +438,11 @@ static void slc_bump(struct slcan *sl) case 'R': fallthrough; case 'T': - return slc_bump_frame(sl); + return slcan_bump_frame(sl); case 'e': - return slc_bump_err(sl); + return slcan_bump_err(sl); case 's': - return slc_bump_state(sl); + return slcan_bump_state(sl); default: return; } @@ -453,12 +454,12 @@ static void slcan_unesc(struct slcan *sl, unsigned ch= ar s) if ((s =3D=3D '\r') || (s =3D=3D '\a')) { /* CR or BEL ends the pdu */ if (!test_and_clear_bit(SLF_ERROR, &sl->flags) && sl->rcount > 4) - slc_bump(sl); + slcan_bump(sl); =20 sl->rcount =3D 0; } else { if (!test_bit(SLF_ERROR, &sl->flags)) { - if (sl->rcount < SLC_MTU) { + if (sl->rcount < SLCAN_MTU) { sl->rbuff[sl->rcount++] =3D s; return; } @@ -474,7 +475,7 @@ static void slcan_unesc(struct slcan *sl, unsigned char= s) *************************************************************************/ =20 /* Encapsulate one can_frame and stuff into a TTY queue. */ -static void slc_encaps(struct slcan *sl, struct can_frame *cf) +static void slcan_encaps(struct slcan *sl, struct can_frame *cf) { int actual, i; unsigned char *pos; @@ -491,11 +492,11 @@ static void slc_encaps(struct slcan *sl, struct can_f= rame *cf) /* determine number of chars for the CAN-identifier */ if (cf->can_id & CAN_EFF_FLAG) { id &=3D CAN_EFF_MASK; - endpos =3D pos + SLC_EFF_ID_LEN; + endpos =3D pos + SLCAN_EFF_ID_LEN; } else { *pos |=3D 0x20; /* convert R/T to lower case for SFF */ id &=3D CAN_SFF_MASK; - endpos =3D pos + SLC_SFF_ID_LEN; + endpos =3D pos + SLCAN_SFF_ID_LEN; } =20 /* build 3 (SFF) or 8 (EFF) digit CAN identifier */ @@ -505,7 +506,8 @@ static void slc_encaps(struct slcan *sl, struct can_fra= me *cf) id >>=3D 4; } =20 - pos +=3D (cf->can_id & CAN_EFF_FLAG) ? SLC_EFF_ID_LEN : SLC_SFF_ID_LEN; + pos +=3D (cf->can_id & CAN_EFF_FLAG) ? + SLCAN_EFF_ID_LEN : SLCAN_SFF_ID_LEN; =20 *pos++ =3D cf->len + '0'; =20 @@ -583,7 +585,8 @@ static void slcan_write_wakeup(struct tty_struct *tty) } =20 /* Send a can_frame to a TTY queue. */ -static netdev_tx_t slc_xmit(struct sk_buff *skb, struct net_device *dev) +static netdev_tx_t slcan_netdev_xmit(struct sk_buff *skb, + struct net_device *dev) { struct slcan *sl =3D netdev_priv(dev); =20 @@ -602,7 +605,7 @@ static netdev_tx_t slc_xmit(struct sk_buff *skb, struct= net_device *dev) } =20 netif_stop_queue(sl->dev); - slc_encaps(sl, (struct can_frame *)skb->data); /* encaps & send */ + slcan_encaps(sl, (struct can_frame *)skb->data); /* encaps & send */ spin_unlock(&sl->lock); =20 out: @@ -645,7 +648,7 @@ static int slcan_transmit_cmd(struct slcan *sl, const u= nsigned char *cmd) } =20 /* Netdevice UP -> DOWN routine */ -static int slc_close(struct net_device *dev) +static int slcan_netdev_close(struct net_device *dev) { struct slcan *sl =3D netdev_priv(dev); int err; @@ -674,10 +677,10 @@ static int slc_close(struct net_device *dev) } =20 /* Netdevice DOWN -> UP routine */ -static int slc_open(struct net_device *dev) +static int slcan_netdev_open(struct net_device *dev) { struct slcan *sl =3D netdev_priv(dev); - unsigned char cmd[SLC_MTU]; + unsigned char cmd[SLCAN_MTU]; int err, s; =20 /* The baud rate is not set with the command @@ -737,16 +740,16 @@ static int slc_open(struct net_device *dev) return err; } =20 -static int slcan_change_mtu(struct net_device *dev, int new_mtu) +static int slcan_netdev_change_mtu(struct net_device *dev, int new_mtu) { return -EINVAL; } =20 -static const struct net_device_ops slc_netdev_ops =3D { - .ndo_open =3D slc_open, - .ndo_stop =3D slc_close, - .ndo_start_xmit =3D slc_xmit, - .ndo_change_mtu =3D slcan_change_mtu, +static const struct net_device_ops slcan_netdev_ops =3D { + .ndo_open =3D slcan_netdev_open, + .ndo_stop =3D slcan_netdev_close, + .ndo_start_xmit =3D slcan_netdev_xmit, + .ndo_change_mtu =3D slcan_netdev_change_mtu, }; =20 /****************************************** @@ -819,7 +822,7 @@ static int slcan_open(struct tty_struct *tty) =20 /* Configure netdev interface */ sl->dev =3D dev; - dev->netdev_ops =3D &slc_netdev_ops; + dev->netdev_ops =3D &slcan_netdev_ops; slcan_set_ethtool_ops(dev); =20 /* Mark ldisc channel as alive */ @@ -887,7 +890,7 @@ static int slcan_ioctl(struct tty_struct *tty, unsigned= int cmd, } } =20 -static struct tty_ldisc_ops slc_ldisc =3D { +static struct tty_ldisc_ops slcan_ldisc =3D { .owner =3D THIS_MODULE, .num =3D N_SLCAN, .name =3D "slcan", @@ -905,7 +908,7 @@ static int __init slcan_init(void) pr_info("slcan: serial line CAN interface driver\n"); =20 /* Fill in our line protocol discipline, and register it */ - status =3D tty_register_ldisc(&slc_ldisc); + status =3D tty_register_ldisc(&slcan_ldisc); if (status) pr_err("slcan: can't register line discipline\n"); =20 @@ -917,7 +920,7 @@ static void __exit slcan_exit(void) /* This will only be called when all channels have been closed by * userspace - tty_ldisc.c takes care of the module's refcount. */ - tty_unregister_ldisc(&slc_ldisc); + tty_unregister_ldisc(&slcan_ldisc); } =20 module_init(slcan_init); --=20 2.32.0 From nobody Fri Dec 19 18:46:38 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 150ABC433EF for ; Mon, 25 Jul 2022 06:56:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233126AbiGYG4C (ORCPT ); Mon, 25 Jul 2022 02:56:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38276 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232476AbiGYGzJ (ORCPT ); Mon, 25 Jul 2022 02:55:09 -0400 Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C631E12A81 for ; Sun, 24 Jul 2022 23:54:44 -0700 (PDT) Received: by mail-ej1-x62e.google.com with SMTP id b11so18769668eju.10 for ; Sun, 24 Jul 2022 23:54:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WtIlfV0TRfMwcTJkeyhrUYfoxrMyuEr0LUCaeLfKOGs=; b=eMTP8obKLxAXQt5xnsDW4v+x9tBv4EwYSyNchPAH3P0UIyQvQFTNaXPhkutw6uB3Zk u9+cGI2Lm63FNRYheuipBTljqPAHvbJoaCua49D8YCxrSIy2aU8Et0ed98iF4uHvH3cY SUjfhRYUxAp8jBBlLAqk6ZnlbIk5X442/75cI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WtIlfV0TRfMwcTJkeyhrUYfoxrMyuEr0LUCaeLfKOGs=; b=vEe47kpHGziDqnBcgXc7pDzAHggto15a77HW1bcBUXF5x949Bs0fXLCChWVwRvbS2K aSo11sy420xJS/txBwiJzrsey56Vd52UAIDuCVCoyV3lACsutzfwF5H2OLxOeeF7ZOjw 5qM8gKI/ajQt/Hn0gOPZwwp8PDpv7PY+RFqq1QOV9Hl/IGUORwalwNR5G3vU8X0Ll0hq w2xanrf8nwjtmRm9yxwWBxi52ggfxD7mcdb2kGDMdnyw+b+i33kRHDvjZPYGhc7qraoX Zd+XzQ1Tz4eHKxYAJMoJQTGeVgkqzmj3xkCkcHdyp1FKHJAT6WZSoBB3rVmJSAgWPsau eSXw== X-Gm-Message-State: AJIora+gwW/z5OOKrQQ5w2Jq0VHO+L5quJjOteLwbwoHuQDGhVGJ2P74 0Z3yYCrS3hj9f6sJwNVwbTfs8dfSg4qDeA== X-Google-Smtp-Source: AGRyM1uCFwgwAlh/8Q2w7NsXL5N7D0o4L6UMaDO7HEEYdidMdgTZqg4vkPY8gcdBpB23KukOVh3JLQ== X-Received: by 2002:a17:907:7638:b0:72d:f11b:5ebb with SMTP id jy24-20020a170907763800b0072df11b5ebbmr8846038ejc.647.1658732069630; Sun, 24 Jul 2022 23:54:29 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-87-14-98-67.retail.telecomitalia.it. [87.14.98.67]) by smtp.gmail.com with ESMTPSA id r2-20020a1709060d4200b00722e57fa051sm4967711ejh.90.2022.07.24.23.54.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jul 2022 23:54:29 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Jeroen Hofstee , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Marc Kleine-Budde , Paolo Abeni , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v2 4/6] can: slcan: use the generic can_change_mtu() Date: Mon, 25 Jul 2022 08:54:17 +0200 Message-Id: <20220725065419.3005015-5-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220725065419.3005015-1-dario.binacchi@amarulasolutions.com> References: <20220725065419.3005015-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" It is useless to define a custom function that does nothing but always return the same error code. Better to use the generic can_change_mtu() function. Signed-off-by: Dario Binacchi --- (no changes since v1) drivers/net/can/slcan/slcan-core.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/drivers/net/can/slcan/slcan-core.c b/drivers/net/can/slcan/slc= an-core.c index 09d4abbbd9f4..919311890d2c 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -740,16 +740,11 @@ static int slcan_netdev_open(struct net_device *dev) return err; } =20 -static int slcan_netdev_change_mtu(struct net_device *dev, int new_mtu) -{ - return -EINVAL; -} - static const struct net_device_ops slcan_netdev_ops =3D { .ndo_open =3D slcan_netdev_open, .ndo_stop =3D slcan_netdev_close, .ndo_start_xmit =3D slcan_netdev_xmit, - .ndo_change_mtu =3D slcan_netdev_change_mtu, + .ndo_change_mtu =3D can_change_mtu, }; =20 /****************************************** --=20 2.32.0 From nobody Fri Dec 19 18:46:38 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2CF78C43334 for ; Mon, 25 Jul 2022 06:56:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233162AbiGYG4F (ORCPT ); Mon, 25 Jul 2022 02:56:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38278 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232492AbiGYGzJ (ORCPT ); Mon, 25 Jul 2022 02:55:09 -0400 Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [IPv6:2a00:1450:4864:20::635]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F1E6112A89 for ; Sun, 24 Jul 2022 23:54:44 -0700 (PDT) Received: by mail-ej1-x635.google.com with SMTP id z23so18673977eju.8 for ; Sun, 24 Jul 2022 23:54:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=pq/5uoR3fJ3+2D6CJyRqXD1+RmzBjoigPwoKjoPD5TI=; b=J1YmFNSGqCGs0oFoTsH/GuL9y0lEMnoO0H1H2V9BVDeJmmoHUWp9Diatl+j3qPNdEH fNWgGg+vPLvwpfYFh20FkzTUurUwMFB4cOu+ZOKya/vq6g/8RbD8fut2cNI4Iw7dDN1H ww1gl39ZzAgR+f0Iu+TqdWVP7o6tvDjFgidLI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=pq/5uoR3fJ3+2D6CJyRqXD1+RmzBjoigPwoKjoPD5TI=; b=lOiQERxU1Sn0LGAqhpfzCCSWEsCZa3glZcuc1oRsO3bmCX5r2R+x1HL014S7t/he3a Kj69AnsF6CSSO/6dyHpyceCX86w+PtZ6WGs3kVXVsHbSDUyAxOC/eKQpxV+n+ClpHI3K 13VZfq2cxiV4cOs7RNJzWbxkMYDQ1GDP17BlpxcUX1ycVqPJTWZPPSrbiH6MlP8vVBma yfOusdBSfLGeht9+lslh8xZME4CV7U3/8MPQKdWvmOGl4KRcCDt4zhWFN/4MbeJS4TEI IgjhZlekzP6n9d10j0lv7zb9ooOYkNwJbeW/yXxMC5oz79V1LiWyfRDX1Xn4JC8DIJ/e BzAg== X-Gm-Message-State: AJIora+H8kM4TucgRrUCMUWDr0pWauUpzsKtmkgz2QPVlaIXW+799qKn WOKAz7LQndnwb+1myM/eJDUVmD9WN+TgrQ== X-Google-Smtp-Source: AGRyM1sP3g90eayg5p2dnArwYgQnccqgg13tHwuwEi32PELyLFY62vsbe+VXfs6nSaVzeWDIfLQpnQ== X-Received: by 2002:a17:907:3ea6:b0:72b:4a06:989a with SMTP id hs38-20020a1709073ea600b0072b4a06989amr8756566ejc.168.1658732070983; Sun, 24 Jul 2022 23:54:30 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-87-14-98-67.retail.telecomitalia.it. [87.14.98.67]) by smtp.gmail.com with ESMTPSA id r2-20020a1709060d4200b00722e57fa051sm4967711ejh.90.2022.07.24.23.54.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jul 2022 23:54:30 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Jeroen Hofstee , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Marc Kleine-Budde , Paolo Abeni , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v2 5/6] can: slcan: add support for listen-only mode Date: Mon, 25 Jul 2022 08:54:18 +0200 Message-Id: <20220725065419.3005015-6-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220725065419.3005015-1-dario.binacchi@amarulasolutions.com> References: <20220725065419.3005015-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" For non-legacy, i.e. ip based configuration, add support for listen-only mode. If listen-only is requested send a listen-only ("L\r") command instead of an open ("O\r") command to the adapter. Signed-off-by: Dario Binacchi --- Changes in v2: - Remove comment on listen-only command. - Update the commit subject and description. drivers/net/can/slcan/slcan-core.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/net/can/slcan/slcan-core.c b/drivers/net/can/slcan/slc= an-core.c index 919311890d2c..76f20dc1aa90 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -724,10 +724,20 @@ static int slcan_netdev_open(struct net_device *dev) } } =20 - err =3D slcan_transmit_cmd(sl, "O\r"); - if (err) { - netdev_err(dev, "failed to send open command 'O\\r'\n"); - goto cmd_transmit_failed; + if (sl->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) { + err =3D slcan_transmit_cmd(sl, "L\r"); + if (err) { + netdev_err(dev, + "failed to send listen-only command 'L\\r'\n"); + goto cmd_transmit_failed; + } + } else { + err =3D slcan_transmit_cmd(sl, "O\r"); + if (err) { + netdev_err(dev, + "failed to send open command 'O\\r'\n"); + goto cmd_transmit_failed; + } } } =20 @@ -814,6 +824,7 @@ static int slcan_open(struct tty_struct *tty) /* Configure CAN metadata */ sl->can.bitrate_const =3D slcan_bitrate_const; sl->can.bitrate_const_cnt =3D ARRAY_SIZE(slcan_bitrate_const); + sl->can.ctrlmode_supported =3D CAN_CTRLMODE_LISTENONLY; =20 /* Configure netdev interface */ sl->dev =3D dev; --=20 2.32.0 From nobody Fri Dec 19 18:46:38 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D68CEC433EF for ; Mon, 25 Jul 2022 06:56:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233240AbiGYG4P (ORCPT ); Mon, 25 Jul 2022 02:56:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38060 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232280AbiGYGzO (ORCPT ); Mon, 25 Jul 2022 02:55:14 -0400 Received: from mail-ej1-x62a.google.com (mail-ej1-x62a.google.com [IPv6:2a00:1450:4864:20::62a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6BF661275E for ; Sun, 24 Jul 2022 23:54:48 -0700 (PDT) Received: by mail-ej1-x62a.google.com with SMTP id l23so18861999ejr.5 for ; Sun, 24 Jul 2022 23:54:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=42msKn5+43W2nDXBTScN29lMEs7hqwpf7Xhq17IH5cY=; b=DyfTiEUMRkIwWhb8HTM8IcCI9df/WFXrvhdkwpkc38iFnxOhsV9DvHvC6r8ZDWqZDU y4MwZUMdJV0PMhBO9bPg7N9ilwc6c9yaDV8W8NfWh69Xa1uU/tJTEaF8tcq87zznmmyE hEVTb/ftAGx6aOKwqol+DewRvDYBQbngIuLv8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=42msKn5+43W2nDXBTScN29lMEs7hqwpf7Xhq17IH5cY=; b=GovfBfnoeQfRoy6V2Q6RxyT7894S3lwcD6DyRHAPa5i+ZVxWFdTbJPb2f2B4F/TFL1 ZyVYftuNHqonUrK6Umk/a4n2FOZeU9Gx1Ruy9XtBekY5GT8W9mjf7pn175pwUQHUiDzt u55xjq+RyK/wAfsax+u49fXrRFWinFMfBFSWpc5HjDP58W8512Ec9krdxON44oFCQ6Xl mqHLg3dy+UbtAqhNzwXHLDnWjtyloesEA6UOXDvAbqWdPbsMwMohMdSmgOICb3q1CqDW tE5zxH19/zN/tvTlfXq7PUcjL1fnrisIJuhtM4RJJwN0Zl/IwnOq8HaCyH8BepOtnAiq EA7g== X-Gm-Message-State: AJIora/+HryarlMDy2gthQ7l6dU4MThMAbIXtFyULrBvA1IVUz19OmXC OHU8b0bIYvZOPz07FszQeO2QoHKK9kqWYg== X-Google-Smtp-Source: AGRyM1vF5ZVzk0W7PV3udWbZvg9GB1BbplqYZ1ugpxe7+rKxWpYXX9OpNYUGyckInTlGzsEz7DztOg== X-Received: by 2002:a17:906:6a29:b0:72e:e716:d220 with SMTP id qw41-20020a1709066a2900b0072ee716d220mr8674769ejc.82.1658732072425; Sun, 24 Jul 2022 23:54:32 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-87-14-98-67.retail.telecomitalia.it. [87.14.98.67]) by smtp.gmail.com with ESMTPSA id r2-20020a1709060d4200b00722e57fa051sm4967711ejh.90.2022.07.24.23.54.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jul 2022 23:54:32 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Jeroen Hofstee , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Marc Kleine-Budde , Paolo Abeni , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v2 6/6] MAINTAINERS: Add maintainer for the slcan driver Date: Mon, 25 Jul 2022 08:54:19 +0200 Message-Id: <20220725065419.3005015-7-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220725065419.3005015-1-dario.binacchi@amarulasolutions.com> References: <20220725065419.3005015-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" At the suggestion of its author Oliver Hartkopp ([1]), I take over the maintainer-ship and add myself to the authors of the driver. [1] https://marc.info/?l=3Dlinux-can&m=3D165806705927851&w=3D2 Signed-off-by: Dario Binacchi Suggested-by: Oliver Hartkopp --- Changes in v2: - Add the patch "MAINTAINERS: Add myself as maintainer of the SLCAN driver" to the series. MAINTAINERS | 6 ++++++ drivers/net/can/slcan/slcan-core.c | 1 + 2 files changed, 7 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index fc7d75c5cdb9..74e42f78e7cb 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -18448,6 +18448,12 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/g= it/vbabka/slab.git F: include/linux/sl?b*.h F: mm/sl?b* =20 +SLCAN CAN NETWORK DRIVER +M: Dario Binacchi +L: linux-can@vger.kernel.org +S: Maintained +F: drivers/net/can/slcan/ + SLEEPABLE READ-COPY UPDATE (SRCU) M: Lai Jiangshan M: "Paul E. McKenney" diff --git a/drivers/net/can/slcan/slcan-core.c b/drivers/net/can/slcan/slc= an-core.c index 76f20dc1aa90..54f16ebd72bc 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -61,6 +61,7 @@ MODULE_ALIAS_LDISC(N_SLCAN); MODULE_DESCRIPTION("serial line CAN interface"); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Oliver Hartkopp "); +MODULE_AUTHOR("Dario Binacchi "); =20 /* maximum rx buffer len: extended CAN frame with timestamp */ #define SLCAN_MTU (sizeof("T1111222281122334455667788EA5F\r") + 1) --=20 2.32.0