diff options
Diffstat (limited to 'arch/s390/kernel/setup.c')
| -rw-r--r-- | arch/s390/kernel/setup.c | 21 | 
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index 1e2264b46e4c..82bc113e8c1d 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c @@ -24,6 +24,7 @@  #include <linux/stddef.h>  #include <linux/unistd.h>  #include <linux/ptrace.h> +#include <linux/random.h>  #include <linux/user.h>  #include <linux/tty.h>  #include <linux/ioport.h> @@ -61,6 +62,7 @@  #include <asm/diag.h>  #include <asm/os_info.h>  #include <asm/sclp.h> +#include <asm/sysinfo.h>  #include "entry.h"  /* @@ -501,6 +503,8 @@ static int kdump_mem_notifier(struct notifier_block *nb,  {  	struct memory_notify *arg = data; +	if (action != MEM_GOING_OFFLINE) +		return NOTIFY_OK;  	if (arg->start_pfn < PFN_DOWN(resource_size(&crashk_res)))  		return NOTIFY_BAD;  	if (arg->start_pfn > PFN_DOWN(crashk_res.end)) @@ -764,6 +768,7 @@ static void __init setup_hwcaps(void)  #endif  	get_cpu_id(&cpu_id); +	add_device_randomness(&cpu_id, sizeof(cpu_id));  	switch (cpu_id.machine) {  	case 0x9672:  #if !defined(CONFIG_64BIT) @@ -802,6 +807,19 @@ static void __init setup_hwcaps(void)  }  /* + * Add system information as device randomness + */ +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) +		add_device_randomness(&vmms, vmms->count); +	free_page((unsigned long) vmms); +} + +/*   * Setup function called from init/main.c just after the banner   * was printed.   */ @@ -899,6 +917,9 @@ void __init setup_arch(char **cmdline_p)  	/* Setup zfcpdump support */  	setup_zfcpdump(); + +	/* Add system specific data to the random pool */ +	setup_randomness();  }  #ifdef CONFIG_32BIT  |