s390/vmwatchdog: do not use static data
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Tue, 25 Jun 2013 13:34:54 +0000 (15:34 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 26 Jun 2013 19:10:29 +0000 (21:10 +0200)
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.

Fix it by putting the data on the stack.

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/char/vmwatchdog.c

index e9b72311e2549a370f1d213c9a8277e7c233186f..d5eac985976b42b5b5617f5f14c762b505a8ece0 100644 (file)
@@ -112,7 +112,8 @@ static int vmwdt_keepalive(void)
 
 static int vmwdt_disable(void)
 {
-       int ret = __diag288(wdt_cancel, 0, "", 0);
+       char cmd[] = {'\0'};
+       int ret = __diag288(wdt_cancel, 0, cmd, 0);
        WARN_ON(ret != 0);
        clear_bit(VMWDT_RUNNING, &vmwdt_is_open);
        return ret;
@@ -124,7 +125,7 @@ static int __init vmwdt_probe(void)
         * so we try initializing it with a NOP command ("BEGIN")
         * that won't cause any harm even if the following disable
         * fails for some reason */
-       static char __initdata ebc_begin[] = {
+       char ebc_begin[] = {
                194, 197, 199, 201, 213
        };
        if (__diag288(wdt_init, 15, ebc_begin, sizeof(ebc_begin)) != 0)