2002-02-14 15:49:22

by Steven Cole

[permalink] [raw]
Subject: [PATCH] 2.5.5-pre1 fix build error in drivers/video/vesafb.c

Hello all,

This patch is some hackery-quackery to fix a problem with drivers/video/vesafb.c.

I got the following error building 2.5.5-pre1. I also had this error with 2.5.4-preX,
but after seeing the discussions relating to bus_to_virt etc., I hoped that a
real fix would appear.

drivers/video/video.o: In function `vesafb_init':
drivers/video/video.o(.text.init+0x154b): undefined reference to `bus_to_virt_not_defined_use_pci_map'
make: *** [vmlinux] Error 1

Quoting Andrew Morton in his recent interview with kerneltrap.org,
"One hot tip: if you spot a bug which is being ignored, send a completely botched fix
to the mailing list. This causes thousands of kernel developers to rally to the cause.
Nobody knows why this happens. (I really have deliberately done this several times. It works)."

Well this bug is certainly not being ignored, but here is my completely botched fix.

Cheers,
Steven

--- linux-2.5.5-pre1/drivers/video/vesafb.c.orig Thu Feb 14 08:16:25 2002
+++ linux-2.5.5-pre1/drivers/video/vesafb.c Thu Feb 14 08:17:24 2002
@@ -550,7 +550,7 @@
ypan = pmi_setpal = 0; /* not available or some DOS TSR ... */

if (ypan || pmi_setpal) {
- pmi_base = (unsigned short*)bus_to_virt(((unsigned long)screen_info.vesapm_seg << 4) + screen_info.vesapm_off);
+ pmi_base = (unsigned short*)phys_to_virt(((unsigned long)screen_info.vesapm_seg << 4) + screen_info.vesapm_off);
pmi_start = (void*)((char*)pmi_base + pmi_base[1]);
pmi_pal = (void*)((char*)pmi_base + pmi_base[2]);
printk(KERN_INFO "vesafb: pmi: set display start = %p, set palette = %p\n",pmi_start,pmi_pal);


2002-02-14 16:40:43

by Gerd Knorr

[permalink] [raw]
Subject: Re: [PATCH] 2.5.5-pre1 fix build error in drivers/video/vesafb.c

> - pmi_base = (unsigned short*)bus_to_virt(((unsigned long)screen_info.vesapm_seg << 4) + screen_info.vesapm_off);
> + pmi_base = (unsigned short*)phys_to_virt(((unsigned long)screen_info.vesapm_seg << 4) + screen_info.vesapm_off);

Looks fine to me. While s/bus/phys/ isn't the approximate fix for many
drivers, at this place it is correct. The address is a segment:offset
pointer to a physical memory address somewhere in the VESA BIOS.

Gerd

--
Man mu? die Software wacker h?ten
weil in der Welt die Hacker w?ten

2002-02-14 17:07:06

by Steven Cole

[permalink] [raw]
Subject: Re: [PATCH] 2.5.5-pre1 fix build error in drivers/video/vesafb.c

On Thursday 14 February 2002 09:37 am, Gerd Knorr wrote:
> > - pmi_base = (unsigned short*)bus_to_virt(((unsigned
> > long)screen_info.vesapm_seg << 4) + screen_info.vesapm_off); +
> > pmi_base = (unsigned short*)phys_to_virt(((unsigned
> > long)screen_info.vesapm_seg << 4) + screen_info.vesapm_off);
>
> Looks fine to me. While s/bus/phys/ isn't the approximate fix for many
> drivers, at this place it is correct. The address is a segment:offset
> pointer to a physical memory address somewhere in the VESA BIOS.
>
> Gerd

Thanks. Do to some cut-and-paste haste, my original patch converted tabs
to spaces, so that patch won't apply. Here is a correct version for anyone
wanting to use it. Also, my net connnection was down this morning, so I failed
to see the other recent thread about this subject, [PATCH} 2.5.5-pre1 VESA fb.
Adding those correspondents to the cc list.

Steven

--- linux-2.5.5-pre1/drivers/video/vesafb.c.orig Thu Feb 14 08:16:25 2002
+++ linux-2.5.5-pre1/drivers/video/vesafb.c Thu Feb 14 08:17:24 2002
@@ -550,7 +550,7 @@
ypan = pmi_setpal = 0; /* not available or some DOS TSR ... */

if (ypan || pmi_setpal) {
- pmi_base = (unsigned short*)bus_to_virt(((unsigned long)screen_info.vesapm_seg << 4) + screen_info.vesapm_off);
+ pmi_base = (unsigned short*)phys_to_virt(((unsigned long)screen_info.vesapm_seg << 4) + screen_info.vesapm_off);
pmi_start = (void*)((char*)pmi_base + pmi_base[1]);
pmi_pal = (void*)((char*)pmi_base + pmi_base[2]);
printk(KERN_INFO "vesafb: pmi: set display start = %p, set palette = %p\n",pmi_start,pmi_pal);