mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 2.6.19-rc5-git2] EFI: calling efi_get_time during suspend
@ 2006-11-13  9:43 Myaskouvskey, Artiom
  2006-11-13  9:51 ` Arjan van de Ven
  2006-12-11  4:20 ` Randy Dunlap
  0 siblings, 2 replies; 4+ messages in thread
From: Myaskouvskey, Artiom @ 2006-11-13  9:43 UTC (permalink / raw)
  To: davej, hpa; +Cc: linux-kernel, Satt, Shai

From: Artiom Myaskouvskey <artiom.myaskouvskey@intel.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@intel.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);
 

^ permalink raw reply	[flat|nested] 4+ messages in thread
* [PATCH 2.6.19-rc5-git2] EFI: calling efi_get_time during suspend
@ 2006-11-13 11:07 Myaskouvskey, Artiom
  0 siblings, 0 replies; 4+ messages in thread
From: Myaskouvskey, Artiom @ 2006-11-13 11:07 UTC (permalink / raw)
  To: davej@codemonkey.org.uk, hpa@zytor.com
  Cc: linux-kernel@vger.kernel.org, Satt, Shai

From: Artiom Myaskouvskey <artiom.myaskouvskey@intel.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@intel.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);
 

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2006-12-11  4:19 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-11-13  9:43 [PATCH 2.6.19-rc5-git2] EFI: calling efi_get_time during suspend Myaskouvskey, Artiom
2006-11-13  9:51 ` Arjan van de Ven
2006-12-11  4:20 ` Randy Dunlap
2006-11-13 11:07 Myaskouvskey, Artiom

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®