diff mbox

cxl: Fix number of allocated pages in SPA

Message ID 1444194460-13584-1-git-send-email-imunsie@au.ibm.com (mailing list archive)
State Accepted
Headers show

Commit Message

Ian Munsie Oct. 7, 2015, 5:07 a.m. UTC
From: Christophe Lombard <clombard@linux.vnet.ibm.com>

The scheduled process area is currently allocated before assigning the
correct maximum processes to the AFU, which will mean we only ever
allocate a fixed number of pages for the scheduled process area. This
will limit us to 958 processes with 2 x 64K pages. If we try to use more
processes than that we'd probably overrun the buffer and corrupt memory
or crash.

AFUs that require three or more interrupts per process will not be
affected as they are already limited to less processes than that, but we
could hit it on an AFU that requires 0, 1 or 2 interrupts per process,
or when using 4K pages.

This patch moves the initialisation of the num_procs to before the SPA
allocation so that enough pages will be allocated for the number of
processes that the AFU supports.

Signed-off-by: Christophe Lombard <clombard@linux.vnet.ibm.com>
Signed-off-by: Ian Munsie <imunsie@au1.ibm.com>
Cc: stable <stable@vger.kernel.org> # 3.18+
---

Changes since v2:
 - Expanded commit message
Changes since v1:
 - Expanded commit message

 drivers/misc/cxl/native.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Michael Ellerman Oct. 7, 2015, 10:10 a.m. UTC | #1
On Wed, 2015-07-10 at 05:07:40 UTC, Ian Munsie wrote:
> From: Christophe Lombard <clombard@linux.vnet.ibm.com>
> 
> The scheduled process area is currently allocated before assigning the
> correct maximum processes to the AFU, which will mean we only ever
> allocate a fixed number of pages for the scheduled process area. This
> will limit us to 958 processes with 2 x 64K pages. If we try to use more
> processes than that we'd probably overrun the buffer and corrupt memory
> or crash.
> 
> AFUs that require three or more interrupts per process will not be
> affected as they are already limited to less processes than that, but we
> could hit it on an AFU that requires 0, 1 or 2 interrupts per process,
> or when using 4K pages.
> 
> This patch moves the initialisation of the num_procs to before the SPA
> allocation so that enough pages will be allocated for the number of
> processes that the AFU supports.
> 
> Signed-off-by: Christophe Lombard <clombard@linux.vnet.ibm.com>
> Signed-off-by: Ian Munsie <imunsie@au1.ibm.com>
> Cc: stable <stable@vger.kernel.org> # 3.18+

Applied to powerpc fixes, thanks.

https://git.kernel.org/powerpc/c/4108efb02daa09cbb5db048a

cheers
diff mbox

Patch

diff --git a/drivers/misc/cxl/native.c b/drivers/misc/cxl/native.c
index b37f2e8..d2e75c8 100644
--- a/drivers/misc/cxl/native.c
+++ b/drivers/misc/cxl/native.c
@@ -457,6 +457,7 @@  static int activate_afu_directed(struct cxl_afu *afu)
 
 	dev_info(&afu->dev, "Activating AFU directed mode\n");
 
+	afu->num_procs = afu->max_procs_virtualised;
 	if (afu->spa == NULL) {
 		if (cxl_alloc_spa(afu))
 			return -ENOMEM;
@@ -468,7 +469,6 @@  static int activate_afu_directed(struct cxl_afu *afu)
 	cxl_p1n_write(afu, CXL_PSL_ID_An, CXL_PSL_ID_An_F | CXL_PSL_ID_An_L);
 
 	afu->current_mode = CXL_MODE_DIRECTED;
-	afu->num_procs = afu->max_procs_virtualised;
 
 	if ((rc = cxl_chardev_m_afu_add(afu)))
 		return rc;