LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* Re: - romsignature-checksum-cleanup-2.patch removed from -mm tree
       [not found] <200701102244.l0AMiWIA010198@shell0.pdx.osdl.net>
@ 2007-01-29 13:46 ` Rene Herman
  2007-01-29 13:52   ` Andi Kleen
  2007-01-29 13:46 ` [PATCH] i386: probe_roms() cleanup Rene Herman
  2007-01-29 13:46 ` [PATCH] x86_64: sync up probe_roms() with i386 Rene Herman
  2 siblings, 1 reply; 5+ messages in thread
From: Rene Herman @ 2007-01-29 13:46 UTC (permalink / raw)
  To: akpm; +Cc: ak, jeremy, rusty, zach, Linux Kernel

On 01/10/2007 11:44 PM, akpm@osdl.org wrote:

> The patch titled
>      romsignature/checksum cleanup
> has been removed from the -mm tree.  Its filename was
>      romsignature-checksum-cleanup-2.patch
> 
> This patch was dropped because x86_64 tree changes trashed it

I was (am) quite unsure why this was, given that the patch did not touch 
x86_64 at all and moreover continued to apply cleanly to mm...

Did you just mean you also wanted the x86_64 version of it? In the next 
two messages I'll resubmit the i386 version, and submit the x86_64 version.

i386 has been compiled and tested, x86_64 has been crosscompiled only, 
due to lack of hardware. It's completely the same as the i386 version 
though...

Rene.

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

* [PATCH] i386: probe_roms() cleanup
       [not found] <200701102244.l0AMiWIA010198@shell0.pdx.osdl.net>
  2007-01-29 13:46 ` - romsignature-checksum-cleanup-2.patch removed from -mm tree Rene Herman
@ 2007-01-29 13:46 ` Rene Herman
  2007-01-29 13:46 ` [PATCH] x86_64: sync up probe_roms() with i386 Rene Herman
  2 siblings, 0 replies; 5+ messages in thread
From: Rene Herman @ 2007-01-29 13:46 UTC (permalink / raw)
  To: akpm; +Cc: ak, jeremy, rusty, zach, Linux Kernel

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

Hi Andrew.

Resubmit. I once heard you say you wanted patches not against -mm but 
against mainline so this replaces "romsignature-checksum-cleanup.patch" 
in current -mm.

===
Remove the assumption that if the first page of a legacy ROM is mapped,
it'll all be mapped. This'll also stop people reading this code from
wondering if they're looking at a bug...

Signed-off-by: Rene Herman <rene.herman@gmail.com>
===

Rene.

[-- Attachment #2: i386_probe_roms_cleanup.diff --]
[-- Type: text/plain, Size: 2058 bytes --]

diff --git a/arch/i386/kernel/e820.c b/arch/i386/kernel/e820.c
index f391abc..8b8741f 100644
--- a/arch/i386/kernel/e820.c
+++ b/arch/i386/kernel/e820.c
@@ -156,29 +156,31 @@ static struct resource standard_io_resou
 	.flags	= IORESOURCE_BUSY | IORESOURCE_IO
 } };
 
-static int romsignature(const unsigned char *x)
+#define ROMSIGNATURE 0xaa55
+
+static int __init romsignature(const unsigned char *rom)
 {
+	const unsigned short * const ptr = (const unsigned short *)rom;
 	unsigned short sig;
-	int ret = 0;
-	if (probe_kernel_address((const unsigned short *)x, sig) == 0)
-		ret = (sig == 0xaa55);
-	return ret;
+	
+	return probe_kernel_address(ptr, sig) == 0 && sig == ROMSIGNATURE;
 }
 
-static int __init romchecksum(unsigned char *rom, unsigned long length)
+static int __init romchecksum(const unsigned char *rom, unsigned long length)
 {
-	unsigned char *p, sum = 0;
+	unsigned char sum, c;
 
-	for (p = rom; p < rom + length; p++)
-		sum += *p;
-	return sum == 0;
+	for (sum = 0; length && probe_kernel_address(rom++, c) == 0; length--)
+		sum += c;
+	return !length && !sum;
 }
 
 static void __init probe_roms(void)
 {
+	const unsigned char *rom;
 	unsigned long start, length, upper;
-	unsigned char *rom;
-	int	      i;
+	unsigned char c;
+	int i;
 
 	/* video rom */
 	upper = adapter_rom_resources[0].start;
@@ -189,8 +191,11 @@ static void __init probe_roms(void)
 
 		video_rom_resource.start = start;
 
+		if (probe_kernel_address(rom + 2, c) != 0)
+			continue;
+
 		/* 0 < length <= 0x7f * 512, historically */
-		length = rom[2] * 512;
+		length = c * 512;
 
 		/* if checksum okay, trust length byte */
 		if (length && romchecksum(rom, length))
@@ -224,8 +229,11 @@ static void __init probe_roms(void)
 		if (!romsignature(rom))
 			continue;
 
+		if (probe_kernel_address(rom + 2, c) != 0)
+			continue;
+
 		/* 0 < length <= 0x7f * 512, historically */
-		length = rom[2] * 512;
+		length = c * 512;
 
 		/* but accept any length that fits if checksum okay */
 		if (!length || start + length > upper || !romchecksum(rom, length))

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

* [PATCH] x86_64: sync up probe_roms() with i386
       [not found] <200701102244.l0AMiWIA010198@shell0.pdx.osdl.net>
  2007-01-29 13:46 ` - romsignature-checksum-cleanup-2.patch removed from -mm tree Rene Herman
  2007-01-29 13:46 ` [PATCH] i386: probe_roms() cleanup Rene Herman
@ 2007-01-29 13:46 ` Rene Herman
  2007-01-29 16:55   ` Rene Herman
  2 siblings, 1 reply; 5+ messages in thread
From: Rene Herman @ 2007-01-29 13:46 UTC (permalink / raw)
  To: akpm; +Cc: ak, jeremy, rusty, zach, Linux Kernel

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

Hi Andrew.

This syncs up the x86_64 probe_roms() with the i386 version as just 
submitted.

===
Sync up with i386. Specifically, be careful about touching the
legacy ROMs; in virtualized environments they may not be mapped.

Crosscompiled, but not booted due to lack of hardware.

Signed-off-by: Rene Herman <rene.herman@gmail.com>
===

Rene

[-- Attachment #2: x86_64_sync_probe_roms_with_i386.diff --]
[-- Type: text/plain, Size: 1934 bytes --]

diff --git a/arch/x86_64/kernel/setup.c b/arch/x86_64/kernel/setup.c
index af425a8..0b3d237 100644
--- a/arch/x86_64/kernel/setup.c
+++ b/arch/x86_64/kernel/setup.c
@@ -183,22 +183,31 @@ static struct resource video_ram_resourc
 	.flags = IORESOURCE_RAM,
 };
 
-#define romsignature(x) (*(unsigned short *)(x) == 0xaa55)
+#define ROMSIGNATURE 0xaa55
 
-static int __init romchecksum(unsigned char *rom, unsigned long length)
+static int __init romsignature(const unsigned char *rom)
 {
-	unsigned char *p, sum = 0;
+	const unsigned short * const ptr = (const unsigned short *)rom;
+	unsigned short sig;
 
-	for (p = rom; p < rom + length; p++)
-		sum += *p;
-	return sum == 0;
+	return probe_kernel_address(ptr, sig) == 0 && sig == ROMSIGNATURE;
+}
+
+static int __init romchecksum(const unsigned char *rom, unsigned long length)
+{
+	unsigned char sum, c;
+
+	for (sum = 0; length && probe_kernel_address(rom++, c) == 0; length--)
+		sum += c;
+	return !length && !sum;
 }
 
 static void __init probe_roms(void)
 {
+	const unsigned char *rom;
 	unsigned long start, length, upper;
-	unsigned char *rom;
-	int	      i;
+	unsigned char c;
+	int i;
 
 	/* video rom */
 	upper = adapter_rom_resources[0].start;
@@ -209,8 +218,11 @@ static void __init probe_roms(void)
 
 		video_rom_resource.start = start;
 
+		if (probe_kernel_address(rom, c) != 0)
+			continue;
+
 		/* 0 < length <= 0x7f * 512, historically */
-		length = rom[2] * 512;
+		length = c * 512;
 
 		/* if checksum okay, trust length byte */
 		if (length && romchecksum(rom, length))
@@ -245,8 +257,11 @@ static void __init probe_roms(void)
 		if (!romsignature(rom))
 			continue;
 
+		if (probe_kernel_address(rom, c) != 0)
+			continue;
+
 		/* 0 < length <= 0x7f * 512, historically */
-		length = rom[2] * 512;
+		length = c * 512;
 
 		/* but accept any length that fits if checksum okay */
 		if (!length || start + length > upper || !romchecksum(rom, length))

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

* Re: - romsignature-checksum-cleanup-2.patch removed from -mm tree
  2007-01-29 13:46 ` - romsignature-checksum-cleanup-2.patch removed from -mm tree Rene Herman
