Hi,
I think the resource problem is fixed.
but if I connect the 3Com 3c562 and boot the linux,
the mac address of 3c562 sometimes becomes ff:ff:ff:ff:ff:ff.
the mac address becomes normal after replugging it.
pcmcia 0.0: pcmcia: registering new device pcmcia0.0
pcmcia 0.1: pcmcia: registering new device pcmcia0.1
0.1: ttyS0 at I/O 0x3f8 (irq = 3) is a 16550A
3c589_cs 0.0: pcmcia: could not parse base and rmask0 of CIS
eth0: 3Com 3c562, io 0x300, irq 3, hw_addr ff:ff:ff:ff:ff:ff
32K FIFO split 3:5 Rx:Tx, auto xcvr
Best Regards
Komuro
Hey,
On Sun, Dec 20, 2009 at 03:11:05PM +0900, Komuro wrote:
Any chance you could bisect it further? Also, does lspci -vvv,
/proc/ioports and/or /proc/iomem change between -git7 and -git8?
Could you test this patch, please?
Best,
Dominik
From: Dominik Brodowski li...@dominikbrodowski.net
Date: Sun, 20 Dec 2009 10:04:56 +0100
Subject: [PATCH] resources: fix call to alignf() in allocate_resource()
The second parameter to alignf() in allocate_resource() must
reflect what new resource is attempted to be allocated, else
functions like pcibios_align_resource() (at least on x86) or
pcmcia_align() can't work correctly.
Commit 1e5ad9679016275d422e36b12a98b0927d76f556 broke this by
setting the new resource until we're about to return success.
To keep the resource untouched when allocate_resource() fails,
a tmp resource is introduced.
CC: Linus Torvalds torva...@linux-foundation.org
CC: Yinghai Lu yhlu.ker...@gmail.com
CC: Bjorn Helgaas bjorn.helg...@hp.com
CC: Jesse Barnes jbar...@virtuousgeek.org
Signed-off-by: Dominik Brodowski li...@dominikbrodowski.net
diff --git a/kernel/resource.c b/kernel/resource.c
index dc15686..af96c1e 100644
--- a/kernel/resource.c
+++ b/kernel/resource.c
@@ -308,37 +308,37 @@ static int find_resource(struct resource *root, struct
resource *new,
void *alignf_data)
{
struct resource *this = root-child;
- resource_size_t start, end;
+ struct resource tmp = *new;
- start = root-start;
+ tmp.start = root-start;
/*
* Skip past an allocated resource that starts at 0, since the
assignment
- * of this-start - 1 to new-end below would cause an underflow.
+ * of this-start - 1 to tmp-end below would cause an underflow.
*/
if (this this-start == 0) {
- start = this-end + 1;
+ tmp.start = this-end + 1;
this = this-sibling;
}
for(;;) {
if (this)
- end = this-start - 1;
+ tmp.end = this-start - 1;
else
- end = root-end;
- if (start min)
- start = min;
- if (end max)
- end = max;
- start = ALIGN(start, align);
+ tmp.end = root-end;
+ if (tmp.start min)
+ tmp.start = min;
+ if (tmp.end max)
+ tmp.end = max;
+ tmp.start = ALIGN(tmp.start, align);
if (alignf)
- alignf(alignf_data, new, size, align);
- if (start end end - start = size - 1) {
- new-start = start;
- new-end = start + size - 1;
+ alignf(alignf_data, tmp, size, align);
+ if (tmp.start tmp.end tmp.end - tmp.start = size - 1) {
+ new-start = tmp.start;
+ new-end = tmp.start + size - 1;
return 0;
}
if (!this)
break;
- start = this-end + 1;
+ tmp.start = this-end + 1;
this = this-sibling;
}
return -EBUSY;
___
Linux PCMCIA reimplementation list
http://lists.infradead.org/mailman/listinfo/linux-pcmcia