From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com ([192.55.52.43]:39707 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732303AbeGLWZw (ORCPT ); Thu, 12 Jul 2018 18:25:52 -0400 From: "Derrick, Jonathan" To: "Bauer, Scott" , "stable@vger.kernel.org" CC: "Busch, Keith" Subject: Re: [BACKPORT PATCH] nvme-pci: Remap CMB SQ entries on every controller reset Date: Thu, 12 Jul 2018 22:14:00 +0000 Message-ID: <1531433621.21851.1.camel@intel.com> References: <20180712212717.15318-1-scott.bauer@intel.com> In-Reply-To: <20180712212717.15318-1-scott.bauer@intel.com> Content-Language: en-US Content-Type: multipart/signed; micalg=sha-1; protocol="application/x-pkcs7-signature"; boundary="=-aqX/VDotpZuwFeqXjcvJ" MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org List-ID: --=-aqX/VDotpZuwFeqXjcvJ Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thank you, Scott Reviewed-by: Jon Derrick On Thu, 2018-07-12 at 15:27 -0600, Scott Bauer wrote: > Commit 815c6704bf9f1c59f3a6be380a4032b9c57b12f1 upstream. >=20 > The controller memory buffer is remapped into a kernel address on > each > reset, but the driver was setting the submission queue base address > only on the very first queue creation. The remapped address is likely > to > change after a reset, so accessing the old address will hit a kernel > bug. >=20 > This patch fixes that by setting the queue's CMB base address each > time > the queue is created. >=20 > Fixes: f63572dff1421 ("nvme: unmap CMB and remove sysfs file in reset > path") > Reported-by: Christian Black > Cc: Jon Derrick > Signed-off-by: Keith Busch > Reviewed-by: Christoph Hellwig > Signed-off-by: Scott Bauer > --- > drivers/nvme/host/pci.c | 27 ++++++++++++++++----------- > 1 file changed, 16 insertions(+), 11 deletions(-) >=20 > diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c > index 3d4724e38aa9..4cac4755abef 100644 > --- a/drivers/nvme/host/pci.c > +++ b/drivers/nvme/host/pci.c > @@ -1233,17 +1233,15 @@ static int nvme_cmb_qdepth(struct nvme_dev > *dev, int nr_io_queues, > static int nvme_alloc_sq_cmds(struct nvme_dev *dev, struct > nvme_queue *nvmeq, > int qid, int depth) > { > - if (qid && dev->cmb && use_cmb_sqes && NVME_CMB_SQS(dev- > >cmbsz)) { > - unsigned offset =3D (qid - 1) * > roundup(SQ_SIZE(depth), > - dev- > >ctrl.page_size); > - nvmeq->sq_dma_addr =3D dev->cmb_bus_addr + offset; > - nvmeq->sq_cmds_io =3D dev->cmb + offset; > - } else { > - nvmeq->sq_cmds =3D dma_alloc_coherent(dev->dev, > SQ_SIZE(depth), > - &nvmeq->sq_dma_addr, > GFP_KERNEL); > - if (!nvmeq->sq_cmds) > - return -ENOMEM; > - } > + > + /* CMB SQEs will be mapped before creation */ > + if (qid && dev->cmb && use_cmb_sqes && NVME_CMB_SQS(dev- > >cmbsz)) > + return 0; > + > + nvmeq->sq_cmds =3D dma_alloc_coherent(dev->dev, > SQ_SIZE(depth), > + &nvmeq->sq_dma_addr, > GFP_KERNEL); > + if (!nvmeq->sq_cmds) > + return -ENOMEM; > =20 > return 0; > } > @@ -1320,6 +1318,13 @@ static int nvme_create_queue(struct nvme_queue > *nvmeq, int qid) > struct nvme_dev *dev =3D nvmeq->dev; > int result; > =20 > + if (qid && dev->cmb && use_cmb_sqes && NVME_CMB_SQS(dev- > >cmbsz)) { > + unsigned offset =3D (qid - 1) * roundup(SQ_SIZE(nvmeq- > >q_depth), > + dev- > >ctrl.page_size); > + nvmeq->sq_dma_addr =3D dev->cmb_bus_addr + offset; > + nvmeq->sq_cmds_io =3D dev->cmb + offset; > + } > + > nvmeq->cq_vector =3D qid - 1; > result =3D adapter_alloc_cq(dev, qid, nvmeq); > if (result < 0) --=-aqX/VDotpZuwFeqXjcvJ Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Disposition: attachment; filename="smime.p7s" Content-Transfer-Encoding: base64 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 AG6qjTBc2iB2iz6IVnzrBtQT5DR3KM6EqbMTwur8keTC11xls7lwWexzsSgt37V9UNKAqfsZPgcX AgMBAAGjggI3MIICMzAdBgNVHQ4EFgQUJRdznv8EeAa3g+3F5NKtNNctuBcwHwYDVR0jBBgwFoAU HmkqtNwo/kcYTiELP7ysES/wmPUwZQYDVR0fBF4wXDBaoFigVoZUaHR0cDovL3d3dy5pbnRlbC5j b20vcmVwb3NpdG9yeS9DUkwvSW50ZWwlMjBFeHRlcm5hbCUyMEJhc2ljJTIwSXNzdWluZyUyMENB JTIwNEEuY3JsMIGfBggrBgEFBQcBAQSBkjCBjzBpBggrBgEFBQcwAoZdaHR0cDovL3d3dy5pbnRl bC5jb20vcmVwb3NpdG9yeS9jZXJ0aWZpY2F0ZXMvSW50ZWwlMjBFeHRlcm5hbCUyMEJhc2ljJTIw SXNzdWluZyUyMENBJTIwNEEuY3J0MCIGCCsGAQUFBzABhhZodHRwOi8vb2NzcC5pbnRlbC5jb20v MAsGA1UdDwQEAwIHgDA8BgkrBgEEAYI3FQcELzAtBiUrBgEEAYI3FQiGw4x1hJnlUYP9gSiFjp9T gpHACWeB3r05lfBDAgFkAgEJMB8GA1UdJQQYMBYGCCsGAQUFBwMEBgorBgEEAYI3CgMMMCkGCSsG AQQBgjcVCgQcMBowCgYIKwYBBQUHAwQwDAYKKwYBBAGCNwoDDDBRBgNVHREESjBIoCoGCisGAQQB gjcUAgOgHAwaam9uYXRoYW4uZGVycmlja0BpbnRlbC5jb22BGmpvbmF0aGFuLmRlcnJpY2tAaW50 ZWwuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQA5LNb+VnWY0V21FlNjnQ2BIb5gmlED29zwQiC5yezn 2SexgvN31129iJSkXuiBHdcVJiUAUPHYuxPRwumwbrkY6m+sYi9kIzKt+ZKNNAN4WbnavsbyRBlb cIn2E5swqD+sks8AmKivHmg+gFeboLaOf+EqVihIz1Wec1PpbX98R1t2ep7Y/81DD1fIjAWHl6Mq TJwjKQuYB01kkJdXZAGPXUQSARR1y2D1YpCkDqfGH2STaB4nenD4INSyhTGo5RV9wwTAibyrIq50 rnmvBnHTmICQVdHuIhG1gGmDLUAGqfrU3W2QJr9gkICdrTMgIEdd8s73wknaZxZKqfRxnMVQMYIC FzCCAhMCAQEwgZAweTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRQwEgYDVQQHEwtTYW50YSBD bGFyYTEaMBgGA1UEChMRSW50ZWwgQ29ycG9yYXRpb24xKzApBgNVBAMTIkludGVsIEV4dGVybmFs IEJhc2ljIElzc3VpbmcgQ0EgNEECEzMAAKye+0C3syvSXOcAAAAArJ4wCQYFKw4DAhoFAKBdMBgG CSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE4MDcxMjIyMTM0MVowIwYJ KoZIhvcNAQkEMRYEFCfhSJ7KNrDMVbcw0EiBTeOm00toMA0GCSqGSIb3DQEBAQUABIIBADQCFNXZ 2iwZ5TOCZgeCufMMh2bpTT36xqFedgFJ/UmA9EO8h/xlLox30ibN4Hnl6VD8iL+vGbuTEvIJTzGG evdiFbpoJviuu78vj85ZWxPmC8ZO623WW181DjCnF8ZwC9jjC/kEOWJAfLkf9HsiSvkxd5/ffrOT H32yrKoHpCOBIFRvWJAeeZdOKqjigEd3QY2UgOSUqt1PFKKwBGWMSlm0Nn4lmNEL0jg/Gpaq1NZ7 /1yWK+DS/z+0/fJvoxEZO9ldMFiQenCFAbEQwp5wdJdBL+p1hZlWPMdHwP4QbFZxp/crqjeEtMg+ WVPVL9pVzxeMPvjubfAMgdenb1V+bEIAAAAAAAA= --=-aqX/VDotpZuwFeqXjcvJ--