forked from Minki/linux
s390/appldata_mem: do not use static data
Using static data for fields which are accessed by HW will fail if the driver is build as a module (since this would be vmalloc'ed memory). This Bug was revealed via "s390: remove virt_to_phys implementation" - the old virt_to_phys implementation would have translated the address but it was not guaranteed that the memory was contiguous. Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Reviewed-by: Gerald Schaefer <gerald.schaefer@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
739737efb5
commit
a94f0fb1a2
@ -32,7 +32,7 @@
|
||||
* book:
|
||||
* http://oss.software.ibm.com/developerworks/opensource/linux390/index.shtml
|
||||
*/
|
||||
static struct appldata_mem_data {
|
||||
struct appldata_mem_data {
|
||||
u64 timestamp;
|
||||
u32 sync_count_1; /* after VM collected the record data, */
|
||||
u32 sync_count_2; /* sync_count_1 and sync_count_2 should be the
|
||||
@ -63,7 +63,7 @@ static struct appldata_mem_data {
|
||||
u64 pgmajfault; /* page faults (major only) */
|
||||
// <-- New in 2.6
|
||||
|
||||
} __attribute__((packed)) appldata_mem_data;
|
||||
} __packed;
|
||||
|
||||
|
||||
/*
|
||||
@ -118,7 +118,6 @@ static struct appldata_ops ops = {
|
||||
.record_nr = APPLDATA_RECORD_MEM_ID,
|
||||
.size = sizeof(struct appldata_mem_data),
|
||||
.callback = &appldata_get_mem_data,
|
||||
.data = &appldata_mem_data,
|
||||
.owner = THIS_MODULE,
|
||||
.mod_lvl = {0xF0, 0xF0}, /* EBCDIC "00" */
|
||||
};
|
||||
@ -131,7 +130,17 @@ static struct appldata_ops ops = {
|
||||
*/
|
||||
static int __init appldata_mem_init(void)
|
||||
{
|
||||
return appldata_register_ops(&ops);
|
||||
int ret;
|
||||
|
||||
ops.data = kzalloc(sizeof(struct appldata_mem_data), GFP_KERNEL);
|
||||
if (!ops.data)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = appldata_register_ops(&ops);
|
||||
if (ret)
|
||||
kfree(ops.data);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -142,6 +151,7 @@ static int __init appldata_mem_init(void)
|
||||
static void __exit appldata_mem_exit(void)
|
||||
{
|
||||
appldata_unregister_ops(&ops);
|
||||
kfree(ops.data);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user