From patchwork Fri Aug 10 00:28:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Caleb Raitto X-Patchwork-Id: 10562157 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D182C1057 for ; Fri, 10 Aug 2018 00:28:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C0E282B7DF for ; Fri, 10 Aug 2018 00:28:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B486F2B812; Fri, 10 Aug 2018 00:28:50 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B2DCB2B7DF for ; Fri, 10 Aug 2018 00:28:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727219AbeHJC4H (ORCPT ); Thu, 9 Aug 2018 22:56:07 -0400 Received: from mail-pl0-f67.google.com ([209.85.160.67]:36536 "EHLO mail-pl0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727123AbeHJC4G (ORCPT ); Thu, 9 Aug 2018 22:56:06 -0400 Received: by mail-pl0-f67.google.com with SMTP id e11-v6so3255215plb.3; Thu, 09 Aug 2018 17:28:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QAjlmUccx/9CZ/tnsqcSMw/dMfY0KMFs4ShzzElOYnE=; b=QeDFn3NqWUi294f5K+/kyMihKoUj0zB+reWyuH3oLPDab7mQ6f40qjGKn1gnP5qJ3Z IP3GWPSRhuEe/1q3R1EM5j3X3jvrVW36DbfTKjgWKTJJfI2NSBVd4/9G1QDxZDu6ob9p N6leByoKEoz7TnmvTESWe+1IOF/pqO8Vf7141dK6jtEMvj2827eOIuKZ7KoSeTpLLF6i S/vKHP3djFNkEUIacPKXdDMgdfHj2CScNrDe7g7kThKc54yYASsqoKfJzZz5/X1bH62z Q4W4XyD0v6kTxlJHxtHqpmmeSxA3UD8qws4pmC/lUb2EbqS0dSt6QE2GaxAIVijiWALJ TVQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QAjlmUccx/9CZ/tnsqcSMw/dMfY0KMFs4ShzzElOYnE=; b=mOn4TqPQtxUMnTrTew/XVCIYzdWpxLxw2/8vTR3sTiF6E+ohvlR1LE7W9/IG1xhQXd 5PKo3j9kk1+ujlF76O70r3zG9ULAojUm71EFEYcmwnLdXL+5aVzWyCGum8TleP03kgW2 BG49Mu3k5F8w4zLF5eJrahLTHZpv16YqJ0lcYcF0Ei1MlCIf5t9zftCtGKp+diOACFvX o4zId053FUusFl4ukA80zrJwEWYXYpCX8Ua9XyL/wcpOw6wtPqmgp2MuJ1nKOJP+NQ80 eonCsn1JUTGtFY/K1T1g4zOS9lm0bJ5smLp/fhO2/NUhTrZSZQH2sYeRG9iSRghfQpPU bNbQ== X-Gm-Message-State: AOUpUlF/STkcFZcGf0UvXF/sv7lXud7ljGojscAmF1iqNoeTkEanGpgV Hr/pwa9odOqy+ZIg6JZGD/kRG6SbBAM= X-Google-Smtp-Source: AA+uWPwlndLDiu+3j2sTPM6o54jorPurovsnf2gYz9vV3xqieltzpuv94QdkjkgXYjzoyGCH5upoZA== X-Received: by 2002:a17:902:2e01:: with SMTP id q1-v6mr3966478plb.40.1533860925670; Thu, 09 Aug 2018 17:28:45 -0700 (PDT) Received: from caraitto-dev.sea.corp.google.com ([2620:0:1009:11:84ae:3ba4:ea4b:7d69]) by smtp.gmail.com with ESMTPSA id z8-v6sm9794910pfe.163.2018.08.09.17.28.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Aug 2018 17:28:45 -0700 (PDT) From: Caleb Raitto To: herbert@gondor.apana.org.au, mst@redhat.com, davem@davemloft.net Cc: arei.gonglei@huawei.com, jasowang@redhat.com, netdev@vger.kernel.org, linux-crypto@vger.kernel.org, Caleb Raitto Subject: [PATCH net-next 1/2] virtio_net: Make vp_set_vq_affinity() take a mask. Date: Thu, 9 Aug 2018 17:28:39 -0700 Message-Id: <20180810002840.186635-2-caleb.raitto@gmail.com> X-Mailer: git-send-email 2.18.0.597.ga71716f1ad-goog In-Reply-To: <20180810002840.186635-1-caleb.raitto@gmail.com> References: <20180810002840.186635-1-caleb.raitto@gmail.com> MIME-Version: 1.0 Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Caleb Raitto Make vp_set_vq_affinity() take a cpumask instead of taking a single CPU. If there are fewer queues than cores, queue affinity should be able to map to multiple cores. Link: https://patchwork.ozlabs.org/patch/948149/ Suggested-by: Willem de Bruijn Signed-off-by: Caleb Raitto Acked-by: Gongle --- drivers/crypto/virtio/virtio_crypto_core.c | 4 ++-- drivers/net/virtio_net.c | 8 ++++---- drivers/virtio/virtio_pci_common.c | 7 +++---- drivers/virtio/virtio_pci_common.h | 2 +- include/linux/virtio_config.h | 7 ++++--- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/drivers/crypto/virtio/virtio_crypto_core.c b/drivers/crypto/virtio/virtio_crypto_core.c index 83326986c113..7c7198553699 100644 --- a/drivers/crypto/virtio/virtio_crypto_core.c +++ b/drivers/crypto/virtio/virtio_crypto_core.c @@ -146,7 +146,7 @@ static void virtcrypto_clean_affinity(struct virtio_crypto *vi, long hcpu) if (vi->affinity_hint_set) { for (i = 0; i < vi->max_data_queues; i++) - virtqueue_set_affinity(vi->data_vq[i].vq, -1); + virtqueue_set_affinity(vi->data_vq[i].vq, NULL); vi->affinity_hint_set = false; } @@ -173,7 +173,7 @@ static void virtcrypto_set_affinity(struct virtio_crypto *vcrypto) * */ for_each_online_cpu(cpu) { - virtqueue_set_affinity(vcrypto->data_vq[i].vq, cpu); + virtqueue_set_affinity(vcrypto->data_vq[i].vq, cpumask_of(cpu)); if (++i >= vcrypto->max_data_queues) break; } diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 39a7f4452587..43fabc0eb4d2 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -1878,8 +1878,8 @@ static void virtnet_clean_affinity(struct virtnet_info *vi, long hcpu) if (vi->affinity_hint_set) { for (i = 0; i < vi->max_queue_pairs; i++) { - virtqueue_set_affinity(vi->rq[i].vq, -1); - virtqueue_set_affinity(vi->sq[i].vq, -1); + virtqueue_set_affinity(vi->rq[i].vq, NULL); + virtqueue_set_affinity(vi->sq[i].vq, NULL); } vi->affinity_hint_set = false; @@ -1905,8 +1905,8 @@ static void virtnet_set_affinity(struct virtnet_info *vi) for_each_online_cpu(cpu) { const unsigned long *mask = cpumask_bits(cpumask_of(cpu)); - virtqueue_set_affinity(vi->rq[i].vq, cpu); - virtqueue_set_affinity(vi->sq[i].vq, cpu); + virtqueue_set_affinity(vi->rq[i].vq, cpumask_of(cpu)); + virtqueue_set_affinity(vi->sq[i].vq, cpumask_of(cpu)); __netif_set_xps_queue(vi->dev, mask, i, false); i++; } diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c index 705aebd74e56..465a6f5142cc 100644 --- a/drivers/virtio/virtio_pci_common.c +++ b/drivers/virtio/virtio_pci_common.c @@ -421,7 +421,7 @@ const char *vp_bus_name(struct virtio_device *vdev) * - OR over all affinities for shared MSI * - ignore the affinity request if we're using INTX */ -int vp_set_vq_affinity(struct virtqueue *vq, int cpu) +int vp_set_vq_affinity(struct virtqueue *vq, const struct cpumask *cpu_mask) { struct virtio_device *vdev = vq->vdev; struct virtio_pci_device *vp_dev = to_vp_device(vdev); @@ -435,11 +435,10 @@ int vp_set_vq_affinity(struct virtqueue *vq, int cpu) if (vp_dev->msix_enabled) { mask = vp_dev->msix_affinity_masks[info->msix_vector]; irq = pci_irq_vector(vp_dev->pci_dev, info->msix_vector); - if (cpu == -1) + if (!cpu_mask) irq_set_affinity_hint(irq, NULL); else { - cpumask_clear(mask); - cpumask_set_cpu(cpu, mask); + cpumask_copy(mask, cpu_mask); irq_set_affinity_hint(irq, mask); } } diff --git a/drivers/virtio/virtio_pci_common.h b/drivers/virtio/virtio_pci_common.h index 135ee3cf7175..02271002c2f3 100644 --- a/drivers/virtio/virtio_pci_common.h +++ b/drivers/virtio/virtio_pci_common.h @@ -141,7 +141,7 @@ const char *vp_bus_name(struct virtio_device *vdev); * - OR over all affinities for shared MSI * - ignore the affinity request if we're using INTX */ -int vp_set_vq_affinity(struct virtqueue *vq, int cpu); +int vp_set_vq_affinity(struct virtqueue *vq, const struct cpumask *cpu_mask); const struct cpumask *vp_get_vq_affinity(struct virtio_device *vdev, int index); diff --git a/include/linux/virtio_config.h b/include/linux/virtio_config.h index 5559a2d31c46..32baf8e26735 100644 --- a/include/linux/virtio_config.h +++ b/include/linux/virtio_config.h @@ -79,7 +79,8 @@ struct virtio_config_ops { u64 (*get_features)(struct virtio_device *vdev); int (*finalize_features)(struct virtio_device *vdev); const char *(*bus_name)(struct virtio_device *vdev); - int (*set_vq_affinity)(struct virtqueue *vq, int cpu); + int (*set_vq_affinity)(struct virtqueue *vq, + const struct cpumask *cpu_mask); const struct cpumask *(*get_vq_affinity)(struct virtio_device *vdev, int index); }; @@ -236,11 +237,11 @@ const char *virtio_bus_name(struct virtio_device *vdev) * */ static inline -int virtqueue_set_affinity(struct virtqueue *vq, int cpu) +int virtqueue_set_affinity(struct virtqueue *vq, const struct cpumask *cpu_mask) { struct virtio_device *vdev = vq->vdev; if (vdev->config->set_vq_affinity) - return vdev->config->set_vq_affinity(vq, cpu); + return vdev->config->set_vq_affinity(vq, cpu_mask); return 0; }