From patchwork Fri Mar 9 22:14:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Don Brace X-Patchwork-Id: 10272099 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id A4363605CE for ; Fri, 9 Mar 2018 22:14:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 879DB29FFB for ; Fri, 9 Mar 2018 22:14:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7BE0E2A011; Fri, 9 Mar 2018 22:14:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 416422A00E for ; Fri, 9 Mar 2018 22:14:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932768AbeCIWOn (ORCPT ); Fri, 9 Mar 2018 17:14:43 -0500 Received: from mail-by2nam03on0052.outbound.protection.outlook.com ([104.47.42.52]:34016 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932851AbeCIWOg (ORCPT ); Fri, 9 Mar 2018 17:14:36 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mscc365.onmicrosoft.com; s=selector1-microsemi-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Udf9GLHmgy8/ffgEkH/t4ir+/Jhx0JCFdMSGtsGC+4w=; b=Sav40TU4D7VzDx5pZ5/wSGBg6xkGESlLSE/G5nsi+rpVwTubQTlO9koEP+k0nGq4y2ujyTOeu6Fw8TbHkeRJSZAUH9ISLNxJsfbxBezxHn2XyK2wqEnol7RcxW8SW6kFGvqWrhMeKsfs1nFpZXL+PUWfSzCh7475mqdFy7wvN5k= Received: from MWHPR0201CA0040.namprd02.prod.outlook.com (10.167.160.17) by CY1PR02MB2171.namprd02.prod.outlook.com (10.166.190.153) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.548.13; Fri, 9 Mar 2018 22:14:34 +0000 Received: from BL2FFO11FD015.protection.gbl (2a01:111:f400:7c09::150) by MWHPR0201CA0040.outlook.office365.com (2603:10b6:301:73::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.567.12 via Frontend Transport; Fri, 9 Mar 2018 22:14:34 +0000 Received-SPF: Pass (protection.outlook.com: domain of microsemi.com designates 208.19.99.223 as permitted sender) receiver=protection.outlook.com; client-ip=208.19.99.223; helo=AUSMBX3.microsemi.net; Received: from AUSMBX3.microsemi.net (208.19.99.223) by BL2FFO11FD015.mail.protection.outlook.com (10.173.160.223) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.20.527.18 via Frontend Transport; Fri, 9 Mar 2018 22:14:33 +0000 Received: from AUSMBX1.microsemi.net (10.201.34.31) by AUSMBX3.microsemi.net (10.201.34.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1415.2; Fri, 9 Mar 2018 16:14:31 -0600 Received: from AUSMBX1.microsemi.net ([10.201.253.31]) by AUSMBX1.microsemi.net ([10.201.253.31]) with mapi id 15.01.1415.002; Fri, 9 Mar 2018 16:14:31 -0600 From: Don Brace To: Ming Lei , James Bottomley , Jens Axboe , "Martin K . Petersen" CC: Christoph Hellwig , "linux-scsi@vger.kernel.org" , "linux-block@vger.kernel.org" , Meelis Roos , Kashyap Desai , Laurence Oberman , "Mike Snitzer" , Hannes Reinecke , "Artem Bityutskiy" Subject: Re: [PATCH V4 1/4] scsi: hpsa: fix selection of reply queue Thread-Topic: [PATCH V4 1/4] scsi: hpsa: fix selection of reply queue Thread-Index: AQHTt1dUgrwhZLzbrEa1GUJyW6q5VKPId6lT Date: Fri, 9 Mar 2018 22:14:31 +0000 Message-ID: <8c1ace00fae2460cb58b156c9b22a7e1@microsemi.com> References: <20180309033218.23042-1-ming.lei@redhat.com>, <20180309033218.23042-2-ming.lei@redhat.com> In-Reply-To: <20180309033218.23042-2-ming.lei@redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.100.34.16] MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:208.19.99.223; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(979002)(376002)(39860400002)(346002)(396003)(39380400002)(2980300002)(438002)(199004)(189003)(108616005)(53416004)(53936002)(478600001)(50466002)(68736007)(336012)(47776003)(14454004)(2906002)(2950100002)(575784001)(102836004)(36756003)(3846002)(8676002)(86362001)(76176011)(77096007)(186003)(45080400002)(26005)(97736004)(53546011)(6246003)(6346003)(24736004)(54906003)(316002)(305945005)(7736002)(110136005)(4326008)(23756003)(229853002)(2900100001)(5660300001)(8746002)(81166006)(106002)(106466001)(6116002)(59450400001)(81156014)(8936002)(356003)(7416002)(69596002)(586874002)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR02MB2171; H:AUSMBX3.microsemi.net; FPR:; SPF:Pass; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD015; 1:SevG3CjfW2GKlCQNvxnvbiHCuA0pwTr2HSuGM5mvzHE5d6jVHo2Apmcif+U3ius9c5NMTME1JciAzGVK2P/q2jGembnaE7Y6f2DaStmkybbo9gB9I427KOphMnJGZ5Ux X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 914afc8e-9ac4-4784-809d-08d5860b2329 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4608076)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:CY1PR02MB2171; X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB2171; 3:IDONyKdRJ8A0AvMweDnvjKPf2jwrim5/2QQIjtv3dzr1c6jQ4xZZfj9SQJ3XdahjX+I5F9s7FJZaKz67kBOYyu6AElts7ZL69nkivFgniN1qXgiOay8jRA52deXKxzEn/tc7fEs+LBeUyYiEJqouVMzbT2NFy0/qPWeq78UjyFg8HxvmNT+wHLbgGxSWbxuI9tbBKFQTi/6MixGQVbXghHemgZh3zCSaj9tHvM/3HfWdjrK1hqBgj5kGNm6yT88qCXPPg6SPraL/HIZqpzHnOL0wB3C1S30gTEQw+dJmUJn8zHQBuOj38TnMTAsJM1o7a8osHfVLhOg3a2Y1Xyz0OvxsSum3AjXCRn7/XEXandw=; 25:cMXOTNQPE6dIAIYVnInjPG3KlYsLCPZafKjEMauNwMtlFMIZ2dd9yaspmUBWtMHE9yU4lcRhFap0f1Hm+H8JuSsmzTWB8vSmTtmt8Nwp5ZpfVPClM3mg1tH7q81sQNg2DUDUonBNos2KKiZujs8tf1SGXi7/FrP6G5JS6jJ+HU8sOVH9NiOhWdCQ7FEGsVr5aBG2juqMBtRanaL6FcC/USC7yT+1gNyhBLKiRL+MI2IimjuNxGSKvKuevP3zFIj+9l7J1H6wT5DfThxND+hhfeVAmvt/PuGyOexFSNYoq0Almj136DSuxPvdc6tSrNijPVbFoUSCEDbPR9PIcQCD5Q== X-MS-TrafficTypeDiagnostic: CY1PR02MB2171: X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB2171; 31:+r5E+R/Klk4v3AFZBmHmVP+OWqaR+4uMpfXXYi6V1fo0HbbfYrQ/dc/2WjDFt2b8CLPPfy+4pgHnmcGsrjqAZqHH9N+TUhRtoyJf1SLB0payuSJ1gk70fjpdn9VUB+t8DPEi+rFBukAyZf1P7J5cNkrG1hTfnueAngNfY3RSY0R2Ai/ZlrARR/G1RKBCXYddVXDS2yOfbUaSFRCIMI1B0yRl+gTRZT7Y2l4KlrZKsnc=; 20:AIILA6Khy2SmjQ740GK3pCjeaHwGONQ1uw5EHLNKVu2f1MGNX1a+js6V42JQ4pyG9FWleGrTb6uSFy73JiQ+zT+31kfhcMd3QHfskBXMX8+EpYwEHtyFXltnz39lI1i3Bh2SKvopTe3PCoNXbRXwpoYFl4BZY6c7Sw/ezbHeUVLl29kJqkOaLJEMACwwCZ5pwp2nTDaofvVkLYzakfxxie2fTYBevcNGN1C0gaVGecnMRmR1MdTXQ6d73pO7OR5LxQmpwSUb8FHmAEVBKwNUcDvHaQT0h4QA4azNpIO2OzAKcNUME94/lK0RDPbJmZ80pnBR0f5pwXkRLld5WSzOuVVY8z0djhW5RSCNBeUoRCb6DsDUV81apMVxY4+wwyPN/tlwWLWj8Lid7WvryUSeaZRbfqov797762pcR5WbOJBoe69aUMu2W16T4kB4r3A1Qg9eu1ScM0S14ihBrkYnLrp0AdVGgzsCXkGXW0b9WTCRPk89AVzrOHOoreCKPkLd X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(209352067349851)(9452136761055)(72170198267865)(146099531331640)(228905959029699); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93004095)(10201501046)(3231220)(944501244)(52105095)(6055026)(6041310)(20161123564045)(20161123560045)(20161123558120)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:CY1PR02MB2171; BCL:0; PCL:0; RULEID:; SRVR:CY1PR02MB2171; X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB2171; 4:L8MSXjhqdJGOddrK/I4UCYJW68i/EPTVNkipHFtvTYSyiodaRUCwWmmNC9dg54fiHEi9WT+pynP6yC6p/XA9bFUODolSVSNy6AEgP4kor+8sac2bMPltn9WPt70RqO/UmkOqHdtlD4bejaUyDhrb7RLnviyQ8ywsqNgqmGJPIG4rBhSCiXxOSYNmmDL67/+lpimkmS2JGa/MqoTaOWlOilNwexinkaF9EC+2x+rUsc753fDbA8cS9KStMDdaLLjJxmJ1+cNmsztuE9XssI2MzYoddwLQntmGNYgC4FnhKW8AABKUFJr/vs2Ue/x5VoW0/q0glVCcjZ5bCPRGzA5kgsceAs7KsXoiTIsrrg4TrniDrYJn7Yd9P1RiU1u++b6SaNSW13lQRL+MeTkMrN4crCt1aytTT5joiHafxdoznRwwi0JdNWAAUPNvjeVTRyn2 X-Forefront-PRVS: 0606BBEB39 X-Microsoft-Exchange-Diagnostics: =?iso-8859-1?Q?1; CY1PR02MB2171; 23:RVPUfaFrgrA9yDVTL6Z0mkDw77ZsJd0vPUcpYWW?= =?iso-8859-1?Q?C/Zn/P9zUobS3TTu6+aA6GdBFCFFVV9hoAXC9XgwMS0q6k3eIsva1f3Pef?= =?iso-8859-1?Q?GcyVuoIlepakFR9SKsOKebBQs9ijqN1Jh52ALjRDEyZ67OwbrfmVPUbLZd?= =?iso-8859-1?Q?KYYU9Hc2yAmbrzKZRVNfNdorJXaoHhCPoQeMeTpvd45BcREMj3i6LlZtb0?= =?iso-8859-1?Q?f6Yh1yxKdgmr0QLjaOMw1YSpb6vDbTEPRtg5ek/4iesuVEuFRtjumHUY8C?= =?iso-8859-1?Q?lUvCxKub3gw+LH1s2K9h7SZ/JBDYFrr1Glvn7OIy8otaxX/kyrDMHOuogM?= =?iso-8859-1?Q?MX5CX2pyK7jAgMeZJkeQALSRAPRR5JPw3PYrmacix3Dw8NDT8qGtT3en83?= =?iso-8859-1?Q?onbqW+tGi1rAo7FskmwMS3ardVWSwtVBcGlEyBA/PbHl326aJ2Wz/Klc4a?= =?iso-8859-1?Q?AFFMg9+vDn97WiJfru9I4I6RbBFKXAOOhPF/e3JTEy85h015B/TkO7ciUz?= =?iso-8859-1?Q?U0d2T8ZCvFyOnf+3xHSw2GjYD1NTMAhFoOxTJWRBS90zUOnPXryYl/Td/N?= =?iso-8859-1?Q?OELv2OKgI7AyfMbT+kKvA3nylFOGd+Gk5yHstac28EpW33heLc/JEw69xK?= =?iso-8859-1?Q?oGZ/eA+aPtO8Qw1tyiOCVNyo1rAB0LpkSRXhltbwYQUN76hilgH4A3beyO?= =?iso-8859-1?Q?Bfhg4tou8tp6CVZk3JbRcmKSi6gUe1lY/o19w9J94+MuVpMPh/lRrCinAS?= =?iso-8859-1?Q?yyTiWryb8nVrqF/2AU6Zw0K34FEUw3ah6qNKAKU4v1ApuUBSg6x946hfTz?= =?iso-8859-1?Q?UpWfX2ZbJmJrL3z1VGj8/dKMW53jJzdLKtbdrDb9oiWsKMWMv+RyowIxAL?= =?iso-8859-1?Q?gyTH3ar5kmFFVJhG5YiOnErPaYmSqUgdSqRgL7HsAffFMr47qQYA/CsO8j?= =?iso-8859-1?Q?0vvf/deetBl7OHIghGMhi66UZb5OONQnNXBXZEipzCNHMRaHqc6bZizDVM?= =?iso-8859-1?Q?nXDKbma766ReF1qPz8+1Fkrl9mYT5Uu6Fo7mpRiSfM3P5ji/UYtrYLthR3?= =?iso-8859-1?Q?rwXUG7/0Fcoei3wjF95QOUQpcBQY81EbC2vLGz1L+ln2BZdztST8UpIm1M?= =?iso-8859-1?Q?GZmpY6LdcSkNREo40PuQPMt/JtL5qx7tikGd2BEThEFFGImnneYR38JyP5?= =?iso-8859-1?Q?jh3hf7RId2Z01O8OdkIIsO0Nb/OGSoN0kCxEzce29mVwGLxgMnCCvH9pef?= =?iso-8859-1?Q?Icv/oRPW9LF06zO8gt7qD1XaLIOx4Hy1l+zXxeBQlF2BrNKsQNN8veOsP6?= =?iso-8859-1?Q?5jkXvtjMNdaouABgwX9Bp2l24asssDVUCbwIxi36afZ4za4DVZjArDN+Us?= =?iso-8859-1?Q?NnD2yDuiURMh98t3+Kx2vV4IC41vBpQO+GqKzdy9aOhurWzyEX7jYFV/Ra?= =?iso-8859-1?Q?FPn68IaMlV3aFEIZXBzLrBKBKr4HJJaFTeiCMDPWgi9q29syKcoFVd5kQ?= =?iso-8859-1?Q?=3D=3D?= X-Microsoft-Antispam-Message-Info: pY7Nb2chI+XBkOc9NTvZTBqR1mYgC6Bo3EadKaRcSM1y/QeXFss4Whmgs7HfAFQeFAosHVG0wFlWdXuzSc8x149en+NALooBTG8DvvotDTDfu/7NNtbRRuiYWUEYaofWAqTMbALVJBNJEPuakNkMXjSOEtLkZF7uV/ZviusFgcV38rQlTZdtXKY9tLgaXEGZ X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB2171; 6:SCwrhUe9enbQ62ew6kIbpn/s12NnNAFCgm5ZYVPHvU9+EhF/BsC3wacbRj04+5w/w7B90krzvrcofxH1YSYnNZij8IksqU/cWIAe210WulgXaE+7q3hLgpJWryy1ObtHKZ5HU2/9KeCi8UHwH+d/vopiUWYUwGTWXoH8D9GFmFlZuvIMUajoEMdnxDT6UQ1HQATJp5Yq713pvVkyX2NA0C0ADs1DQHJcuMygChdfYhIbAuOj7cg2VNRYAMflH9jL++PvKKMj0d8Lrk8WdQLJOoh/PWJ+xqubj5tyXePKmkEDkI5+uxoi+nqXDbrgzvXC5TjAPc/MUXAA3gAx+dtWSGszpqY9TJcsp+wPi0LwY2Y=; 5:GSnwcebU4r548gz/2x+AQrfuekr0ZW3iPJdytZsdQmN1DuWDrNmnCazd5Ciyg6+GTn5vG/Y/xEWVx0xXhOXnYKbz4Jc+0MTqHz8QevkBDvSlOPfGySfm5kA610cI7j40bomyP/eH6j10HWoHchKnHGDSNEqObPUXGgmsKigFRTw=; 24:4YK83ItsxCnLYMAC88bJluJM2zSHHWhJ9Vig9veKyY6sBRqys9MRZlfC0QDbjE2RJl/tZJS0ajQdjpcnhhIu9N9wcRxJkBDmzHWQ558pBT4=; 7:RK/azYQxKjFgDepHlAVK5lsZgTEQb6b5rAZTcmWXnSgn6lrD7JJSSmXgaU3Xoe88/7r7+kZSuC1zFmjimiXxFr279HVAZyOiNwQXEaRGFPtoj17RNwNQF2MZh6mUOEb7rH7zM3ASJ5T9IsvTabBSHRBWO6CfYmai3EvsPJez8cve//ccWrsboq/W1ZqPDOTPmS3hezsmoXU7bKSUOm4PafTYLipqimXSPjytCm3700CCqxN7rWl9tYvTQFIMDBNe SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: microsemi.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Mar 2018 22:14:33.4229 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 914afc8e-9ac4-4784-809d-08d5860b2329 X-MS-Exchange-CrossTenant-Id: f267a5c8-86d8-4cc9-af71-1fd2c67c8fad X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f267a5c8-86d8-4cc9-af71-1fd2c67c8fad; Ip=[208.19.99.223]; Helo=[AUSMBX3.microsemi.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR02MB2171 Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c index 5293e6827ce5..3a9eca163db8 100644 --- a/drivers/scsi/hpsa.c +++ b/drivers/scsi/hpsa.c @@ -1045,11 +1045,7 @@ static void set_performant_mode(struct ctlr_info *h, struct CommandList *c, c->busaddr |= 1 | (h->blockFetchTable[c->Header.SGList] << 1); if (unlikely(!h->msix_vectors)) return; - if (likely(reply_queue == DEFAULT_REPLY_QUEUE)) - c->Header.ReplyQueue = - raw_smp_processor_id() % h->nreply_queues; - else - c->Header.ReplyQueue = reply_queue % h->nreply_queues; + c->Header.ReplyQueue = reply_queue; } } @@ -1063,10 +1059,7 @@ static void set_ioaccel1_performant_mode(struct ctlr_info *h, * Tell the controller to post the reply to the queue for this * processor. This seems to give the best I/O throughput. */ - if (likely(reply_queue == DEFAULT_REPLY_QUEUE)) - cp->ReplyQueue = smp_processor_id() % h->nreply_queues; - else - cp->ReplyQueue = reply_queue % h->nreply_queues; + cp->ReplyQueue = reply_queue; /* * Set the bits in the address sent down to include: * - performant mode bit (bit 0) @@ -1087,10 +1080,7 @@ static void set_ioaccel2_tmf_performant_mode(struct ctlr_info *h, /* Tell the controller to post the reply to the queue for this * processor. This seems to give the best I/O throughput. */ - if (likely(reply_queue == DEFAULT_REPLY_QUEUE)) - cp->reply_queue = smp_processor_id() % h->nreply_queues; - else - cp->reply_queue = reply_queue % h->nreply_queues; + cp->reply_queue = reply_queue; /* Set the bits in the address sent down to include: * - performant mode bit not used in ioaccel mode 2 * - pull count (bits 0-3) @@ -1109,10 +1099,7 @@ static void set_ioaccel2_performant_mode(struct ctlr_info *h, * Tell the controller to post the reply to the queue for this * processor. This seems to give the best I/O throughput. */ - if (likely(reply_queue == DEFAULT_REPLY_QUEUE)) - cp->reply_queue = smp_processor_id() % h->nreply_queues; - else - cp->reply_queue = reply_queue % h->nreply_queues; + cp->reply_queue = reply_queue; /* * Set the bits in the address sent down to include: * - performant mode bit not used in ioaccel mode 2 @@ -1157,6 +1144,8 @@ static void __enqueue_cmd_and_start_io(struct ctlr_info *h, { dial_down_lockup_detection_during_fw_flash(h, c); atomic_inc(&h->commands_outstanding); + + reply_queue = h->reply_map[raw_smp_processor_id()]; switch (c->cmd_type) { case CMD_IOACCEL1: set_ioaccel1_performant_mode(h, c, reply_queue); @@ -7376,6 +7365,26 @@ static void hpsa_disable_interrupt_mode(struct ctlr_info *h) h->msix_vectors = 0; } +static void hpsa_setup_reply_map(struct ctlr_info *h) +{ + const struct cpumask *mask; + unsigned int queue, cpu; + + for (queue = 0; queue < h->msix_vectors; queue++) { + mask = pci_irq_get_affinity(h->pdev, queue); + if (!mask) + goto fallback; + + for_each_cpu(cpu, mask) + h->reply_map[cpu] = queue; + } + return; + +fallback: + for_each_possible_cpu(cpu) + h->reply_map[cpu] = 0; +} + /* If MSI/MSI-X is supported by the kernel we will try to enable it on * controllers that are capable. If not, we use legacy INTx mode. */ @@ -7771,6 +7780,10 @@ static int hpsa_pci_init(struct ctlr_info *h) err = hpsa_interrupt_mode(h); if (err) goto clean1; + + /* setup mapping between CPU and reply queue */ + hpsa_setup_reply_map(h); + err = hpsa_pci_find_memory_BAR(h->pdev, &h->paddr); if (err) goto clean2; /* intmode+region, pci */ @@ -8480,6 +8493,28 @@ static struct workqueue_struct *hpsa_create_controller_wq(struct ctlr_info *h, return wq; } +static void hpda_free_ctlr_info(struct ctlr_info *h) +{ + kfree(h->reply_map); + kfree(h); +} + +static struct ctlr_info *hpda_alloc_ctlr_info(void) +{ + struct ctlr_info *h; + + h = kzalloc(sizeof(*h), GFP_KERNEL); + if (!h) + return NULL; + + h->reply_map = kzalloc(sizeof(*h->reply_map) * nr_cpu_ids, GFP_KERNEL); + if (!h->reply_map) { + kfree(h); + return NULL; + } + return h; +} + static int hpsa_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { int dac, rc; @@ -8517,7 +8552,7 @@ static int hpsa_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) * the driver. See comments in hpsa.h for more info. */ BUILD_BUG_ON(sizeof(struct CommandList) % COMMANDLIST_ALIGNMENT); - h = kzalloc(sizeof(*h), GFP_KERNEL); + h = hpda_alloc_ctlr_info(); if (!h) { dev_err(&pdev->dev, "Failed to allocate controller head\n"); return -ENOMEM; @@ -8916,7 +8951,7 @@ static void hpsa_remove_one(struct pci_dev *pdev) h->lockup_detected = NULL; /* init_one 2 */ /* (void) pci_disable_pcie_error_reporting(pdev); */ /* init_one 1 */ - kfree(h); /* init_one 1 */ + hpda_free_ctlr_info(h); /* init_one 1 */ } static int hpsa_suspend(__attribute__((unused)) struct pci_dev *pdev, diff --git a/drivers/scsi/hpsa.h b/drivers/scsi/hpsa.h index 018f980a701c..fb9f5e7f8209 100644 --- a/drivers/scsi/hpsa.h +++ b/drivers/scsi/hpsa.h @@ -158,6 +158,7 @@ struct bmic_controller_parameters { #pragma pack() struct ctlr_info { + unsigned int *reply_map; int ctlr; char devname[8]; char *product_name;