Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp744360imm; Wed, 13 Jun 2018 07:39:41 -0700 (PDT) X-Google-Smtp-Source: ADUXVKI7Pk5wI1cqQ9if5OCJ2FoPnE7mqhqDl1ovkyGB57E/TiK3H9oB0J4pRfjO3zkLtMEqSl77 X-Received: by 2002:a65:4c87:: with SMTP id m7-v6mr4430620pgt.364.1528900781004; Wed, 13 Jun 2018 07:39:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528900780; cv=none; d=google.com; s=arc-20160816; b=UaFJIJ5fYDAl/nKVSMPzIoR5oaYsfbjco5zjxGDgg1UdUSehfvtu5vu2RJOymtKyjY B+syFBC/42P+ubsTEYBN4UoB2L+F8+2MSbEJC5Mz6Rv7fLBJpNBVO3CyVhvQKgr2JI4H PpHlXaqdLpiwiB86lleccbJHymasvvrectpQ5s7xzF31F4ANWtLDR5gePgEZ93rgw1Bw GruHjsSZMvxP58l6I2PFQvDxC+zpbAO1aLvZIBu8P6XlDw0z0LAJ2sCZYjLq6NPOWgn+ l+/xOjmbWoKnL5P/IDQwWmAc2uHfU0XVRXN44HNJSRW8L8dHjjeoEQrz1hMp5NR+evFF C4VA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=m4oYanb9WWRcGWNcH15lxfgxLJ4Gb/O9FaIaqOgyUxI=; b=D4GXiLR02xUdLy7ravS8ZCPtXEsSUV7c+rMx9JHnvqG196brutThRa6mzAyi6BtUVn 1qAJx705nC9Fh94xmdtl11JMp0myoKIMUOJTf6vl3DPTzsjk0dJ+aC76HIxZpwDBCrhL tYi7GSaVP4kMu4+dcuCd0zYJep2g6vcsY4UADpV0y55U+XXDnLmbeVVbpFRJCU9kOV53 oEZFKM78nDSWNWL4mH7BCxY4eST9sf7ukEhgyvID87DUZNzpAtxP2uSx7SOKQfth+WsT epbo3TXuAeftyMf6aDAHqykPpZ4qVKzPJREHNiSUMBWs51KnYNn4WKaYy0ZwjC5va9+u LzHw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@de.bosch.com header.s=2015-01-21 header.b=RLkj8dx+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=de.bosch.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u11-v6si2481832pgq.480.2018.06.13.07.39.26; Wed, 13 Jun 2018 07:39:40 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@de.bosch.com header.s=2015-01-21 header.b=RLkj8dx+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=de.bosch.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935854AbeFMOiT (ORCPT + 99 others); Wed, 13 Jun 2018 10:38:19 -0400 Received: from de-out1.bosch-org.com ([139.15.230.186]:33598 "EHLO de-out1.bosch-org.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935691AbeFMOiP (ORCPT ); Wed, 13 Jun 2018 10:38:15 -0400 Received: from fe0vm1650.rbesz01.com (unknown [139.15.230.188]) by fe0vms0187.rbdmz01.com (Postfix) with ESMTPS id 415TrP52QXz1XLFZG; Wed, 13 Jun 2018 16:38:13 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=de.bosch.com; s=2015-01-21; t=1528900693; bh=xKWvSJAExCFYwQPkF9cpeARYs1KgGM4+MQ0/Lt2hetU=; l=10; h=From:From:Reply-To:Sender; b=RLkj8dx+dOJ3KDBVIWL0VNQNBYwISv4mQy9d4KwGc8ynMzpKRjtlABy+y4ATL9iWM xbLameKnDxnNoSicsHy+5SMefQ3MyrHUkJFfJ/+eeF6eUCaLhE4EIg3NXlRcdjoSAL olsBIml6L02CqNXNhk/VX+nMGhiFeGjqsKPGSTAI= Received: from fe0vm7918.rbesz01.com (unknown [10.58.172.176]) by fe0vm1650.rbesz01.com (Postfix) with ESMTPS id 415TrP4cx2z1Cb; Wed, 13 Jun 2018 16:38:13 +0200 (CEST) X-AuditID: 0a3aad10-40fff70000000ee7-f3-5b212c637049 Received: from fe0vm1652.rbesz01.com ( [10.58.173.29]) (using TLS with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by fe0vm7918.rbesz01.com (SMG Outbound) with SMTP id C4.7E.03815.36C212B5; Wed, 13 Jun 2018 16:38:27 +0200 (CEST) Received: from SI-HUB1000.de.bosch.com (si-hub1000.de.bosch.com [10.4.103.106]) by fe0vm1652.rbesz01.com (Postfix) with ESMTPS id 415TrP32Z6zBpBg; Wed, 13 Jun 2018 16:38:13 +0200 (CEST) Received: from luchador.grb-fir.grb.de.bosch.com (10.19.187.97) by SI-HUB1000.de.bosch.com (10.4.103.106) with Microsoft SMTP Server id 14.3.319.2; Wed, 13 Jun 2018 16:38:13 +0200 From: Mark Jonas To: Wolfgang Grandegger , Marc Kleine-Budde CC: , , , , , , , , , , Mark Jonas Subject: [PATCH v2 1/5] can: enable multi-queue for SocketCAN devices Date: Wed, 13 Jun 2018 16:37:17 +0200 Message-ID: <1528900641-18677-2-git-send-email-mark.jonas@de.bosch.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1528900641-18677-1-git-send-email-mark.jonas@de.bosch.com> References: <1528224240-30786-1-git-send-email-mark.jonas@de.bosch.com> <1528900641-18677-1-git-send-email-mark.jonas@de.bosch.com> MIME-Version: 1.0 Content-Type: text/plain X-Brightmail-Tracker: H4sIAAAAAAAAA22SfUwbdRzG+fWu7bVwelwp+9JZYKfLBugEFXcimpnMrP7DdIvGjRi9rkfb jALplWYQX+rmxsacgrDEdQ0jW8gmshkrho6ISHkJxbjsBRSGQ4kVy1tABrbb4vBKYe0f/vf8 vs/3c8/9njsCo3+UawhziY23lnDFjEyJK/Muap/Y9/iGwuym4Xh2sqYbsZ5ff8PY5uBJjL3R 7pKxX52tx9m+xmTWP4bY4an7crZp7LJ0m0LX4OzHdZedt+S6v6+PIt2h5R657tN/s3W33amv yvYq8w18sdnOW5988R2lqfvipKTMnXKg44ePMAc6rq5GCgKoZ2D5ahuqRkqCpj6XQF9DtSxy 6EAQOlEnjRzaEJxbWEBhREZlwki/BwvrJOp1OP3nETy8hFHfS2C04/jKkop6GWaDi/KwxqmN MOfuWdEktQNu1ZzHItmpMHLl2IpWUDr4tr1hhaWpwwiGet+I7CeC75QfD2uMAugKBLAa9LAz xnLGWI1I0ozURXy23bL1uRx2i1XPC5XZOVv2lVrcKNI05UFOn96LKAIxCeSptA2FtJSzCxUW L8olJIyaLKhJL6Qf0pcaKkycYHrbWl7MC4yGRHFxcbTqwVgo11vMgmAuLfEiIDAmiSwIiBxp 4CoqeWtpBPOi9QTOrCM/Nry7l6aMnI3fz/NlvHXNfZ4gGCCFLPEdEq28kT9QZC62rdmMNpKZ HOvExkoIhRc9TSSI2YrwI0ihjLMIZuMqnhLB6bVpFB1AWzXryL5MkaHCrqm85EGq5hGysFW8 iDrGiJJTaASJvanI98OBCeJPHM0D0qNy7aETV4dR6KkmkaFa4qHBs4Sg31OFQ8hRh8OlwBAO d2oncOgPtklhcfaeFK63O+VwbOaIAq4dnVPAknM5Huq+6yQhdNJFweC1X1QQcs8kQe1VRzLM fNmugcV7fVoY/CmghZ9bB1LB/6EjDfydwTRY+n0pHVzjoXTwdx1k4GzzJ5vANz22GboW5jeD b7IxAwKO1gzw1d/NgNtHz2VNiWVKxDJ7e8MfUrBxtv8pc3UavZ3GgSq/rt+5I2kga9C4/eb+ XP3hK0VV63dNu57FPqsNvmS4dP5G/u6M+Re2ffNa8ojlxNx8oJXuatl4xiS5MP/XH5qhvNnh cpnrNDedp51ombDfPbTb+EXK/fELj9m6O28WvKLYPvXBqP3RHsOePON7/7y5qecttDBeNba4 Kzct/w5tGFcfdDK4YOJyMjGrwP0H4pO/+14EAAA= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Zhu Yi The existing SocketCAN implementation provides alloc_candev() to allocate a CAN device using a single Tx and Rx queue. This can lead to priority inversion in case the single Tx queue is already full with low priority messages and a high priority message needs to be sent while the bus is fully loaded with medium priority messages. This problem can be solved by using the existing multi-queue support of the network subsytem. The commit makes it possible to use multi-queue in the CAN subsystem in the same way it is used in the Ethernet subsystem by adding an alloc_candev_mqs() call and accompanying macros. With this support a CAN device can use multi-queue qdisc (e.g. mqprio) to avoid the aforementioned priority inversion. The exisiting functionality of alloc_candev() is the same as before. CAN devices need to have prioritized multiple hardware queues or are able to abort waiting for arbitration to make sensible use of multi-queues. Signed-off-by: Zhu Yi Signed-off-by: Mark Jonas Reviewed-by: Heiko Schocher --- drivers/net/can/dev.c | 8 +++++--- include/linux/can/dev.h | 7 ++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c index 365a8cc..ac8270c 100644 --- a/drivers/net/can/dev.c +++ b/drivers/net/can/dev.c @@ -702,7 +702,8 @@ EXPORT_SYMBOL_GPL(alloc_can_err_skb); /* * Allocate and setup space for the CAN network device */ -struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max) +struct net_device *alloc_candev_mqs(int sizeof_priv, unsigned int echo_skb_max, + unsigned int txqs, unsigned int rxqs) { struct net_device *dev; struct can_priv *priv; @@ -714,7 +715,8 @@ struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max) else size = sizeof_priv; - dev = alloc_netdev(size, "can%d", NET_NAME_UNKNOWN, can_setup); + dev = alloc_netdev_mqs(size, "can%d", NET_NAME_UNKNOWN, can_setup, + txqs, rxqs); if (!dev) return NULL; @@ -733,7 +735,7 @@ struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max) return dev; } -EXPORT_SYMBOL_GPL(alloc_candev); +EXPORT_SYMBOL_GPL(alloc_candev_mqs); /* * Free space of the CAN network device diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h index 61f1cf2..07b73d2 100644 --- a/include/linux/can/dev.h +++ b/include/linux/can/dev.h @@ -142,7 +142,12 @@ u8 can_dlc2len(u8 can_dlc); /* map the sanitized data length to an appropriate data length code */ u8 can_len2dlc(u8 len); -struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max); +struct net_device *alloc_candev_mqs(int sizeof_priv, unsigned int echo_skb_max, + unsigned int txqs, unsigned int rxqs); +#define alloc_candev(sizeof_priv, echo_skb_max) \ + alloc_candev_mqs(sizeof_priv, echo_skb_max, 1, 1) +#define alloc_candev_mq(sizeof_priv, echo_skb_max, count) \ + alloc_candev_mqs(sizeof_priv, echo_skb_max, count, count) void free_candev(struct net_device *dev); /* a candev safe wrapper around netdev_priv */ -- 2.7.4