Re: [ndctl 5/5] Use page size as alignment value

Santosh Sivaraj
2021-01-29T06:24:41Z

Dan Williams <dan.j.williams@intel.com> writes:

> On Mon, Dec 21, 2020 at 8:26 PM Santosh Sivaraj <santosh@fossix.org> wrote:
>>
>> The alignment sizes passed to ndctl in the tests are all hardcoded to 4k,
>> the default page size on x86. Change those to the default page size on that
>> architecture (sysconf/getconf). No functional changes otherwise.
>>
>> Signed-off-by: Santosh Sivaraj <santosh@fossix.org>
>> ---
>> test/dpa-alloc.c | 23 ++++++++++++++---------
>> test/multi-dax.sh | 6 ++++--
>> test/sector-mode.sh | 4 +++-
>> 3 files changed, 21 insertions(+), 12 deletions(-)
>>
>> diff --git a/test/dpa-alloc.c b/test/dpa-alloc.c
>> index 10af189..ff6143e 100644
>> --- a/test/dpa-alloc.c
>> +++ b/test/dpa-alloc.c
>> @@ -48,12 +48,13 @@ static int do_test(struct ndctl_ctx *ctx, struct ndctl_test *test)
>> struct ndctl_region *region, *blk_region = NULL;
>> struct ndctl_namespace *ndns;
>> struct ndctl_dimm *dimm;
>> - unsigned long size;
>> + unsigned long size, page_size;
>> struct ndctl_bus *bus;
>> char uuid_str[40];
>> int round;
>> int rc;
>>
>> + page_size = sysconf(_SC_PAGESIZE);
>> /* disable nfit_test.1, not used in this test */
>> bus = ndctl_bus_get_by_provider(ctx, NFIT_PROVIDER1);
>> if (!bus)
>> @@ -134,11 +135,11 @@ static int do_test(struct ndctl_ctx *ctx, struct ndctl_test *test)
>> return rc;
>> }
>> ndctl_namespace_disable_invalidate(ndns);
>> - rc = ndctl_namespace_set_size(ndns, SZ_4K);
>> + rc = ndctl_namespace_set_size(ndns, page_size);
>> if (rc) {
>> - fprintf(stderr, "failed to init %s to size: %d\n",
>> + fprintf(stderr, "failed to init %s to size: %lu\n",
>> ndctl_namespace_get_devname(ndns),
>> - SZ_4K);
>> + page_size);
>> return rc;
>> }
>> namespaces[i].ndns = ndns;
>> @@ -160,7 +161,7 @@ static int do_test(struct ndctl_ctx *ctx, struct ndctl_test *test)
>> ndns = namespaces[i % ARRAY_SIZE(namespaces)].ndns;
>> if (i % ARRAY_SIZE(namespaces) == 0)
>> round++;
>> - size = SZ_4K * round;
>> + size = page_size * round;
>> rc = ndctl_namespace_set_size(ndns, size);
>> if (rc) {
>> fprintf(stderr, "%s: set_size: %lx failed: %d\n",
>> @@ -176,7 +177,7 @@ static int do_test(struct ndctl_ctx *ctx, struct ndctl_test *test)
>> i--;
>> round++;
>> ndns = namespaces[i % ARRAY_SIZE(namespaces)].ndns;
>> - size = SZ_4K * round;
>> + size = page_size * round;
>> rc = ndctl_namespace_set_size(ndns, size);
>> if (rc) {
>> fprintf(stderr, "%s failed to update while labels full\n",
>> @@ -185,7 +186,7 @@ static int do_test(struct ndctl_ctx *ctx, struct ndctl_test *test)
>> }
>>
>> round--;
>> - size = SZ_4K * round;
>> + size = page_size * round;
>> rc = ndctl_namespace_set_size(ndns, size);
>> if (rc) {
>> fprintf(stderr, "%s failed to reduce size while labels full\n",
>> @@ -279,8 +280,12 @@ static int do_test(struct ndctl_ctx *ctx, struct ndctl_test *test)
>>
>> available_slots = ndctl_dimm_get_available_labels(dimm);
>> if (available_slots != default_available_slots - 1) {
>> - fprintf(stderr, "mishandled slot count\n");
>> - return -ENXIO;
>> + fprintf(stderr, "mishandled slot count (%u, %u)\n",
>> + available_slots, default_available_slots - 1);
>> +
>> + /* TODO: fix it on non-acpi platforms */
>> + if (ndctl_bus_has_nfit(bus))
>> + return -ENXIO;
>
> This change seems unrelated to page size fixups. Care to break it out?

Sure Dan, I will add the API to check for DIMM error state flags too. Thanks for
the review, I will send a v2 soon.

Thanks,
Santosh