gethugepagesizes.c | gethugepagesizes.c | |||
---|---|---|---|---|
skipping to change at line 323 | skipping to change at line 323 | |||
}) | }) | |||
#define INIT_LIST(a, values...) \ | #define INIT_LIST(a, values...) \ | |||
({ \ | ({ \ | |||
long __e[] = { values }; \ | long __e[] = { values }; \ | |||
memcpy(a, __e, sizeof(__e)); \ | memcpy(a, __e, sizeof(__e)); \ | |||
}) | }) | |||
int main(int argc, char *argv[]) | int main(int argc, char *argv[]) | |||
{ | { | |||
long expected_sizes[MAX], actual_sizes[MAX]; | int i, fakes_no; | |||
long expected_sizes[MAX], actual_sizes[MAX], fake_sizes[MAX]; | ||||
long base_size = sysconf(_SC_PAGESIZE); | long base_size = sysconf(_SC_PAGESIZE); | |||
test_init(argc, argv); | test_init(argc, argv); | |||
/* | /* | |||
* === | * === | |||
* Argment error checking tests | * Argment error checking tests | |||
* === | * === | |||
*/ | */ | |||
meminfo_state = OVERRIDE_OFF; | meminfo_state = OVERRIDE_OFF; | |||
skipping to change at line 354 | skipping to change at line 355 | |||
if (getpagesizes(NULL, 1) != -1 || errno != EINVAL) | if (getpagesizes(NULL, 1) != -1 || errno != EINVAL) | |||
FAIL("Mishandled params (pagesizes == NULL, n_elem > 0)"); | FAIL("Mishandled params (pagesizes == NULL, n_elem > 0)"); | |||
/* | /* | |||
* === | * === | |||
* Test some corner cases using a fake system configuration | * Test some corner cases using a fake system configuration | |||
* === | * === | |||
*/ | */ | |||
INIT_LIST(expected_sizes, HPAGE_KB * 1024, 1024 * 1024, 64 * 1024); | INIT_LIST(expected_sizes, HPAGE_KB * 1024, 1024 * 1024, 64 * 1024); | |||
setup_fake_data(expected_sizes, 3); | fakes_no = 0; | |||
for (i = 0; i < 3; i++) | ||||
/* don't include base_size in 'fake' hugepagesizes */ | ||||
if (base_size != expected_sizes[i]) { | ||||
fake_sizes[fakes_no] = expected_sizes[i]; | ||||
fakes_no++; | ||||
} | ||||
setup_fake_data(fake_sizes, fakes_no); | ||||
/* | /* | |||
* Check handling when /proc/meminfo indicates no huge page support | * Check handling when /proc/meminfo indicates no huge page support | |||
* and the sysfs heirachy is not present. | * and the sysfs heirachy is not present. | |||
*/ | */ | |||
meminfo_state = OVERRIDE_MISSING; | meminfo_state = OVERRIDE_MISSING; | |||
sysfs_state = OVERRIDE_MISSING; | sysfs_state = OVERRIDE_MISSING; | |||
kernel_default_hugepage_size_reset(); | kernel_default_hugepage_size_reset(); | |||
EXPECT_SIZES(gethugepagesizes, MAX, 0, expected_sizes); | EXPECT_SIZES(gethugepagesizes, MAX, 0, expected_sizes); | |||
skipping to change at line 385 | skipping to change at line 393 | |||
INIT_LIST(expected_sizes, base_size, HPAGE_KB * 1024); | INIT_LIST(expected_sizes, base_size, HPAGE_KB * 1024); | |||
EXPECT_SIZES(getpagesizes, MAX, 2, expected_sizes); | EXPECT_SIZES(getpagesizes, MAX, 2, expected_sizes); | |||
/* | /* | |||
* When sysfs defines additional sizes ... | * When sysfs defines additional sizes ... | |||
*/ | */ | |||
sysfs_state = OVERRIDE_ON; | sysfs_state = OVERRIDE_ON; | |||
kernel_default_hugepage_size_reset(); | kernel_default_hugepage_size_reset(); | |||
INIT_LIST(expected_sizes, HPAGE_KB * 1024, 1024 * 1024, 64 * 1024); | memcpy(expected_sizes, fake_sizes, sizeof(fake_sizes)); | |||
/* ... make sure all sizes are returned without duplicates */ | /* ... make sure all sizes are returned without duplicates */ | |||
/* ... while making sure we do not overstep our limit */ | /* ... while making sure we do not overstep our limit */ | |||
EXPECT_SIZES(gethugepagesizes, MAX, 3, expected_sizes); | EXPECT_SIZES(gethugepagesizes, MAX, fakes_no, expected_sizes); | |||
EXPECT_SIZES(gethugepagesizes, 1, 3, expected_sizes); | EXPECT_SIZES(gethugepagesizes, 1, fakes_no, expected_sizes); | |||
EXPECT_SIZES(gethugepagesizes, 2, 3, expected_sizes); | EXPECT_SIZES(gethugepagesizes, 2, fakes_no, expected_sizes); | |||
EXPECT_SIZES(gethugepagesizes, 3, 3, expected_sizes); | EXPECT_SIZES(gethugepagesizes, 3, fakes_no, expected_sizes); | |||
EXPECT_SIZES(gethugepagesizes, 4, 3, expected_sizes); | EXPECT_SIZES(gethugepagesizes, 4, fakes_no, expected_sizes); | |||
INIT_LIST(expected_sizes, | memcpy(expected_sizes, fake_sizes, sizeof(fake_sizes)); | |||
base_size, HPAGE_KB * 1024, 1024 * 1024, 64 * 1024); | expected_sizes[fakes_no] = base_size; | |||
EXPECT_SIZES(getpagesizes, MAX, 4, expected_sizes); | EXPECT_SIZES(getpagesizes, MAX, fakes_no + 1, expected_sizes); | |||
EXPECT_SIZES(getpagesizes, 1, 4, expected_sizes); | EXPECT_SIZES(getpagesizes, 1, fakes_no + 1, expected_sizes); | |||
EXPECT_SIZES(getpagesizes, 2, 4, expected_sizes); | EXPECT_SIZES(getpagesizes, 2, fakes_no + 1, expected_sizes); | |||
EXPECT_SIZES(getpagesizes, 3, 4, expected_sizes); | EXPECT_SIZES(getpagesizes, 3, fakes_no + 1, expected_sizes); | |||
EXPECT_SIZES(getpagesizes, 4, 4, expected_sizes); | EXPECT_SIZES(getpagesizes, 4, fakes_no + 1, expected_sizes); | |||
EXPECT_SIZES(getpagesizes, 5, 4, expected_sizes); | EXPECT_SIZES(getpagesizes, 5, fakes_no + 1, expected_sizes); | |||
/* ... we can check how many sizes are supported. */ | /* ... we can check how many sizes are supported. */ | |||
if (gethugepagesizes(NULL, 0) != 3) | if (gethugepagesizes(NULL, 0) != fakes_no) | |||
FAIL("Unable to check the number of supported sizes"); | FAIL("Unable to check the number of supported sizes"); | |||
if (getpagesizes(NULL, 0) != 4) | if (getpagesizes(NULL, 0) != fakes_no + 1) | |||
FAIL("Unable to check the number of supported sizes"); | FAIL("Unable to check the number of supported sizes"); | |||
PASS(); | PASS(); | |||
} | } | |||
End of changes. 6 change blocks. | ||||
19 lines changed or deleted | 27 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |