dprintf3("%s()::%d\n", __func__, __LINE__);
 
        /*
+        * On x86:
         * There are 16 pkeys supported in hardware.  Three are
         * allocated by the time we get here:
         *   1. The default key (0)
         *   3. One allocated by the test code and passed in via
         *      'pkey' to this function.
         * Ensure that we can allocate at least another 13 (16-3).
+        *
+        * On powerpc:
+        * There are either 5, 28, 29 or 32 pkeys supported in
+        * hardware depending on the page size (4K or 64K) and
+        * platform (powernv or powervm). Four are allocated by
+        * the time we get here. These include pkey-0, pkey-1,
+        * exec-only pkey and the one allocated by the test code.
+        * Ensure that we can allocate the remaining.
         */
-       pkey_assert(i >= NR_PKEYS-3);
+       pkey_assert(i >= (NR_PKEYS - get_arch_reserved_keys() - 1));
 
        for (i = 0; i < nr_allocated_pkeys; i++) {
                err = sys_pkey_free(allocated_pkeys[i]);