From nobody Sat Jun 13 07:32:31 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=broadcom.com ARC-Seal: i=1; a=rsa-sha256; t=1781005759; cv=none; d=zohomail.com; s=zohoarc; b=FfEUyJfu8tRUno1infC6j7rW+LtGZjYJrvoMFgGXGQRUmSLesYP/iJnX4hweA7ipRKcd2M4n+KMSvQkR3fisvwOmfobSkCb1fPBc8lQJ1IEXMAA+jdQuvVinOuaHzPVmwEzO9DAe8pAyRUiElyre7Bl9j5MGF2zwxJwilyTj6OU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781005759; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Cij0f7XK3gPTc98cKs5ll/gp5Fj5YlFQkChYuGOVaaM=; b=R+R1jh4ulqw0tVPFIuXen8R5lYprayKc9wkAMsA2GWr8cmbNHEJiJ+Xnjcvtse/zIcFM7752OjUFP6Wu/sIIbUs78Vnoj/OyVUszBn1vZOv6IOIdrXd0WSkBoeuN9Z/TQ1VgTwdZxaz4e89eIItK3NjSlYl7M2GDWB/vwIPOKO8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1781005759471531.1725727277517; Tue, 9 Jun 2026 04:49:19 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1332615.1595091 (Exim 4.92) (envelope-from ) id 1wWux9-0000a2-Pt; Tue, 09 Jun 2026 11:49:07 +0000 Received: by outflank-mailman (output) from mailman id 1332615.1595091; Tue, 09 Jun 2026 11:49:07 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wWux9-0000Zv-N3; Tue, 09 Jun 2026 11:49:07 +0000 Received: by outflank-mailman (input) for mailman id 1332615; Tue, 09 Jun 2026 11:49:06 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wWux8-0000YT-Ol for xen-devel@lists.xenproject.org; Tue, 09 Jun 2026 11:49:06 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wWux6-004AxN-CI for xen-devel@lists.xenproject.org; Tue, 09 Jun 2026 13:49:04 +0200 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a27fda3-e002-0a2a0a5209dd-0a2a45029486-30 for ; Tue, 09 Jun 2026 13:49:03 +0200 Received: from [209.85.167.225] (helo=mail-oi1-f225.google.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a27fdae-af86-0a2a45020019-d155a7e1d5c8-3 for ; Tue, 09 Jun 2026 13:49:03 +0200 Received: by mail-oi1-f225.google.com with SMTP id 5614622812f47-4863eae453eso2416245b6e.1 for ; Tue, 09 Jun 2026 04:49:03 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-117.dlp.protect.broadcom.com. [144.49.247.117]) by smtp-relay.gmail.com with ESMTPS id 586e51a60fabf-440d7b9324fsm1526980fac.1.2026.06.09.04.49.00 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 09 Jun 2026 04:49:02 -0700 (PDT) Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-36bc54005a7so7346491a91.0 for ; Tue, 09 Jun 2026 04:49:00 -0700 (PDT) Received: from sumit_ws.dhcp.broadcom.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36f6bf903fasm18898075a91.2.2026.06.09.04.48.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 04:48:57 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=broadcom.com header.i="@broadcom.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From" X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781005742; x=1781610542; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Cij0f7XK3gPTc98cKs5ll/gp5Fj5YlFQkChYuGOVaaM=; b=dqMlK5EOEFiXHKoTjWbPS8mjQdfymklRSh13o5W/tkI6oK3KaRVHY7lANMD6eucpqk +HRxildKvHU2phtmwFjLsjgInJaZ2hHN8o4ZPBghDCVFZ6vtRUsgrJIHNafIS26aa7Oq QxbCeCmqJCBu1k9g/DW1nl6kWrLZ8OB2s80MCSAWgrKBm05rBL1mgQ2TXsl6ie8EUtCe OTO3cEVRbkueqZMXpZCZEN5CcSowS7EhqeHsa110nXNusEiGEFx/uQGcmlm+Nv8uuCY+ p0IaCz2MlYrgwilB2aOlb/0B5VyGG7DyvVbGs2rODLyMr8Q+PxwaRAtydPROh+TQ0er8 btbw== X-Forwarded-Encrypted: i=1; AFNElJ8A4uQK33AR5z/m09ziOrWs1loQ9r3uQyTizCzZq6VX/uv36WnfoiTm5y27T77J5OBwIge/D5uAoI0=@lists.xenproject.org X-Gm-Message-State: AOJu0YzqtylW5O22vpzZL/6LtfNEZe+hbWbeAE1qmDHbJXxZA1guZjB8 mI/lEdDkTM7FdnJASSB49QgYAysQZpFBNJLho9thYuMitQ7NIZttuuqDL13VNQ7lTkpvxYTZyLB vwHtrTEcxJhtwptpcDvgxpssaXtB59JhNC/r5JAArGezBDxRtPsMsINaJlYNwCLQO6E+mQo0bsM q9H9i9cgqKo30mHe9xtDWXBB6SYUepMiJ212zf/Wt+KnZs+CRLThxSHMdyT9PCL0ZuWInBI+6Fh cnI6N1BwlJNqPaGwsNJnQ== X-Gm-Gg: Acq92OHo70UZWzYryVjTozm/XOum+5ikiLIcwXBtFrgDwukFex9fwT2JF9oNPlnzQWG dHA5vqYttLEIKFhILu3UwQkL+E6oCzk7ZQ7iBDskstzoPn5DfOobGW+GkqKJD4bArPwq4sInSOy 9z5PoTkRMWOIzIlRq6r+Wf1S6bsdI5fdHmK/Gud5KRWHiSHJAxv7wjjbLw0fHx9E19KeKmE+QMg qYg4XI9QkvIIGn50v0zc6+UqQ/MlzB0yvYUXMN9v2DAC3aO2dcB1sfCT4ag3fJNjsMUFtO17FI3 9prS+8c9ByQxkpJ8t5OtrP6LZKBNTAbGj6U9ljYTH6kpg6HUFERSDFySzsW4LRVi9EcYhgbm7st DJvG0WMa/4IrDJ88vIBFnBnffuGw2kA2vL0IWyo7yOq9LiIZpnSvrOhe73x3MqPWyt0b+0aqhmx Rpsz/zl4iRBqPd/MpptL88gR6278uFKWLgrJP+hK7YGZT8sQaydpUV2Twe8zfArxlIOnslSw== X-Received: by 2002:a05:6870:d181:b0:41c:20cd:c0b5 with SMTP id 586e51a60fabf-4413d25803fmr9893260fac.6.1781005742058; Tue, 09 Jun 2026 04:49:02 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1781005739; x=1781610539; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Cij0f7XK3gPTc98cKs5ll/gp5Fj5YlFQkChYuGOVaaM=; b=JyLFWVAGXVd9wkrcwkq5Nh0cRx2Ve1JMb4H8a/KkTXez/1W7kmLkyg2dRq/B/kg7k7 FVTW0uHQs8V38lY3TBZJv4x74MsHOZgtzTc7VO7c7mtMWO8jOBTiXTP/MhnhYE1bp1aZ MJn1xMVmpYBmxbrQ9Gdz0M4KxpKsT5BDfahRc= X-Forwarded-Encrypted: i=1; AFNElJ97nPnlR8ayNHanSpgYQ9ingwEEdPPfMhF6DolVBNxbV/ObWOIBDTsTKxJrXr2okHNVd9xept+LCkM=@lists.xenproject.org X-Received: by 2002:a17:90b:5787:b0:36b:8824:d7cc with SMTP id 98e67ed59e1d1-370f057a115mr22377741a91.20.1781005739347; Tue, 09 Jun 2026 04:48:59 -0700 (PDT) X-Received: by 2002:a17:90b:5787:b0:36b:8824:d7cc with SMTP id 98e67ed59e1d1-370f057a115mr22377714a91.20.1781005738858; Tue, 09 Jun 2026 04:48:58 -0700 (PDT) From: Sumit Saxena To: "Martin K . Petersen" , Jens Axboe Cc: "James E . J . Bottomley" , linux-scsi@vger.kernel.org, linux-block@vger.kernel.org, Adam Radford , Khalid Aziz , Adaptec OEM Raid Solutions , Matthew Wilcox , Hannes Reinecke , "Juergen E . Fischer" , Russell King , linux-arm-kernel@lists.infradead.org, Finn Thain , Michael Schmitz , Anil Gurumurthy , Sudarsana Kalluru , Oliver Neukum , Ali Akcaagac , Jamie Lenehan , Ram Vegesna , target-devel@vger.kernel.org, Bradley Grove , Satish Kharat , Sesidhar Baddela , Karan Tilak Kumar , Yihang Li , Don Brace , storagedev@microchip.com, HighPoint Linux Team , Tyrel Datwyler , Madhavan Srinivasan , Michael Ellerman , Nicholas Piggin , Christophe Leroy , linuxppc-dev@lists.ozlabs.org, Brian King , Lee Duncan , Chris Leech , Mike Christie , open-iscsi@googlegroups.com, Justin Tee , Paul Ely , Kashyap Desai , Shivasharan S , Chandrakanth Patil , megaraidlinux.pdl@broadcom.com, Sathya Prakash Veerichetty , Sreekanth Reddy , mpi3mr-linuxdrv.pdl@broadcom.com, Suganath Prabu Subramani , Ranjan Kumar , MPT-FusionLinux.pdl@broadcom.com, Daniel Palmer , GOTO Masanori , YOKOTA Hiroshi , Jack Wang , Geoff Levand , Michael Reed , Nilesh Javali , GR-QLogic-Storage-Upstream@marvell.com, Narsimhulu Musini , "K . Y . Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , linux-hyperv@vger.kernel.org, "Michael S . Tsirkin" , Jason Wang , Paolo Bonzini , Stefan Hajnoczi , Eugenio Perez , virtualization@lists.linux.dev, Vishal Bhakta , bcm-kernel-feedback-list@broadcom.com, Juergen Gross , Stefano Stabellini , Oleksandr Tyshchenko , xen-devel@lists.xenproject.org, James Rizzo , Sumit Saxena Subject: [PATCH v3 1/4] scsi: scan: allocate sdev and starget on the NUMA node of the host adapter Date: Tue, 9 Jun 2026 17:48:00 +0530 Message-ID: <20260609121806.2121755-2-sumit.saxena@broadcom.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260609121806.2121755-1-sumit.saxena@broadcom.com> References: <20260609121806.2121755-1-sumit.saxena@broadcom.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e X-purgate-ID: tlsNG-720697/1781005743-83F66161-7B02C711/0/0 X-purgate-type: clean X-purgate-size: 1893 X-ZohoMail-DKIM: pass (identity @broadcom.com) X-ZM-MESSAGEID: 1781005761758154100 Content-Type: text/plain; charset="utf-8" From: James Rizzo When a host adapter is attached to a specific NUMA node, allocating scsi_device and scsi_target via kzalloc() may place them on a remote node. All hot-path I/O accesses to these structures then cross the NUMA interconnect, adding latency and consuming inter-node bandwidth. Use kzalloc_node() with dev_to_node(shost->dma_dev) so allocations land on the same node as the HBA, reducing cross-node traffic and improving I/O performance on NUMA systems. Signed-off-by: James Rizzo Signed-off-by: Sumit Saxena Reviewed-by: Hannes Reinecke --- drivers/scsi/scsi_scan.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index e27da038603a..121a14d5fdb8 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include =20 @@ -287,8 +288,8 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_= target *starget, struct Scsi_Host *shost =3D dev_to_shost(starget->dev.parent); struct queue_limits lim; =20 - sdev =3D kzalloc(sizeof(*sdev) + shost->transportt->device_size, - GFP_KERNEL); + sdev =3D kzalloc_node(sizeof(*sdev) + shost->transportt->device_size, + GFP_KERNEL, dev_to_node(shost->dma_dev)); if (!sdev) goto out; =20 @@ -502,7 +503,7 @@ static struct scsi_target *scsi_alloc_target(struct dev= ice *parent, struct scsi_target *found_target; int error, ref_got; =20 - starget =3D kzalloc(size, GFP_KERNEL); + starget =3D kzalloc_node(size, GFP_KERNEL, dev_to_node(shost->dma_dev)); if (!starget) { printk(KERN_ERR "%s: allocation failure\n", __func__); return NULL; --=20 2.43.7 From nobody Sat Jun 13 07:32:31 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=broadcom.com ARC-Seal: i=1; a=rsa-sha256; t=1781005799; cv=none; d=zohomail.com; s=zohoarc; b=A/0+7lEX2k2fLFi6tH9G57jHBlT0vVRZaoCg4N8KVYX0lI6rkTgd5bFNU4lxYvyTgzL/lJEd+kJ/6nmDrn24f5D+YDiUgx9aQa9ya6Y7eTKtgAUk2J8u0zyEkFQsp3Dlh7P5A1Qtjj6Wk2Qb+IHiKOqcL408qYmKc4LlGgZO9sY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781005799; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fsTwEeomyHcAOr+L7DgyHdHnlX/mi1ZTCxvWJGVdGKg=; b=Ucs2hwIb62kZy4k0SZOABPY5YsreuBC/xyMWnP23yHRWW3Js+8LxcUR0bKzkjNBl39qFeo/E8sSH6g+/F6tAS98PSUKslotTi3BroXLkS9fVxY9a3vHa3/27P8B359+n7oabLqCno3qQcvjTIB4SLo/PUkZZ10HJ8y76yBOGrqA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 178100579987358.155538045226194; Tue, 9 Jun 2026 04:49:59 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1332620.1595100 (Exim 4.92) (envelope-from ) id 1wWuxW-00013m-1l; Tue, 09 Jun 2026 11:49:30 +0000 Received: by outflank-mailman (output) from mailman id 1332620.1595100; Tue, 09 Jun 2026 11:49:30 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wWuxV-00013f-UX; Tue, 09 Jun 2026 11:49:29 +0000 Received: by outflank-mailman (input) for mailman id 1332620; Tue, 09 Jun 2026 11:49:28 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wWuxU-00011r-73 for xen-devel@lists.xenproject.org; Tue, 09 Jun 2026 11:49:28 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wWuxT-00GAy4-Jf for xen-devel@lists.xenproject.org; Tue, 09 Jun 2026 13:49:27 +0200 Received: from [10.42.69.9] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a27fdbd-bab6-0a2a0a5309dd-0a2a4509ae24-40 for ; Tue, 09 Jun 2026 13:49:27 +0200 Received: from [209.85.214.227] (helo=mail-pl1-f227.google.com) by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a27fdc5-2497-0a2a45090019-d155d6e3e417-3 for ; Tue, 09 Jun 2026 13:49:26 +0200 Received: by mail-pl1-f227.google.com with SMTP id d9443c01a7336-2bf1f074a12so56067365ad.0 for ; Tue, 09 Jun 2026 04:49:26 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-21.dlp.protect.broadcom.com. [144.49.247.21]) by smtp-relay.gmail.com with ESMTPS id d9443c01a7336-2c16619f1e5sm19482975ad.42.2026.06.09.04.49.24 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 09 Jun 2026 04:49:24 -0700 (PDT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-36d98b828c8so7130488a91.2 for ; Tue, 09 Jun 2026 04:49:23 -0700 (PDT) Received: from sumit_ws.dhcp.broadcom.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36f6bf903fasm18898075a91.2.2026.06.09.04.48.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 04:49:20 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=broadcom.com header.i="@broadcom.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From" X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781005765; x=1781610565; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=fsTwEeomyHcAOr+L7DgyHdHnlX/mi1ZTCxvWJGVdGKg=; b=WnAMcxbzAqxQ1/X0c7gcQzpcth9pP4pkbPn6CRPJx/FbNwFhuxsNNioOpVReFGLF01 +F8Xa9mLccp272/5CZdLOY8+p0k4Mn3KUYSE5IqXyd8WUPLJNMAa/4f/P5o+x1uCYDKB z1ajlh9lz3azWRKq40MAx8AA3fHw5YOILxn0OXbmJhq0fUaSeRf3VEf+mmY7aGnNK6rX nVL0b6mopyWNsvfjQgq++bU7AT3tHLaSD/frDGUkq2FNzSasi3T27pvi1RTz7CkshChB X1oYMUTOsEau5t0o8NYEIiI5zeLxKQqdLx94I+LQbAgBHJKCnidF8oSLL7ydGkPaXVEH DkrA== X-Forwarded-Encrypted: i=1; AFNElJ95LzCazamDjnhioanAFWUF1Gy19DgQ9yFGfgDlhJ51wAyOSrrPbNOd5GTIfGACnk6bPXkMJqE/Dng=@lists.xenproject.org X-Gm-Message-State: AOJu0Yzud1CsIR5FQmID7UGhYlX0W89qhJymQuCkkCdNNQeuD3qim5dB BcGTJe1jSLEmL3j/fonqTHwUSvaEczjKDk1fKflZvpUZkI1uhJ+q7dToeP5+6JqOmkc8E9K4ov+ eVcd0MYHAuR950mxTZf0Bo3RXmJiLhabMuGwEkeVqtBbXKcOLyABuEYxdQCEiq0322SBfY3tDKf qefGbhlriuvBmviKMqquYxG5zIlJ28ny+KpAtdtqDiecouxWrvhUiOO7nhjArnL8YlfkiMqEFHX RGzApjTOhwZz02xUrBsdw== X-Gm-Gg: Acq92OGE+17rOJQnbsJDzQwB36WW4UC5hg2PkH88dFpBW1czlwFz/7Rjyg/HGRdwHjj 8h3EBZagYWzez8Tl1nEgr02hPWljTxsYZO6BGfPYe2Dvmsfeff2Q0HQb+LiS9RaiAW0o8Rn89+Q a7GlOqGNhtKUt+hBv7zFX3u9hAohKBTnBEInF7nTyQedyGTvaAT0nQ2WZ01erPt5zGfl6AZwkxa P6ZOHu9h2wrX4sByCZlhN/qrmmvAXdzdk3FBxbx0MDgzQCIhcqyQAoCnNJDNj8MD+SPZWtR117G ORTWskRwt29EXxRsYHgTbtqoLfx/JrikcfDw+uj4OO6+ZYXoNQg/J36qoJa0kPEIlLrl21IYsgq 9gEOsDEqG1bKiKae/DqfA6rIpDdbo4QfXCEiV0jZ3ZvRaeKMF/b6SmPVLdbWzwT7R+yrj9X5FTr NGCdbxXFccm8nR8G4KGeLazk1aijRueEVeuyenAr+yok8z34qT3nXqBiMcK8k3C/p7WJ4= X-Received: by 2002:a17:902:ecc2:b0:2bf:222e:455 with SMTP id d9443c01a7336-2c1e80e4284mr235779475ad.7.1781005764718; Tue, 09 Jun 2026 04:49:24 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1781005763; x=1781610563; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=fsTwEeomyHcAOr+L7DgyHdHnlX/mi1ZTCxvWJGVdGKg=; b=CHkJ/8olqF5vMR4uyAJkvHk+ktjlbENoucnLYvYIRokXkoQIRsOCznOJIJSemm9/4T mjdTOPHG9l8VVSEbIb2mph8fSHxUwVcS3z2gLWUE0XW5o5c/6AiBMCAg4yknHHuMY67a 4+RscFn1dSfZldn1bXDXfuvJ6hxiYHrPG01KY= X-Forwarded-Encrypted: i=1; AFNElJ+f0SXZ89c62FtP2hKsRRwgqRDFAu6LB8dZJnMAnPaUPsRqKWNTEM51fdeTRCwA7yTlXWR+WfgIcvk=@lists.xenproject.org X-Received: by 2002:a17:90b:3b90:b0:366:132:fda7 with SMTP id 98e67ed59e1d1-370ef0f5bcamr21076964a91.10.1781005761912; Tue, 09 Jun 2026 04:49:21 -0700 (PDT) X-Received: by 2002:a17:90b:3b90:b0:366:132:fda7 with SMTP id 98e67ed59e1d1-370ef0f5bcamr21076843a91.10.1781005760883; Tue, 09 Jun 2026 04:49:20 -0700 (PDT) From: Sumit Saxena To: "Martin K . Petersen" , Jens Axboe Cc: "James E . J . Bottomley" , linux-scsi@vger.kernel.org, linux-block@vger.kernel.org, Adam Radford , Khalid Aziz , Adaptec OEM Raid Solutions , Matthew Wilcox , Hannes Reinecke , "Juergen E . Fischer" , Russell King , linux-arm-kernel@lists.infradead.org, Finn Thain , Michael Schmitz , Anil Gurumurthy , Sudarsana Kalluru , Oliver Neukum , Ali Akcaagac , Jamie Lenehan , Ram Vegesna , target-devel@vger.kernel.org, Bradley Grove , Satish Kharat , Sesidhar Baddela , Karan Tilak Kumar , Yihang Li , Don Brace , storagedev@microchip.com, HighPoint Linux Team , Tyrel Datwyler , Madhavan Srinivasan , Michael Ellerman , Nicholas Piggin , Christophe Leroy , linuxppc-dev@lists.ozlabs.org, Brian King , Lee Duncan , Chris Leech , Mike Christie , open-iscsi@googlegroups.com, Justin Tee , Paul Ely , Kashyap Desai , Shivasharan S , Chandrakanth Patil , megaraidlinux.pdl@broadcom.com, Sathya Prakash Veerichetty , Sreekanth Reddy , mpi3mr-linuxdrv.pdl@broadcom.com, Suganath Prabu Subramani , Ranjan Kumar , MPT-FusionLinux.pdl@broadcom.com, Daniel Palmer , GOTO Masanori , YOKOTA Hiroshi , Jack Wang , Geoff Levand , Michael Reed , Nilesh Javali , GR-QLogic-Storage-Upstream@marvell.com, Narsimhulu Musini , "K . Y . Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , linux-hyperv@vger.kernel.org, "Michael S . Tsirkin" , Jason Wang , Paolo Bonzini , Stefan Hajnoczi , Eugenio Perez , virtualization@lists.linux.dev, Vishal Bhakta , bcm-kernel-feedback-list@broadcom.com, Juergen Gross , Stefano Stabellini , Oleksandr Tyshchenko , xen-devel@lists.xenproject.org, Sumit Saxena , John Garry Subject: [PATCH v3 2/4] scsi: host: allocate struct Scsi_Host on the NUMA node of the host adapter Date: Tue, 9 Jun 2026 17:48:01 +0530 Message-ID: <20260609121806.2121755-3-sumit.saxena@broadcom.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260609121806.2121755-1-sumit.saxena@broadcom.com> References: <20260609121806.2121755-1-sumit.saxena@broadcom.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e X-purgate-ID: tlsNG-bad1c0/1781005767-3757B9F3-5609E7ED/0/0 X-purgate-type: clean X-purgate-size: 58833 X-ZohoMail-DKIM: pass (identity @broadcom.com) X-ZM-MESSAGEID: 1781005801997158500 scsi_host_alloc() used kzalloc(), which always picks an arbitrary node. Extend the function to accept a 'struct device *dev' parameter and use kzalloc_node() with dev_to_node(dev) so the Scsi_Host struct lands on the same NUMA node as the HBA, mirroring the treatment already applied to struct scsi_device, struct scsi_target, and shost_data. When dev is NULL (legacy ISA/platform drivers without a dma_dev) the allocation falls back to NUMA_NO_NODE, preserving existing behaviour. Update all in-tree callers: - PCI-based HBA drivers pass &pdev->dev (or the equivalent struct member such as &phba->pcidev->dev, &h->pdev->dev, &ha->pdev->dev) so their host struct is placed on the adapter's node. - Non-PCI drivers (ISA, Amiga, ARM PCMCIA, virtio, Hyper-V, PS3, =E2=80= =A6) pass NULL. - libfc's libfc_host_alloc() inline helper passes NULL; FC drivers that want NUMA awareness can open-code the call with their pdev. Suggested-by: John Garry Signed-off-by: Sumit Saxena --- drivers/scsi/3w-9xxx.c | 2 +- drivers/scsi/3w-sas.c | 2 +- drivers/scsi/3w-xxxx.c | 2 +- drivers/scsi/53c700.c | 2 +- drivers/scsi/BusLogic.c | 2 +- drivers/scsi/a100u2w.c | 2 +- drivers/scsi/a2091.c | 2 +- drivers/scsi/a3000.c | 2 +- drivers/scsi/aacraid/linit.c | 2 +- drivers/scsi/advansys.c | 6 +++--- drivers/scsi/aha152x.c | 2 +- drivers/scsi/aha1542.c | 2 +- drivers/scsi/aha1740.c | 2 +- drivers/scsi/aic7xxx/aic79xx_osm.c | 2 +- drivers/scsi/aic7xxx/aic7xxx_osm.c | 2 +- drivers/scsi/aic94xx/aic94xx_init.c | 2 +- drivers/scsi/am53c974.c | 2 +- drivers/scsi/arcmsr/arcmsr_hba.c | 3 ++- drivers/scsi/arm/acornscsi.c | 2 +- drivers/scsi/arm/arxescsi.c | 2 +- drivers/scsi/arm/cumana_1.c | 2 +- drivers/scsi/arm/cumana_2.c | 2 +- drivers/scsi/arm/eesox.c | 2 +- drivers/scsi/arm/oak.c | 2 +- drivers/scsi/arm/powertec.c | 2 +- drivers/scsi/atari_scsi.c | 2 +- drivers/scsi/atp870u.c | 2 +- drivers/scsi/bfa/bfad_im.c | 2 +- drivers/scsi/csiostor/csio_init.c | 4 ++-- drivers/scsi/dc395x.c | 2 +- drivers/scsi/dmx3191d.c | 2 +- drivers/scsi/elx/efct/efct_xport.c | 4 ++-- drivers/scsi/esas2r/esas2r_main.c | 2 +- drivers/scsi/fdomain.c | 2 +- drivers/scsi/fnic/fnic_main.c | 2 +- drivers/scsi/g_NCR5380.c | 2 +- drivers/scsi/gvp11.c | 2 +- drivers/scsi/hisi_sas/hisi_sas_main.c | 2 +- drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 2 +- drivers/scsi/hosts.c | 6 ++++-- drivers/scsi/hpsa.c | 2 +- drivers/scsi/hptiop.c | 2 +- drivers/scsi/ibmvscsi/ibmvfc.c | 2 +- drivers/scsi/ibmvscsi/ibmvscsi.c | 2 +- drivers/scsi/imm.c | 2 +- drivers/scsi/initio.c | 2 +- drivers/scsi/ipr.c | 2 +- drivers/scsi/ips.c | 2 +- drivers/scsi/isci/init.c | 2 +- drivers/scsi/jazz_esp.c | 2 +- drivers/scsi/libiscsi.c | 2 +- drivers/scsi/lpfc/lpfc_init.c | 2 +- drivers/scsi/mac53c94.c | 2 +- drivers/scsi/mac_esp.c | 2 +- drivers/scsi/mac_scsi.c | 2 +- drivers/scsi/megaraid.c | 2 +- drivers/scsi/megaraid/megaraid_mbox.c | 2 +- drivers/scsi/megaraid/megaraid_sas_base.c | 2 +- drivers/scsi/mesh.c | 2 +- drivers/scsi/mpi3mr/mpi3mr_os.c | 2 +- drivers/scsi/mpt3sas/mpt3sas_scsih.c | 4 ++-- drivers/scsi/mvme147.c | 2 +- drivers/scsi/mvsas/mv_init.c | 2 +- drivers/scsi/mvumi.c | 2 +- drivers/scsi/myrb.c | 2 +- drivers/scsi/myrs.c | 2 +- drivers/scsi/ncr53c8xx.c | 2 +- drivers/scsi/nsp32.c | 2 +- drivers/scsi/pcmcia/nsp_cs.c | 2 +- drivers/scsi/pcmcia/qlogic_stub.c | 2 +- drivers/scsi/pcmcia/sym53c500_cs.c | 2 +- drivers/scsi/pm8001/pm8001_init.c | 2 +- drivers/scsi/pmcraid.c | 2 +- drivers/scsi/ppa.c | 2 +- drivers/scsi/ps3rom.c | 2 +- drivers/scsi/qla1280.c | 2 +- drivers/scsi/qla2xxx/qla_mid.c | 2 +- drivers/scsi/qla2xxx/qla_os.c | 2 +- drivers/scsi/qlogicfas.c | 2 +- drivers/scsi/qlogicpti.c | 2 +- drivers/scsi/scsi_debug.c | 2 +- drivers/scsi/sgiwd93.c | 2 +- drivers/scsi/smartpqi/smartpqi_init.c | 2 +- drivers/scsi/snic/snic_main.c | 2 +- drivers/scsi/stex.c | 2 +- drivers/scsi/storvsc_drv.c | 2 +- drivers/scsi/sun3_scsi.c | 2 +- drivers/scsi/sun3x_esp.c | 2 +- drivers/scsi/sun_esp.c | 2 +- drivers/scsi/sym53c8xx_2/sym_glue.c | 2 +- drivers/scsi/virtio_scsi.c | 2 +- drivers/scsi/vmw_pvscsi.c | 2 +- drivers/scsi/wd719x.c | 2 +- drivers/scsi/xen-scsifront.c | 2 +- drivers/scsi/zorro_esp.c | 2 +- include/scsi/libfc.h | 2 +- include/scsi/scsi_host.h | 3 ++- 97 files changed, 107 insertions(+), 103 deletions(-) diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c index 9b93a2440af8..444578ee8070 100644 --- a/drivers/scsi/3w-9xxx.c +++ b/drivers/scsi/3w-9xxx.c @@ -2021,7 +2021,7 @@ static int twa_probe(struct pci_dev *pdev, const stru= ct pci_device_id *dev_id) goto out_disable_device; } =20 - host =3D scsi_host_alloc(&driver_template, sizeof(TW_Device_Extension)); + host =3D scsi_host_alloc(&driver_template, sizeof(TW_Device_Extension), &= pdev->dev); if (!host) { TW_PRINTK(host, TW_DRIVER, 0x24, "Failed to allocate memory for device e= xtension"); retval =3D -ENOMEM; diff --git a/drivers/scsi/3w-sas.c b/drivers/scsi/3w-sas.c index 52dc1aa639f7..d063d39faf4f 100644 --- a/drivers/scsi/3w-sas.c +++ b/drivers/scsi/3w-sas.c @@ -1576,7 +1576,7 @@ static int twl_probe(struct pci_dev *pdev, const stru= ct pci_device_id *dev_id) goto out_disable_device; } =20 - host =3D scsi_host_alloc(&driver_template, sizeof(TW_Device_Extension)); + host =3D scsi_host_alloc(&driver_template, sizeof(TW_Device_Extension), &= pdev->dev); if (!host) { TW_PRINTK(host, TW_DRIVER, 0x19, "Failed to allocate memory for device e= xtension"); retval =3D -ENOMEM; diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c index c68678fa72c1..0ccb5f1f8805 100644 --- a/drivers/scsi/3w-xxxx.c +++ b/drivers/scsi/3w-xxxx.c @@ -2268,7 +2268,7 @@ static int tw_probe(struct pci_dev *pdev, const struc= t pci_device_id *dev_id) goto out_disable_device; } =20 - host =3D scsi_host_alloc(&driver_template, sizeof(TW_Device_Extension)); + host =3D scsi_host_alloc(&driver_template, sizeof(TW_Device_Extension), &= pdev->dev); if (!host) { printk(KERN_WARNING "3w-xxxx: Failed to allocate memory for device exten= sion."); retval =3D -ENOMEM; diff --git a/drivers/scsi/53c700.c b/drivers/scsi/53c700.c index c78f74b8f45c..e30d55ab5dea 100644 --- a/drivers/scsi/53c700.c +++ b/drivers/scsi/53c700.c @@ -341,7 +341,7 @@ NCR_700_detect(struct scsi_host_template *tpnt, if(tpnt->proc_name =3D=3D NULL) tpnt->proc_name =3D "53c700"; =20 - host =3D scsi_host_alloc(tpnt, 4); + host =3D scsi_host_alloc(tpnt, 4, NULL); if (!host) return NULL; memset(hostdata->slots, 0, sizeof(struct NCR_700_command_slot) diff --git a/drivers/scsi/BusLogic.c b/drivers/scsi/BusLogic.c index 5304d2febd63..f865fdec4136 100644 --- a/drivers/scsi/BusLogic.c +++ b/drivers/scsi/BusLogic.c @@ -2302,7 +2302,7 @@ static int __init blogic_init(void) */ =20 host =3D scsi_host_alloc(&blogic_template, - sizeof(struct blogic_adapter)); + sizeof(struct blogic_adapter), NULL); if (host =3D=3D NULL) { release_region(myadapter->io_addr, myadapter->addr_count); diff --git a/drivers/scsi/a100u2w.c b/drivers/scsi/a100u2w.c index 4365b896f5c4..9124c6103902 100644 --- a/drivers/scsi/a100u2w.c +++ b/drivers/scsi/a100u2w.c @@ -1106,7 +1106,7 @@ static int inia100_probe_one(struct pci_dev *pdev, bios =3D inw(port + 0x50); =20 =20 - shost =3D scsi_host_alloc(&inia100_template, sizeof(struct orc_host)); + shost =3D scsi_host_alloc(&inia100_template, sizeof(struct orc_host), &pd= ev->dev); if (!shost) goto out_release_region; =20 diff --git a/drivers/scsi/a2091.c b/drivers/scsi/a2091.c index 204448bfd04b..51effb2edefb 100644 --- a/drivers/scsi/a2091.c +++ b/drivers/scsi/a2091.c @@ -214,7 +214,7 @@ static int a2091_probe(struct zorro_dev *z, const struc= t zorro_device_id *ent) return -EBUSY; =20 instance =3D scsi_host_alloc(&a2091_scsi_template, - sizeof(struct a2091_hostdata)); + sizeof(struct a2091_hostdata), NULL); if (!instance) { error =3D -ENOMEM; goto fail_alloc; diff --git a/drivers/scsi/a3000.c b/drivers/scsi/a3000.c index bf054dd7682b..5b3d25b8ad37 100644 --- a/drivers/scsi/a3000.c +++ b/drivers/scsi/a3000.c @@ -235,7 +235,7 @@ static int __init amiga_a3000_scsi_probe(struct platfor= m_device *pdev) return -EBUSY; =20 instance =3D scsi_host_alloc(&amiga_a3000_scsi_template, - sizeof(struct a3000_hostdata)); + sizeof(struct a3000_hostdata), NULL); if (!instance) { error =3D -ENOMEM; goto fail_alloc; diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index 2fa8f7ddb703..d003667007f7 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c @@ -1636,7 +1636,7 @@ static int aac_probe_one(struct pci_dev *pdev, const = struct pci_device_id *id) =20 pci_set_master(pdev); =20 - shost =3D scsi_host_alloc(&aac_driver_template, sizeof(struct aac_dev)); + shost =3D scsi_host_alloc(&aac_driver_template, sizeof(struct aac_dev), &= pdev->dev); if (!shost) { error =3D -ENOMEM; goto out_disable_pdev; diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c index 5cdbf2bdb13d..e7ef433778a1 100644 --- a/drivers/scsi/advansys.c +++ b/drivers/scsi/advansys.c @@ -11237,7 +11237,7 @@ static int advansys_vlb_probe(struct device *dev, u= nsigned int id) goto release_region; =20 err =3D -ENOMEM; - shost =3D scsi_host_alloc(&advansys_template, sizeof(*board)); + shost =3D scsi_host_alloc(&advansys_template, sizeof(*board), NULL); if (!shost) goto release_region; =20 @@ -11345,7 +11345,7 @@ static int advansys_eisa_probe(struct device *dev) irq =3D advansys_eisa_irq_no(edev); =20 err =3D -ENOMEM; - shost =3D scsi_host_alloc(&advansys_template, sizeof(*board)); + shost =3D scsi_host_alloc(&advansys_template, sizeof(*board), NULL); if (!shost) goto release_region; =20 @@ -11462,7 +11462,7 @@ static int advansys_pci_probe(struct pci_dev *pdev, ioport =3D pci_resource_start(pdev, 0); =20 err =3D -ENOMEM; - shost =3D scsi_host_alloc(&advansys_template, sizeof(*board)); + shost =3D scsi_host_alloc(&advansys_template, sizeof(*board), &pdev->dev); if (!shost) goto release_region; =20 diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c index e3ccb6bb62c0..d82ce80de098 100644 --- a/drivers/scsi/aha152x.c +++ b/drivers/scsi/aha152x.c @@ -734,7 +734,7 @@ struct Scsi_Host *aha152x_probe_one(struct aha152x_setu= p *setup) { struct Scsi_Host *shpnt; =20 - shpnt =3D scsi_host_alloc(&aha152x_driver_template, sizeof(struct aha152x= _hostdata)); + shpnt =3D scsi_host_alloc(&aha152x_driver_template, sizeof(struct aha152x= _hostdata), NULL); if (!shpnt) { printk(KERN_ERR "aha152x: scsi_host_alloc failed\n"); return NULL; diff --git a/drivers/scsi/aha1542.c b/drivers/scsi/aha1542.c index fd766282d4a4..1a109c850785 100644 --- a/drivers/scsi/aha1542.c +++ b/drivers/scsi/aha1542.c @@ -752,7 +752,7 @@ static struct Scsi_Host *aha1542_hw_init(const struct s= csi_host_template *tpnt, if (!request_region(base_io, AHA1542_REGION_SIZE, "aha1542")) return NULL; =20 - sh =3D scsi_host_alloc(tpnt, sizeof(struct aha1542_hostdata)); + sh =3D scsi_host_alloc(tpnt, sizeof(struct aha1542_hostdata), NULL); if (!sh) goto release; aha1542 =3D shost_priv(sh); diff --git a/drivers/scsi/aha1740.c b/drivers/scsi/aha1740.c index c435769359f2..31a52edf0748 100644 --- a/drivers/scsi/aha1740.c +++ b/drivers/scsi/aha1740.c @@ -583,7 +583,7 @@ static int aha1740_probe (struct device *dev) printk(KERN_INFO "aha174x: Extended translation %sabled.\n", translation ? "en" : "dis"); shpnt =3D scsi_host_alloc(&aha1740_template, - sizeof(struct aha1740_hostdata)); + sizeof(struct aha1740_hostdata), NULL); if(shpnt =3D=3D NULL) goto err_release_region; =20 diff --git a/drivers/scsi/aic7xxx/aic79xx_osm.c b/drivers/scsi/aic7xxx/aic7= 9xx_osm.c index feb1707feb7e..76e30b0784b9 100644 --- a/drivers/scsi/aic7xxx/aic79xx_osm.c +++ b/drivers/scsi/aic7xxx/aic79xx_osm.c @@ -1214,7 +1214,7 @@ ahd_linux_register_host(struct ahd_softc *ahd, struct= scsi_host_template *templa int retval; =20 template->name =3D ahd->description; - host =3D scsi_host_alloc(template, sizeof(struct ahd_softc *)); + host =3D scsi_host_alloc(template, sizeof(struct ahd_softc *), NULL); if (host =3D=3D NULL) return (ENOMEM); =20 diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm.c b/drivers/scsi/aic7xxx/aic7= xxx_osm.c index d93b522695eb..0169509abd76 100644 --- a/drivers/scsi/aic7xxx/aic7xxx_osm.c +++ b/drivers/scsi/aic7xxx/aic7xxx_osm.c @@ -1083,7 +1083,7 @@ ahc_linux_register_host(struct ahc_softc *ahc, struct= scsi_host_template *templa int retval; =20 template->name =3D ahc->description; - host =3D scsi_host_alloc(template, sizeof(struct ahc_softc *)); + host =3D scsi_host_alloc(template, sizeof(struct ahc_softc *), NULL); if (host =3D=3D NULL) return -ENOMEM; =20 diff --git a/drivers/scsi/aic94xx/aic94xx_init.c b/drivers/scsi/aic94xx/aic= 94xx_init.c index 4400a3661d90..1336e5e38f8d 100644 --- a/drivers/scsi/aic94xx/aic94xx_init.c +++ b/drivers/scsi/aic94xx/aic94xx_init.c @@ -704,7 +704,7 @@ static int asd_pci_probe(struct pci_dev *dev, const str= uct pci_device_id *id) =20 err =3D -ENOMEM; =20 - shost =3D scsi_host_alloc(&aic94xx_sht, sizeof(void *)); + shost =3D scsi_host_alloc(&aic94xx_sht, sizeof(void *), &dev->dev); if (!shost) goto Err; =20 diff --git a/drivers/scsi/am53c974.c b/drivers/scsi/am53c974.c index f972a3c90a2f..4ca73e801232 100644 --- a/drivers/scsi/am53c974.c +++ b/drivers/scsi/am53c974.c @@ -388,7 +388,7 @@ static int pci_esp_probe_one(struct pci_dev *pdev, goto fail_disable_device; } =20 - shost =3D scsi_host_alloc(hostt, sizeof(struct esp)); + shost =3D scsi_host_alloc(hostt, sizeof(struct esp), &pdev->dev); if (!shost) { dev_printk(KERN_INFO, &pdev->dev, "failed to allocate scsi host\n"); diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_= hba.c index 8aa948f06cac..f0cc59e756dc 100644 --- a/drivers/scsi/arcmsr/arcmsr_hba.c +++ b/drivers/scsi/arcmsr/arcmsr_hba.c @@ -1087,7 +1087,8 @@ static int arcmsr_probe(struct pci_dev *pdev, const s= truct pci_device_id *id) if(error){ return -ENODEV; } - host =3D scsi_host_alloc(&arcmsr_scsi_host_template, sizeof(struct Adapte= rControlBlock)); + host =3D scsi_host_alloc(&arcmsr_scsi_host_template, + sizeof(struct AdapterControlBlock), &pdev->dev); if(!host){ goto pci_disable_dev; } diff --git a/drivers/scsi/arm/acornscsi.c b/drivers/scsi/arm/acornscsi.c index 79d7d7336b6a..97e3db7e6a7c 100644 --- a/drivers/scsi/arm/acornscsi.c +++ b/drivers/scsi/arm/acornscsi.c @@ -2806,7 +2806,7 @@ static int acornscsi_probe(struct expansion_card *ec,= const struct ecard_id *id) if (ret) goto out; =20 - host =3D scsi_host_alloc(&acornscsi_template, sizeof(AS_Host)); + host =3D scsi_host_alloc(&acornscsi_template, sizeof(AS_Host), NULL); if (!host) { ret =3D -ENOMEM; goto out_release; diff --git a/drivers/scsi/arm/arxescsi.c b/drivers/scsi/arm/arxescsi.c index 925d0bd68aa5..32f0a3aefb44 100644 --- a/drivers/scsi/arm/arxescsi.c +++ b/drivers/scsi/arm/arxescsi.c @@ -272,7 +272,7 @@ static int arxescsi_probe(struct expansion_card *ec, co= nst struct ecard_id *id) goto out_region; } =20 - host =3D scsi_host_alloc(&arxescsi_template, sizeof(struct arxescsi_info)= ); + host =3D scsi_host_alloc(&arxescsi_template, sizeof(struct arxescsi_info)= , NULL); if (!host) { ret =3D -ENOMEM; goto out_region; diff --git a/drivers/scsi/arm/cumana_1.c b/drivers/scsi/arm/cumana_1.c index d1a2a22ffe8c..d47ff9353c1b 100644 --- a/drivers/scsi/arm/cumana_1.c +++ b/drivers/scsi/arm/cumana_1.c @@ -238,7 +238,7 @@ static int cumanascsi1_probe(struct expansion_card *ec, if (ret) goto out; =20 - host =3D scsi_host_alloc(&cumanascsi_template, sizeof(struct NCR5380_host= data)); + host =3D scsi_host_alloc(&cumanascsi_template, sizeof(struct NCR5380_host= data), NULL); if (!host) { ret =3D -ENOMEM; goto out_release; diff --git a/drivers/scsi/arm/cumana_2.c b/drivers/scsi/arm/cumana_2.c index e460068f6834..e35afe3a1fe4 100644 --- a/drivers/scsi/arm/cumana_2.c +++ b/drivers/scsi/arm/cumana_2.c @@ -394,7 +394,7 @@ static int cumanascsi2_probe(struct expansion_card *ec, } =20 host =3D scsi_host_alloc(&cumanascsi2_template, - sizeof(struct cumanascsi2_info)); + sizeof(struct cumanascsi2_info), NULL); if (!host) { ret =3D -ENOMEM; goto out_region; diff --git a/drivers/scsi/arm/eesox.c b/drivers/scsi/arm/eesox.c index 99be9da8757f..de4d457f8ce7 100644 --- a/drivers/scsi/arm/eesox.c +++ b/drivers/scsi/arm/eesox.c @@ -510,7 +510,7 @@ static int eesoxscsi_probe(struct expansion_card *ec, c= onst struct ecard_id *id) } =20 host =3D scsi_host_alloc(&eesox_template, - sizeof(struct eesoxscsi_info)); + sizeof(struct eesoxscsi_info), NULL); if (!host) { ret =3D -ENOMEM; goto out_region; diff --git a/drivers/scsi/arm/oak.c b/drivers/scsi/arm/oak.c index d69245007096..b2ff8616f963 100644 --- a/drivers/scsi/arm/oak.c +++ b/drivers/scsi/arm/oak.c @@ -126,7 +126,7 @@ static int oakscsi_probe(struct expansion_card *ec, con= st struct ecard_id *id) if (ret) goto out; =20 - host =3D scsi_host_alloc(&oakscsi_template, sizeof(struct NCR5380_hostdat= a)); + host =3D scsi_host_alloc(&oakscsi_template, sizeof(struct NCR5380_hostdat= a), NULL); if (!host) { ret =3D -ENOMEM; goto release; diff --git a/drivers/scsi/arm/powertec.c b/drivers/scsi/arm/powertec.c index 823c65ff6c12..045f35e50eff 100644 --- a/drivers/scsi/arm/powertec.c +++ b/drivers/scsi/arm/powertec.c @@ -318,7 +318,7 @@ static int powertecscsi_probe(struct expansion_card *ec, } =20 host =3D scsi_host_alloc(&powertecscsi_template, - sizeof (struct powertec_info)); + sizeof(struct powertec_info), NULL); if (!host) { ret =3D -ENOMEM; goto out_region; diff --git a/drivers/scsi/atari_scsi.c b/drivers/scsi/atari_scsi.c index 85055677666c..9a469cf3991f 100644 --- a/drivers/scsi/atari_scsi.c +++ b/drivers/scsi/atari_scsi.c @@ -785,7 +785,7 @@ static int __init atari_scsi_probe(struct platform_devi= ce *pdev) } =20 instance =3D scsi_host_alloc(&atari_scsi_template, - sizeof(struct NCR5380_hostdata)); + sizeof(struct NCR5380_hostdata), NULL); if (!instance) { error =3D -ENOMEM; goto fail_alloc; diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c index 67459d81f479..57f0b4a11ba7 100644 --- a/drivers/scsi/atp870u.c +++ b/drivers/scsi/atp870u.c @@ -1579,7 +1579,7 @@ static int atp870u_probe(struct pci_dev *pdev, const = struct pci_device_id *ent) pci_set_master(pdev); =20 err =3D -ENOMEM; - shpnt =3D scsi_host_alloc(&atp870u_template, sizeof(struct atp_unit)); + shpnt =3D scsi_host_alloc(&atp870u_template, sizeof(struct atp_unit), &pd= ev->dev); if (!shpnt) goto release_region; =20 diff --git a/drivers/scsi/bfa/bfad_im.c b/drivers/scsi/bfa/bfad_im.c index 97990b285e17..bd14aee64886 100644 --- a/drivers/scsi/bfa/bfad_im.c +++ b/drivers/scsi/bfa/bfad_im.c @@ -740,7 +740,7 @@ bfad_scsi_host_alloc(struct bfad_im_port_s *im_port, st= ruct bfad_s *bfad) =20 sht->sg_tablesize =3D bfad->cfg_data.io_max_sge; =20 - return scsi_host_alloc(sht, sizeof(struct bfad_im_port_pointer)); + return scsi_host_alloc(sht, sizeof(struct bfad_im_port_pointer), NULL); } =20 void diff --git a/drivers/scsi/csiostor/csio_init.c b/drivers/scsi/csiostor/csio= _init.c index 238431524801..a4bf1ba03248 100644 --- a/drivers/scsi/csiostor/csio_init.c +++ b/drivers/scsi/csiostor/csio_init.c @@ -606,11 +606,11 @@ csio_shost_init(struct csio_hw *hw, struct device *de= v, if (dev =3D=3D &hw->pdev->dev) shost =3D scsi_host_alloc( &csio_fcoe_shost_template, - sizeof(struct csio_lnode)); + sizeof(struct csio_lnode), &hw->pdev->dev); else shost =3D scsi_host_alloc( &csio_fcoe_shost_vport_template, - sizeof(struct csio_lnode)); + sizeof(struct csio_lnode), &hw->pdev->dev); =20 if (!shost) goto err; diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c index 6183ce05d8cf..16adeac93aac 100644 --- a/drivers/scsi/dc395x.c +++ b/drivers/scsi/dc395x.c @@ -3984,7 +3984,7 @@ static int dc395x_init_one(struct pci_dev *dev, const= struct pci_device_id *id) =20 /* allocate scsi host information (includes out adapter) */ scsi_host =3D scsi_host_alloc(&dc395x_driver_template, - sizeof(struct AdapterCtlBlk)); + sizeof(struct AdapterCtlBlk), &dev->dev); if (!scsi_host) goto fail; =20 diff --git a/drivers/scsi/dmx3191d.c b/drivers/scsi/dmx3191d.c index d6d091b2f3c7..8ba17e3eefe3 100644 --- a/drivers/scsi/dmx3191d.c +++ b/drivers/scsi/dmx3191d.c @@ -74,7 +74,7 @@ static int dmx3191d_probe_one(struct pci_dev *pdev, } =20 shost =3D scsi_host_alloc(&dmx3191d_driver_template, - sizeof(struct NCR5380_hostdata)); + sizeof(struct NCR5380_hostdata), &pdev->dev); if (!shost) goto out_release_region; =20 =20 diff --git a/drivers/scsi/elx/efct/efct_xport.c b/drivers/scsi/elx/efct/efc= t_xport.c index 9dcaef6fc188..74ef76e00eb5 100644 --- a/drivers/scsi/elx/efct/efct_xport.c +++ b/drivers/scsi/elx/efct/efct_xport.c @@ -378,7 +378,7 @@ efct_scsi_new_device(struct efct *efct) int error =3D 0; struct efct_vport *vport =3D NULL; =20 - shost =3D scsi_host_alloc(&efct_template, sizeof(*vport)); + shost =3D scsi_host_alloc(&efct_template, sizeof(*vport), NULL); if (!shost) { efc_log_err(efct, "failed to allocate Scsi_Host struct\n"); return -ENOMEM; @@ -902,7 +902,7 @@ efct_scsi_new_vport(struct efct *efct, struct device *d= ev) int error =3D 0; struct efct_vport *vport =3D NULL; =20 - shost =3D scsi_host_alloc(&efct_template, sizeof(*vport)); + shost =3D scsi_host_alloc(&efct_template, sizeof(*vport), NULL); if (!shost) { efc_log_err(efct, "failed to allocate Scsi_Host struct\n"); return NULL; diff --git a/drivers/scsi/esas2r/esas2r_main.c b/drivers/scsi/esas2r/esas2r= _main.c index ada278c24c51..4aac1f6db5e9 100644 --- a/drivers/scsi/esas2r/esas2r_main.c +++ b/drivers/scsi/esas2r/esas2r_main.c @@ -382,7 +382,7 @@ static int esas2r_probe(struct pci_dev *pcid, "after pci_enable_device() enable_cnt: %d", pcid->enable_cnt.counter); =20 - host =3D scsi_host_alloc(&driver_template, host_alloc_size); + host =3D scsi_host_alloc(&driver_template, host_alloc_size, &pcid->dev); if (host =3D=3D NULL) { esas2r_log(ESAS2R_LOG_CRIT, "scsi_host_alloc() FAIL"); return -ENODEV; diff --git a/drivers/scsi/fdomain.c b/drivers/scsi/fdomain.c index 22fbb0222f07..66ba4551def8 100644 --- a/drivers/scsi/fdomain.c +++ b/drivers/scsi/fdomain.c @@ -537,7 +537,7 @@ struct Scsi_Host *fdomain_create(int base, int irq, int= this_id, return NULL; } =20 - sh =3D scsi_host_alloc(&fdomain_template, sizeof(struct fdomain)); + sh =3D scsi_host_alloc(&fdomain_template, sizeof(struct fdomain), NULL); if (!sh) return NULL; =20 diff --git a/drivers/scsi/fnic/fnic_main.c b/drivers/scsi/fnic/fnic_main.c index 24d62c0874ac..688d85bc3f01 100644 --- a/drivers/scsi/fnic/fnic_main.c +++ b/drivers/scsi/fnic/fnic_main.c @@ -847,7 +847,7 @@ static int fnic_probe(struct pci_dev *pdev, const struc= t pci_device_id *ent) { host =3D scsi_host_alloc(&fnic_host_template, - sizeof(struct fnic *)); + sizeof(struct fnic *), &pdev->dev); if (!host) { dev_err(&fnic->pdev->dev, "Unable to allocate scsi host\n"); err =3D -ENOMEM; diff --git a/drivers/scsi/g_NCR5380.c b/drivers/scsi/g_NCR5380.c index 270eae7ac427..8b9076d6a964 100644 --- a/drivers/scsi/g_NCR5380.c +++ b/drivers/scsi/g_NCR5380.c @@ -312,7 +312,7 @@ static int generic_NCR5380_init_one(const struct scsi_h= ost_template *tpnt, goto out_release; } =20 - instance =3D scsi_host_alloc(tpnt, sizeof(struct NCR5380_hostdata)); + instance =3D scsi_host_alloc(tpnt, sizeof(struct NCR5380_hostdata), NULL); if (instance =3D=3D NULL) { ret =3D -ENOMEM; goto out_unmap; diff --git a/drivers/scsi/gvp11.c b/drivers/scsi/gvp11.c index 0420bfe9bd42..ad5052db5a2e 100644 --- a/drivers/scsi/gvp11.c +++ b/drivers/scsi/gvp11.c @@ -353,7 +353,7 @@ static int gvp11_probe(struct zorro_dev *z, const struc= t zorro_device_id *ent) goto fail_check_or_alloc; =20 instance =3D scsi_host_alloc(&gvp11_scsi_template, - sizeof(struct gvp11_hostdata)); + sizeof(struct gvp11_hostdata), NULL); if (!instance) { error =3D -ENOMEM; goto fail_check_or_alloc; diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/= hisi_sas_main.c index 944ce19ae2fc..5696da8da6c7 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_main.c +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c @@ -2483,7 +2483,7 @@ static struct Scsi_Host *hisi_sas_shost_alloc(struct = platform_device *pdev, struct device *dev =3D &pdev->dev; int error; =20 - shost =3D scsi_host_alloc(hw->sht, sizeof(*hisi_hba)); + shost =3D scsi_host_alloc(hw->sht, sizeof(*hisi_hba), NULL); if (!shost) { dev_err(dev, "scsi host alloc failed\n"); return NULL; diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c b/drivers/scsi/hisi_sas= /hisi_sas_v3_hw.c index c7430f7c4048..44e584496ed5 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c @@ -3469,7 +3469,7 @@ hisi_sas_shost_alloc_pci(struct pci_dev *pdev) struct hisi_hba *hisi_hba; struct device *dev =3D &pdev->dev; =20 - shost =3D scsi_host_alloc(&sht_v3_hw, sizeof(*hisi_hba)); + shost =3D scsi_host_alloc(&sht_v3_hw, sizeof(*hisi_hba), &pdev->dev); if (!shost) { dev_err(dev, "shost alloc failed\n"); return NULL; diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c index e047747d4ecf..e1f42be79729 100644 --- a/drivers/scsi/hosts.c +++ b/drivers/scsi/hosts.c @@ -403,12 +403,14 @@ static const struct device_type scsi_host_type =3D { * Return value: * Pointer to a new Scsi_Host **/ -struct Scsi_Host *scsi_host_alloc(const struct scsi_host_template *sht, in= t privsize) +struct Scsi_Host *scsi_host_alloc(const struct scsi_host_template *sht, in= t privsize, + struct device *dev) { struct Scsi_Host *shost; int index; =20 - shost =3D kzalloc(sizeof(struct Scsi_Host) + privsize, GFP_KERNEL); + shost =3D kzalloc_node(sizeof(struct Scsi_Host) + privsize, GFP_KERNEL, + dev ? dev_to_node(dev) : NUMA_NO_NODE); if (!shost) return NULL; =20 diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c index a1b116cd4723..b9f9f18bd985 100644 --- a/drivers/scsi/hpsa.c +++ b/drivers/scsi/hpsa.c @@ -5837,7 +5837,7 @@ static int hpsa_scsi_host_alloc(struct ctlr_info *h) { struct Scsi_Host *sh; =20 - sh =3D scsi_host_alloc(&hpsa_driver_template, sizeof(struct ctlr_info *)); + sh =3D scsi_host_alloc(&hpsa_driver_template, sizeof(struct ctlr_info *),= &h->pdev->dev); if (sh =3D=3D NULL) { dev_err(&h->pdev->dev, "scsi_host_alloc failed\n"); return -ENOMEM; diff --git a/drivers/scsi/hptiop.c b/drivers/scsi/hptiop.c index 7083c14c5302..7d79357be265 100644 --- a/drivers/scsi/hptiop.c +++ b/drivers/scsi/hptiop.c @@ -1311,7 +1311,7 @@ static int hptiop_probe(struct pci_dev *pcidev, const= struct pci_device_id *id) goto disable_pci_device; } =20 - host =3D scsi_host_alloc(&driver_template, sizeof(struct hptiop_hba)); + host =3D scsi_host_alloc(&driver_template, sizeof(struct hptiop_hba), &pc= idev->dev); if (!host) { printk(KERN_ERR "hptiop: fail to alloc scsi host\n"); goto free_pci_regions; diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c index 3dd2adda195e..b11d564a21d9 100644 --- a/drivers/scsi/ibmvscsi/ibmvfc.c +++ b/drivers/scsi/ibmvscsi/ibmvfc.c @@ -6325,7 +6325,7 @@ static int ibmvfc_probe(struct vio_dev *vdev, const s= truct vio_device_id *id) unsigned int max_scsi_queues =3D min((unsigned int)IBMVFC_MAX_SCSI_QUEUES= , online_cpus); =20 ENTER; - shost =3D scsi_host_alloc(&driver_template, sizeof(*vhost)); + shost =3D scsi_host_alloc(&driver_template, sizeof(*vhost), NULL); if (!shost) { dev_err(dev, "Couldn't allocate host data\n"); goto out; diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvs= csi.c index 609bda730b3a..e8342e581246 100644 --- a/drivers/scsi/ibmvscsi/ibmvscsi.c +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c @@ -2235,7 +2235,7 @@ static int ibmvscsi_probe(struct vio_dev *vdev, const= struct vio_device_id *id) =20 dev_set_drvdata(&vdev->dev, NULL); =20 - host =3D scsi_host_alloc(&driver_template, sizeof(*hostdata)); + host =3D scsi_host_alloc(&driver_template, sizeof(*hostdata), NULL); if (!host) { dev_err(&vdev->dev, "couldn't allocate host data\n"); goto scsi_host_alloc_failed; diff --git a/drivers/scsi/imm.c b/drivers/scsi/imm.c index 0535252e77e3..a6131f87fcaf 100644 --- a/drivers/scsi/imm.c +++ b/drivers/scsi/imm.c @@ -1221,7 +1221,7 @@ static int __imm_attach(struct parport *pb) INIT_DELAYED_WORK(&dev->imm_tq, imm_interrupt); =20 err =3D -ENOMEM; - host =3D scsi_host_alloc(&imm_template, sizeof(imm_struct *)); + host =3D scsi_host_alloc(&imm_template, sizeof(imm_struct *), NULL); if (!host) goto out1; host->io_port =3D pb->base; diff --git a/drivers/scsi/initio.c b/drivers/scsi/initio.c index 06fbe85dccfa..294f7f8d5dbb 100644 --- a/drivers/scsi/initio.c +++ b/drivers/scsi/initio.c @@ -2824,7 +2824,7 @@ static int initio_probe_one(struct pci_dev *pdev, error =3D -ENODEV; goto out_disable_device; } - shost =3D scsi_host_alloc(&initio_template, sizeof(struct initio_host)); + shost =3D scsi_host_alloc(&initio_template, sizeof(struct initio_host), &= pdev->dev); if (!shost) { printk(KERN_WARNING "initio: Could not allocate host structure.\n"); error =3D -ENOMEM; diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c index d207e5e81afe..85608804ff39 100644 --- a/drivers/scsi/ipr.c +++ b/drivers/scsi/ipr.c @@ -9379,7 +9379,7 @@ static int ipr_probe_ioa(struct pci_dev *pdev, ENTER; =20 dev_info(&pdev->dev, "Found IOA with IRQ: %d\n", pdev->irq); - host =3D scsi_host_alloc(&driver_template, sizeof(*ioa_cfg)); + host =3D scsi_host_alloc(&driver_template, sizeof(*ioa_cfg), &pdev->dev); =20 if (!host) { dev_err(&pdev->dev, "call to scsi_host_alloc failed!\n"); diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c index 41ed73966a48..709a2a799f3e 100644 --- a/drivers/scsi/ips.c +++ b/drivers/scsi/ips.c @@ -6638,7 +6638,7 @@ ips_register_scsi(int index) { struct Scsi_Host *sh; ips_ha_t *ha, *oldha =3D ips_ha[index]; - sh =3D scsi_host_alloc(&ips_driver_template, sizeof (ips_ha_t)); + sh =3D scsi_host_alloc(&ips_driver_template, sizeof(ips_ha_t), &oldha->pc= idev->dev); if (!sh) { IPS_PRINTK(KERN_WARNING, oldha->pcidev, "Unable to register controller with SCSI subsystem\n"); diff --git a/drivers/scsi/isci/init.c b/drivers/scsi/isci/init.c index acf0c2038d20..7da06ace20ad 100644 --- a/drivers/scsi/isci/init.c +++ b/drivers/scsi/isci/init.c @@ -538,7 +538,7 @@ static struct isci_host *isci_host_alloc(struct pci_dev= *pdev, int id) INIT_LIST_HEAD(&idev->node); } =20 - shost =3D scsi_host_alloc(&isci_sht, sizeof(void *)); + shost =3D scsi_host_alloc(&isci_sht, sizeof(void *), &pdev->dev); if (!shost) return NULL; =20 diff --git a/drivers/scsi/jazz_esp.c b/drivers/scsi/jazz_esp.c index 35137f5cfb3a..1817246e4cc6 100644 --- a/drivers/scsi/jazz_esp.c +++ b/drivers/scsi/jazz_esp.c @@ -110,7 +110,7 @@ static int esp_jazz_probe(struct platform_device *dev) struct resource *res; int err; =20 - host =3D scsi_host_alloc(tpnt, sizeof(struct esp)); + host =3D scsi_host_alloc(tpnt, sizeof(struct esp), NULL); =20 err =3D -ENOMEM; if (!host) diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c index 160f02f2f51d..458955dfc0aa 100644 --- a/drivers/scsi/libiscsi.c +++ b/drivers/scsi/libiscsi.c @@ -2903,7 +2903,7 @@ struct Scsi_Host *iscsi_host_alloc(const struct scsi_= host_template *sht, struct Scsi_Host *shost; struct iscsi_host *ihost; =20 - shost =3D scsi_host_alloc(sht, sizeof(struct iscsi_host) + dd_data_size); + shost =3D scsi_host_alloc(sht, sizeof(struct iscsi_host) + dd_data_size, = NULL); if (!shost) return NULL; ihost =3D shost_priv(shost); diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index 82af59c913e9..25264866075f 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c @@ -4745,7 +4745,7 @@ lpfc_create_port(struct lpfc_hba *phba, int instance,= struct device *dev) template->sg_tablesize =3D lpfc_get_sg_tablesize(phba); } =20 - shost =3D scsi_host_alloc(template, sizeof(struct lpfc_vport)); + shost =3D scsi_host_alloc(template, sizeof(struct lpfc_vport), &phba->pci= dev->dev); if (!shost) goto out; =20 diff --git a/drivers/scsi/mac53c94.c b/drivers/scsi/mac53c94.c index de2bd860b9d7..737e5f2fef6f 100644 --- a/drivers/scsi/mac53c94.c +++ b/drivers/scsi/mac53c94.c @@ -426,7 +426,7 @@ static int mac53c94_probe(struct macio_dev *mdev, const= struct of_device_id *mat return -EBUSY; } =20 - host =3D scsi_host_alloc(&mac53c94_template, sizeof(struct fsc_sta= te)); + host =3D scsi_host_alloc(&mac53c94_template, sizeof(struct fsc_state), NU= LL); if (host =3D=3D NULL) { printk(KERN_ERR "mac53c94: couldn't register host"); rc =3D -ENOMEM; diff --git a/drivers/scsi/mac_esp.c b/drivers/scsi/mac_esp.c index a0ceaa2428c2..c8652bfdb3b8 100644 --- a/drivers/scsi/mac_esp.c +++ b/drivers/scsi/mac_esp.c @@ -301,7 +301,7 @@ static int esp_mac_probe(struct platform_device *dev) if (dev->id > 1) return -ENODEV; =20 - host =3D scsi_host_alloc(tpnt, sizeof(struct esp)); + host =3D scsi_host_alloc(tpnt, sizeof(struct esp), NULL); =20 err =3D -ENOMEM; if (!host) diff --git a/drivers/scsi/mac_scsi.c b/drivers/scsi/mac_scsi.c index a86bd839d08e..eeb00ee30aaa 100644 --- a/drivers/scsi/mac_scsi.c +++ b/drivers/scsi/mac_scsi.c @@ -474,7 +474,7 @@ static int __init mac_scsi_probe(struct platform_device= *pdev) mac_scsi_template.sg_tablesize =3D 1; =20 instance =3D scsi_host_alloc(&mac_scsi_template, - sizeof(struct NCR5380_hostdata)); + sizeof(struct NCR5380_hostdata), NULL); if (!instance) return -ENOMEM; =20 diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c index 9476a0d2c72d..701e54843193 100644 --- a/drivers/scsi/megaraid.c +++ b/drivers/scsi/megaraid.c @@ -4203,7 +4203,7 @@ megaraid_probe_one(struct pci_dev *pdev, const struct= pci_device_id *id) } =20 /* Initialize SCSI Host structure */ - host =3D scsi_host_alloc(&megaraid_template, sizeof(adapter_t)); + host =3D scsi_host_alloc(&megaraid_template, sizeof(adapter_t), &pdev->de= v); if (!host) goto out_iounmap; =20 diff --git a/drivers/scsi/megaraid/megaraid_mbox.c b/drivers/scsi/megaraid/= megaraid_mbox.c index ce89032a5a74..17b015b3d35f 100644 --- a/drivers/scsi/megaraid/megaraid_mbox.c +++ b/drivers/scsi/megaraid/megaraid_mbox.c @@ -620,7 +620,7 @@ megaraid_io_attach(adapter_t *adapter) struct Scsi_Host *host; =20 // Initialize SCSI Host structure - host =3D scsi_host_alloc(&megaraid_template_g, 8); + host =3D scsi_host_alloc(&megaraid_template_g, 8, &pdev->dev); if (!host) { con_log(CL_ANN, (KERN_WARNING "megaraid mbox: scsi_host_alloc failed\n")); diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megar= aid/megaraid_sas_base.c index ecd365d78ae3..bae1070371d5 100644 --- a/drivers/scsi/megaraid/megaraid_sas_base.c +++ b/drivers/scsi/megaraid/megaraid_sas_base.c @@ -7512,7 +7512,7 @@ static int megasas_probe_one(struct pci_dev *pdev, pci_set_master(pdev); =20 host =3D scsi_host_alloc(&megasas_template, - sizeof(struct megasas_instance)); + sizeof(struct megasas_instance), &pdev->dev); =20 if (!host) { dev_printk(KERN_DEBUG, &pdev->dev, "scsi_host_alloc failed\n"); diff --git a/drivers/scsi/mesh.c b/drivers/scsi/mesh.c index dc1402b321da..a4ba6bc49d23 100644 --- a/drivers/scsi/mesh.c +++ b/drivers/scsi/mesh.c @@ -1877,7 +1877,7 @@ static int mesh_probe(struct macio_dev *mdev, const s= truct of_device_id *match) printk(KERN_ERR "mesh: unable to request memory resources"); return -EBUSY; } - mesh_host =3D scsi_host_alloc(&mesh_template, sizeof(struct mesh_s= tate)); + mesh_host =3D scsi_host_alloc(&mesh_template, sizeof(struct mesh_state), = NULL); if (mesh_host =3D=3D NULL) { printk(KERN_ERR "mesh: couldn't register host"); goto out_release; diff --git a/drivers/scsi/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_o= s.c index 402d1f35d214..c74e2addc77d 100644 --- a/drivers/scsi/mpi3mr/mpi3mr_os.c +++ b/drivers/scsi/mpi3mr/mpi3mr_os.c @@ -5468,7 +5468,7 @@ mpi3mr_probe(struct pci_dev *pdev, const struct pci_d= evice_id *id) } =20 shost =3D scsi_host_alloc(&mpi3mr_driver_template, - sizeof(struct mpi3mr_ioc)); + sizeof(struct mpi3mr_ioc), &pdev->dev); if (!shost) { retval =3D -ENODEV; goto shost_failed; diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mp= t3sas_scsih.c index 6ff788557294..06c8df6261d4 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c @@ -13367,7 +13367,7 @@ _scsih_probe(struct pci_dev *pdev, const struct pci= _device_id *id) PCIE_LINK_STATE_L1 | PCIE_LINK_STATE_CLKPM); /* Use mpt2sas driver host template for SAS 2.0 HBA's */ shost =3D scsi_host_alloc(&mpt2sas_driver_template, - sizeof(struct MPT3SAS_ADAPTER)); + sizeof(struct MPT3SAS_ADAPTER), &pdev->dev); if (!shost) return -ENODEV; ioc =3D shost_priv(shost); @@ -13399,7 +13399,7 @@ _scsih_probe(struct pci_dev *pdev, const struct pci= _device_id *id) case MPI26_VERSION: /* Use mpt3sas driver host template for SAS 3.0 HBA's */ shost =3D scsi_host_alloc(&mpt3sas_driver_template, - sizeof(struct MPT3SAS_ADAPTER)); + sizeof(struct MPT3SAS_ADAPTER), &pdev->dev); if (!shost) return -ENODEV; ioc =3D shost_priv(shost); diff --git a/drivers/scsi/mvme147.c b/drivers/scsi/mvme147.c index 98b99c0f5bc7..4d61e25de2cf 100644 --- a/drivers/scsi/mvme147.c +++ b/drivers/scsi/mvme147.c @@ -97,7 +97,7 @@ static int __init mvme147_init(void) return 0; =20 mvme147_shost =3D scsi_host_alloc(&mvme147_host_template, - sizeof(struct WD33C93_hostdata)); + sizeof(struct WD33C93_hostdata), NULL); if (!mvme147_shost) goto err_out; mvme147_shost->base =3D 0xfffe4000; diff --git a/drivers/scsi/mvsas/mv_init.c b/drivers/scsi/mvsas/mv_init.c index 5abc17a2e261..fd90b5eec0b4 100644 --- a/drivers/scsi/mvsas/mv_init.c +++ b/drivers/scsi/mvsas/mv_init.c @@ -494,7 +494,7 @@ static int mvs_pci_init(struct pci_dev *pdev, const str= uct pci_device_id *ent) if (rc) goto err_out_regions; =20 - shost =3D scsi_host_alloc(&mvs_sht, sizeof(void *)); + shost =3D scsi_host_alloc(&mvs_sht, sizeof(void *), &pdev->dev); if (!shost) { rc =3D -ENOMEM; goto err_out_regions; diff --git a/drivers/scsi/mvumi.c b/drivers/scsi/mvumi.c index e70d336b4ab3..d12b33a32a09 100644 --- a/drivers/scsi/mvumi.c +++ b/drivers/scsi/mvumi.c @@ -2468,7 +2468,7 @@ static int mvumi_probe_one(struct pci_dev *pdev, cons= t struct pci_device_id *id) if (ret) goto fail_set_dma_mask; =20 - host =3D scsi_host_alloc(&mvumi_template, sizeof(*mhba)); + host =3D scsi_host_alloc(&mvumi_template, sizeof(*mhba), &pdev->dev); if (!host) { dev_err(&pdev->dev, "scsi_host_alloc failed\n"); ret =3D -ENOMEM; diff --git a/drivers/scsi/myrb.c b/drivers/scsi/myrb.c index 3678b66310ed..f28c29b41cf6 100644 --- a/drivers/scsi/myrb.c +++ b/drivers/scsi/myrb.c @@ -3401,7 +3401,7 @@ static struct myrb_hba *myrb_detect(struct pci_dev *p= dev, struct Scsi_Host *shost; struct myrb_hba *cb =3D NULL; =20 - shost =3D scsi_host_alloc(&myrb_template, sizeof(struct myrb_hba)); + shost =3D scsi_host_alloc(&myrb_template, sizeof(struct myrb_hba), &pdev-= >dev); if (!shost) { dev_err(&pdev->dev, "Unable to allocate Controller\n"); return NULL; diff --git a/drivers/scsi/myrs.c b/drivers/scsi/myrs.c index afd68225221a..a8ce488e6520 100644 --- a/drivers/scsi/myrs.c +++ b/drivers/scsi/myrs.c @@ -1937,7 +1937,7 @@ static struct myrs_hba *myrs_alloc_host(struct pci_de= v *pdev, struct Scsi_Host *shost; struct myrs_hba *cs; =20 - shost =3D scsi_host_alloc(&myrs_template, sizeof(struct myrs_hba)); + shost =3D scsi_host_alloc(&myrs_template, sizeof(struct myrs_hba), &pdev-= >dev); if (!shost) return NULL; =20 diff --git a/drivers/scsi/ncr53c8xx.c b/drivers/scsi/ncr53c8xx.c index 5369ca3fe4fd..009d4c55054e 100644 --- a/drivers/scsi/ncr53c8xx.c +++ b/drivers/scsi/ncr53c8xx.c @@ -8108,7 +8108,7 @@ struct Scsi_Host * __init ncr_attach(struct scsi_host= _template *tpnt, printk(KERN_INFO "ncr53c720-%d: rev 0x%x irq %d\n", unit, device->chip.revision_id, device->slot.irq); =20 - instance =3D scsi_host_alloc(tpnt, sizeof(*host_data)); + instance =3D scsi_host_alloc(tpnt, sizeof(*host_data), NULL); if (!instance) goto attach_error; host_data =3D (struct host_data *) instance->hostdata; diff --git a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c index e893d5677241..681e1d554657 100644 --- a/drivers/scsi/nsp32.c +++ b/drivers/scsi/nsp32.c @@ -2556,7 +2556,7 @@ static int nsp32_detect(struct pci_dev *pdev) /* * register this HBA as SCSI device */ - host =3D scsi_host_alloc(&nsp32_template, sizeof(nsp32_hw_data)); + host =3D scsi_host_alloc(&nsp32_template, sizeof(nsp32_hw_data), &pdev->d= ev); if (host =3D=3D NULL) { nsp32_msg (KERN_ERR, "failed to scsi register"); goto err; diff --git a/drivers/scsi/pcmcia/nsp_cs.c b/drivers/scsi/pcmcia/nsp_cs.c index ae70fda96ae9..32ca7872b7f8 100644 --- a/drivers/scsi/pcmcia/nsp_cs.c +++ b/drivers/scsi/pcmcia/nsp_cs.c @@ -1326,7 +1326,7 @@ static struct Scsi_Host *nsp_detect(struct scsi_host_= template *sht) nsp_hw_data *data_b =3D &nsp_data_base, *data; =20 nsp_dbg(NSP_DEBUG_INIT, "this_id=3D%d", sht->this_id); - host =3D scsi_host_alloc(&nsp_driver_template, sizeof(nsp_hw_data)); + host =3D scsi_host_alloc(&nsp_driver_template, sizeof(nsp_hw_data), NULL); if (host =3D=3D NULL) { nsp_dbg(NSP_DEBUG_INIT, "host failed"); return NULL; diff --git a/drivers/scsi/pcmcia/qlogic_stub.c b/drivers/scsi/pcmcia/qlogic= _stub.c index 5d8a434d3f66..b417b39ab723 100644 --- a/drivers/scsi/pcmcia/qlogic_stub.c +++ b/drivers/scsi/pcmcia/qlogic_stub.c @@ -106,7 +106,7 @@ static struct Scsi_Host *qlogic_detect(struct scsi_host= _template *host, qlogicfas408_setup(qbase, qinitid, INT_TYPE); =20 host->name =3D qlogic_name; - shost =3D scsi_host_alloc(host, sizeof(struct qlogicfas408_priv)); + shost =3D scsi_host_alloc(host, sizeof(struct qlogicfas408_priv), NULL); if (!shost) goto err; shost->io_port =3D qbase; diff --git a/drivers/scsi/pcmcia/sym53c500_cs.c b/drivers/scsi/pcmcia/sym53= c500_cs.c index 1530c1ad5d36..83aab6c69a62 100644 --- a/drivers/scsi/pcmcia/sym53c500_cs.c +++ b/drivers/scsi/pcmcia/sym53c500_cs.c @@ -752,7 +752,7 @@ SYM53C500_config(struct pcmcia_device *link) =20 chip_init(port_base); =20 - host =3D scsi_host_alloc(tpnt, sizeof(struct sym53c500_data)); + host =3D scsi_host_alloc(tpnt, sizeof(struct sym53c500_data), NULL); if (!host) { printk("SYM53C500: Unable to register host, giving up.\n"); goto err_release; diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001= _init.c index e93ea76b565e..873810c6853c 100644 --- a/drivers/scsi/pm8001/pm8001_init.c +++ b/drivers/scsi/pm8001/pm8001_init.c @@ -1142,7 +1142,7 @@ static int pm8001_pci_probe(struct pci_dev *pdev, if (rc) goto err_out_regions; =20 - shost =3D scsi_host_alloc(&pm8001_sht, sizeof(void *)); + shost =3D scsi_host_alloc(&pm8001_sht, sizeof(void *), &pdev->dev); if (!shost) { rc =3D -ENOMEM; goto err_out_regions; diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c index 942a99393204..a26c747806ef 100644 --- a/drivers/scsi/pmcraid.c +++ b/drivers/scsi/pmcraid.c @@ -5236,7 +5236,7 @@ static int pmcraid_probe(struct pci_dev *pdev, } =20 host =3D scsi_host_alloc(&pmcraid_host_template, - sizeof(struct pmcraid_instance)); + sizeof(struct pmcraid_instance), &pdev->dev); =20 if (!host) { dev_err(&pdev->dev, "scsi_host_alloc failed!\n"); diff --git a/drivers/scsi/ppa.c b/drivers/scsi/ppa.c index 8a4e910d5758..40fe9c6acc3b 100644 --- a/drivers/scsi/ppa.c +++ b/drivers/scsi/ppa.c @@ -1101,7 +1101,7 @@ static int __ppa_attach(struct parport *pb) INIT_DELAYED_WORK(&dev->ppa_tq, ppa_interrupt); =20 err =3D -ENOMEM; - host =3D scsi_host_alloc(&ppa_template, sizeof(ppa_struct *)); + host =3D scsi_host_alloc(&ppa_template, sizeof(ppa_struct *), NULL); if (!host) goto out1; host->io_port =3D pb->base; diff --git a/drivers/scsi/ps3rom.c b/drivers/scsi/ps3rom.c index a9c727d22931..3542a35b137e 100644 --- a/drivers/scsi/ps3rom.c +++ b/drivers/scsi/ps3rom.c @@ -361,7 +361,7 @@ static int ps3rom_probe(struct ps3_system_bus_device *_= dev) goto fail_free_bounce; =20 host =3D scsi_host_alloc(&ps3rom_host_template, - sizeof(struct ps3rom_private)); + sizeof(struct ps3rom_private), NULL); if (!host) { dev_err(&dev->sbd.core, "%s:%u: scsi_host_alloc failed\n", __func__, __LINE__); diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c index cdd6fe002c32..f88f2e659baa 100644 --- a/drivers/scsi/qla1280.c +++ b/drivers/scsi/qla1280.c @@ -4142,7 +4142,7 @@ qla1280_probe_one(struct pci_dev *pdev, const struct = pci_device_id *id) pci_set_master(pdev); =20 error =3D -ENOMEM; - host =3D scsi_host_alloc(&qla1280_driver_template, sizeof(*ha)); + host =3D scsi_host_alloc(&qla1280_driver_template, sizeof(*ha), &pdev->de= v); if (!host) { printk(KERN_WARNING "qla1280: Failed to register host, aborting.\n"); diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c index c563133f751e..4bafc367e21d 100644 --- a/drivers/scsi/qla2xxx/qla_mid.c +++ b/drivers/scsi/qla2xxx/qla_mid.c @@ -502,7 +502,7 @@ qla24xx_create_vhost(struct fc_vport *fc_vport) vha =3D qla2x00_create_host(sht, ha); if (!vha) { ql_log(ql_log_warn, vha, 0xa005, - "scsi_host_alloc() failed for vport.\n"); + "scsi_host_alloc() failed for vport.\n", NULL); return(NULL); } =20 diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 72b1c28e4dae..ce0d097f3317 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -5046,7 +5046,7 @@ struct scsi_qla_host *qla2x00_create_host(const struc= t scsi_host_template *sht, struct Scsi_Host *host; struct scsi_qla_host *vha =3D NULL; =20 - host =3D scsi_host_alloc(sht, sizeof(scsi_qla_host_t)); + host =3D scsi_host_alloc(sht, sizeof(scsi_qla_host_t), &ha->pdev->dev); if (!host) { ql_log_pci(ql_log_fatal, ha->pdev, 0x0107, "Failed to allocate host from the scsi layer, aborting.\n"); diff --git a/drivers/scsi/qlogicfas.c b/drivers/scsi/qlogicfas.c index 8f05e3707d69..b9ead7dc371c 100644 --- a/drivers/scsi/qlogicfas.c +++ b/drivers/scsi/qlogicfas.c @@ -95,7 +95,7 @@ static struct Scsi_Host *__qlogicfas_detect(struct scsi_h= ost_template *host, =20 qlogicfas408_setup(qbase, qinitid, INT_TYPE); =20 - hreg =3D scsi_host_alloc(host, sizeof(struct qlogicfas408_priv)); + hreg =3D scsi_host_alloc(host, sizeof(struct qlogicfas408_priv), NULL); if (!hreg) goto err_release_mem; priv =3D get_priv_by_host(hreg); diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c index ea0a2b5a0a42..f67a9b400100 100644 --- a/drivers/scsi/qlogicpti.c +++ b/drivers/scsi/qlogicpti.c @@ -1316,7 +1316,7 @@ static int qpti_sbus_probe(struct platform_device *op) if (op->archdata.irqs[0] =3D=3D 0) return -ENODEV; =20 - host =3D scsi_host_alloc(&qpti_template, sizeof(struct qlogicpti)); + host =3D scsi_host_alloc(&qpti_template, sizeof(struct qlogicpti), NULL); if (!host) return -ENOMEM; =20 diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index bb6b0e7fb910..59488bf74ce0 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c @@ -9548,7 +9548,7 @@ static int sdebug_driver_probe(struct device *dev) =20 sdbg_host =3D dev_to_sdebug_host(dev); =20 - hpnt =3D scsi_host_alloc(&sdebug_driver_template, 0); + hpnt =3D scsi_host_alloc(&sdebug_driver_template, 0, NULL); if (NULL =3D=3D hpnt) { pr_err("scsi_host_alloc failed\n"); error =3D -ENODEV; diff --git a/drivers/scsi/sgiwd93.c b/drivers/scsi/sgiwd93.c index 6594661db5f4..07fbe6fda7c2 100644 --- a/drivers/scsi/sgiwd93.c +++ b/drivers/scsi/sgiwd93.c @@ -231,7 +231,7 @@ static int sgiwd93_probe(struct platform_device *pdev) unsigned int irq =3D pd->irq; int err; =20 - host =3D scsi_host_alloc(&sgiwd93_template, sizeof(struct ip22_hostdata)); + host =3D scsi_host_alloc(&sgiwd93_template, sizeof(struct ip22_hostdata),= NULL); if (!host) { err =3D -ENOMEM; goto out; diff --git a/drivers/scsi/smartpqi/smartpqi_init.c b/drivers/scsi/smartpqi/= smartpqi_init.c index 65ff50982978..a3163c06b3f8 100644 --- a/drivers/scsi/smartpqi/smartpqi_init.c +++ b/drivers/scsi/smartpqi/smartpqi_init.c @@ -7619,7 +7619,7 @@ static int pqi_register_scsi(struct pqi_ctrl_info *ct= rl_info) int rc; struct Scsi_Host *shost; =20 - shost =3D scsi_host_alloc(&pqi_driver_template, sizeof(ctrl_info)); + shost =3D scsi_host_alloc(&pqi_driver_template, sizeof(ctrl_info), &ctrl_= info->pci_dev->dev); if (!shost) { dev_err(&ctrl_info->pci_dev->dev, "scsi_host_alloc failed\n"); return -ENOMEM; diff --git a/drivers/scsi/snic/snic_main.c b/drivers/scsi/snic/snic_main.c index 82953e6a0915..9edf6661e6f1 100644 --- a/drivers/scsi/snic/snic_main.c +++ b/drivers/scsi/snic/snic_main.c @@ -363,7 +363,7 @@ snic_probe(struct pci_dev *pdev, const struct pci_devic= e_id *ent) /* * Allocate SCSI Host and setup association between host, and snic */ - shost =3D scsi_host_alloc(&snic_host_template, sizeof(struct snic)); + shost =3D scsi_host_alloc(&snic_host_template, sizeof(struct snic), &pdev= ->dev); if (!shost) { SNIC_ERR("Unable to alloc scsi_host\n"); ret =3D -ENOMEM; diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c index 6aeeb338633d..7d6b851fef24 100644 --- a/drivers/scsi/stex.c +++ b/drivers/scsi/stex.c @@ -1667,7 +1667,7 @@ static int stex_probe(struct pci_dev *pdev, const str= uct pci_device_id *id) S6flag =3D 0; register_reboot_notifier(&stex_notifier); =20 - host =3D scsi_host_alloc(&driver_template, sizeof(struct st_hba)); + host =3D scsi_host_alloc(&driver_template, sizeof(struct st_hba), &pdev->= dev); =20 if (!host) { printk(KERN_ERR DRV_NAME "(%s): scsi_host_alloc failed\n", diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c index 571ea549152b..fc4c05127dc4 100644 --- a/drivers/scsi/storvsc_drv.c +++ b/drivers/scsi/storvsc_drv.c @@ -1969,7 +1969,7 @@ static int storvsc_probe(struct hv_device *device, (100 - ring_avail_percent_lowater) / 100; =20 host =3D scsi_host_alloc(&scsi_driver, - sizeof(struct hv_host_device)); + sizeof(struct hv_host_device), NULL); if (!host) return -ENOMEM; =20 diff --git a/drivers/scsi/sun3_scsi.c b/drivers/scsi/sun3_scsi.c index ca9cd691cc32..ed41b605328e 100644 --- a/drivers/scsi/sun3_scsi.c +++ b/drivers/scsi/sun3_scsi.c @@ -578,7 +578,7 @@ static int __init sun3_scsi_probe(struct platform_devic= e *pdev) #endif =20 instance =3D scsi_host_alloc(&sun3_scsi_template, - sizeof(struct NCR5380_hostdata)); + sizeof(struct NCR5380_hostdata), NULL); if (!instance) { error =3D -ENOMEM; goto fail_alloc; diff --git a/drivers/scsi/sun3x_esp.c b/drivers/scsi/sun3x_esp.c index 365406885b8e..f7e48f4c5444 100644 --- a/drivers/scsi/sun3x_esp.c +++ b/drivers/scsi/sun3x_esp.c @@ -175,7 +175,7 @@ static int esp_sun3x_probe(struct platform_device *dev) struct resource *res; int err =3D -ENOMEM; =20 - host =3D scsi_host_alloc(tpnt, sizeof(struct esp)); + host =3D scsi_host_alloc(tpnt, sizeof(struct esp), NULL); if (!host) goto fail; =20 diff --git a/drivers/scsi/sun_esp.c b/drivers/scsi/sun_esp.c index aa430501f0c7..bc4e4030acb6 100644 --- a/drivers/scsi/sun_esp.c +++ b/drivers/scsi/sun_esp.c @@ -457,7 +457,7 @@ static int esp_sbus_probe_one(struct platform_device *o= p, struct esp *esp; int err; =20 - host =3D scsi_host_alloc(tpnt, sizeof(struct esp)); + host =3D scsi_host_alloc(tpnt, sizeof(struct esp), NULL); =20 err =3D -ENOMEM; if (!host) diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.c b/drivers/scsi/sym53c8xx_2= /sym_glue.c index 27e22acaf1a7..16e821c3b59e 100644 --- a/drivers/scsi/sym53c8xx_2/sym_glue.c +++ b/drivers/scsi/sym53c8xx_2/sym_glue.c @@ -1300,7 +1300,7 @@ static struct Scsi_Host *sym_attach(const struct scsi= _host_template *tpnt, int u if (!fw) goto attach_failed; =20 - shost =3D scsi_host_alloc(tpnt, sizeof(*sym_data)); + shost =3D scsi_host_alloc(tpnt, sizeof(*sym_data), &pdev->dev); if (!shost) goto attach_failed; sym_data =3D shost_priv(shost); diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c index 5fdaa71f0652..88375574cb18 100644 --- a/drivers/scsi/virtio_scsi.c +++ b/drivers/scsi/virtio_scsi.c @@ -929,7 +929,7 @@ static int virtscsi_probe(struct virtio_device *vdev) num_targets =3D virtscsi_config_get(vdev, max_target) + 1; =20 shost =3D scsi_host_alloc(&virtscsi_host_template, - struct_size(vscsi, req_vqs, num_queues)); + struct_size(vscsi, req_vqs, num_queues), NULL); if (!shost) return -ENOMEM; =20 diff --git a/drivers/scsi/vmw_pvscsi.c b/drivers/scsi/vmw_pvscsi.c index 151cac9f9c2a..32c39c66c49b 100644 --- a/drivers/scsi/vmw_pvscsi.c +++ b/drivers/scsi/vmw_pvscsi.c @@ -1435,7 +1435,7 @@ static int pvscsi_probe(struct pci_dev *pdev, const s= truct pci_device_id *id) PVSCSI_MAX_NUM_REQ_ENTRIES_PER_PAGE; pvscsi_template.cmd_per_lun =3D min(pvscsi_template.can_queue, pvscsi_cmd_per_lun); - host =3D scsi_host_alloc(&pvscsi_template, sizeof(struct pvscsi_adapter)); + host =3D scsi_host_alloc(&pvscsi_template, sizeof(struct pvscsi_adapter),= &pdev->dev); if (!host) { printk(KERN_ERR "vmw_pvscsi: failed to allocate host\n"); goto out_release_resources_and_disable; diff --git a/drivers/scsi/wd719x.c b/drivers/scsi/wd719x.c index 830d40f57f6a..0aa6bb093431 100644 --- a/drivers/scsi/wd719x.c +++ b/drivers/scsi/wd719x.c @@ -921,7 +921,7 @@ static int wd719x_pci_probe(struct pci_dev *pdev, const= struct pci_device_id *d) goto release_region; =20 err =3D -ENOMEM; - sh =3D scsi_host_alloc(&wd719x_template, sizeof(struct wd719x)); + sh =3D scsi_host_alloc(&wd719x_template, sizeof(struct wd719x), &pdev->de= v); if (!sh) goto release_region; =20 diff --git a/drivers/scsi/xen-scsifront.c b/drivers/scsi/xen-scsifront.c index 989bcaee42ca..d4d57f33cc15 100644 --- a/drivers/scsi/xen-scsifront.c +++ b/drivers/scsi/xen-scsifront.c @@ -899,7 +899,7 @@ static int scsifront_probe(struct xenbus_device *dev, int err =3D -ENOMEM; char name[TASK_COMM_LEN]; =20 - host =3D scsi_host_alloc(&scsifront_sht, sizeof(*info)); + host =3D scsi_host_alloc(&scsifront_sht, sizeof(*info), NULL); if (!host) { xenbus_dev_fatal(dev, err, "fail to allocate scsi host"); return err; diff --git a/drivers/scsi/zorro_esp.c b/drivers/scsi/zorro_esp.c index 1622285c9aec..5983015877a7 100644 --- a/drivers/scsi/zorro_esp.c +++ b/drivers/scsi/zorro_esp.c @@ -774,7 +774,7 @@ static int zorro_esp_probe(struct zorro_dev *z, goto fail_free_zep; } =20 - host =3D scsi_host_alloc(tpnt, sizeof(struct esp)); + host =3D scsi_host_alloc(tpnt, sizeof(struct esp), NULL); =20 if (!host) { pr_err("No host detected; board configuration problem?\n"); diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h index be0ffe1e3395..17e545fa5c7e 100644 --- a/include/scsi/libfc.h +++ b/include/scsi/libfc.h @@ -883,7 +883,7 @@ libfc_host_alloc(const struct scsi_host_template *sht, = int priv_size) struct fc_lport *lport; struct Scsi_Host *shost; =20 - shost =3D scsi_host_alloc(sht, sizeof(*lport) + priv_size); + shost =3D scsi_host_alloc(sht, sizeof(*lport) + priv_size, NULL); if (!shost) return NULL; lport =3D shost_priv(shost); diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index 7e2011830ba4..09c82a41b7a1 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h @@ -796,7 +796,8 @@ static inline int scsi_host_in_recovery(struct Scsi_Hos= t *shost) extern int scsi_queue_work(struct Scsi_Host *, struct work_struct *); extern void scsi_flush_work(struct Scsi_Host *); =20 -extern struct Scsi_Host *scsi_host_alloc(const struct scsi_host_template *= , int); +extern struct Scsi_Host *scsi_host_alloc(const struct scsi_host_template *= sht, + int privsize, struct device *dev); extern int __must_check scsi_add_host_with_dma(struct Scsi_Host *, struct device *, struct device *); --=20 2.43.7 From nobody Sat Jun 13 07:32:31 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=broadcom.com ARC-Seal: i=1; a=rsa-sha256; t=1781005802; cv=none; d=zohomail.com; s=zohoarc; b=XF3w/7/UPb5o3rWhluR0DysF3ZRvrT8GbjkjxwaD3WdKUClbuLcvgtagrpHcu8uMWJLlqQkAjF5QWL/gid2wLl87V6xmUKbj0tc2A0sNK8QR2t3O929aZlAxvDAr3j+3YLaDjFWW2SggjDvaxGD739HIfgwTyhnU0gDxAz0+SaE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781005802; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=d7jf3E3dEVwQVNqBXvyK4i7zv9F+advmarrjrg+nD7g=; b=C3nMi8hrtrZQN33ZUOVTJEC2ySZ6ANg2cmMz6WEhSa35PtS8uKEYkdxle342pNskjU8QGlnmmMhX5NWjSRSrD1kyohm4xxj7tXT4fCq+IujAb+kbUZE0XnBFPPY17cdrgWSBu4uwYrAvF/ugfXgyOSnO10V1gUj1zLxp6HD4IuA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1781005802525487.0081974966456; Tue, 9 Jun 2026 04:50:02 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1332626.1595109 (Exim 4.92) (envelope-from ) id 1wWuxq-0001fX-DN; Tue, 09 Jun 2026 11:49:50 +0000 Received: by outflank-mailman (output) from mailman id 1332626.1595109; Tue, 09 Jun 2026 11:49:50 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wWuxq-0001fO-AF; Tue, 09 Jun 2026 11:49:50 +0000 Received: by outflank-mailman (input) for mailman id 1332626; Tue, 09 Jun 2026 11:49:49 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wWuxo-0001dZ-Vz for xen-devel@lists.xenproject.org; Tue, 09 Jun 2026 11:49:49 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wWuxo-00CX3M-5M for xen-devel@lists.xenproject.org; Tue, 09 Jun 2026 13:49:48 +0200 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a27fdd1-2eae-0a2a0a5409dd-0a2a4501c886-30 for ; Tue, 09 Jun 2026 13:49:47 +0200 Received: from [209.85.214.226] (helo=mail-pl1-f226.google.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a27fdda-c1f2-0a2a45010019-d155d6e2cc2d-3 for ; Tue, 09 Jun 2026 13:49:47 +0200 Received: by mail-pl1-f226.google.com with SMTP id d9443c01a7336-2c0c20f0c0aso40978215ad.0 for ; Tue, 09 Jun 2026 04:49:47 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-118.dlp.protect.broadcom.com. [144.49.247.118]) by smtp-relay.gmail.com with ESMTPS id d9443c01a7336-2c165f9ffecsm19311815ad.32.2026.06.09.04.49.44 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 09 Jun 2026 04:49:45 -0700 (PDT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-36b9d265308so4111662a91.2 for ; Tue, 09 Jun 2026 04:49:44 -0700 (PDT) Received: from sumit_ws.dhcp.broadcom.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36f6bf903fasm18898075a91.2.2026.06.09.04.49.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 04:49:41 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=broadcom.com header.i="@broadcom.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From" X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781005786; x=1781610586; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=d7jf3E3dEVwQVNqBXvyK4i7zv9F+advmarrjrg+nD7g=; b=DzQFpLvubK4z9kkY9HAekwQG/9yF86Zhes0wFFgKSZaEugaY6u2W0dvMAqxx8q1KNx Echp6D7KbnH+ZJf5iJM7O14x5tvQ4TcMYlbsZYjpIGR1/e0u3kB71LoGjX9DFw8Its3I 52LK8ANQO90ov0fFsXYBWeIWfNLCigFBR5hnUX1t9TCZJQmCutOm3xG+zqC7r0h8qWd4 Xzt0yhyrCRy3JqwhBZBJz6NDctOl8iTTN8XaoAdJRTyhpv9j80usXRiCD7M9xOgv//mp SOfsNJ/aFNVm3XVocL9a2XMOF+aCIIFdwDKcJ9il49p0OT8rW/JVl7myKHvzCVKZ9dBw /3Hw== X-Forwarded-Encrypted: i=1; AFNElJ+GpFaFGKcEMOUWXMKKQr++fRan9qJw9bzkaBpbVtrFzZI6x6RB0phhRIYqAhr/Vxt3/uhk5/wf+hw=@lists.xenproject.org X-Gm-Message-State: AOJu0Yy8ObSbbn1CvWd2uTOzH36RV9wM87aBO5cOUsEbVFgGvXSXq/ub upcllSOtBwlW9gvrgaj9fUNk6iTHg/lKff9QTedFBNO/Licqy2tf8tAVmMrEBjCaszvU+HCeRK2 eCL8uC0ihLGosQpDzfmxFpZ3vDgVAps/IddnrdqsGPeyTtlPYC61y6OkmmhgC9mK4ndJmVjxr4A MKxPO1gxF3LuYk7msKK9/Q4LvcRWPeQpMF0mllTSgZJP+EF0X2inZkwdiHpSPmv64fvfuZBapWE lEyAVl96xCerQ9q+7Kt4g== X-Gm-Gg: Acq92OHrjlVLIgj+wQeUlYLBCn4rO+3/ezS15u8+LJCtHKmSiG+gNX3ItX61hJ+sBcp thBYcHtRwFlha32T9672rn4j9MzpXm/Xk8bCgAPvlsQy/mcMZCmw48UjO9kkdY4L5W0mwOwxLXF vyvNpix/0TD8CFtSR61psnXPWB8j2mTPOxQtgY5hHmE+s6G3xZnX/QCJDCdQ3Eb7VjO7DA6vXs3 69xg/Wt/c6/YgCkPMb06T/bNhaSME34U2iKp+h9ywkvktpW9Fm5p1StshoI7s6v6Zgh+S/TuMFl EliFJKLQmRjQpDxv++dVtPLMLPpluSUTn4qq6ligiiJED3zSET9P+V5Cbc/fjCqNyawGMugutFQ YEvHGrIXoYQhK+U7bySZ9sOBLAEutWtzxpLv5xDWEbOQGSAwbOZrrCiZwio0W72eX7ymB9QFTuF uw44ilg+hwuwIKsBjv/fdKzYT94/SZCv2wJbkGGdqbe61RdXsVM4MuaV55k/dXeFZE3zr/SQ== X-Received: by 2002:a17:903:41d2:b0:2c2:1982:5270 with SMTP id d9443c01a7336-2c219825471mr177775805ad.21.1781005785513; Tue, 09 Jun 2026 04:49:45 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1781005784; x=1781610584; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=d7jf3E3dEVwQVNqBXvyK4i7zv9F+advmarrjrg+nD7g=; b=bV0AnVoUFK1zVgdFHbP+NnPXr8c9KzlxCSc2MRY8LrHXj8v66nYYmb1gqvjqu1iMZl Crw9TUpYi+bUcT70NQjJTej3uxg1qsqFCwMIGcSF546wyPzH7hi74zT3/o+9YeJWF1Fy QII3MpBtp/Vf+0JXdNEAwq4AAEpSIdd4rGIo0= X-Forwarded-Encrypted: i=1; AFNElJ/2CCXsJdI1+4PaIT0kFBHBjH4LNErvk6a5xu98YmCA+QYHIj0VikoPEzjJv4rgFAFbWqOmyKuEfbY=@lists.xenproject.org X-Received: by 2002:a17:90b:3503:b0:369:7f25:cec0 with SMTP id 98e67ed59e1d1-370ebff34bcmr20900092a91.0.1781005783465; Tue, 09 Jun 2026 04:49:43 -0700 (PDT) X-Received: by 2002:a17:90b:3503:b0:369:7f25:cec0 with SMTP id 98e67ed59e1d1-370ebff34bcmr20900004a91.0.1781005782876; Tue, 09 Jun 2026 04:49:42 -0700 (PDT) From: Sumit Saxena To: "Martin K . Petersen" , Jens Axboe Cc: "James E . J . Bottomley" , linux-scsi@vger.kernel.org, linux-block@vger.kernel.org, Adam Radford , Khalid Aziz , Adaptec OEM Raid Solutions , Matthew Wilcox , Hannes Reinecke , "Juergen E . Fischer" , Russell King , linux-arm-kernel@lists.infradead.org, Finn Thain , Michael Schmitz , Anil Gurumurthy , Sudarsana Kalluru , Oliver Neukum , Ali Akcaagac , Jamie Lenehan , Ram Vegesna , target-devel@vger.kernel.org, Bradley Grove , Satish Kharat , Sesidhar Baddela , Karan Tilak Kumar , Yihang Li , Don Brace , storagedev@microchip.com, HighPoint Linux Team , Tyrel Datwyler , Madhavan Srinivasan , Michael Ellerman , Nicholas Piggin , Christophe Leroy , linuxppc-dev@lists.ozlabs.org, Brian King , Lee Duncan , Chris Leech , Mike Christie , open-iscsi@googlegroups.com, Justin Tee , Paul Ely , Kashyap Desai , Shivasharan S , Chandrakanth Patil , megaraidlinux.pdl@broadcom.com, Sathya Prakash Veerichetty , Sreekanth Reddy , mpi3mr-linuxdrv.pdl@broadcom.com, Suganath Prabu Subramani , Ranjan Kumar , MPT-FusionLinux.pdl@broadcom.com, Daniel Palmer , GOTO Masanori , YOKOTA Hiroshi , Jack Wang , Geoff Levand , Michael Reed , Nilesh Javali , GR-QLogic-Storage-Upstream@marvell.com, Narsimhulu Musini , "K . Y . Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , linux-hyperv@vger.kernel.org, "Michael S . Tsirkin" , Jason Wang , Paolo Bonzini , Stefan Hajnoczi , Eugenio Perez , virtualization@lists.linux.dev, Vishal Bhakta , bcm-kernel-feedback-list@broadcom.com, Juergen Gross , Stefano Stabellini , Oleksandr Tyshchenko , xen-devel@lists.xenproject.org, Bart Van Assche , Sumit Saxena Subject: [PATCH v3 3/4] block: drop shared-tag fairness throttling Date: Tue, 9 Jun 2026 17:48:02 +0530 Message-ID: <20260609121806.2121755-4-sumit.saxena@broadcom.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260609121806.2121755-1-sumit.saxena@broadcom.com> References: <20260609121806.2121755-1-sumit.saxena@broadcom.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e X-purgate-ID: tlsNG-d62444/1781005787-B5D41FF4-CECA9E83/0/0 X-purgate-type: clean X-purgate-size: 10271 X-ZohoMail-DKIM: pass (identity @broadcom.com) X-ZM-MESSAGEID: 1781005804418154100 Content-Type: text/plain; charset="utf-8" From: Bart Van Assche Original patch [1] by Bart Van Assche; this version is rebased onto the current tree. In testing it improves IOPS by roughly 16-18% by removing the fair-sharing throttle on shared tag queues. This patch removes the following code and structure members: - The function hctx_may_queue(). - blk_mq_hw_ctx.nr_active and request_queue.nr_active_requests_shared_tags and also all the code that modifies these two member variables. [1]: https://lore.kernel.org/linux-block/20240529213921.3166462-1-bvanassch= e@acm.org/ Signed-off-by: Bart Van Assche Signed-off-by: Sumit Saxena --- block/blk-core.c | 2 - block/blk-mq-debugfs.c | 22 ++++++++- block/blk-mq-tag.c | 4 -- block/blk-mq.c | 17 +------ block/blk-mq.h | 100 ----------------------------------------- include/linux/blk-mq.h | 6 --- include/linux/blkdev.h | 2 - 7 files changed, 22 insertions(+), 131 deletions(-) diff --git a/block/blk-core.c b/block/blk-core.c index 17450058ea6d..129acc1b27e5 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -421,8 +421,6 @@ struct request_queue *blk_alloc_queue(struct queue_limi= ts *lim, int node_id) =20 q->node =3D node_id; =20 - atomic_set(&q->nr_active_requests_shared_tags, 0); - timer_setup(&q->timeout, blk_rq_timed_out_timer, 0); INIT_WORK(&q->timeout_work, blk_timeout_work); INIT_LIST_HEAD(&q->icq_list); diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c index 047ec887456b..8b85a7f8e987 100644 --- a/block/blk-mq-debugfs.c +++ b/block/blk-mq-debugfs.c @@ -468,11 +468,31 @@ static int hctx_sched_tags_bitmap_show(void *data, st= ruct seq_file *m) return 0; } =20 +struct count_active_params { + struct blk_mq_hw_ctx *hctx; + int *active; +}; + +static bool hctx_count_active(struct request *rq, void *data) +{ + const struct count_active_params *params =3D data; + + if (rq->mq_hctx =3D=3D params->hctx) + (*params->active)++; + + return true; +} + static int hctx_active_show(void *data, struct seq_file *m) { struct blk_mq_hw_ctx *hctx =3D data; + int active =3D 0; + struct count_active_params params =3D { .hctx =3D hctx, .active =3D &acti= ve }; + + blk_mq_all_tag_iter(hctx->sched_tags ?: hctx->tags, hctx_count_active, + ¶ms); =20 - seq_printf(m, "%d\n", __blk_mq_active_requests(hctx)); + seq_printf(m, "%d\n", active); return 0; } =20 diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c index 33946cdb5716..bfd27cc6249b 100644 --- a/block/blk-mq-tag.c +++ b/block/blk-mq-tag.c @@ -109,10 +109,6 @@ void __blk_mq_tag_idle(struct blk_mq_hw_ctx *hctx) static int __blk_mq_get_tag(struct blk_mq_alloc_data *data, struct sbitmap_queue *bt) { - if (!data->q->elevator && !(data->flags & BLK_MQ_REQ_RESERVED) && - !hctx_may_queue(data->hctx, bt)) - return BLK_MQ_NO_TAG; - if (data->shallow_depth) return sbitmap_queue_get_shallow(bt, data->shallow_depth); else diff --git a/block/blk-mq.c b/block/blk-mq.c index 4c5c16cce4f8..bbac59a06044 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -489,8 +489,6 @@ __blk_mq_alloc_requests_batch(struct blk_mq_alloc_data = *data) } } while (data->nr_tags > nr); =20 - if (!(data->rq_flags & RQF_SCHED_TAGS)) - blk_mq_add_active_requests(data->hctx, nr); /* caller already holds a reference, add for remainder */ percpu_ref_get_many(&data->q->q_usage_counter, nr - 1); data->nr_tags -=3D nr; @@ -587,8 +585,6 @@ static struct request *__blk_mq_alloc_requests(struct b= lk_mq_alloc_data *data) goto retry; } =20 - if (!(data->rq_flags & RQF_SCHED_TAGS)) - blk_mq_inc_active_requests(data->hctx); rq =3D blk_mq_rq_ctx_init(data, blk_mq_tags_from_data(data), tag); blk_mq_rq_time_init(rq, alloc_time_ns); return rq; @@ -763,8 +759,6 @@ struct request *blk_mq_alloc_request_hctx(struct reques= t_queue *q, tag =3D blk_mq_get_tag(&data); if (tag =3D=3D BLK_MQ_NO_TAG) goto out_queue_exit; - if (!(data.rq_flags & RQF_SCHED_TAGS)) - blk_mq_inc_active_requests(data.hctx); rq =3D blk_mq_rq_ctx_init(&data, blk_mq_tags_from_data(&data), tag); blk_mq_rq_time_init(rq, alloc_time_ns); rq->__data_len =3D 0; @@ -807,10 +801,8 @@ static void __blk_mq_free_request(struct request *rq) blk_pm_mark_last_busy(rq); rq->mq_hctx =3D NULL; =20 - if (rq->tag !=3D BLK_MQ_NO_TAG) { - blk_mq_dec_active_requests(hctx); + if (rq->tag !=3D BLK_MQ_NO_TAG) blk_mq_put_tag(hctx->tags, ctx, rq->tag); - } if (sched_tag !=3D BLK_MQ_NO_TAG) blk_mq_put_tag(hctx->sched_tags, ctx, sched_tag); blk_mq_sched_restart(hctx); @@ -1188,8 +1180,6 @@ static inline void blk_mq_flush_tag_batch(struct blk_= mq_hw_ctx *hctx, { struct request_queue *q =3D hctx->queue; =20 - blk_mq_sub_active_requests(hctx, nr_tags); - blk_mq_put_tags(hctx->tags, tag_array, nr_tags); percpu_ref_put_many(&q->q_usage_counter, nr_tags); } @@ -1875,9 +1865,6 @@ bool __blk_mq_alloc_driver_tag(struct request *rq) if (blk_mq_tag_is_reserved(rq->mq_hctx->sched_tags, rq->internal_tag)) { bt =3D &rq->mq_hctx->tags->breserved_tags; tag_offset =3D 0; - } else { - if (!hctx_may_queue(rq->mq_hctx, bt)) - return false; } =20 tag =3D __sbitmap_queue_get(bt); @@ -1885,7 +1872,6 @@ bool __blk_mq_alloc_driver_tag(struct request *rq) return false; =20 rq->tag =3D tag + tag_offset; - blk_mq_inc_active_requests(rq->mq_hctx); return true; } =20 @@ -4058,7 +4044,6 @@ blk_mq_alloc_hctx(struct request_queue *q, struct blk= _mq_tag_set *set, if (!zalloc_cpumask_var_node(&hctx->cpumask, gfp, node)) goto free_hctx; =20 - atomic_set(&hctx->nr_active, 0); if (node =3D=3D NUMA_NO_NODE) node =3D set->numa_node; hctx->numa_node =3D node; diff --git a/block/blk-mq.h b/block/blk-mq.h index aa15d31aaae9..8dfb67c55f5d 100644 --- a/block/blk-mq.h +++ b/block/blk-mq.h @@ -291,70 +291,9 @@ static inline int blk_mq_get_rq_budget_token(struct re= quest *rq) return -1; } =20 -static inline void __blk_mq_add_active_requests(struct blk_mq_hw_ctx *hctx, - int val) -{ - if (blk_mq_is_shared_tags(hctx->flags)) - atomic_add(val, &hctx->queue->nr_active_requests_shared_tags); - else - atomic_add(val, &hctx->nr_active); -} - -static inline void __blk_mq_inc_active_requests(struct blk_mq_hw_ctx *hctx) -{ - __blk_mq_add_active_requests(hctx, 1); -} - -static inline void __blk_mq_sub_active_requests(struct blk_mq_hw_ctx *hctx, - int val) -{ - if (blk_mq_is_shared_tags(hctx->flags)) - atomic_sub(val, &hctx->queue->nr_active_requests_shared_tags); - else - atomic_sub(val, &hctx->nr_active); -} - -static inline void __blk_mq_dec_active_requests(struct blk_mq_hw_ctx *hctx) -{ - __blk_mq_sub_active_requests(hctx, 1); -} - -static inline void blk_mq_add_active_requests(struct blk_mq_hw_ctx *hctx, - int val) -{ - if (hctx->flags & BLK_MQ_F_TAG_QUEUE_SHARED) - __blk_mq_add_active_requests(hctx, val); -} - -static inline void blk_mq_inc_active_requests(struct blk_mq_hw_ctx *hctx) -{ - if (hctx->flags & BLK_MQ_F_TAG_QUEUE_SHARED) - __blk_mq_inc_active_requests(hctx); -} - -static inline void blk_mq_sub_active_requests(struct blk_mq_hw_ctx *hctx, - int val) -{ - if (hctx->flags & BLK_MQ_F_TAG_QUEUE_SHARED) - __blk_mq_sub_active_requests(hctx, val); -} - -static inline void blk_mq_dec_active_requests(struct blk_mq_hw_ctx *hctx) -{ - if (hctx->flags & BLK_MQ_F_TAG_QUEUE_SHARED) - __blk_mq_dec_active_requests(hctx); -} - -static inline int __blk_mq_active_requests(struct blk_mq_hw_ctx *hctx) -{ - if (blk_mq_is_shared_tags(hctx->flags)) - return atomic_read(&hctx->queue->nr_active_requests_shared_tags); - return atomic_read(&hctx->nr_active); -} static inline void __blk_mq_put_driver_tag(struct blk_mq_hw_ctx *hctx, struct request *rq) { - blk_mq_dec_active_requests(hctx); blk_mq_put_tag(hctx->tags, rq->mq_ctx, rq->tag); rq->tag =3D BLK_MQ_NO_TAG; } @@ -396,45 +335,6 @@ static inline void blk_mq_free_requests(struct list_he= ad *list) } } =20 -/* - * For shared tag users, we track the number of currently active users - * and attempt to provide a fair share of the tag depth for each of them. - */ -static inline bool hctx_may_queue(struct blk_mq_hw_ctx *hctx, - struct sbitmap_queue *bt) -{ - unsigned int depth, users; - - if (!hctx || !(hctx->flags & BLK_MQ_F_TAG_QUEUE_SHARED)) - return true; - - /* - * Don't try dividing an ant - */ - if (bt->sb.depth =3D=3D 1) - return true; - - if (blk_mq_is_shared_tags(hctx->flags)) { - struct request_queue *q =3D hctx->queue; - - if (!test_bit(QUEUE_FLAG_HCTX_ACTIVE, &q->queue_flags)) - return true; - } else { - if (!test_bit(BLK_MQ_S_TAG_ACTIVE, &hctx->state)) - return true; - } - - users =3D READ_ONCE(hctx->tags->active_queues); - if (!users) - return true; - - /* - * Allow at least some tags - */ - depth =3D max((bt->sb.depth + users - 1) / users, 4U); - return __blk_mq_active_requests(hctx) < depth; -} - /* run the code block in @dispatch_ops with rcu/srcu read lock held */ #define __blk_mq_run_dispatch_ops(q, check_sleep, dispatch_ops) \ do { \ diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h index 18a2388ba581..ccbb07559402 100644 --- a/include/linux/blk-mq.h +++ b/include/linux/blk-mq.h @@ -432,12 +432,6 @@ struct blk_mq_hw_ctx { /** @queue_num: Index of this hardware queue. */ unsigned int queue_num; =20 - /** - * @nr_active: Number of active requests. Only used when a tag set is - * shared across request queues. - */ - atomic_t nr_active; - /** @cpuhp_online: List to store request if CPU is going to die */ struct hlist_node cpuhp_online; /** @cpuhp_dead: List to store request if some CPU die. */ diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 890128cdea1c..95525b1d7b74 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -567,8 +567,6 @@ struct request_queue { struct timer_list timeout; struct work_struct timeout_work; =20 - atomic_t nr_active_requests_shared_tags; - struct blk_mq_tags *sched_shared_tags; =20 struct list_head icq_list; --=20 2.43.7 From nobody Sat Jun 13 07:32:31 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=broadcom.com ARC-Seal: i=1; a=rsa-sha256; t=1781005832; cv=none; d=zohomail.com; s=zohoarc; b=mc4ui7R9JfudfyqCIPAsEGGVyDCgVy2c/apd7jCJl0G1ua9u3XAV0y8QLGedYFSXoRmChqsoBACaiH4HcyDKpWJaKBjkmgDPOLIuP2jtNNs6F8k+uwbt5FUXrwWAXYrGxtaVBGE/yEr9AEhRKXauOlLTQq+m1Vc5fSKxAzeCyiE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781005832; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fLAZlEa/gpJjIgpIJ2e9Ooy6MTW++uhKEEc/j768mlo=; b=ZTD8aEUyoDEAx3PxbXYQYg9j2IZh8i/ncwiJ1AXJMV2Zoz+5qG/NI+cISDsbw14ejYzxBU2C65M2t+xHUqSc9ZdSFIMUGHgts95e7mJMH1X/QIEUUHmljvgft95lpqbytGLLKkaW3wZunvXxz/LDiHy8rOihcyrrdo45GOBuu2s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1781005832348659.9515509717692; Tue, 9 Jun 2026 04:50:32 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1332634.1595118 (Exim 4.92) (envelope-from ) id 1wWuyD-0003F4-M3; Tue, 09 Jun 2026 11:50:13 +0000 Received: by outflank-mailman (output) from mailman id 1332634.1595118; Tue, 09 Jun 2026 11:50:13 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wWuyD-0003Ex-JC; Tue, 09 Jun 2026 11:50:13 +0000 Received: by outflank-mailman (input) for mailman id 1332634; Tue, 09 Jun 2026 11:50:11 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wWuyB-0003D7-JV for xen-devel@lists.xenproject.org; Tue, 09 Jun 2026 11:50:11 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wWuyB-00GBDM-00 for xen-devel@lists.xenproject.org; Tue, 09 Jun 2026 13:50:11 +0200 Received: from [10.42.69.12] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a27fde0-5cb7-0a2a0a5109dd-0a2a450cc5a0-40 for ; Tue, 09 Jun 2026 13:50:10 +0200 Received: from [74.125.82.226] (helo=mail-dy1-f226.google.com) by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a27fdf1-62f1-0a2a450c0019-4a7d52e2d563-3 for ; Tue, 09 Jun 2026 13:50:10 +0200 Received: by mail-dy1-f226.google.com with SMTP id 5a478bee46e88-307d0405e07so865710eec.1 for ; Tue, 09 Jun 2026 04:50:09 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com ([144.49.247.127]) by smtp-relay.gmail.com with ESMTPS id 5a478bee46e88-3074db83e41sm850958eec.7.2026.06.09.04.50.07 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 09 Jun 2026 04:50:08 -0700 (PDT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-36bc54005a7so7347350a91.0 for ; Tue, 09 Jun 2026 04:50:06 -0700 (PDT) Received: from sumit_ws.dhcp.broadcom.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36f6bf903fasm18898075a91.2.2026.06.09.04.49.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 04:50:03 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=broadcom.com header.i="@broadcom.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From" X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781005808; x=1781610608; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=fLAZlEa/gpJjIgpIJ2e9Ooy6MTW++uhKEEc/j768mlo=; b=RhKtdSbHQx9uz9Js1KJsErTk/Q95N7tkAg/UH0Xt1xDMyR+OezBYcbsywGMmPaeVsi 4ko+we2DbIX3FfIpOXqGx3vqAwKgow3FRm9fT8ngeA5IyG3Y2NAau1PVAaauhMlcFlWo K2lTfGQVVzxFtltpItCoWbHh0/QkfF9uFaLH+cfWNW+CNfWIhaUgrB49pEks4EnyEEyR EtbHIylVS4XyHls5/SVBhAwSnzA5cZlSwRYXqBzJY5dEPkQy9MpvGkvOr2qZF+eftIKY XVyGGVofzbeaYyEOapCC54JZYX0esk+TYy5xbtkRb9kPmIt1lqlCTkfC03Gz0qviGKNp CEnw== X-Forwarded-Encrypted: i=1; AFNElJ85aH2Wn7bUcr8LbpubNWKNL9p960z5fbovvw4J8TDFWITrZoghvI231OPjMwlISRPQ54Nfs6y5ri8=@lists.xenproject.org X-Gm-Message-State: AOJu0YyWImezAfIh85boMsspKCD4YaVQxFLzfKGjF4d/tiQij21Km9wx Jk5eIpv5lLthW0c/2Lfu6cCpHx2Nc04ogoBQOXJmVwgbix+ZDnTk2r66hFqY1Z8bm30FGQNNn49 jsk2lhcUP30eon8vQKLEzL89nTiaPu42F0kD/b4hb8ylGvOdHNAScvnLNR3Y6NzV79pPLoj8xC4 PnZWcMqE8txO9PXy4hjX47wT9pwLioT6zBlAs8ex2D1meIJnxsaIXxK6kpfO8CX0Rg6Ip6rmL2K 1fGdiwvgxKl+kqcJcUKkQ== X-Gm-Gg: Acq92OG9I+mIJLi3rwctEgzYFsG58jjADYmeihdkrFyOEgLEl0LRBMlpH8xbnkAhRus 3lSOyKJRh/0tDsEcocucJkf6UXCwe7Zo13vN8AcFPy/qQ5Q9B7itO2uI7EQ2o5JVboioZMmK7CO HDMliySBSiyeQatKaWMHbvzJVNmPkEg/yTvcmbhYQfSaogeDuhhrggwJVsJLLTyeZkAVBu1aTYB glR5snXDIW1wLpIa2hYoV7odZv1hhrNzBn0Q8p1wBlBcVq5A8nWit/hYGQ5Tpr3IV9gF/EwbBpn E0phu/yFinVvOyx+iDWE61O+1ynQ+nAm0EYjydqtVkxRAJdACDFTOpZL6udm9cst7PkR7vpPeqR CcDV8KlOuobxO8NL2OoupVSY8NGZDasYc0J2cSSeG1DV28AKS2b+VZAuFJWgtl/Plhud/VaQ7Kn m/WBT272kwvZJSIcY= X-Received: by 2002:a05:7300:80ce:b0:2dd:6937:79d5 with SMTP id 5a478bee46e88-3077af681eamr11765237eec.8.1781005808158; Tue, 09 Jun 2026 04:50:08 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1781005806; x=1781610606; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=fLAZlEa/gpJjIgpIJ2e9Ooy6MTW++uhKEEc/j768mlo=; b=EbBCNdb+KlhUnARK/m/9qr6Uq3veHMn7NjosF96SB6tEd9TXyAnes/DjkSu/yGBjwZ aFPrmr+0HqrVEgXt6LnTIbdctVYzEhQNcVHsHa3CWpZatvdPDaLXbZXz1OVUdXVBnRrp 5mtUTsMtKBTLrpiLWX97Ka6CCUnM3TGToE21U= X-Forwarded-Encrypted: i=1; AFNElJ8i+zLQRovTrc4ey/++u4qeYnmNhSRXQ5/Cx5vah7J21inTSyA8fukDqLTPRtfvN71ab0sYX+OayEc=@lists.xenproject.org X-Received: by 2002:a17:90b:57c4:b0:36b:75:6387 with SMTP id 98e67ed59e1d1-370eea202f0mr20609582a91.8.1781005805625; Tue, 09 Jun 2026 04:50:05 -0700 (PDT) X-Received: by 2002:a17:90b:57c4:b0:36b:75:6387 with SMTP id 98e67ed59e1d1-370eea202f0mr20609495a91.8.1781005805070; Tue, 09 Jun 2026 04:50:05 -0700 (PDT) From: Sumit Saxena To: "Martin K . Petersen" , Jens Axboe Cc: "James E . J . Bottomley" , linux-scsi@vger.kernel.org, linux-block@vger.kernel.org, Adam Radford , Khalid Aziz , Adaptec OEM Raid Solutions , Matthew Wilcox , Hannes Reinecke , "Juergen E . Fischer" , Russell King , linux-arm-kernel@lists.infradead.org, Finn Thain , Michael Schmitz , Anil Gurumurthy , Sudarsana Kalluru , Oliver Neukum , Ali Akcaagac , Jamie Lenehan , Ram Vegesna , target-devel@vger.kernel.org, Bradley Grove , Satish Kharat , Sesidhar Baddela , Karan Tilak Kumar , Yihang Li , Don Brace , storagedev@microchip.com, HighPoint Linux Team , Tyrel Datwyler , Madhavan Srinivasan , Michael Ellerman , Nicholas Piggin , Christophe Leroy , linuxppc-dev@lists.ozlabs.org, Brian King , Lee Duncan , Chris Leech , Mike Christie , open-iscsi@googlegroups.com, Justin Tee , Paul Ely , Kashyap Desai , Shivasharan S , Chandrakanth Patil , megaraidlinux.pdl@broadcom.com, Sathya Prakash Veerichetty , Sreekanth Reddy , mpi3mr-linuxdrv.pdl@broadcom.com, Suganath Prabu Subramani , Ranjan Kumar , MPT-FusionLinux.pdl@broadcom.com, Daniel Palmer , GOTO Masanori , YOKOTA Hiroshi , Jack Wang , Geoff Levand , Michael Reed , Nilesh Javali , GR-QLogic-Storage-Upstream@marvell.com, Narsimhulu Musini , "K . Y . Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , linux-hyperv@vger.kernel.org, "Michael S . Tsirkin" , Jason Wang , Paolo Bonzini , Stefan Hajnoczi , Eugenio Perez , virtualization@lists.linux.dev, Vishal Bhakta , bcm-kernel-feedback-list@broadcom.com, Juergen Gross , Stefano Stabellini , Oleksandr Tyshchenko , xen-devel@lists.xenproject.org, Sumit Saxena , John Garry Subject: [PATCH v3 4/4] scsi: use percpu counters for iostat counters in struct scsi_device Date: Tue, 9 Jun 2026 17:48:03 +0530 Message-ID: <20260609121806.2121755-5-sumit.saxena@broadcom.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260609121806.2121755-1-sumit.saxena@broadcom.com> References: <20260609121806.2121755-1-sumit.saxena@broadcom.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e X-purgate-ID: tlsNG-d25034/1781005810-E2F72CF5-921E1068/0/0 X-purgate-type: clean X-purgate-size: 7433 X-ZohoMail-DKIM: pass (identity @broadcom.com) X-ZM-MESSAGEID: 1781005834696154100 Content-Type: text/plain; charset="utf-8" iorequest_cnt and iodone_cnt are updated on every command dispatch and completion, often from different CPUs on high queue depth workloads. Using adjacent atomic_t fields causes cache line contention between the submission and completion paths. Extend the same treatment to ioerr_cnt and iotmo_cnt so all four iostat counters in struct scsi_device use struct percpu_counter. Suggested-by: John Garry Signed-off-by: Sumit Saxena Reviewed-by: Hannes Reinecke --- drivers/scsi/scsi_error.c | 4 ++-- drivers/scsi/scsi_lib.c | 10 +++++----- drivers/scsi/scsi_scan.c | 8 ++++++++ drivers/scsi/scsi_sysfs.c | 23 ++++++++++++++--------- drivers/scsi/sd.c | 2 +- include/scsi/scsi_device.h | 9 +++++---- 6 files changed, 35 insertions(+), 21 deletions(-) diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index 147127fb4db9..b1aa7da2ba7c 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c @@ -349,7 +349,7 @@ enum blk_eh_timer_return scsi_timeout(struct request *r= eq) trace_scsi_dispatch_cmd_timeout(scmd); scsi_log_completion(scmd, TIMEOUT_ERROR); =20 - atomic_inc(&scmd->device->iotmo_cnt); + percpu_counter_inc(&scmd->device->iotmo_cnt); if (host->eh_deadline !=3D -1 && !host->last_reset) host->last_reset =3D jiffies; =20 @@ -370,7 +370,7 @@ enum blk_eh_timer_return scsi_timeout(struct request *r= eq) */ if (test_and_set_bit(SCMD_STATE_COMPLETE, &scmd->state)) return BLK_EH_DONE; - atomic_inc(&scmd->device->iodone_cnt); + percpu_counter_inc(&scmd->device->iodone_cnt); if (scsi_abort_command(scmd) !=3D SUCCESS) { set_host_byte(scmd, DID_TIME_OUT); scsi_eh_scmd_add(scmd); diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 6e8c7a42603e..979fdace33ac 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -1554,9 +1554,9 @@ static void scsi_complete(struct request *rq) =20 INIT_LIST_HEAD(&cmd->eh_entry); =20 - atomic_inc(&cmd->device->iodone_cnt); + percpu_counter_inc(&cmd->device->iodone_cnt); if (cmd->result) - atomic_inc(&cmd->device->ioerr_cnt); + percpu_counter_inc(&cmd->device->ioerr_cnt); =20 disposition =3D scsi_decide_disposition(cmd); if (disposition !=3D SUCCESS && scsi_cmd_runtime_exceeced(cmd)) @@ -1592,7 +1592,7 @@ static enum scsi_qc_status scsi_dispatch_cmd(struct s= csi_cmnd *cmd) struct Scsi_Host *host =3D cmd->device->host; int rtn =3D 0; =20 - atomic_inc(&cmd->device->iorequest_cnt); + percpu_counter_inc(&cmd->device->iorequest_cnt); =20 /* check if the device is still usable */ if (unlikely(cmd->device->sdev_state =3D=3D SDEV_DEL)) { @@ -1614,7 +1614,7 @@ static enum scsi_qc_status scsi_dispatch_cmd(struct s= csi_cmnd *cmd) */ SCSI_LOG_MLQUEUE(3, scmd_printk(KERN_INFO, cmd, "queuecommand : device blocked\n")); - atomic_dec(&cmd->device->iorequest_cnt); + percpu_counter_dec(&cmd->device->iorequest_cnt); return SCSI_MLQUEUE_DEVICE_BUSY; } =20 @@ -1647,7 +1647,7 @@ static enum scsi_qc_status scsi_dispatch_cmd(struct s= csi_cmnd *cmd) trace_scsi_dispatch_cmd_start(cmd); rtn =3D host->hostt->queuecommand(host, cmd); if (rtn) { - atomic_dec(&cmd->device->iorequest_cnt); + percpu_counter_dec(&cmd->device->iorequest_cnt); trace_scsi_dispatch_cmd_error(cmd, rtn); if (rtn !=3D SCSI_MLQUEUE_DEVICE_BUSY && rtn !=3D SCSI_MLQUEUE_TARGET_BUSY) diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index 121a14d5fdb8..bc885c72f01e 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c @@ -350,6 +350,14 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi= _target *starget, =20 scsi_sysfs_device_initialize(sdev); =20 + if (percpu_counter_init(&sdev->iorequest_cnt, 0, GFP_KERNEL) || + percpu_counter_init(&sdev->iodone_cnt, 0, GFP_KERNEL) || + percpu_counter_init(&sdev->ioerr_cnt, 0, GFP_KERNEL) || + percpu_counter_init(&sdev->iotmo_cnt, 0, GFP_KERNEL)) { + ret =3D -ENOMEM; + goto out_device_destroy; + } + if (scsi_device_is_pseudo_dev(sdev)) return sdev; =20 diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index dfc3559e7e04..f652edd16497 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c @@ -516,6 +516,10 @@ static void scsi_device_dev_release(struct device *dev) if (vpd_pgb7) kfree_rcu(vpd_pgb7, rcu); kfree(sdev->inquiry); + percpu_counter_destroy(&sdev->iotmo_cnt); + percpu_counter_destroy(&sdev->ioerr_cnt); + percpu_counter_destroy(&sdev->iodone_cnt); + percpu_counter_destroy(&sdev->iorequest_cnt); kfree(sdev); =20 if (parent) @@ -936,26 +940,27 @@ static ssize_t show_iostat_counterbits(struct device *dev, struct device_attribute *attr, char *buf) { - return snprintf(buf, 20, "%d\n", (int)sizeof(atomic_t) * 8); + /* iostat counters are per-CPU sums (s64). Report width for tools. */ + return sysfs_emit(buf, "%zu\n", sizeof(s64) * 8); } =20 static DEVICE_ATTR(iocounterbits, S_IRUGO, show_iostat_counterbits, NULL); =20 -#define show_sdev_iostat(field) \ +#define show_sdev_iostat_percpu(field) \ static ssize_t \ show_iostat_##field(struct device *dev, struct device_attribute *attr, \ char *buf) \ { \ struct scsi_device *sdev =3D to_scsi_device(dev); \ - unsigned long long count =3D atomic_read(&sdev->field); \ - return snprintf(buf, 20, "0x%llx\n", count); \ + unsigned long long count =3D percpu_counter_sum(&sdev->field); \ + return sysfs_emit(buf, "0x%llx\n", count); \ } \ -static DEVICE_ATTR(field, S_IRUGO, show_iostat_##field, NULL) +static DEVICE_ATTR(field, 0444, show_iostat_##field, NULL) =20 -show_sdev_iostat(iorequest_cnt); -show_sdev_iostat(iodone_cnt); -show_sdev_iostat(ioerr_cnt); -show_sdev_iostat(iotmo_cnt); +show_sdev_iostat_percpu(iorequest_cnt); +show_sdev_iostat_percpu(iodone_cnt); +show_sdev_iostat_percpu(ioerr_cnt); +show_sdev_iostat_percpu(iotmo_cnt); =20 static ssize_t sdev_show_modalias(struct device *dev, struct device_attribute *attr, char= *buf) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index adc3fa55ca2c..b7ce01de17b3 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -4043,7 +4043,7 @@ static int sd_probe(struct scsi_device *sdp) sdkp->index =3D index; sdkp->max_retries =3D SD_MAX_RETRIES; atomic_set(&sdkp->openers, 0); - atomic_set(&sdkp->device->ioerr_cnt, 0); + percpu_counter_set(&sdkp->device->ioerr_cnt, 0); =20 if (!sdp->request_queue->rq_timeout) { if (sdp->type !=3D TYPE_MOD) diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 029f5115b2ea..4be36bf2a475 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h @@ -9,6 +9,7 @@ #include #include #include +#include #include =20 struct bsg_device; @@ -272,10 +273,10 @@ struct scsi_device { unsigned int max_device_blocked; /* what device_blocked counts down from = */ #define SCSI_DEFAULT_DEVICE_BLOCKED 3 =20 - atomic_t iorequest_cnt; - atomic_t iodone_cnt; - atomic_t ioerr_cnt; - atomic_t iotmo_cnt; + struct percpu_counter iorequest_cnt; + struct percpu_counter iodone_cnt; + struct percpu_counter ioerr_cnt; + struct percpu_counter iotmo_cnt; =20 struct device sdev_gendev, sdev_dev; --=20 2.43.7