cxl: Fix allocating a minimum of 2 pages for the SPA
authorIan Munsie <imunsie@au1.ibm.com>
Wed, 29 Jun 2016 12:16:26 +0000 (22:16 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 8 Jul 2016 12:10:44 +0000 (22:10 +1000)
The Scheduled Process Area is allocated dynamically with enough pages to
fit at least as many processes as the AFU descriptor indicated. Since
the calculation is non-trivial, it does this by calculating how many
processes could fit in an allocation of a given order, and increasing
that order until it can fit enough processes or hits the maximum
supported size.

Currently, it will start this search using a SPA of 2 pages instead of
1. This can waste a page of memory if the AFU's maximum number of
supported processes was small enough to fit in one page.

Fix the algorithm to start the search at 1 page.

Signed-off-by: Ian Munsie <imunsie@au1.ibm.com>
Reviewed-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
Reviewed-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
drivers/misc/cxl/native.c

index e80d8f7d4dcbf5550387895060e96b9dc9021c0b..120c468ee9e07a41c40636930182502b9fe04218 100644 (file)
@@ -189,7 +189,7 @@ int cxl_alloc_spa(struct cxl_afu *afu)
        unsigned spa_size;
 
        /* Work out how many pages to allocate */
-       afu->native->spa_order = 0;
+       afu->native->spa_order = -1;
        do {
                afu->native->spa_order++;
                spa_size = (1 << afu->native->spa_order) * PAGE_SIZE;