projects
/
linux-2.6-microblaze.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
s390/kexec_file: Load new kernel to absolute 0
[linux-2.6-microblaze.git]
/
arch
/
s390
/
kernel
/
machine_kexec_file.c
diff --git
a/arch/s390/kernel/machine_kexec_file.c
b/arch/s390/kernel/machine_kexec_file.c
index
08409d6
..
0e2a5a7
100644
(file)
--- 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,
};
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;
{
u64 entry, type;
int ret;
@@
-76,7
+77,7
@@
static int kexec_file_add_purgatory(struct kimage *image,
if (ret)
return ret;
if (ret)
return ret;
- ret = kexec_file_update_purgatory(image);
+ ret = kexec_file_update_purgatory(image
, data
);
return ret;
}
return ret;
}
@@
-136,6
+137,13
@@
void *kexec_file_add_components(struct kimage *image,
if (ret)
return ERR_PTR(ret);
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;
}
return NULL;
}