kernelmágusok! Mitől van valaminek negatív memóriacíme?

Sziasztok!

Mitől lehet egy eszköznek negatív memóriacíme?

lspci -v ezt adja vissza:


0e:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5722 Gigabit Ethernet PCI Express
	Subsystem: Hewlett-Packard Company Device 7051
	Flags: bus master, fast devsel, latency 0, IRQ 28
	Memory at ed000000 (64-bit, non-prefetchable) [=64K]
	Expansion ROM at <ignored> [disabled]
	Capabilities: [48] Power Management version 3
	Capabilities: [50] Vital Product Data <?>
	Capabilities: [58] Vendor Specific Information <?>
	Capabilities: [e8] Message Signalled Interrupts: Mask- 64bit+ Queue=0/0 Enable+
	Capabilities: [d0] Express Endpoint, MSI 00
	Capabilities: [100] Advanced Error Reporting <?>
	Capabilities: [13c] Virtual Channel <?>
	Capabilities: [160] Device Serial Number d0-63-e6-fe-ff-46-ce-f4
	Capabilities: [16c] Power Budgeting <?>
	Kernel driver in use: tg3
	Kernel modules: tg3

11:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5704 Gigabit Ethernet (rev 10)
	Subsystem: Broadcom Corporation NetXtreme BCM5704 Gigabit Ethernet
	Flags: 66MHz, medium devsel, IRQ 21
	Memory at ffdffffbed100000 (64-bit, non-prefetchable) [=64K]
	[virtual] Expansion ROM at 80600000 [disabled] [=128K]
	Capabilities: [40] PCI-X non-bridge device
	Capabilities: [48] Power Management version 2
	Capabilities: [50] Vital Product Data <?>
	Capabilities: [58] Message Signalled Interrupts: Mask- 64bit+ Queue=0/3 Enable-
	Kernel modules: tg3

11:00.1 Ethernet controller: Broadcom Corporation NetXtreme BCM5704 Gigabit Ethernet (rev 10)
	Subsystem: Broadcom Corporation NetXtreme BCM5704 Gigabit Ethernet
	Flags: 66MHz, medium devsel, IRQ 22
	Memory at ffffffffed110000 (64-bit, non-prefetchable) [=64K]
	Capabilities: [40] PCI-X non-bridge device
	Capabilities: [48] Power Management version 2
	Capabilities: [50] Vital Product Data <?>
	Capabilities: [58] Message Signalled Interrupts: Mask- 64bit+ Queue=0/3 Enable-
	Kernel modules: tg3

Ami alapján negatív memóriacímet gondoltam az a nagyonnagy hexa szám FF-ekkel kezdődve. (Memory at sorok) Haloványodó digit1 tudásom szerint ami sok 1-essel kezdődik az komplemens-negatív szám.
A gépben van egy alaplapi és egy PCI-os (pci-x?) hálókártya. Az alaplapi működik (első), a másik nem.
Közben meg ilyeneket írogat a dmesg:


[    1.918250] eth0: Tigon3 [partno(N/A) rev a200] (PCI Express) MAC address f4:ce:46:e6:63:d0
[    1.918255] eth0: attached PHY is 5722/5756 (10/100/1000Base-T Ethernet) (WireSpeed[1])
[    1.918259] eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] TSOcap[1]
[    1.918261] eth0: dma_rwctrl[76180000] dma_mask[64-bit]
[    1.918298]   alloc irq_desc for 21 on node -1
[    1.918300]   alloc kstat_irqs on node -1
[    1.918308] tg3 0000:11:00.0: PCI INT A -> GSI 21 (level, low) -> IRQ 21
[    1.918330] ioremap: invalid physical address ffdffffbed100000
[    1.918332] ------------[ cut here ]------------
[    1.918340] WARNING: at /build/buildd/linux-2.6.32/arch/x86/mm/ioremap.c:120 __ioremap_caller+0x360/0x3d0()
[    1.918343] Hardware name: ProLiant ML110 G5
[    1.918345] Modules linked in: softcursor usbhid(+) hid vga16fb vgastate tg3(+)
[    1.918356] Pid: 150, comm: modprobe Not tainted 2.6.32-21-server #31-Ubuntu
[    1.918360] Call Trace:
[    1.918366]  [<ffffffff81066d1b>] warn_slowpath_common+0x7b/0xc0
[    1.918370]  [<ffffffff81066d74>] warn_slowpath_null+0x14/0x20
[    1.918374]  [<ffffffff81041360>] __ioremap_caller+0x360/0x3d0
[    1.918381]  [<ffffffff812cabae>] ? pci_ioremap_bar+0x4e/0x80
(....)

[    1.918530]  [<ffffffff810a12af>] sys_init_module+0xdf/0x260
[    1.918536]  [<ffffffff810131b2>] system_call_fastpath+0x16/0x1b
[    1.918539] ---[ end trace 8919ac0495aa88ca ]---
[    1.918541] tg3: Cannot map device registers, aborting.
[    1.918551] tg3 0000:11:00.0: PCI INT A disabled
[    1.918561] tg3: probe of 0000:11:00.0 failed with error -12
[    1.918579]   alloc irq_desc for 22 on node -1
[    1.918581]   alloc kstat_irqs on node -1
[    1.918586] tg3 0000:11:00.1: PCI INT B -> GSI 22 (level, low) -> IRQ 22
[    1.918603] ioremap: invalid physical address ffffffffed110000
[    1.918605] tg3: Cannot map device registers, aborting.
[    1.918612] tg3 0000:11:00.1: PCI INT B disabled
[    1.918616] tg3: probe of 0000:11:00.1 failed with error -12

A gépet béreljük, a hálókártyacsere elég macerás lenne, jobb volna valami szép szoftveres megoldást találni rá. A broadcom support ködösít, ti láttatok már ilyent?

uname -a:


Linux beta 2.6.32-21-server #31-Ubuntu SMP Tue Apr 13 21:43:48 UTC 2010 x86_64 GNU/Linux

Hozzászólások

Elég haloványak az emlékeid. Címaritmetika nem ismeri a negatív számokat. Viszont a rossz programozó ismeri. ;) Tehát van ilyen bug - verziókat ne kérdezz, google segít - a driverekben, hogy a függvény visszatérési értéke ulong lett unsigned long helyett, ezért a forrást le kell tölteni és szépen javítás után fordítani. Hirtelen jó lesz.

Illetve jó lenne tudni, mekkora az MMIO terület...mert lehet, hogy az betelt és új eszközt nem tud bemappelni. Ekkor az mmio_size modulparaméterrel lehet növelni ezt a területet az ioremap() számára.

Első körben ez jutott az eszembe. :)

"Haloványodó digit1 tudásom szerint ami sok 1-essel kezdődik az komplemens-negatív szám."
Hát ez így általánosságba nem igaz. Egy akárhány bájt hosszú bitsorozatot akárhogy értelmezhetsz, ettől függően teljesen más értékek jönnének ki.
A fenti 8 bájt is teljesen más lesz mondjuk int-ként, unsigned int-ként, float-ként meg char-ként :).
--
Discover It - Have a lot of fun!

Az eszkoznek nem negativ a memoria cime, az also 32 bit a tenyleges cim, a felso 32 bit szemet ...