diff options
Diffstat (limited to 'arch/s390/kernel/machine_kexec_file.c')
| -rw-r--r-- | arch/s390/kernel/machine_kexec_file.c | 12 | 
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/s390/kernel/machine_kexec_file.c b/arch/s390/kernel/machine_kexec_file.c index 08409d61aeca..0e2a5a7a1b7c 100644 --- a/arch/s390/kernel/machine_kexec_file.c +++ b/arch/s390/kernel/machine_kexec_file.c @@ -17,7 +17,8 @@ const struct kexec_file_ops * const kexec_file_loaders[] = {  	NULL,  }; -static int kexec_file_update_purgatory(struct kimage *image) +static int kexec_file_update_purgatory(struct kimage *image, +				       struct s390_load_data *data)  {  	u64 entry, type;  	int ret; @@ -76,7 +77,7 @@ static int kexec_file_add_purgatory(struct kimage *image,  	if (ret)  		return ret; -	ret = kexec_file_update_purgatory(image); +	ret = kexec_file_update_purgatory(image, data);  	return ret;  } @@ -136,6 +137,13 @@ void *kexec_file_add_components(struct kimage *image,  	if (ret)  		return ERR_PTR(ret); +	if (data.kernel_mem == 0) { +		unsigned long restart_psw =  0x0008000080000000UL; +		restart_psw += image->start; +		memcpy(data.kernel_buf, &restart_psw, sizeof(restart_psw)); +		image->start = 0; +	} +  	return NULL;  }  | 