@ 2007-01-29 13:52   ` Andi Kleen
  0 siblings, 0 replies; 5+ messages in thread
From: Andi Kleen @ 2007-01-29 13:52 UTC (permalink / raw)
  To: Rene Herman; +Cc: akpm, jeremy, rusty, zach, Linux Kernel

On Monday 29 January 2007 14:46, Rene Herman wrote:
> On 01/10/2007 11:44 PM, akpm@osdl.org wrote:
> 
> > The patch titled
> >      romsignature/checksum cleanup
> > has been removed from the -mm tree.  Its filename was
> >      romsignature-checksum-cleanup-2.patch
> > 
> > This patch was dropped because x86_64 tree changes trashed it
> 
> I was (am) quite unsure why this was, given that the patch did not touch 
> x86_64 at all and moreover continued to apply cleanly to mm...

The x86_64 tree is really a x86 tree these days and contains most i386 changes.

But in general if you change i386 then changing x86_64 makes sense too.

-Andi

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

* Re: [PATCH] x86_64: sync up probe_roms() with i386
  2007-01-29 13:46 ` [PATCH] x86_64: sync up probe_roms() with i386 Rene Herman
@ 2007-01-29 16:55   ` Rene Herman
  0 siblings, 0 replies; 5+ messages in thread
From: Rene Herman @ 2007-01-29 16:55 UTC (permalink / raw)
  To: akpm; +Cc: ak, jeremy, rusty, zach, Linux Kernel, Martin Murray

On 01/29/2007 02:46 PM, Rene Herman wrote:

> This syncs up the x86_64 probe_roms() with the i386 version as just 
> submitted.
> 
> ===
> Sync up with i386. Specifically, be careful about touching the
> legacy ROMs; in virtualized environments they may not be mapped.
> 
> Crosscompiled, but not booted due to lack of hardware.
> 
> Signed-off-by: Rene Herman <rene.herman@gmail.com>
> ===

In the meantime tested by Martin Murray on x86_64 native and inside 
vmware (thanks much!) who told me I could add his sob:

Signed-off-by:  Martin Murray <murrayma@citi.umich.edu>

Rene.

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

end of thread, other threads:[~2007-01-29 16:55 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <200701102244.l0AMiWIA010198@shell0.pdx.osdl.net>
2007-01-29 13:46 ` - romsignature-checksum-cleanup-2.patch removed from -mm tree Rene Herman
2007-01-29 13:52   ` Andi Kleen
2007-01-29 13:46 ` [PATCH] i386: probe_roms() cleanup Rene Herman
2007-01-29 13:46 ` [PATCH] x86_64: sync up probe_roms() with i386 Rene Herman
2007-01-29 16:55   ` Rene Herman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).