s390: make setup_randomness work
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Sat, 4 Feb 2017 10:40:36 +0000 (11:40 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 7 Feb 2017 06:27:10 +0000 (07:27 +0100)
Commit bcfcbb6bae64 ("s390: add system information as device
randomness") intended to add some virtual machine specific information
to the randomness pool.

Unfortunately it uses the page allocator before it is ready to use. In
result the page allocator always returns NULL and the setup_randomness
function never adds anything to the randomness pool.

To fix this use memblock_alloc and memblock_free instead.

Fixes: bcfcbb6bae64 ("s390: add system information as device randomness")
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/setup.c

index 1a3388c32a839c446f866c84bf34f7972376a94d..aaef71ff7ab756ef6972b0b2b7a3345be7388636 100644 (file)
@@ -822,10 +822,10 @@ static void __init setup_randomness(void)
 {
        struct sysinfo_3_2_2 *vmms;
 
-       vmms = (struct sysinfo_3_2_2 *) alloc_page(GFP_KERNEL);
-       if (vmms && stsi(vmms, 3, 2, 2) == 0 && vmms->count)
+       vmms = (struct sysinfo_3_2_2 *) memblock_alloc(PAGE_SIZE, PAGE_SIZE);
+       if (stsi(vmms, 3, 2, 2) == 0 && vmms->count)
                add_device_randomness(&vmms, vmms->count);
-       free_page((unsigned long) vmms);
+       memblock_free((unsigned long) vmms, PAGE_SIZE);
 }
 
 /*