From nobody Wed Apr 15 04:16:50 2026 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 95A1CC04A68 for ; Tue, 26 Jul 2022 21:03:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239657AbiGZVDb (ORCPT ); Tue, 26 Jul 2022 17:03:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52554 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233029AbiGZVD2 (ORCPT ); Tue, 26 Jul 2022 17:03:28 -0400 Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AAC0A3246F for ; Tue, 26 Jul 2022 14:03:26 -0700 (PDT) Received: by mail-ej1-x632.google.com with SMTP id oy13so28291385ejb.1 for ; Tue, 26 Jul 2022 14:03:26 -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=W6W3RCGbQm1ftNxYyveQiUbovGJZ//OaxbWEapVu2yM=; b=VlEPTxUOtupcAqH7Q4BD8fcqrFDVV/Op6UWKf2AerNjOnj1M9GeBbUX05bPqPMGwgh 4Pasf+xKWSfvxxbCCdonxcXzlMEv2B6VPJhQzQMJkqLHxeb/35XOoyive9dcYQbiIaXE qoMYB3pGw8UaVztIg2OSZ7ofDzMG7VDJjkEIY= 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=W6W3RCGbQm1ftNxYyveQiUbovGJZ//OaxbWEapVu2yM=; b=jatnDwbeUlUCyyPj0MQnxipqtr5V9CDxHlIbOpENMg3x5ccFLXk9etjFIcwA055b4+ ZxkfhLtrVVqvaCjGBiQ8ZWk2+Rz2x/uBnccNJ6uAvM2Zx1EjweKQ0YvQE1oUlc8bWlp7 CIysOxm7PCjBC/OBgIf/MBkoHi3EzMPmp+yFOJiuX0rYqpw/+CHburHvUjeeE4qnuRp8 KsTaGInyvQ6wOoF1RZhHV3ea1pF+L7ufmCuVQivAsqjMK02VFS9PPlCfZApHrE9bmN2H IGy4fdfXi46QEQDrIgq8ZzVGyQobkldoFxg6UG8QWBwc07v+nSu4ieBS0/0QW+iE5P4y GFpg== X-Gm-Message-State: AJIora/r9wqxyT9gtKeYtpPbViIJ+Rs29JW0IpMtnFax4pAODPoJFaSB H/qzWQ5WJuJcSbTcGTLaiOqo++9tpu85Og== X-Google-Smtp-Source: AGRyM1vdjURo5XZsAvWoObXRQZFMuwHajMMkylLtEPuoRNgyUYUVe6IoiY1vN0nttuSapaQH3q0gEA== X-Received: by 2002:a17:907:2722:b0:72b:735a:d3b4 with SMTP id d2-20020a170907272200b0072b735ad3b4mr15381214ejl.363.1658869404930; Tue, 26 Jul 2022 14:03:24 -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 y19-20020aa7d513000000b0043a7293a03dsm9092849edq.7.2022.07.26.14.03.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 14:03:24 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: linux-can@vger.kernel.org, Marc Kleine-Budde , Oliver Hartkopp , michael@amarulasolutions.com, Amarula patchwork , Jeroen Hofstee , Vincent Mailhol , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Wolfgang Grandegger , netdev@vger.kernel.org Subject: [RFC PATCH v3 1/9] can: slcan: use KBUILD_MODNAME and define pr_fmt to replace hardcoded names Date: Tue, 26 Jul 2022 23:02:09 +0200 Message-Id: <20220726210217.3368497-2-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220726210217.3368497-1-dario.binacchi@amarulasolutions.com> References: <20220726210217.3368497-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" From: Vincent Mailhol The driver uses the string "slcan" to populate tty_ldisc_ops::name. KBUILD_MODNAME also evaluates to "slcan". Use KBUILD_MODNAME to get rid on the hardcoded string names. Similarly, the pr_info() and pr_err() hardcoded the "slcan" prefix. Define pr_fmt so that the "slcan" prefix gets automatically added. CC: Dario Binacchi Signed-off-by: Vincent Mailhol Signed-off-by: Dario Binacchi Reviewed-by to patch 3. --- (no changes since v1) drivers/net/can/slcan/slcan-core.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/net/can/slcan/slcan-core.c b/drivers/net/can/slcan/slc= an-core.c index dfd1baba4130..2c9d9fc19ea9 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -35,6 +35,8 @@ * */ =20 +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + #include #include =20 @@ -863,7 +865,7 @@ static struct slcan *slc_alloc(void) if (!dev) return NULL; =20 - snprintf(dev->name, sizeof(dev->name), "slcan%d", i); + snprintf(dev->name, sizeof(dev->name), KBUILD_MODNAME "%d", i); dev->netdev_ops =3D &slc_netdev_ops; dev->base_addr =3D i; slcan_set_ethtool_ops(dev); @@ -936,7 +938,7 @@ static int slcan_open(struct tty_struct *tty) rtnl_unlock(); err =3D register_candev(sl->dev); if (err) { - pr_err("slcan: can't register candev\n"); + pr_err("can't register candev\n"); goto err_free_chan; } } else { @@ -1027,7 +1029,7 @@ static int slcan_ioctl(struct tty_struct *tty, unsign= ed int cmd, static struct tty_ldisc_ops slc_ldisc =3D { .owner =3D THIS_MODULE, .num =3D N_SLCAN, - .name =3D "slcan", + .name =3D KBUILD_MODNAME, .open =3D slcan_open, .close =3D slcan_close, .hangup =3D slcan_hangup, @@ -1043,8 +1045,8 @@ static int __init slcan_init(void) if (maxdev < 4) maxdev =3D 4; /* Sanity */ =20 - pr_info("slcan: serial line CAN interface driver\n"); - pr_info("slcan: %d dynamic interface channels.\n", maxdev); + pr_info("serial line CAN interface driver\n"); + pr_info("%d dynamic interface channels.\n", maxdev); =20 slcan_devs =3D kcalloc(maxdev, sizeof(struct net_device *), GFP_KERNEL); if (!slcan_devs) @@ -1053,7 +1055,7 @@ static int __init slcan_init(void) /* Fill in our line protocol discipline, and register it */ status =3D tty_register_ldisc(&slc_ldisc); if (status) { - pr_err("slcan: can't register line discipline\n"); + pr_err("can't register line discipline\n"); kfree(slcan_devs); } return status; --=20 2.32.0 From nobody Wed Apr 15 04:16:50 2026 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 DDFB0C3F6B0 for ; Tue, 26 Jul 2022 21:03:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239992AbiGZVDk (ORCPT ); Tue, 26 Jul 2022 17:03:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52576 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231648AbiGZVD3 (ORCPT ); Tue, 26 Jul 2022 17:03:29 -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 3AF3D2D1DD for ; Tue, 26 Jul 2022 14:03:28 -0700 (PDT) Received: by mail-ej1-x62a.google.com with SMTP id j22so28308349ejs.2 for ; Tue, 26 Jul 2022 14:03:28 -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=OqbFbN5WONXbXcraJR8YQy0FCGLdvzQc4+bJ+5uxeJs=; b=AJArippnnVJrNNxwpF9RaBN43OT3PN+mHEjLLObIgaepbCEBvdxMJY2KrqohbHA/RT rd2r/ZSqWHgd8Dke+ek273q6Onfu1aCFOXPQPO+2ut7akHvr8NVQRIQgrKceqE7slxL9 c3Jfy3tV5rVFPQe5jU5zM0qRLukKXP44YsTso= 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=OqbFbN5WONXbXcraJR8YQy0FCGLdvzQc4+bJ+5uxeJs=; b=euGbqyPHyAjMNu4LweeM2niOQVHTavispY0UF0rdWX1kzQ/H8GlXkX43XzpCm91byE F5eXDIpz3+TpAHwKA5A9ot3kjFcPi8jtx9olAeQXvCt60niGzDWf2cBJ3Z7ksnSPlhCa PF5iXBfK2FkORLnvm5kBbgQVuwFaoxIxYV+g5qwQnuc4/kgaLa3LDp9qpQiJ8eGu09Di ew6uhQeb2neUvrQPhk7C1sTEUf1RiASKU0LN8Eysoosdg8/PCJYyX7aR3uU9LeQnxh2N 13mAmYY4abSV1OYRNte7PHqDtfvrK8bG3Vn0VdzrRheoOHrO+Ti6mqf5ME2kIONb4sV5 ePHg== X-Gm-Message-State: AJIora/mlEqOfXkEFoDHd5Pd17cI6+zCw3t8f3atw597Cw7QZd5XVLnR I0J0HbHlF7ZbCivBhurXOIkVZu24heWN/w== X-Google-Smtp-Source: AGRyM1uy1q7I3r4J2g2pa1PWt8OWZXDqFWlZmqoSzL0nmUf8z+mbe7/4D0zGVZT/tQPP86frqwslmw== X-Received: by 2002:a17:907:1dde:b0:72b:11ae:700b with SMTP id og30-20020a1709071dde00b0072b11ae700bmr15003401ejc.520.1658869406249; Tue, 26 Jul 2022 14:03: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 y19-20020aa7d513000000b0043a7293a03dsm9092849edq.7.2022.07.26.14.03.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 14:03:25 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: linux-can@vger.kernel.org, Marc Kleine-Budde , Oliver Hartkopp , michael@amarulasolutions.com, Amarula patchwork , Jeroen Hofstee , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Wolfgang Grandegger , netdev@vger.kernel.org Subject: [RFC PATCH v3 2/9] can: slcan: remove useless header inclusions Date: Tue, 26 Jul 2022 23:02:10 +0200 Message-Id: <20220726210217.3368497-3-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220726210217.3368497-1-dario.binacchi@amarulasolutions.com> References: <20220726210217.3368497-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 Reviewed-by to patch 3. --- (no changes since v2) 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 2c9d9fc19ea9..ca383c43167d 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -48,9 +48,6 @@ #include #include #include -#include -#include -#include #include #include #include --=20 2.32.0 From nobody Wed Apr 15 04:16:50 2026 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 796C8C3F6B0 for ; Tue, 26 Jul 2022 21:03:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240023AbiGZVDp (ORCPT ); Tue, 26 Jul 2022 17:03:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52628 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239699AbiGZVDc (ORCPT ); Tue, 26 Jul 2022 17:03:32 -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 84CBC2D1CB for ; Tue, 26 Jul 2022 14:03:29 -0700 (PDT) Received: by mail-ej1-x635.google.com with SMTP id l23so28311364ejr.5 for ; Tue, 26 Jul 2022 14:03:29 -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=/ac0Q7GMzAEMsQwLaT1dVDiOWbMoyTjs+XySi2clUug=; b=FN2PORv3Fu4zohF/Z/UaVaR2JkLjkRIaF2VCjQ9RN4mUpDDiv3Aw+IA2tAzeEe83qS 0RZK2r5KQTb3djmnElqn8iJM/BFMrQcHg60NC0VKTifQYAkAhJPqAdZjYK/t9DQelKGV zuNmCwo/9j3AW1d+xHm1aHUJm55QpmmO/mnsg= 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=/ac0Q7GMzAEMsQwLaT1dVDiOWbMoyTjs+XySi2clUug=; b=U2oo5s0cJgXeGLGsavLHltAEM3L5wCXM+n24muBfsuPDbSG0jWJLxWzvYkLcAs8Dvk i7wjE789tNZ3WoO7QJswf00CgZjtPGSCMgkg+al/RxJ5yix1hftxAE+aV+ha/fy2LYbJ uHT5KpAmBJUoENEM0R0eQ7QmMxQ0ZeqiGC/Dqppdoelv56tlQeLoh47ZGbl3Wn56/ESq FUZHhcWheBXWdv4KpyfDFXt8ao+/5kLFXZRLTiqlajC4+H16rUDEIGQujuMXtMKQsb8W sNimaYC4ktBMdQV4g2v9z9/oUgzGja6DhjWyeVH2AFGpaUIz+pIjWaBNYUwevdwQi882 Wuhw== X-Gm-Message-State: AJIora+P1Uozlb43fpMs/zKJhagkc76UdDmPna1dx626oXvl8kG11ZJC ml2LdsGmfQDxgFcNqWeMP+8IL8AGgLTFfQ== X-Google-Smtp-Source: AGRyM1th3gkSFMb24f+SeRdCEtYH8gxqQoyuQsMVWT17YNIDLCvAN7quPZyqr5/94kdxijAUAbC4bA== X-Received: by 2002:a17:907:6d01:b0:72f:53f:7a25 with SMTP id sa1-20020a1709076d0100b0072f053f7a25mr15070081ejc.126.1658869407603; Tue, 26 Jul 2022 14:03:27 -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 y19-20020aa7d513000000b0043a7293a03dsm9092849edq.7.2022.07.26.14.03.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 14:03:27 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: linux-can@vger.kernel.org, Marc Kleine-Budde , Oliver Hartkopp , michael@amarulasolutions.com, Amarula patchwork , Jeroen Hofstee , Dario Binacchi , Max Staudt , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Wolfgang Grandegger , netdev@vger.kernel.org Subject: [RFC PATCH v3 3/9] can: slcan: remove legacy infrastructure Date: Tue, 26 Jul 2022 23:02:11 +0200 Message-Id: <20220726210217.3368497-4-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220726210217.3368497-1-dario.binacchi@amarulasolutions.com> References: <20220726210217.3368497-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. The ioctl SIOCGIFNAME can be used to query the name of the created interface. Furthermore, there are several ways to get stable interfaces names in user space, e.g. udev or systemd-networkd. The `maxdev' module parameter has also been removed. CC: Max Staudt Signed-off-by: Dario Binacchi Reviewed-by to patch 3. Reviewed-by: Max Staudt --- Changes in v3: - Update the commit message. - Use 1 space in front of the =3D. 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 ca383c43167d..0d309d0636df 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 @@ -38,7 +41,6 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt =20 #include -#include =20 #include #include @@ -48,7 +50,6 @@ #include #include #include -#include #include #include #include @@ -63,15 +64,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 @@ -85,7 +77,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 */ @@ -101,17 +92,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 @@ -555,9 +543,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; } @@ -592,13 +579,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. */ @@ -669,25 +652,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) @@ -703,9 +682,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 @@ -720,8 +696,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]) @@ -765,14 +739,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; @@ -802,7 +768,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 */ @@ -817,80 +783,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), KBUILD_MODNAME "%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 @@ -900,72 +801,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("can't register candev\n"); - goto err_free_chan; - } - } else { - rtnl_unlock(); + err =3D register_candev(dev); + if (err) { + free_candev(dev); + pr_err("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. */ @@ -973,28 +851,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. */ @@ -1004,10 +874,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; @@ -1029,7 +895,6 @@ static struct tty_ldisc_ops slc_ldisc =3D { .name =3D KBUILD_MODNAME, .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, @@ -1039,78 +904,21 @@ static int __init slcan_init(void) { int status; =20 - if (maxdev < 4) - maxdev =3D 4; /* Sanity */ - pr_info("serial line CAN interface driver\n"); - pr_info("%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("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 Wed Apr 15 04:16:50 2026 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 3F690C04A68 for ; Tue, 26 Jul 2022 21:04:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232529AbiGZVD6 (ORCPT ); Tue, 26 Jul 2022 17:03:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52656 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239222AbiGZVDd (ORCPT ); Tue, 26 Jul 2022 17:03:33 -0400 Received: from mail-ed1-x530.google.com (mail-ed1-x530.google.com [IPv6:2a00:1450:4864:20::530]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C5301326FD for ; Tue, 26 Jul 2022 14:03:30 -0700 (PDT) Received: by mail-ed1-x530.google.com with SMTP id e15so19151232edj.2 for ; Tue, 26 Jul 2022 14:03:30 -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=zm8CDawEO00pmFYhToSSc819K70UuVm9tw0evLiuI+U=; b=JjIRB3L+ymk101VegKATsxOrMsg69EhoxbTSCH5atLgM/DDDzc0tFTSc5mW6AsNtHX hJFT1RjkCGHOhiMaFcU7jZ//ZN4dDDUbIZIt0Bm6Mjikuld1+0SLiDTEgqUAR0s4xZgh Y3iEFdH+FcPF2KlzOrFnGya+eeEfP583zRHZw= 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=zm8CDawEO00pmFYhToSSc819K70UuVm9tw0evLiuI+U=; b=XYQe6p9sJPyMnYBV7MHWk60HjacG9lOSBKOc2zBeThK8hJ5YNoXECzHmKDa/+bhgnY zIaACRK/hy+W5DF02OSiVHmfHJWCuNd0eaVSOa+rfEuQsyqYj5T5ef8j4NvbcAznBD7h 6TIdA/TzBqukoy9aiB08JDzd9YllLnHhQcO5zWkO+Ns3oXZPU9+vJKHEXfhbPLy7Ogce P5hCWAbX1solMcDWRuzOO95Q2/HN+/e+Jr2ev0oF+WlR5GAm0Lxr2yotJr7Kf5IMnlnA BeA0m/qEReG21sN44qCS4LLsvvMIy4rHOSXc3rtnXyMlRhcS8L0jjcqVaTTIDDJukvT5 vAKw== X-Gm-Message-State: AJIora/XSTdgprPechlu5s5qmH+aMIqCqjLtTYfqOyUAjkdkVlpeVQ3j +b9gAhUg83a0qdGHIWNndilmoXNuqfm3kw== X-Google-Smtp-Source: AGRyM1t1p7ZzHjx12NU4+IanfzN1IG2NcT6IOgHK+04S5CY+mpDpN9oEjQdS+Rdj2uG2I9LJwCh76Q== X-Received: by 2002:a05:6402:5508:b0:43a:896e:8edd with SMTP id fi8-20020a056402550800b0043a896e8eddmr20002251edb.203.1658869408977; Tue, 26 Jul 2022 14:03: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 y19-20020aa7d513000000b0043a7293a03dsm9092849edq.7.2022.07.26.14.03.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 14:03:28 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: linux-can@vger.kernel.org, Marc Kleine-Budde , Oliver Hartkopp , michael@amarulasolutions.com, Amarula patchwork , Jeroen Hofstee , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Wolfgang Grandegger , netdev@vger.kernel.org Subject: [RFC PATCH v3 4/9] can: slcan: change every `slc' occurrence in `slcan' Date: Tue, 26 Jul 2022 23:02:12 +0200 Message-Id: <20220726210217.3368497-5-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220726210217.3368497-1-dario.binacchi@amarulasolutions.com> References: <20220726210217.3368497-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 Reviewed-by to patch 3. --- (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 0d309d0636df..bd8e84ded051 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -65,16 +65,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 @@ -85,9 +86,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 @@ -166,7 +167,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; @@ -186,10 +187,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; @@ -197,16 +198,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; @@ -253,7 +254,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; @@ -279,16 +280,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 @@ -316,7 +317,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; @@ -332,7 +333,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); @@ -340,7 +341,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': @@ -429,7 +430,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': @@ -439,11 +440,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; } @@ -455,12 +456,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; } @@ -476,7 +477,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; @@ -493,11 +494,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 */ @@ -507,7 +508,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 @@ -585,7 +587,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 @@ -604,7 +607,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: @@ -647,7 +650,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; @@ -676,10 +679,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 @@ -739,16 +742,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 /****************************************** @@ -821,7 +824,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 */ @@ -889,7 +892,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 KBUILD_MODNAME, @@ -907,7 +910,7 @@ static int __init slcan_init(void) pr_info("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("can't register line discipline\n"); =20 @@ -919,7 +922,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 Wed Apr 15 04:16:50 2026 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 1C740C3F6B0 for ; Tue, 26 Jul 2022 21:03:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240004AbiGZVDy (ORCPT ); Tue, 26 Jul 2022 17:03:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52674 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239853AbiGZVDd (ORCPT ); Tue, 26 Jul 2022 17:03:33 -0400 Received: from mail-ej1-x631.google.com (mail-ej1-x631.google.com [IPv6:2a00:1450:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 58B6E2CE34 for ; Tue, 26 Jul 2022 14:03:32 -0700 (PDT) Received: by mail-ej1-x631.google.com with SMTP id sz17so28307132ejc.9 for ; Tue, 26 Jul 2022 14:03: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=aNGQLRTnPxlP6A96D7J1ivHff8xTlXOO4TAacZru318=; b=KECnBmgqIAt05NhVOP7rOcoZ3GX1Rgo9FMzMDQUFPRBWamVIalBGJXkBxMF1ljKl/x VfTmGxVlppiIeRodycyrkpksqUK1EtDqYzeWmrZy1C3E8PK6qf2gXxLwVNB3BUvXyYrV EInTtznQ8iYeLZk7/yagV2umvWf2ZWXSX6q00= 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=aNGQLRTnPxlP6A96D7J1ivHff8xTlXOO4TAacZru318=; b=uSkyuHF8xvDgWd/mYvIbhI1of3k4aitV8ZnltJCr5Dzsykc5hUaEMYath3TzcBvMJt znGn3JuYVbbmewnhiOpZ5w5cgXtWdg6r9nmLuaQj1ceZfjvUyyOQ+mSosRgZo55D3oT5 19Hcyf+81W1H6XedpiF4kvRh+MbsFZ4ExV4mrxUD3JLaHF/CPfG7eBs361lqZshX2EV6 YtGkzs2h+YpqEZECQn0Nt6PDCV6MsSdKYopVxSDoXVBGe+QDUPtTvmu8BLjinwmld/NI cmf5rismAbIhUM4/pdMuzax2A4QVJaz/jvJ/j47PAnQN9/FTokL4OaygpMEihgp/09Kl xv6w== X-Gm-Message-State: AJIora8RIU8Y5M1VQ/Bvb5j5ko23y1Cqu9DNKwJWHIW6eroXnEtqTK9c C5Q9Hgd5sGJCpptWjBZy+bbZojp72ETiMg== X-Google-Smtp-Source: AGRyM1t+InpFB1jgLKc7ZMEi3BQwy6b/qxSpP+DL9S00Ravpayp4aI7dQnTnjinto4kAzFne6jGuAw== X-Received: by 2002:a17:906:ef8b:b0:72b:4a67:8ae5 with SMTP id ze11-20020a170906ef8b00b0072b4a678ae5mr15506155ejb.763.1658869410261; Tue, 26 Jul 2022 14:03: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 y19-20020aa7d513000000b0043a7293a03dsm9092849edq.7.2022.07.26.14.03.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 14:03:29 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: linux-can@vger.kernel.org, Marc Kleine-Budde , Oliver Hartkopp , michael@amarulasolutions.com, Amarula patchwork , Jeroen Hofstee , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Wolfgang Grandegger , netdev@vger.kernel.org Subject: [RFC PATCH v3 5/9] can: slcan: use the generic can_change_mtu() Date: Tue, 26 Jul 2022 23:02:13 +0200 Message-Id: <20220726210217.3368497-6-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220726210217.3368497-1-dario.binacchi@amarulasolutions.com> References: <20220726210217.3368497-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 Reviewed-by to patch 3. --- (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 bd8e84ded051..d12d98426f37 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -742,16 +742,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 Wed Apr 15 04:16:50 2026 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 6E0B7C00144 for ; Tue, 26 Jul 2022 21:03:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239994AbiGZVDu (ORCPT ); Tue, 26 Jul 2022 17:03:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52722 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239872AbiGZVDe (ORCPT ); Tue, 26 Jul 2022 17:03:34 -0400 Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ECDEB39B84 for ; Tue, 26 Jul 2022 14:03:32 -0700 (PDT) Received: by mail-ej1-x632.google.com with SMTP id oy13so28291829ejb.1 for ; Tue, 26 Jul 2022 14:03: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=rbjoK64u0Nv21CxxlQFKwTPmVGnv7nDMih2pZ9805sY=; b=GloOwx/mjqWNTBIruncM9LkFCOZkc2UOaD7IseiTwHdhn4irmVkMfStnM5n8Zh1qNL 20V9WdntIvH8ofXnikjslCLyjDCyDLIc6SxHaLnX1LVdQwluiyctg8RrfF7P422yWmr0 gW/rtFlANqXyZ/euPB9UEWKlLTxfIGasBCw5Y= 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=rbjoK64u0Nv21CxxlQFKwTPmVGnv7nDMih2pZ9805sY=; b=dOkyAQ3EDB9cPCLG/9S+k2Fj/9Uyd5dpKUoOr5xEZJtoM+tsDdvPWwGcPNGJX7e0Ij BtVCBax06fpNWZlUuPFws9CbIY7K+gusPRCqNI4EY4EWqU4pi5ByXNYH9t1SuQGda0Be t9MCB9eLag/+4MovCmG7k3SqJEajp/zMPQuTDsH3dQWGGAbjj03Mecvq3f7EUuPq8pub CqdFwhQo9mXzmSvGDI55+dmQK4TCC6TVyxGmEKLYnWMqP4EUYnGRvsYJMCNT/Bgy5MTc UM2EC0tw7FObLxI1nsE8mAvBdhhXuPIpEcfepr06GBMvBwT8+DlFXNNk0NXBfabDW9ZT 4zCA== X-Gm-Message-State: AJIora+YzJuW+hAbo/hAxCH41db3WMzXmEYNpwRMJq1JBt7F5a5LYx53 XXEfxQo7aSwsId4AaAU7Mpc2Kxr1Kemmkw== X-Google-Smtp-Source: AGRyM1snew7kUCiFo9sAiSZ/cUgI5GLDEj3mYvcTRpfTmRKgyveqFEysewT5GbasKZ2X1WB3sl+v1g== X-Received: by 2002:a17:907:3f1a:b0:72b:394b:ad32 with SMTP id hq26-20020a1709073f1a00b0072b394bad32mr15286276ejc.445.1658869412188; Tue, 26 Jul 2022 14:03: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 y19-20020aa7d513000000b0043a7293a03dsm9092849edq.7.2022.07.26.14.03.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 14:03:31 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: linux-can@vger.kernel.org, Marc Kleine-Budde , Oliver Hartkopp , michael@amarulasolutions.com, Amarula patchwork , Jeroen Hofstee , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Wolfgang Grandegger , netdev@vger.kernel.org Subject: [RFC PATCH v3 6/9] can: slcan: add support for listen-only mode Date: Tue, 26 Jul 2022 23:02:14 +0200 Message-Id: <20220726210217.3368497-7-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220726210217.3368497-1-dario.binacchi@amarulasolutions.com> References: <20220726210217.3368497-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 Reviewed-by to patch 3. --- (no changes since v2) 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 d12d98426f37..45e521910236 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -726,10 +726,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 @@ -816,6 +826,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 Wed Apr 15 04:16:50 2026 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 A6033C00144 for ; Tue, 26 Jul 2022 21:04:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240013AbiGZVEQ (ORCPT ); Tue, 26 Jul 2022 17:04:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239902AbiGZVDf (ORCPT ); Tue, 26 Jul 2022 17:03:35 -0400 Received: from mail-ed1-x532.google.com (mail-ed1-x532.google.com [IPv6:2a00:1450:4864:20::532]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AF1703A48E for ; Tue, 26 Jul 2022 14:03:34 -0700 (PDT) Received: by mail-ed1-x532.google.com with SMTP id z22so19119942edd.6 for ; Tue, 26 Jul 2022 14:03:34 -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=qy2wWA6vClyZGhjx9DWjei+yWAv7tqnCtNEo36hW/K4=; b=I6feiYwmbmUoz9RV4PxX4J5rNfVBlvt/FdVVUwAcY8gFd3MFHKy73+QR5pyYmEmlnt 1zdPnnkJO+6MPYdENRqkZAicXR23cepCRnnLZbCLz3YXZjqzMZ2u3xd57Oz7KueBlHbQ 6MjoTU1WRz4y0fu6I0WB2aTZ5/nnCQ4wL1SKA= 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=qy2wWA6vClyZGhjx9DWjei+yWAv7tqnCtNEo36hW/K4=; b=y8rJz3RPaWIDaoHAak0f9JCJjoLOjfFBe6LjnSfs4bxPTrvInIZcE45m45kbhvwWrn u9HSJM8P9crefy6G5C7DP6f+WAY/e7vANduujc3yAKhisqKiD5EuOMO2Js6FiSg2gBt1 dqDMik6gBtzjvhdphxbXRiuQE36yjgp1+nJniHyTpU9f31eedAg9NkWzPTS9kx9abcWW xjTJRqncFY7lJSN7483boSXZvfzMM82vhBuu7B3AAE6sqQDOdNxUI2Vkrjo24zBcXAMh N2aQwkeUQ1h0oSs5XxLE6AwVqnkq/U1YfIXdKz+Ppz/+0cEBaSRkCL+nIMiPnK+gOVTy lDOQ== X-Gm-Message-State: AJIora80kt8VrmDag43tJ+SvBwCKkGBlBTPBzEUjGApNl6Kw1AdFMXs+ GZmrHpgVdIbKsSw81dZyULTAYnM8iWHehieJ X-Google-Smtp-Source: AGRyM1s4FNyDintDCE4biiDE1x37+NYAxAB7vyhNTDmhtysxhBDeSBYBN40gfwIO4LgkL6ul4NTNZw== X-Received: by 2002:a05:6402:371a:b0:43a:ece9:ab8e with SMTP id ek26-20020a056402371a00b0043aece9ab8emr19781113edb.126.1658869413951; Tue, 26 Jul 2022 14:03:33 -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 y19-20020aa7d513000000b0043a7293a03dsm9092849edq.7.2022.07.26.14.03.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 14:03:33 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: linux-can@vger.kernel.org, Marc Kleine-Budde , Oliver Hartkopp , michael@amarulasolutions.com, Amarula patchwork , Jeroen Hofstee , Dario Binacchi , Alexandru Tachici , Andrew Lunn , Arnd Bergmann , "David S. Miller" , Eric Dumazet , Guangbin Huang , "Gustavo A. R. Silva" , Hao Chen , Heiner Kallweit , Ido Schimmel , Jakub Kicinski , Leon Romanovsky , Oleksij Rempel , Paolo Abeni , Sean Anderson , Tom Rix , Yufeng Mo , netdev@vger.kernel.org Subject: [RFC PATCH v3 7/9] ethtool: add support to get/set CAN bit time register Date: Tue, 26 Jul 2022 23:02:15 +0200 Message-Id: <20220726210217.3368497-8-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220726210217.3368497-1-dario.binacchi@amarulasolutions.com> References: <20220726210217.3368497-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" Add ethtool support to get/set tunable values from/to the CAN bit time register (btr). CC: Marc Kleine-Budde CC: linux-can@vger.kernel.org Suggested-by: Marc Kleine-Budde Signed-off-by: Dario Binacchi Reviewed-by to patch 3. --- (no changes since v1) include/uapi/linux/ethtool.h | 1 + net/ethtool/common.c | 1 + net/ethtool/ioctl.c | 1 + 3 files changed, 3 insertions(+) diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h index e0f0ee9bc89e..a2d24f689124 100644 --- a/include/uapi/linux/ethtool.h +++ b/include/uapi/linux/ethtool.h @@ -232,6 +232,7 @@ enum tunable_id { ETHTOOL_TX_COPYBREAK, ETHTOOL_PFC_PREVENTION_TOUT, /* timeout in msecs */ ETHTOOL_TX_COPYBREAK_BUF_SIZE, + ETHTOOL_CAN_BTR, /* * Add your fresh new tunable attribute above and remember to update * tunable_strings[] in net/ethtool/common.c diff --git a/net/ethtool/common.c b/net/ethtool/common.c index 566adf85e658..78f23b898243 100644 --- a/net/ethtool/common.c +++ b/net/ethtool/common.c @@ -90,6 +90,7 @@ tunable_strings[__ETHTOOL_TUNABLE_COUNT][ETH_GSTRING_LEN]= =3D { [ETHTOOL_TX_COPYBREAK] =3D "tx-copybreak", [ETHTOOL_PFC_PREVENTION_TOUT] =3D "pfc-prevention-tout", [ETHTOOL_TX_COPYBREAK_BUF_SIZE] =3D "tx-copybreak-buf-size", + [ETHTOOL_CAN_BTR] =3D "can-btr", }; =20 const char diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c index 326e14ee05db..17b69d6fcab4 100644 --- a/net/ethtool/ioctl.c +++ b/net/ethtool/ioctl.c @@ -2403,6 +2403,7 @@ static int ethtool_get_module_eeprom(struct net_devic= e *dev, static int ethtool_tunable_valid(const struct ethtool_tunable *tuna) { switch (tuna->id) { + case ETHTOOL_CAN_BTR: case ETHTOOL_RX_COPYBREAK: case ETHTOOL_TX_COPYBREAK: case ETHTOOL_TX_COPYBREAK_BUF_SIZE: --=20 2.32.0 From nobody Wed Apr 15 04:16:50 2026 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 8E633C00144 for ; Tue, 26 Jul 2022 21:04:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239882AbiGZVEG (ORCPT ); Tue, 26 Jul 2022 17:04:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52968 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239832AbiGZVDj (ORCPT ); Tue, 26 Jul 2022 17:03:39 -0400 Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E277D3A498 for ; Tue, 26 Jul 2022 14:03:35 -0700 (PDT) Received: by mail-ej1-x632.google.com with SMTP id va17so28340481ejb.0 for ; Tue, 26 Jul 2022 14:03:35 -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=jASsf99AUDo012UYQLBftY2iklAzdZ3iQKBsZI8nWRw=; b=fFao0muvy5QdgYg2Xl4vi/T9jeqH7SOrTIxhQRBV6TBIhv2e5u5iHwIGeBQW5FehkN bHX2gaBSUbyvLJfrK62fogqDN5/24OX+y5z7tuDud1MBHRmmcQ6KtyuV+MrKnyfLMU6P A3Jbj+SGoZ4n3gIrkxAQheWadstjKMwp22abo= 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=jASsf99AUDo012UYQLBftY2iklAzdZ3iQKBsZI8nWRw=; b=JSYsT9qdhOdBp/KtLypVBfu3IZIM53+G3hb2EqmMuH+3hHLC+1TUFs/Hfjh9L8/ie0 8RYh8I8xynOLulwedLApY0gZyK5uROYksXi20vQOTP3YW58OIMcmydx9cRvqczNBJmsB FSWJajQB2i6/rxtCxU7jQ9RIT7mzxziFchIyTYZOZOqFUCOa2MFdM++LNRqEBiU+4zqN rLbP0OeJhk6DvAe06EPHHPKIproE4cIFjjpYaldvCADkQB70Ie2nbuRRm7W6A7rCdSrk Ha5C0Jl/7pbWCTfjKLan62d2Awx+IjHnZ5OKReqDklszA6rRr78wiaYvipnMOspFREfY TzlQ== X-Gm-Message-State: AJIora9wfTqB7FXTXf+gRJdxoJELCxzqTq6zQG59rLJlTgM1o+WwBS0h nPEq1stykS3D9QHqGzYJ0DyO/HdrSu7c6Q== X-Google-Smtp-Source: AGRyM1vxj2Lnu57kJqfODxkF6lW3UPBMzQBcfExdggbA6yqhN8Sp5EQ+53bfqWmRfjV8BjKKss1MCw== X-Received: by 2002:a17:906:4fc4:b0:6da:b4c6:fadb with SMTP id i4-20020a1709064fc400b006dab4c6fadbmr15668908ejw.282.1658869415190; Tue, 26 Jul 2022 14:03:35 -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 y19-20020aa7d513000000b0043a7293a03dsm9092849edq.7.2022.07.26.14.03.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 14:03:34 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: linux-can@vger.kernel.org, Marc Kleine-Budde , Oliver Hartkopp , michael@amarulasolutions.com, Amarula patchwork , Jeroen Hofstee , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Wolfgang Grandegger , netdev@vger.kernel.org Subject: [RFC PATCH v3 8/9] can: slcan: add support to set bit time register (btr) Date: Tue, 26 Jul 2022 23:02:16 +0200 Message-Id: <20220726210217.3368497-9-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220726210217.3368497-1-dario.binacchi@amarulasolutions.com> References: <20220726210217.3368497-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 allows to set the bit time register with tunable values. The setting can only be changed if the interface is down: ip link set dev can0 down ethtool --set-tunable can0 can-btr 0x31c ip link set dev can0 up Suggested-by: Marc Kleine-Budde Signed-off-by: Dario Binacchi Reviewed-by to patch 3. --- (no changes since v1) drivers/net/can/slcan/slcan-core.c | 58 ++++++++++++++++++++------- drivers/net/can/slcan/slcan-ethtool.c | 13 ++++++ drivers/net/can/slcan/slcan.h | 1 + 3 files changed, 58 insertions(+), 14 deletions(-) diff --git a/drivers/net/can/slcan/slcan-core.c b/drivers/net/can/slcan/slc= an-core.c index 45e521910236..3905f21e7788 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -99,6 +99,7 @@ struct slcan { #define CF_ERR_RST 0 /* Reset errors on open */ wait_queue_head_t xcmd_wait; /* Wait queue for commands */ /* transmission */ + u32 btr; /* bit timing register */ }; =20 static const u32 slcan_bitrate_const[] =3D { @@ -128,6 +129,17 @@ int slcan_enable_err_rst_on_open(struct net_device *nd= ev, bool on) return 0; } =20 +int slcan_set_btr(struct net_device *ndev, u32 btr) +{ + struct slcan *sl =3D netdev_priv(ndev); + + if (netif_running(ndev)) + return -EBUSY; + + sl->btr =3D btr; + return 0; +} + /************************************************************************* * SLCAN ENCAPSULATION FORMAT * *************************************************************************/ @@ -699,22 +711,40 @@ static int slcan_netdev_open(struct net_device *dev) return err; } =20 - 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]) - break; + if (sl->can.bittiming.bitrate !=3D CAN_BITRATE_UNKNOWN || sl->btr) { + 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]) + break; + } + + /* The CAN framework has already validate the bitrate + * value, so we can avoid to check if `s' has been + * properly set. + */ + snprintf(cmd, sizeof(cmd), "C\rS%d\r", s); + err =3D slcan_transmit_cmd(sl, cmd); + if (err) { + netdev_err(dev, + "failed to send bitrate command 'C\\rS%d\\r'\n", + s); + goto cmd_transmit_failed; + } } =20 - /* The CAN framework has already validate the bitrate value, - * so we can avoid to check if `s' has been properly set. - */ - snprintf(cmd, sizeof(cmd), "C\rS%d\r", s); - err =3D slcan_transmit_cmd(sl, cmd); - if (err) { - netdev_err(dev, - "failed to send bitrate command 'C\\rS%d\\r'\n", - s); - goto cmd_transmit_failed; + if (sl->btr) { + u32 btr =3D sl->btr & GENMASK(15, 0); + + snprintf(cmd, sizeof(cmd), "C\rs%04x\r", btr); + err =3D slcan_transmit_cmd(sl, cmd); + if (err) { + netdev_err(dev, + "failed to send bit timing command 'C\\rs%04x\\r'\n", + btr); + goto cmd_transmit_failed; + } + } =20 if (test_bit(CF_ERR_RST, &sl->cmd_flags)) { diff --git a/drivers/net/can/slcan/slcan-ethtool.c b/drivers/net/can/slcan/= slcan-ethtool.c index bf0afdc4e49d..8e2e77bbffda 100644 --- a/drivers/net/can/slcan/slcan-ethtool.c +++ b/drivers/net/can/slcan/slcan-ethtool.c @@ -52,11 +52,24 @@ static int slcan_get_sset_count(struct net_device *netd= ev, int sset) } } =20 +static int slcan_set_tunable(struct net_device *netdev, + const struct ethtool_tunable *tuna, + const void *data) +{ + switch (tuna->id) { + case ETHTOOL_CAN_BTR: + return slcan_set_btr(netdev, *(u32 *)data); + default: + return -EINVAL; + } +} + static const struct ethtool_ops slcan_ethtool_ops =3D { .get_strings =3D slcan_get_strings, .get_priv_flags =3D slcan_get_priv_flags, .set_priv_flags =3D slcan_set_priv_flags, .get_sset_count =3D slcan_get_sset_count, + .set_tunable =3D slcan_set_tunable, }; =20 void slcan_set_ethtool_ops(struct net_device *netdev) diff --git a/drivers/net/can/slcan/slcan.h b/drivers/net/can/slcan/slcan.h index d463c8d99e22..1ac412fe8c95 100644 --- a/drivers/net/can/slcan/slcan.h +++ b/drivers/net/can/slcan/slcan.h @@ -13,6 +13,7 @@ =20 bool slcan_err_rst_on_open(struct net_device *ndev); int slcan_enable_err_rst_on_open(struct net_device *ndev, bool on); +int slcan_set_btr(struct net_device *ndev, u32 btr); void slcan_set_ethtool_ops(struct net_device *ndev); =20 #endif /* _SLCAN_H */ --=20 2.32.0 From nobody Wed Apr 15 04:16:50 2026 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 6D047C19F2C for ; Tue, 26 Jul 2022 21:04:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240069AbiGZVEK (ORCPT ); Tue, 26 Jul 2022 17:04:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52746 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240011AbiGZVDn (ORCPT ); Tue, 26 Jul 2022 17:03:43 -0400 Received: from mail-ej1-x631.google.com (mail-ej1-x631.google.com [IPv6:2a00:1450:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7695C3A4AB for ; Tue, 26 Jul 2022 14:03:37 -0700 (PDT) Received: by mail-ej1-x631.google.com with SMTP id ss3so28167813ejc.11 for ; Tue, 26 Jul 2022 14:03: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=AiQ0HcOvDIah4fMpuXqHSwjgHcHZ/tpuZ/vuW2o2BXw=; b=evXGwLvcDjU0qDyrkdC6mkUy83vtHbjOvR811LRjxjmNIBxTovzwE71jwghsXDlrVt ZZkOUWCYyeCI1cvvw5/0ArR5ytXQlAGQfs488gE2zq3GJ4YjXplfiNFqoBk2x0FURxF9 ndE63J6sd8f7FN9Tm7oy41WSi51bFyGCDXA3w= 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=AiQ0HcOvDIah4fMpuXqHSwjgHcHZ/tpuZ/vuW2o2BXw=; b=ZlYfNp27CbrBgYkhGD31xTgV7vpJCa73MAYN189xYNOGdlOqdEQRL54HdhZRy4roGb d5rJcvi5pKH5nYTZ/0XEqPzcJqk8Y66bY6td7Xb71aYRs9SBwZxKJoXBWo2blREL4Tik TGARiOJQpcZX//anN6ZqdfFZ9d6zG2PTRUbgTBz+JIAAmvDTSh5IlIJj6xix9Z7KAnTa 4OttgHLxlIMXshsmsVUBqC504nCumPSFKZ/+AgJsFKBE+F70PBTxU1pRnK7vwUMfO83w BPPQJKblVvgqgnk0wf3UN3XdxxEKyZRI6knD2FTY2v5Qi3W+wXRP2UaCuIuhaKRwNVo8 8eyA== X-Gm-Message-State: AJIora+LX2U+fzd9pSkqewlDN/+PbawzecE7NFKqgUOridHAP7vV26oL ftANAsVgTzu+MBEsD6SEVgtDO1IwtsCllw== X-Google-Smtp-Source: AGRyM1t4M5JDiuIqo8f049Mkcape1IJDhp/IBDYwWppv3LoaojPZmxWycbkF7PwAdBbxdf61ozHpZQ== X-Received: by 2002:a17:906:8a79:b0:72b:871a:57b7 with SMTP id hy25-20020a1709068a7900b0072b871a57b7mr15018909ejc.602.1658869416578; Tue, 26 Jul 2022 14:03:36 -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 y19-20020aa7d513000000b0043a7293a03dsm9092849edq.7.2022.07.26.14.03.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 14:03:36 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: linux-can@vger.kernel.org, Marc Kleine-Budde , Oliver Hartkopp , michael@amarulasolutions.com, Amarula patchwork , Jeroen Hofstee , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Wolfgang Grandegger , netdev@vger.kernel.org Subject: [RFC PATCH v3 9/9] MAINTAINERS: Add maintainer for the slcan driver Date: Tue, 26 Jul 2022 23:02:17 +0200 Message-Id: <20220726210217.3368497-10-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220726210217.3368497-1-dario.binacchi@amarulasolutions.com> References: <20220726210217.3368497-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://lore.kernel.org/all/507b5973-d673-4755-3b64-b41cb9a13b6f@hartko= pp.net Suggested-by: Oliver Hartkopp Signed-off-by: Dario Binacchi Reviewed-by to patch 3. --- Changes in v3: - Put the series as RFC again. - Pick up the patch "can: slcan: use KBUILD_MODNAME and define pr_fmt to re= place hardcoded names". - Add the patch "ethtool: add support to get/set CAN bit time register" to the series. - Add the patch "can: slcan: add support to set bit time register (btr)" to the series. - Replace the link https://marc.info/?l=3Dlinux-can&m=3D165806705927851&w= =3D2 with https://lore.kernel.org/all/507b5973-d673-4755-3b64-b41cb9a13b6f@hartkopp= .net. - Add the `Suggested-by' tag. 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 3905f21e7788..6a0f12cfbb4e 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -63,6 +63,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