[<prev] [next>] [day] [month] [year] [list]
Message-ID: <C1467C8B168BCF40ACEC2324C1A2B074A6A69B@hasmsx411.ger.corp.intel.com>
Date: Mon, 13 Nov 2006 13:07:32 +0200
From: "Myaskouvskey, Artiom" <artiom.myaskouvskey@...el.com>
To: "davej@...emonkey.org.uk" <'davej@...emonkey.org.uk'>,
"hpa@...or.com" <'hpa@...or.com'>
Cc: "linux-kernel@...r.kernel.org" <'linux-kernel@...r.kernel.org'>,
"Satt, Shai" <shai.satt@...el.com>
Subject: [PATCH 2.6.19-rc5-git2] EFI: calling efi_get_time during suspend
From: Artiom Myaskouvskey <artiom.myaskouvskey@...el.com>
Function efi_get_time called not only during init kernel phase but also during suspend (from get_cmos_time).
When it is called from get_cmos_time the corresponding runtime service should be called in virtual and not in physical mode.
Signed-off-by: Artiom Myaskouvskey <artiom.myaskouvskey@...el.com>
---
diff -uprN linux-2.6.19-rc5-git2.orig/include/linux/efi.h linux-2.6.19-rc5-git2/include/linux/efi.h
--- linux-2.6.19-rc5-git2.orig/include/linux/efi.h 2006-11-13 11:15:19.000000000 +0200
+++ linux-2.6.19-rc5-git2/include/linux/efi.h 2006-11-13 11:15:38.000000000 +0200
@@ -300,7 +300,7 @@ extern int efi_mem_attribute_range (unsi
extern int __init efi_uart_console_only (void);
extern void efi_initialize_iomem_resources(struct resource *code_resource,
struct resource *data_resource);
-extern unsigned long __init efi_get_time(void);
+extern unsigned long efi_get_time(void);
extern int __init efi_set_rtc_mmss(unsigned long nowtime);
extern struct efi_memory_map memmap;
diff -uprN linux-2.6.19-rc5-git2.orig/arch/i386/kernel/efi.c linux-2.6.19-rc5-git2/arch/i386/kernel/efi.c
--- linux-2.6.19-rc5-git2.orig/arch/i386/kernel/efi.c 2006-11-13 11:15:17.000000000 +0200
+++ linux-2.6.19-rc5-git2/arch/i386/kernel/efi.c 2006-11-13 11:15:38.000000000 +0200
@@ -194,17 +194,25 @@ inline int efi_set_rtc_mmss(unsigned lon
return 0;
}
/*
- * This should only be used during kernel init and before runtime
- * services have been remapped, therefore, we'll need to call in physical
- * mode. Note, this call isn't used later, so mark it __init.
+ * This is used during kernel init before runtime
+ * services have been remapped and also during suspend, therefore,
+ * we'll need to call both in physical and virtual modes.
*/
-inline unsigned long __init efi_get_time(void)
+inline unsigned long efi_get_time(void)
{
efi_status_t status;
efi_time_t eft;
efi_time_cap_t cap;
- status = phys_efi_get_time(&eft, &cap);
+ if (efi.get_time) {
+ /* if we are in virtual mode use remapped function */
+ status = efi.get_time(&eft, &cap);
+ }
+ else {
+ /* we are in physical mode */
+ status = phys_efi_get_time(&eft, &cap);
+ }
+
if (status != EFI_SUCCESS)
printk("Oops: efitime: can't read time status: 0x%lx\n",status);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists