All of lore.kernel.org
 help / color / mirror / Atom feed
* How can I submit patch for bug #42944 ?
@ 2014-10-10 16:44 Rigoberto Corujo
  2014-10-10 21:23 ` Colin Watson
  0 siblings, 1 reply; 11+ messages in thread
From: Rigoberto Corujo @ 2014-10-10 16:44 UTC (permalink / raw)
  To: The Development of GNU GRUB

[-- Attachment #1: Type: text/plain, Size: 186 bytes --]

Hi,
I attached a patch to bug #42944 and would like to know how I would go about getting it committed to the source tree?
https://savannah.gnu.org/bugs/?42944
Thank you.
Rigoberto Corujo

[-- Attachment #2: Type: text/html, Size: 1039 bytes --]

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

* Re: How can I submit patch for bug #42944 ?
  2014-10-10 16:44 How can I submit patch for bug #42944 ? Rigoberto Corujo
@ 2014-10-10 21:23 ` Colin Watson
  2014-10-11  7:41   ` Michael Zimmermann
  2014-10-11  8:44   ` Vladimir 'φ-coder/phcoder' Serbinenko
  0 siblings, 2 replies; 11+ messages in thread
From: Colin Watson @ 2014-10-10 21:23 UTC (permalink / raw)
  To: The development of GNU GRUB

On Fri, Oct 10, 2014 at 04:44:39PM +0000, Rigoberto Corujo wrote:
> I attached a patch to bug #42944 and would like to know how I would go about getting it committed to the source tree?
> https://savannah.gnu.org/bugs/?42944

I'd suggest attaching the patch to a mail here (not encased in a zip
file).  It's usually easier to get public review that way.

-- 
Colin Watson                                       [cjwatson@ubuntu.com]


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

* Re: How can I submit patch for bug #42944 ?
  2014-10-10 21:23 ` Colin Watson
@ 2014-10-11  7:41   ` Michael Zimmermann
  2014-10-11  8:47     ` Vladimir 'φ-coder/phcoder' Serbinenko
  2014-10-11  8:44   ` Vladimir 'φ-coder/phcoder' Serbinenko
  1 sibling, 1 reply; 11+ messages in thread
From: Michael Zimmermann @ 2014-10-11  7:41 UTC (permalink / raw)
  To: The development of GNU GRUB

[-- Attachment #1: Type: text/plain, Size: 795 bytes --]

@Colin I dunno if it's worth it for GRUB but did u ever think about a
gerrit instance?
It simplifies review a lot.

On Fri, Oct 10, 2014 at 11:23 PM, Colin Watson <cjwatson@ubuntu.com> wrote:

> On Fri, Oct 10, 2014 at 04:44:39PM +0000, Rigoberto Corujo wrote:
> > I attached a patch to bug #42944 and would like to know how I would go
> about getting it committed to the source tree?
> > https://savannah.gnu.org/bugs/?42944
>
> I'd suggest attaching the patch to a mail here (not encased in a zip
> file).  It's usually easier to get public review that way.
>
> --
> Colin Watson                                       [cjwatson@ubuntu.com]
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
>

[-- Attachment #2: Type: text/html, Size: 1486 bytes --]

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

* Re: How can I submit patch for bug #42944 ?
  2014-10-10 21:23 ` Colin Watson
  2014-10-11  7:41   ` Michael Zimmermann
@ 2014-10-11  8:44   ` Vladimir 'φ-coder/phcoder' Serbinenko
  2014-10-11  8:58     ` Andrei Borzenkov
  1 sibling, 1 reply; 11+ messages in thread
From: Vladimir 'φ-coder/phcoder' Serbinenko @ 2014-10-11  8:44 UTC (permalink / raw)
  To: The development of GNU GRUB


[-- Attachment #1.1: Type: text/plain, Size: 550 bytes --]

On 10.10.2014 23:23, Colin Watson wrote:
> On Fri, Oct 10, 2014 at 04:44:39PM +0000, Rigoberto Corujo wrote:
>> I attached a patch to bug #42944 and would like to know how I would go about getting it committed to the source tree?
>> https://savannah.gnu.org/bugs/?42944
> 
> I'd suggest attaching the patch to a mail here (not encased in a zip
> file).  It's usually easier to get public review that way.
> 
I don't like to use EFI timers if we can avoid them, they've been known
to hang. Attached is a patch to use pmtimer for calibration

[-- Attachment #1.2: pmtimer_tsc.diff --]
[-- Type: application/x-patch, Size: 22608 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 213 bytes --]

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

* Re: How can I submit patch for bug #42944 ?
  2014-10-11  7:41   ` Michael Zimmermann
@ 2014-10-11  8:47     ` Vladimir 'φ-coder/phcoder' Serbinenko
  0 siblings, 0 replies; 11+ messages in thread
From: Vladimir 'φ-coder/phcoder' Serbinenko @ 2014-10-11  8:47 UTC (permalink / raw)
  To: The development of GNU GRUB

[-- Attachment #1: Type: text/plain, Size: 1332 bytes --]

On 11.10.2014 09:41, Michael Zimmermann wrote:
> @Colin I dunno if it's worth it for GRUB but did u ever think about a
> gerrit instance?
> It simplifies review a lot.
> 
It doesn't. It only simplifies approval. I'd be opposed to gerrit unless
there is a way to forbid non-admins to edit other people patches.
> On Fri, Oct 10, 2014 at 11:23 PM, Colin Watson <cjwatson@ubuntu.com
> <mailto:cjwatson@ubuntu.com>> wrote:
> 
>     On Fri, Oct 10, 2014 at 04:44:39PM +0000, Rigoberto Corujo wrote:
>     > I attached a patch to bug #42944 and would like to know how I would go about getting it committed to the source tree?
>     > https://savannah.gnu.org/bugs/?42944
> 
>     I'd suggest attaching the patch to a mail here (not encased in a zip
>     file).  It's usually easier to get public review that way.
> 
>     --
>     Colin Watson                                     
>      [cjwatson@ubuntu.com <mailto:cjwatson@ubuntu.com>]
> 
>     _______________________________________________
>     Grub-devel mailing list
>     Grub-devel@gnu.org <mailto:Grub-devel@gnu.org>
>     https://lists.gnu.org/mailman/listinfo/grub-devel
> 
> 
> 
> 
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
> 



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 213 bytes --]

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

* Re: How can I submit patch for bug #42944 ?
  2014-10-11  8:44   ` Vladimir 'φ-coder/phcoder' Serbinenko
@ 2014-10-11  8:58     ` Andrei Borzenkov
  2014-10-12 16:24       ` Andrei Borzenkov
  0 siblings, 1 reply; 11+ messages in thread
From: Andrei Borzenkov @ 2014-10-11  8:58 UTC (permalink / raw)
  To: The development of GNU GRUB; +Cc: phcoder

[-- Attachment #1: Type: text/plain, Size: 749 bytes --]

В Sat, 11 Oct 2014 10:44:20 +0200
Vladimir 'φ-coder/phcoder' Serbinenko <phcoder@gmail.com> пишет:

> On 10.10.2014 23:23, Colin Watson wrote:
> > On Fri, Oct 10, 2014 at 04:44:39PM +0000, Rigoberto Corujo wrote:
> >> I attached a patch to bug #42944 and would like to know how I would go about getting it committed to the source tree?
> >> https://savannah.gnu.org/bugs/?42944
> > 
> > I'd suggest attaching the patch to a mail here (not encased in a zip
> > file).  It's usually easier to get public review that way.
> > 
> I don't like to use EFI timers if we can avoid them, they've been known
> to hang. Attached is a patch to use pmtimer for calibration

What about systems without ACPI? Does it explicitly exclude them?

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

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

* Re: How can I submit patch for bug #42944 ?
  2014-10-11  8:58     ` Andrei Borzenkov
@ 2014-10-12 16:24       ` Andrei Borzenkov
  2014-10-13 16:35         ` Rigoberto Corujo
  0 siblings, 1 reply; 11+ messages in thread
From: Andrei Borzenkov @ 2014-10-12 16:24 UTC (permalink / raw)
  To: Andrei Borzenkov; +Cc: The development of GNU GRUB, phcoder


[-- Attachment #1.1: Type: text/plain, Size: 1580 bytes --]

В Sat, 11 Oct 2014 12:58:29 +0400
Andrei Borzenkov <arvidjaar@gmail.com> пишет:

> В Sat, 11 Oct 2014 10:44:20 +0200
> Vladimir 'φ-coder/phcoder' Serbinenko <phcoder@gmail.com> пишет:
> 
> > On 10.10.2014 23:23, Colin Watson wrote:
> > > On Fri, Oct 10, 2014 at 04:44:39PM +0000, Rigoberto Corujo wrote:
> > >> I attached a patch to bug #42944 and would like to know how I would go about getting it committed to the source tree?
> > >> https://savannah.gnu.org/bugs/?42944
> > > 
> > > I'd suggest attaching the patch to a mail here (not encased in a zip
> > > file).  It's usually easier to get public review that way.
> > > 
> > I don't like to use EFI timers if we can avoid them, they've been known
> > to hang. Attached is a patch to use pmtimer for calibration
> 
> What about systems without ACPI? Does it explicitly exclude them?

OK, I stay corrected. Still, this patch adds over 1K to kernel on
i386-pc and about 0.5K to common core.img with ext2:

-rw-r--r-- 1 bor bor 26848 Oct 12 20:09 /tmp/core.img-pmtimer
-rw-r--r-- 1 bor bor 26320 Oct 12 18:50 /tmp/core.img-vanilla
-rwxr-xr-x 1 bor bor 29224 Oct 12 20:08 /tmp/kernel.img-pmtimer
-rwxr-xr-x 1 bor bor 28060 Oct 12 10:12 /tmp/kernel.img-vanilla

I think it's too much for something that so far is needed only on very
specific platform. May be we could restrict it to EFI only where size
does not matter that much?

Attached rebased patch (I briefly checked and it still boots on i386-pc
and apparently correctly handles timeouts, but I cannot check other
platforms).

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: pmtimer_tsc_master.diff --]
[-- Type: text/x-patch, Size: 26577 bytes --]

From: Andrei Borzenkov <arvidjaar@gmail.com>
Subject: [PATCH] e/pmtimer

<patch description>

---
 grub-core/Makefile.am             |   6 ++
 grub-core/Makefile.core.def       |  13 +++--
 grub-core/commands/acpi.c         |  12 ----
 grub-core/commands/acpihalt.c     |  66 ++++++---------------
 grub-core/commands/efi/acpi.c     |  59 -------------------
 grub-core/commands/i386/pc/acpi.c |  81 --------------------------
 grub-core/kern/acpi.c             | 119 ++++++++++++++++++++++++++++++++++++++
 grub-core/kern/efi/acpi.c         |  59 +++++++++++++++++++
 grub-core/kern/i386/pc/acpi.c     |  81 ++++++++++++++++++++++++++
 grub-core/kern/i386/tsc.c         |  43 +++++++++++++-
 include/grub/acpi.h               |  31 ++++++++--
 11 files changed, 361 insertions(+), 209 deletions(-)

diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am
index 5c087c8..da18dc5 100644
--- a/grub-core/Makefile.am
+++ b/grub-core/Makefile.am
@@ -93,6 +93,7 @@ KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
 KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/pxe.h
 KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/int.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
 endif
 
 if COND_i386_efi
@@ -100,6 +101,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
 endif
 
 if COND_i386_coreboot
@@ -110,10 +112,12 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
 endif
 
 if COND_i386_multiboot
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
 endif
 
 if COND_i386_qemu
@@ -152,11 +156,13 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
 endif
 
 if COND_ia64_efi
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
 endif
 
 if COND_mips
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
index 42443bc..27ee48a 100644
--- a/grub-core/Makefile.core.def
+++ b/grub-core/Makefile.core.def
@@ -173,9 +173,18 @@ kernel = {
   efi = kern/efi/init.c;
   efi = kern/efi/mm.c;
   efi = term/efi/console.c;
+  efi = kern/efi/acpi.c;
 
   x86 = kern/i386/tsc.c;
 
+  efi = kern/acpi.c;
+  i386_coreboot = kern/acpi.c;
+  i386_multiboot = kern/acpi.c;
+  i386_pc = kern/acpi.c;
+  i386_pc = kern/i386/pc/acpi.c;
+  i386_coreboot = kern/i386/pc/acpi.c;
+  i386_multiboot = kern/i386/pc/acpi.c;
+
   i386_efi = kern/i386/efi/init.c;
   i386_efi = bus/pci.c;
 
@@ -683,10 +692,6 @@ module = {
   name = acpi;
 
   common = commands/acpi.c;
-  efi = commands/efi/acpi.c;
-  i386_pc = commands/i386/pc/acpi.c;
-  i386_coreboot = commands/i386/pc/acpi.c;
-  i386_multiboot = commands/i386/pc/acpi.c;
 
   enable = efi;
   enable = i386_pc;
diff --git a/grub-core/commands/acpi.c b/grub-core/commands/acpi.c
index 97c2cf2..2aaa202 100644
--- a/grub-core/commands/acpi.c
+++ b/grub-core/commands/acpi.c
@@ -61,18 +61,6 @@ static const struct grub_arg_option options[] = {
   {0, 0, 0, 0, 0, 0}
 };
 
-/* Simple checksum by summing all bytes. Used by ACPI and SMBIOS. */
-grub_uint8_t
-grub_byte_checksum (void *base, grub_size_t size)
-{
-  grub_uint8_t *ptr;
-  grub_uint8_t ret = 0;
-  for (ptr = (grub_uint8_t *) base; ptr < ((grub_uint8_t *) base) + size;
-       ptr++)
-    ret += *ptr;
-  return ret;
-}
-
 /* rev1 is 1 if ACPIv1 is to be generated, 0 otherwise.
    rev2 contains the revision of ACPIv2+ to generate or 0 if none. */
 static int rev1, rev2;
diff --git a/grub-core/commands/acpihalt.c b/grub-core/commands/acpihalt.c
index da68b5b..576e2bb 100644
--- a/grub-core/commands/acpihalt.c
+++ b/grub-core/commands/acpihalt.c
@@ -385,63 +385,35 @@ main (int argc, char **argv)
 void
 grub_acpi_halt (void)
 {
-  struct grub_acpi_rsdp_v20 *rsdp2;
-  struct grub_acpi_rsdp_v10 *rsdp1;
-  struct grub_acpi_table_header *rsdt;
-  grub_uint32_t *entry_ptr;
-  grub_uint32_t port = 0;
+  struct grub_acpi_fadt *fadt;
+  grub_uint32_t port;
+  struct grub_acpi_table_header *dsdt;
   int sleep_type = -1;
 
-  rsdp2 = grub_acpi_get_rsdpv2 ();
-  if (rsdp2)
-    rsdp1 = &(rsdp2->rsdpv1);
-  else
-    rsdp1 = grub_acpi_get_rsdpv1 ();
-  grub_dprintf ("acpi", "rsdp1=%p\n", rsdp1);
-  if (!rsdp1)
+  fadt = grub_acpi_find_fadt ();
+  if (!fadt)
     return;
 
-  rsdt = (struct grub_acpi_table_header *) (grub_addr_t) rsdp1->rsdt_addr;
-  for (entry_ptr = (grub_uint32_t *) (rsdt + 1);
-       entry_ptr < (grub_uint32_t *) (((grub_uint8_t *) rsdt)
-				      + rsdt->length);
-       entry_ptr++)
-    {
-      if (grub_memcmp ((void *) (grub_addr_t) *entry_ptr, "FACP", 4) == 0)
-	{
-	  struct grub_acpi_fadt *fadt
-	    = ((struct grub_acpi_fadt *) (grub_addr_t) *entry_ptr);
-	  struct grub_acpi_table_header *dsdt
-	    = (struct grub_acpi_table_header *) (grub_addr_t) fadt->dsdt_addr;
-	  grub_uint8_t *buf = (grub_uint8_t *) dsdt;
+  dsdt = (struct grub_acpi_table_header *) (grub_addr_t) fadt->dsdt_addr;
+  port = fadt->pm1a;
 
-	  port = fadt->pm1a;
+  grub_dprintf ("acpi", "PM1a port=%x\n", port);
 
-	  grub_dprintf ("acpi", "PM1a port=%x\n", port);
+  if (grub_memcmp (dsdt->signature, "DSDT",
+                  sizeof (dsdt->signature)) != 0)
+    return;
 
-	  if (grub_memcmp (dsdt->signature, "DSDT",
-			   sizeof (dsdt->signature)) == 0
-	      && sleep_type < 0)
-	    sleep_type = get_sleep_type (buf, NULL, buf + dsdt->length,
-					 NULL, 0);
-	}
-      else if (grub_memcmp ((void *) (grub_addr_t) *entry_ptr, "SSDT", 4) == 0
-	       && sleep_type < 0)
-	{
-	  struct grub_acpi_table_header *ssdt
-	    = (struct grub_acpi_table_header *) (grub_addr_t) *entry_ptr;
-	  grub_uint8_t *buf = (grub_uint8_t *) ssdt;
+  sleep_type = get_sleep_type ((grub_uint8_t *) dsdt, 0,
+                              (grub_uint8_t *) dsdt + dsdt->length, 0, 0);
 
-	  grub_dprintf ("acpi", "SSDT = %p\n", ssdt);
+  if (sleep_type < 0 || sleep_type >= 8)
+    return;
 
-	  sleep_type = get_sleep_type (buf, NULL, buf + ssdt->length, NULL, 0);
-	}
-    }
+  grub_dprintf ("acpi", "SLP_TYP = %d, port = 0x%x\n",
+               sleep_type, port);
 
-  grub_dprintf ("acpi", "SLP_TYP = %d, port = 0x%x\n", sleep_type, port);
-  if (port && sleep_type >= 0 && sleep_type < 8)
-    grub_outw (GRUB_ACPI_SLP_EN | (sleep_type << GRUB_ACPI_SLP_TYP_OFFSET),
-	       port & 0xffff);
+  grub_outw (GRUB_ACPI_SLP_EN
+            | (sleep_type << GRUB_ACPI_SLP_TYP_OFFSET), port & 0xffff);
 
   grub_millisleep (1500);
 
diff --git a/grub-core/commands/efi/acpi.c b/grub-core/commands/efi/acpi.c
deleted file mode 100644
index 74f8cd1..0000000
--- a/grub-core/commands/efi/acpi.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* acpi.c - get acpi tables. */
-/*
- *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2009  Free Software Foundation, Inc.
- *
- *  GRUB is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  GRUB is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <grub/acpi.h>
-#include <grub/misc.h>
-#include <grub/efi/efi.h>
-#include <grub/efi/api.h>
-
-struct grub_acpi_rsdp_v10 *
-grub_machine_acpi_get_rsdpv1 (void)
-{
-  unsigned i;
-  static grub_efi_packed_guid_t acpi_guid = GRUB_EFI_ACPI_TABLE_GUID;
-
-  for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
-    {
-      grub_efi_packed_guid_t *guid =
-	&grub_efi_system_table->configuration_table[i].vendor_guid;
-
-      if (! grub_memcmp (guid, &acpi_guid, sizeof (grub_efi_packed_guid_t)))
-	return (struct grub_acpi_rsdp_v10 *)
-	  grub_efi_system_table->configuration_table[i].vendor_table;
-    }
-  return 0;
-}
-
-struct grub_acpi_rsdp_v20 *
-grub_machine_acpi_get_rsdpv2 (void)
-{
-  unsigned i;
-  static grub_efi_packed_guid_t acpi20_guid = GRUB_EFI_ACPI_20_TABLE_GUID;
-
-  for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
-    {
-      grub_efi_packed_guid_t *guid =
-	&grub_efi_system_table->configuration_table[i].vendor_guid;
-
-      if (! grub_memcmp (guid, &acpi20_guid, sizeof (grub_efi_packed_guid_t)))
-	return (struct grub_acpi_rsdp_v20 *)
-	  grub_efi_system_table->configuration_table[i].vendor_table;
-    }
-  return 0;
-}
diff --git a/grub-core/commands/i386/pc/acpi.c b/grub-core/commands/i386/pc/acpi.c
deleted file mode 100644
index d415d23..0000000
--- a/grub-core/commands/i386/pc/acpi.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* acpi.c - get acpi tables. */
-/*
- *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2009  Free Software Foundation, Inc.
- *
- *  GRUB is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  GRUB is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <grub/acpi.h>
-#include <grub/misc.h>
-
-struct grub_acpi_rsdp_v10 *
-grub_machine_acpi_get_rsdpv1 (void)
-{
-  int ebda_len;
-  grub_uint8_t *ebda, *ptr;
-
-  grub_dprintf ("acpi", "Looking for RSDP. Scanning EBDA\n");
-  ebda = (grub_uint8_t *) ((* ((grub_uint16_t *) 0x40e)) << 4);
-  ebda_len = * (grub_uint16_t *) ebda;
-  if (! ebda_len)
-    return 0;
-  for (ptr = ebda; ptr < ebda + 0x400; ptr += 16)
-    if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0
-	&& grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0
-	&& ((struct grub_acpi_rsdp_v10 *) ptr)->revision == 0)
-      return (struct grub_acpi_rsdp_v10 *) ptr;
-
-  grub_dprintf ("acpi", "Looking for RSDP. Scanning BIOS\n");
-  for (ptr = (grub_uint8_t *) 0xe0000; ptr < (grub_uint8_t *) 0x100000;
-       ptr += 16)
-    if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0
-	&& grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0
-	&& ((struct grub_acpi_rsdp_v10 *) ptr)->revision == 0)
-      return (struct grub_acpi_rsdp_v10 *) ptr;
-  return 0;
-}
-
-struct grub_acpi_rsdp_v20 *
-grub_machine_acpi_get_rsdpv2 (void)
-{
-  int ebda_len;
-  grub_uint8_t *ebda, *ptr;
-
-  grub_dprintf ("acpi", "Looking for RSDP. Scanning EBDA\n");
-  ebda = (grub_uint8_t *) ((* ((grub_uint16_t *) 0x40e)) << 4);
-  ebda_len = * (grub_uint16_t *) ebda;
-  if (! ebda_len)
-    return 0;
-  for (ptr = ebda; ptr < ebda + 0x400; ptr += 16)
-    if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0
-	&& grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0
-	&& ((struct grub_acpi_rsdp_v10 *) ptr)->revision != 0
-	&& ((struct grub_acpi_rsdp_v20 *) ptr)->length < 1024
-	&& grub_byte_checksum (ptr, ((struct grub_acpi_rsdp_v20 *) ptr)->length)
-	== 0)
-      return (struct grub_acpi_rsdp_v20 *) ptr;
-
-  grub_dprintf ("acpi", "Looking for RSDP. Scanning BIOS\n");
-  for (ptr = (grub_uint8_t *) 0xe0000; ptr < (grub_uint8_t *) 0x100000;
-       ptr += 16)
-    if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0
-	&& grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0
-	&& ((struct grub_acpi_rsdp_v10 *) ptr)->revision != 0
-	&& ((struct grub_acpi_rsdp_v20 *) ptr)->length < 1024
-	&& grub_byte_checksum (ptr, ((struct grub_acpi_rsdp_v20 *) ptr)->length)
-	== 0)
-      return (struct grub_acpi_rsdp_v20 *) ptr;
-  return 0;
-}
diff --git a/grub-core/kern/acpi.c b/grub-core/kern/acpi.c
new file mode 100644
index 0000000..5292597
--- /dev/null
+++ b/grub-core/kern/acpi.c
@@ -0,0 +1,119 @@
+/* 
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2012  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/types.h>
+#include <grub/time.h>
+#include <grub/misc.h>
+#include <grub/acpi.h>
+
+static void *
+grub_acpi_rsdt_find_table (struct grub_acpi_table_header *rsdt, const char *sig)
+{
+  grub_size_t s;
+  grub_uint32_t *ptr;
+
+  if (!rsdt)
+    return 0;
+
+  if (grub_memcmp (rsdt->signature, "RSDT", 4) != 0)
+    return 0;
+
+  ptr = (grub_uint32_t *) (rsdt + 1);
+  s = (rsdt->length - sizeof (*rsdt)) / sizeof (grub_uint32_t);
+  for (; s; s--, ptr++)
+    {
+      struct grub_acpi_table_header *tbl;
+      tbl = (struct grub_acpi_table_header *) (grub_addr_t) *ptr;
+      if (grub_memcmp (tbl->signature, sig, 4) == 0)
+	return tbl;
+    }
+  return 0;
+}
+
+static void *
+grub_acpi_xsdt_find_table (struct grub_acpi_table_header *xsdt, const char *sig)
+{
+  grub_size_t s;
+  grub_uint64_t *ptr;
+
+  if (!xsdt)
+    return 0;
+
+  if (grub_memcmp (xsdt->signature, "XSDT", 4) != 0)
+    return 0;
+
+  ptr = (grub_uint64_t *) (xsdt + 1);
+  s = (xsdt->length - sizeof (*xsdt)) / sizeof (grub_uint32_t);
+  for (; s; s--, ptr++)
+    {
+      struct grub_acpi_table_header *tbl;
+#if GRUB_CPU_SIZEOF_VOID_P != 8
+      if (*ptr >> 32)
+	continue;
+#endif
+      tbl = (struct grub_acpi_table_header *) (grub_addr_t) *ptr;
+      if (grub_memcmp (tbl->signature, sig, 4) == 0)
+	return tbl;
+    }
+  return 0;
+}
+
+struct grub_acpi_fadt *
+grub_acpi_find_fadt (void)
+{
+  struct grub_acpi_fadt *fadt = 0;
+  struct grub_acpi_rsdp_v10 *rsdpv1;
+  struct grub_acpi_rsdp_v20 *rsdpv2;
+  rsdpv1 = grub_machine_acpi_get_rsdpv1 ();
+  if (rsdpv1)
+    fadt = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *)
+				      (grub_addr_t) rsdpv1->rsdt_addr,
+				      GRUB_ACPI_FADT_SIGNATURE);
+  if (fadt)
+    return fadt;
+  rsdpv2 = grub_machine_acpi_get_rsdpv2 ();
+  if (rsdpv2)
+    fadt = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *)
+				      (grub_addr_t) rsdpv2->rsdpv1.rsdt_addr,
+				      GRUB_ACPI_FADT_SIGNATURE);
+  if (fadt)
+    return fadt;
+  if (rsdpv2
+#if GRUB_CPU_SIZEOF_VOID_P != 8
+      && !(rsdpv2->xsdt_addr >> 32)
+#endif
+      )
+    fadt = grub_acpi_xsdt_find_table ((struct grub_acpi_table_header *)
+				      (grub_addr_t) rsdpv2->xsdt_addr,
+				      GRUB_ACPI_FADT_SIGNATURE);
+  if (fadt)
+    return fadt;
+  return 0;
+}
+
+/* Simple checksum by summing all bytes. Used by ACPI and SMBIOS. */
+grub_uint8_t
+grub_byte_checksum (void *base, grub_size_t size)
+{
+  grub_uint8_t *ptr;
+  grub_uint8_t ret = 0;
+  for (ptr = (grub_uint8_t *) base; ptr < ((grub_uint8_t *) base) + size;
+       ptr++)
+    ret += *ptr;
+  return ret;
+}
diff --git a/grub-core/kern/efi/acpi.c b/grub-core/kern/efi/acpi.c
new file mode 100644
index 0000000..74f8cd1
--- /dev/null
+++ b/grub-core/kern/efi/acpi.c
@@ -0,0 +1,59 @@
+/* acpi.c - get acpi tables. */
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2009  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/acpi.h>
+#include <grub/misc.h>
+#include <grub/efi/efi.h>
+#include <grub/efi/api.h>
+
+struct grub_acpi_rsdp_v10 *
+grub_machine_acpi_get_rsdpv1 (void)
+{
+  unsigned i;
+  static grub_efi_packed_guid_t acpi_guid = GRUB_EFI_ACPI_TABLE_GUID;
+
+  for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
+    {
+      grub_efi_packed_guid_t *guid =
+	&grub_efi_system_table->configuration_table[i].vendor_guid;
+
+      if (! grub_memcmp (guid, &acpi_guid, sizeof (grub_efi_packed_guid_t)))
+	return (struct grub_acpi_rsdp_v10 *)
+	  grub_efi_system_table->configuration_table[i].vendor_table;
+    }
+  return 0;
+}
+
+struct grub_acpi_rsdp_v20 *
+grub_machine_acpi_get_rsdpv2 (void)
+{
+  unsigned i;
+  static grub_efi_packed_guid_t acpi20_guid = GRUB_EFI_ACPI_20_TABLE_GUID;
+
+  for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
+    {
+      grub_efi_packed_guid_t *guid =
+	&grub_efi_system_table->configuration_table[i].vendor_guid;
+
+      if (! grub_memcmp (guid, &acpi20_guid, sizeof (grub_efi_packed_guid_t)))
+	return (struct grub_acpi_rsdp_v20 *)
+	  grub_efi_system_table->configuration_table[i].vendor_table;
+    }
+  return 0;
+}
diff --git a/grub-core/kern/i386/pc/acpi.c b/grub-core/kern/i386/pc/acpi.c
new file mode 100644
index 0000000..d415d23
--- /dev/null
+++ b/grub-core/kern/i386/pc/acpi.c
@@ -0,0 +1,81 @@
+/* acpi.c - get acpi tables. */
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2009  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/acpi.h>
+#include <grub/misc.h>
+
+struct grub_acpi_rsdp_v10 *
+grub_machine_acpi_get_rsdpv1 (void)
+{
+  int ebda_len;
+  grub_uint8_t *ebda, *ptr;
+
+  grub_dprintf ("acpi", "Looking for RSDP. Scanning EBDA\n");
+  ebda = (grub_uint8_t *) ((* ((grub_uint16_t *) 0x40e)) << 4);
+  ebda_len = * (grub_uint16_t *) ebda;
+  if (! ebda_len)
+    return 0;
+  for (ptr = ebda; ptr < ebda + 0x400; ptr += 16)
+    if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0
+	&& grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0
+	&& ((struct grub_acpi_rsdp_v10 *) ptr)->revision == 0)
+      return (struct grub_acpi_rsdp_v10 *) ptr;
+
+  grub_dprintf ("acpi", "Looking for RSDP. Scanning BIOS\n");
+  for (ptr = (grub_uint8_t *) 0xe0000; ptr < (grub_uint8_t *) 0x100000;
+       ptr += 16)
+    if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0
+	&& grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0
+	&& ((struct grub_acpi_rsdp_v10 *) ptr)->revision == 0)
+      return (struct grub_acpi_rsdp_v10 *) ptr;
+  return 0;
+}
+
+struct grub_acpi_rsdp_v20 *
+grub_machine_acpi_get_rsdpv2 (void)
+{
+  int ebda_len;
+  grub_uint8_t *ebda, *ptr;
+
+  grub_dprintf ("acpi", "Looking for RSDP. Scanning EBDA\n");
+  ebda = (grub_uint8_t *) ((* ((grub_uint16_t *) 0x40e)) << 4);
+  ebda_len = * (grub_uint16_t *) ebda;
+  if (! ebda_len)
+    return 0;
+  for (ptr = ebda; ptr < ebda + 0x400; ptr += 16)
+    if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0
+	&& grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0
+	&& ((struct grub_acpi_rsdp_v10 *) ptr)->revision != 0
+	&& ((struct grub_acpi_rsdp_v20 *) ptr)->length < 1024
+	&& grub_byte_checksum (ptr, ((struct grub_acpi_rsdp_v20 *) ptr)->length)
+	== 0)
+      return (struct grub_acpi_rsdp_v20 *) ptr;
+
+  grub_dprintf ("acpi", "Looking for RSDP. Scanning BIOS\n");
+  for (ptr = (grub_uint8_t *) 0xe0000; ptr < (grub_uint8_t *) 0x100000;
+       ptr += 16)
+    if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0
+	&& grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0
+	&& ((struct grub_acpi_rsdp_v10 *) ptr)->revision != 0
+	&& ((struct grub_acpi_rsdp_v20 *) ptr)->length < 1024
+	&& grub_byte_checksum (ptr, ((struct grub_acpi_rsdp_v20 *) ptr)->length)
+	== 0)
+      return (struct grub_acpi_rsdp_v20 *) ptr;
+  return 0;
+}
diff --git a/grub-core/kern/i386/tsc.c b/grub-core/kern/i386/tsc.c
index 3a4cae6..91bcb52 100644
--- a/grub-core/kern/i386/tsc.c
+++ b/grub-core/kern/i386/tsc.c
@@ -1,6 +1,6 @@
 /* kern/i386/tsc.c - x86 TSC time source implementation
  * Requires Pentium or better x86 CPU that supports the RDTSC instruction.
- * This module uses the RTC (via grub_get_rtc()) to calibrate the TSC to
+ * This module uses the PIT to calibrate the TSC to
  * real time.
  *
  *  GRUB  --  GRand Unified Bootloader
@@ -31,6 +31,7 @@
 #include <grub/i386/pit.h>
 #endif
 #include <grub/cpu/io.h>
+#include <grub/acpi.h>
 
 /* This defines the value TSC had at the epoch (that is, when we calibrated it). */
 static grub_uint64_t tsc_boot_time;
@@ -111,6 +112,43 @@ grub_tsc_get_time_ms (void)
 }
 
 #ifndef GRUB_MACHINE_XEN
+static int
+grub_pmtimer_tsc_calibrate (void)
+{
+  grub_uint32_t start;
+  grub_uint32_t last;
+  grub_uint32_t cur, end;
+  struct grub_acpi_fadt *fadt;
+  grub_port_t p;
+  grub_uint64_t end_tsc;
+
+  fadt = grub_acpi_find_fadt ();
+  if (!fadt)
+    return 0;
+  p = fadt->pmtimer;
+  if (!p)
+    return 0;
+
+  start = grub_inl (p) & 0xffffff;
+  last = start;
+  /* It's 3.579545 MHz clock. Wait 1 ms.  */
+  end = start + 3580;
+  tsc_boot_time = grub_get_tsc ();
+  while (1)
+    {
+      cur = grub_inl (p) & 0xffffff;
+      if (cur < last)
+       cur |= 0x1000000;
+      if (cur >= end)
+       {
+         end_tsc = grub_get_tsc ();
+         grub_tsc_rate = grub_divmod64 (1ULL<<32, end_tsc - tsc_boot_time, 0);
+         grub_printf ("synced on PM\n");
+         return 1;
+       }
+    }
+}
+
 /* Calibrate the TSC based on the RTC.  */
 static void
 calibrate_tsc (void)
@@ -118,6 +156,9 @@ calibrate_tsc (void)
   /* First calibrate the TSC rate (relative, not absolute time). */
   grub_uint64_t end_tsc;
 
+  if (grub_pmtimer_tsc_calibrate ())
+    return;
+
   tsc_boot_time = grub_get_tsc ();
   grub_pit_wait (0xffff);
   end_tsc = grub_get_tsc ();
diff --git a/include/grub/acpi.h b/include/grub/acpi.h
index f6e6a11..fc189c2 100644
--- a/include/grub/acpi.h
+++ b/include/grub/acpi.h
@@ -63,16 +63,34 @@ struct grub_acpi_table_header
 struct grub_acpi_fadt
 {
   struct grub_acpi_table_header hdr;
+  /* 36 */
   grub_uint32_t facs_addr;
   grub_uint32_t dsdt_addr;
+  /* 44 */
   grub_uint8_t somefields1[20];
+  /* 64 */
   grub_uint32_t pm1a;
-  grub_uint8_t somefields2[64];
+  /* 68 */
+  grub_uint8_t somefields2[8];
+  /* 76 */
+  grub_uint32_t pmtimer;
+  /* 80 */
+  grub_uint8_t somefields3[32];
+  /* 112 */
+  grub_uint32_t flags;
+  /* 116 */
+  grub_uint8_t somefields4[16];
+  /* 132 */
   grub_uint64_t facs_xaddr;
   grub_uint64_t dsdt_xaddr;
-  grub_uint8_t somefields3[96];
+  grub_uint8_t somefields5[96];
 } GRUB_PACKED;
 
+enum
+  {
+    GRUB_ACPI_FADT_FLAGS_LONG_PMTIMER = (1 << 8)
+  };
+
 #define GRUB_ACPI_MADT_SIGNATURE "APIC"
 
 struct grub_acpi_madt_entry_header
@@ -176,9 +194,9 @@ enum
 #ifndef GRUB_DSDT_TEST
 struct grub_acpi_rsdp_v10 *grub_acpi_get_rsdpv1 (void);
 struct grub_acpi_rsdp_v20 *grub_acpi_get_rsdpv2 (void);
-struct grub_acpi_rsdp_v10 *grub_machine_acpi_get_rsdpv1 (void);
-struct grub_acpi_rsdp_v20 *grub_machine_acpi_get_rsdpv2 (void);
-grub_uint8_t grub_byte_checksum (void *base, grub_size_t size);
+struct grub_acpi_rsdp_v10 *EXPORT_FUNC(grub_machine_acpi_get_rsdpv1) (void);
+struct grub_acpi_rsdp_v20 *EXPORT_FUNC(grub_machine_acpi_get_rsdpv2) (void);
+grub_uint8_t EXPORT_FUNC(grub_byte_checksum) (void *base, grub_size_t size);
 
 grub_err_t grub_acpi_create_ebda (void);
 
@@ -234,4 +252,7 @@ enum
     GRUB_ACPI_EXTOPCODE_BANK_FIELD_OP = 0x87,
   };
 
+struct grub_acpi_fadt *
+EXPORT_FUNC(grub_acpi_find_fadt) (void);
+
 #endif /* ! GRUB_ACPI_HEADER */
-- 
tg: (77063f4..) e/pmtimer (depends on: master)

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

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

* Re: How can I submit patch for bug #42944 ?
  2014-10-12 16:24       ` Andrei Borzenkov
@ 2014-10-13 16:35         ` Rigoberto Corujo
  2014-10-14  0:06           ` Rigoberto Corujo
  0 siblings, 1 reply; 11+ messages in thread
From: Rigoberto Corujo @ 2014-10-13 16:35 UTC (permalink / raw)
  To: Andrei Borzenkov, The development of GNU GRUB
  Cc: The development of GNU GRUB, phcoder


--------------------------------------------
On Sun, 10/12/14, Andrei Borzenkov <arvidjaar@gmail.com> wrote:

 Subject: Re: How can I submit patch for bug #42944 ?
 To: "Andrei Borzenkov" <arvidjaar@gmail.com>
 Cc: "The development of GNU GRUB" <grub-devel@gnu.org>, phcoder@gmail.com
 Date: Sunday, October 12, 2014, 12:24 PM
 
 В Sat, 11 Oct 2014
 12:58:29 +0400
 Andrei Borzenkov <arvidjaar@gmail.com>
 пишет:
 
 > В Sat, 11
 Oct 2014 10:44:20 +0200
 > Vladimir
 'φ-coder/phcoder' Serbinenko <phcoder@gmail.com>
 пишет:
 > 
 > >
 On 10.10.2014 23:23, Colin Watson wrote:
 > > > On Fri, Oct 10, 2014 at
 04:44:39PM +0000, Rigoberto Corujo wrote:
 > > >> I attached a patch to bug
 #42944 and would like to know how I would go about getting
 it committed to the source tree?
 > >
 >> https://savannah.gnu.org/bugs/?42944
 > > > 
 > > >
 I'd suggest attaching the patch to a mail here (not
 encased in a zip
 > > > file). 
 It's usually easier to get public review that way.
 > > > 
 > > I
 don't like to use EFI timers if we can avoid them,
 they've been known
 > > to hang.
 Attached is a patch to use pmtimer for calibration
 > 
 > What about systems
 without ACPI? Does it explicitly exclude them?
 
 OK, I stay corrected. Still,
 this patch adds over 1K to kernel on
 i386-pc
 and about 0.5K to common core.img with ext2:
 
 -rw-r--r-- 1 bor bor 26848 Oct
 12 20:09 /tmp/core.img-pmtimer
 -rw-r--r-- 1
 bor bor 26320 Oct 12 18:50 /tmp/core.img-vanilla
 -rwxr-xr-x 1 bor bor 29224 Oct 12 20:08
 /tmp/kernel.img-pmtimer
 -rwxr-xr-x 1 bor bor
 28060 Oct 12 10:12 /tmp/kernel.img-vanilla
 
 I think it's too much for
 something that so far is needed only on very
 specific platform. May be we could restrict it
 to EFI only where size
 does not matter that
 much?
 
 Attached rebased
 patch (I briefly checked and it still boots on i386-pc
 and apparently correctly handles timeouts, but
 I cannot check other
 platforms).
 -----Inline Attachment Follows-----
 
 _______________________________________________
 Grub-devel mailing list
 Grub-devel@gnu.org
 https://lists.gnu.org/mailman/listinfo/grub-devel
 

Thank you very much for the patch.  I will test it on Hyper-V Generation 2 and other physical UEFI servers and let you know the results.  Regarding the concern that was expressed about SetTimer() sometimes hanging on UEFI systems, the following two files are already using SetTimer().

./grub-core/kern/arm/efi/init.c
./grub-core/kern/ia64/efi/init.c

Is it less likely that the hang occurs on those processors?

Thank you,

Rigoberto Corujo


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

* Re: How can I submit patch for bug #42944 ?
  2014-10-13 16:35         ` Rigoberto Corujo
@ 2014-10-14  0:06           ` Rigoberto Corujo
  2014-10-17 14:29             ` Rigoberto Corujo
  0 siblings, 1 reply; 11+ messages in thread
From: Rigoberto Corujo @ 2014-10-14  0:06 UTC (permalink / raw)
  To: Andrei Borzenkov, The development of GNU GRUB
  Cc: The development of GNU GRUB, phcoder


--------------------------------------------
On Mon, 10/13/14, Rigoberto Corujo <rcorujo@yahoo.com> wrote:

 Subject: Re: How can I submit patch for bug #42944 ?
 To: "Andrei Borzenkov" <arvidjaar@gmail.com>, "The development of GNU GRUB" <grub-devel@gnu.org>
 Cc: "The development of GNU GRUB" <grub-devel@gnu.org>, phcoder@gmail.com
 Date: Monday, October 13, 2014, 12:35 PM
 
 
 --------------------------------------------
 On Sun, 10/12/14, Andrei Borzenkov <arvidjaar@gmail.com>
 wrote:
 
  Subject: Re: How
 can I submit patch for bug #42944 ?
  To:
 "Andrei Borzenkov" <arvidjaar@gmail.com>
  Cc: "The development of GNU GRUB"
 <grub-devel@gnu.org>,
 phcoder@gmail.com
  Date: Sunday, October 12, 2014, 12:24 PM
  
  В Sat, 11 Oct 2014
  12:58:29 +0400
  Andrei
 Borzenkov <arvidjaar@gmail.com>
  пишет:
  
 
 > В Sat, 11
  Oct 2014 10:44:20 +0200
  > Vladimir
 
 'φ-coder/phcoder' Serbinenko <phcoder@gmail.com>
  пишет:
  > 
  > >
  On 10.10.2014
 23:23, Colin Watson wrote:
  > > >
 On Fri, Oct 10, 2014 at
  04:44:39PM +0000,
 Rigoberto Corujo wrote:
  > > >>
 I attached a patch to bug
  #42944 and would
 like to know how I would go about getting
 
 it committed to the source tree?
  >
 >
  >> https://savannah.gnu.org/bugs/?42944
  > > > 
  > >
 >
  I'd suggest attaching the patch to
 a mail here (not
  encased in a zip
  > > > file). 
 
 It's usually easier to get public review that way.
  > > > 
  > >
 I
  don't like to use EFI timers if we
 can avoid them,
  they've been known
  > > to hang.
  Attached
 is a patch to use pmtimer for calibration
 
 > 
  > What about systems
  without ACPI? Does it explicitly exclude
 them?
  
  OK, I stay
 corrected. Still,
  this patch adds over 1K
 to kernel on
  i386-pc
  and
 about 0.5K to common core.img with ext2:
 
 
  -rw-r--r-- 1 bor bor 26848 Oct
  12 20:09 /tmp/core.img-pmtimer
  -rw-r--r-- 1
  bor bor 26320
 Oct 12 18:50 /tmp/core.img-vanilla
 
 -rwxr-xr-x 1 bor bor 29224 Oct 12 20:08
 
 /tmp/kernel.img-pmtimer
  -rwxr-xr-x 1 bor
 bor
  28060 Oct 12 10:12
 /tmp/kernel.img-vanilla
  
  I
 think it's too much for
  something that
 so far is needed only on very
  specific
 platform. May be we could restrict it
  to
 EFI only where size
  does not matter that
  much?
  
 
 Attached rebased
  patch (I briefly checked
 and it still boots on i386-pc
  and
 apparently correctly handles timeouts, but
 
 I cannot check other
  platforms).
  -----Inline Attachment Follows-----
  
 
 _______________________________________________
  Grub-devel mailing list
  Grub-devel@gnu.org
  https://lists.gnu.org/mailman/listinfo/grub-devel
  
 
 Thank you
 very much for the patch.  I will test it on Hyper-V
 Generation 2 and other physical UEFI servers and let you
 know the results.  Regarding the concern that was expressed
 about SetTimer() sometimes hanging on UEFI systems, the
 following two files are already using SetTimer().
 
 ./grub-core/kern/arm/efi/init.c
 ./grub-core/kern/ia64/efi/init.c
 
 Is it less likely that the
 hang occurs on those processors?
 
 Thank you,
 
 Rigoberto Corujo

--------------------------------------------------------------------------

I tried the pmtimer patch on Microsoft Hyper-V Generation 2, as well as a physical UEFI server, and it worked well.

Please let me know if this patch is going to be submitted.

Thank you,

Rigoberto Corujo


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

* Re: How can I submit patch for bug #42944 ?
  2014-10-14  0:06           ` Rigoberto Corujo
@ 2014-10-17 14:29             ` Rigoberto Corujo
  2014-10-21 19:41               ` Rigoberto Corujo
  0 siblings, 1 reply; 11+ messages in thread
From: Rigoberto Corujo @ 2014-10-17 14:29 UTC (permalink / raw)
  To: Andrei Borzenkov, The development of GNU GRUB
  Cc: The development of GNU GRUB, phcoder

Hi,

Any update on this?

Thanks,

Rigoberto



--------------------------------------------
On Mon, 10/13/14, Rigoberto Corujo <rcorujo@yahoo.com> wrote:

 Subject: Re: How can I submit patch for bug #42944 ?
 To: "Andrei Borzenkov" <arvidjaar@gmail.com>, "The development of GNU GRUB" <grub-devel@gnu.org>
 Cc: "The development of GNU GRUB" <grub-devel@gnu.org>, phcoder@gmail.com
 Date: Monday, October 13, 2014, 8:06 PM
 
 
 --------------------------------------------
 On Mon, 10/13/14, Rigoberto Corujo <rcorujo@yahoo.com>
 wrote:
 
  Subject: Re: How
 can I submit patch for bug #42944 ?
  To:
 "Andrei Borzenkov" <arvidjaar@gmail.com>,
 "The development of GNU GRUB" <grub-devel@gnu.org>
  Cc: "The development of GNU GRUB"
 <grub-devel@gnu.org>,
 phcoder@gmail.com
  Date: Monday, October 13, 2014, 12:35 PM
  
  
 
 --------------------------------------------
  On Sun, 10/12/14, Andrei Borzenkov <arvidjaar@gmail.com>
  wrote:
  
  
 Subject: Re: How
  can I submit patch for bug
 #42944 ?
   To:
 
 "Andrei Borzenkov" <arvidjaar@gmail.com>
   Cc: "The development of GNU
 GRUB"
  <grub-devel@gnu.org>,
  phcoder@gmail.com
   Date: Sunday, October 12, 2014, 12:24 PM
   
   В Sat, 11 Oct 2014
   12:58:29 +0400
   Andrei
  Borzenkov <arvidjaar@gmail.com>
   пишет:
   
  
  > В Sat, 11
   Oct 2014 10:44:20 +0200
  
 > Vladimir
  
 
 'φ-coder/phcoder' Serbinenko <phcoder@gmail.com>
   пишет:
   > 
   > >
   On
 10.10.2014
  23:23, Colin Watson wrote:
   > > >
  On Fri, Oct
 10, 2014 at
   04:44:39PM +0000,
  Rigoberto Corujo wrote:
  
 > > >>
  I attached a patch to
 bug
   #42944 and would
 
 like to know how I would go about getting
 
 
  it committed to the source tree?
   >
  >
   >> https://savannah.gnu.org/bugs/?42944
   > > > 
   >
 >
  >
   I'd
 suggest attaching the patch to
  a mail here
 (not
   encased in a zip
  
 > > > file). 
  
 
 It's usually easier to get public review that way.
   > > > 
   >
 >
  I
   don't like to
 use EFI timers if we
  can avoid them,
   they've been known
  
 > > to hang.
   Attached
  is a patch to use pmtimer for calibration
  
  > 
  
 > What about systems
   without ACPI?
 Does it explicitly exclude
  them?
   
   OK, I stay
  corrected. Still,
   this
 patch adds over 1K
  to kernel on
   i386-pc
   and
  about 0.5K to common core.img with ext2:
  
  
  
 -rw-r--r-- 1 bor bor 26848 Oct
   12 20:09
 /tmp/core.img-pmtimer
   -rw-r--r-- 1
   bor bor 26320
  Oct 12 18:50
 /tmp/core.img-vanilla
  
 
 -rwxr-xr-x 1 bor bor 29224 Oct 12 20:08
  
  /tmp/kernel.img-pmtimer
  
 -rwxr-xr-x 1 bor
  bor
  
 28060 Oct 12 10:12
 
 /tmp/kernel.img-vanilla
   
   I
  think it's too much
 for
   something that
  so
 far is needed only on very
   specific
  platform. May be we could restrict it
   to
  EFI only where size
   does not matter that
  
 much?
   
  
 
 Attached rebased
   patch (I briefly
 checked
  and it still boots on i386-pc
   and
  apparently correctly
 handles timeouts, but
  
  I
 cannot check other
   platforms).
   -----Inline Attachment Follows-----
   
  
 
 _______________________________________________
   Grub-devel mailing list
  
 Grub-devel@gnu.org
   https://lists.gnu.org/mailman/listinfo/grub-devel
   
  
  Thank
 you
  very much for the patch.  I will test
 it on Hyper-V
  Generation 2 and other
 physical UEFI servers and let you
  know the
 results.  Regarding the concern that was expressed
  about SetTimer() sometimes hanging on UEFI
 systems, the
  following two files are
 already using SetTimer().
  
 
 ./grub-core/kern/arm/efi/init.c
 
 ./grub-core/kern/ia64/efi/init.c
  
  Is it less likely that the
 
 hang occurs on those processors?
  
  Thank you,
  
 
 Rigoberto Corujo
 
 --------------------------------------------------------------------------
 
 I tried the pmtimer patch on
 Microsoft Hyper-V Generation 2, as well as a physical UEFI
 server, and it worked well.
 
 Please let me know if this patch is going to be
 submitted.
 
 Thank you,
 
 Rigoberto Corujo


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

* Re: How can I submit patch for bug #42944 ?
  2014-10-17 14:29             ` Rigoberto Corujo
@ 2014-10-21 19:41               ` Rigoberto Corujo
  0 siblings, 0 replies; 11+ messages in thread
From: Rigoberto Corujo @ 2014-10-21 19:41 UTC (permalink / raw)
  To: Andrei Borzenkov, The development of GNU GRUB
  Cc: The development of GNU GRUB, phcoder

Hi,

Has a decision been made whether the GRUB2 project is going to go with my proposed patch that uses the UEFI SetTimer() function or whether the pmtimer patch will be used for the Hyper-V Generation 2 PXE boot issue?

Thank you,

Rigoberto


--------------------------------------------
On Fri, 10/17/14, Rigoberto Corujo <rcorujo@yahoo.com> wrote:

 Subject: Re: How can I submit patch for bug #42944 ?
 To: "Andrei Borzenkov" <arvidjaar@gmail.com>, "The development of GNU GRUB" <grub-devel@gnu.org>
 Cc: "The development of GNU GRUB" <grub-devel@gnu.org>, phcoder@gmail.com
 Date: Friday, October 17, 2014, 10:29 AM
 
 Hi,
 
 Any update on this?
 
 Thanks,
 
 Rigoberto
 
 
 
 --------------------------------------------
 On Mon, 10/13/14, Rigoberto Corujo <rcorujo@yahoo.com>
 wrote:
 
  Subject: Re: How can I
 submit patch for bug #42944 ?
  To:
 "Andrei Borzenkov" <arvidjaar@gmail.com>,
 "The development of GNU GRUB" <grub-devel@gnu.org>
  Cc: "The development of GNU GRUB"
 <grub-devel@gnu.org>,
 phcoder@gmail.com
  Date: Monday, October 13, 2014, 8:06 PM
  
  
 
 --------------------------------------------
  On Mon, 10/13/14, Rigoberto Corujo <rcorujo@yahoo.com>
  wrote:
  
  
 Subject: Re: How
  can I submit patch for bug
 #42944 ?
   To:
 
 "Andrei Borzenkov" <arvidjaar@gmail.com>,
  "The development of GNU GRUB" <grub-devel@gnu.org>
   Cc: "The development of GNU
 GRUB"
  <grub-devel@gnu.org>,
  phcoder@gmail.com
   Date: Monday, October 13, 2014, 12:35 PM
   
   
  
 
 --------------------------------------------
   On Sun, 10/12/14, Andrei Borzenkov <arvidjaar@gmail.com>
   wrote:
   
 
  
  Subject: Re: How
   can
 I submit patch for bug
  #42944 ?
    To:
  
 
 "Andrei Borzenkov" <arvidjaar@gmail.com>
    Cc: "The development of GNU
  GRUB"
   <grub-devel@gnu.org>,
   phcoder@gmail.com
    Date: Sunday, October 12, 2014, 12:24 PM
    
    В Sat, 11 Oct 2014
    12:58:29 +0400
   
 Andrei
   Borzenkov <arvidjaar@gmail.com>
    пишет:
    
   
   > В Sat, 11
    Oct 2014 10:44:20 +0200
 
  
  > Vladimir
   
  
  'φ-coder/phcoder'
 Serbinenko <phcoder@gmail.com>
    пишет:
    > 
    > >
    On
  10.10.2014
   23:23, Colin
 Watson wrote:
    > > >
   On Fri, Oct
  10, 2014 at
    04:44:39PM +0000,
  
 Rigoberto Corujo wrote:
   
 
 > > >>
   I attached a patch
 to
  bug
    #42944 and
 would
  
  like to know how I
 would go about getting
  
 
 
   it committed to the source tree?
    >
   >
    >> https://savannah.gnu.org/bugs/?42944
    > > > 
    >
  >
   >
 
   I'd
  suggest attaching the patch
 to
   a mail here
  (not
    encased in a zip
   
  > > > file). 
   
  
  It's usually easier to
 get public review that way.
    > >
 > 
    >
  >
   I
    don't like to
  use EFI timers if we
   can
 avoid them,
    they've been known
   
  > > to hang.
    Attached
   is a patch to
 use pmtimer for calibration
   
   > 
   
 
 > What about systems
    without ACPI?
  Does it explicitly exclude
  
 them?
    
    OK, I stay
   corrected. Still,
   
 this
  patch adds over 1K
  
 to kernel on
    i386-pc
   
 and
   about 0.5K to common core.img with
 ext2:
   
   
   
  -rw-r--r-- 1 bor bor 26848
 Oct
    12 20:09
 
 /tmp/core.img-pmtimer
    -rw-r--r-- 1
    bor bor 26320
   Oct 12
 18:50
  /tmp/core.img-vanilla
   
  
 
 -rwxr-xr-x 1 bor bor 29224 Oct 12 20:08
  
 
   /tmp/kernel.img-pmtimer
 
  
  -rwxr-xr-x 1 bor
  
 bor
   
  28060 Oct 12
 10:12
  
 
 /tmp/kernel.img-vanilla
    
    I
   think it's too
 much
  for
    something
 that
   so
  far is needed
 only on very
    specific
  
 platform. May be we could restrict it
   
 to
   EFI only where size
 
   does not matter that
   
 
 much?
    
   
  
  Attached rebased
    patch (I briefly
 
 checked
   and it still boots on i386-pc
    and
   apparently
 correctly
  handles timeouts, but
   
   I
 
 cannot check other
    platforms).
    -----Inline Attachment Follows-----
    
   
  
 
 _______________________________________________
    Grub-devel mailing list
 
  
  Grub-devel@gnu.org
    https://lists.gnu.org/mailman/listinfo/grub-devel
    
   
  
 Thank
  you
   very much for
 the patch.  I will test
  it on Hyper-V
   Generation 2 and other
 
 physical UEFI servers and let you
   know
 the
  results.  Regarding the concern that
 was expressed
   about SetTimer() sometimes
 hanging on UEFI
  systems, the
   following two files are
 
 already using SetTimer().
   
  
 
 ./grub-core/kern/arm/efi/init.c
  
  ./grub-core/kern/ia64/efi/init.c
   
   Is it less likely that
 the
  
  hang occurs on those
 processors?
   
   Thank
 you,
   
  
 
 Rigoberto Corujo
  
 
 --------------------------------------------------------------------------
  
  I tried the pmtimer patch
 on
  Microsoft Hyper-V Generation 2, as well
 as a physical UEFI
  server, and it worked
 well.
  
  Please let me know
 if this patch is going to be
  submitted.
  
  Thank you,
 
 
  Rigoberto Corujo


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

end of thread, other threads:[~2014-10-21 19:41 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-10-10 16:44 How can I submit patch for bug #42944 ? Rigoberto Corujo
2014-10-10 21:23 ` Colin Watson
2014-10-11  7:41   ` Michael Zimmermann
2014-10-11  8:47     ` Vladimir 'φ-coder/phcoder' Serbinenko
2014-10-11  8:44   ` Vladimir 'φ-coder/phcoder' Serbinenko
2014-10-11  8:58     ` Andrei Borzenkov
2014-10-12 16:24       ` Andrei Borzenkov
2014-10-13 16:35         ` Rigoberto Corujo
2014-10-14  0:06           ` Rigoberto Corujo
2014-10-17 14:29             ` Rigoberto Corujo
2014-10-21 19:41               ` Rigoberto Corujo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.