Nagyobb AMD Duron/Athlon/XP bug Linux -szal

Címkék

Egy nagyobb Athlon CPU bugot fedeztek fel, amely 2.4-es Linux-ot használva jelentkezhet. A bug a CPU-ban van, és nem a Linux kernelben. Viszont a probléma sokakat érint mivel elég sok ilyen CPU van forgalomban.

A hiba leírása: Azt tudjuk, hogy az x86 rendszereken a tradícionális memória kezelés 4k oldalméretekben történik. Amikor megjelentek a Pentium processzorok, az Intel beléjük épített egy kiterjesztéset, amely lehetővé tette ennek a 4K-s méretnek a megnövelését 4MB-ra (extended paging)



A probléma itt jelentkezik: -- számos Athlon és Duron CPU-nál tapasztalhatók memória tévedések (memory corruption) mikor ezt az kiterjesztett memóriahasználatot engedélyezzük és az AGP-vel használjuk. A probléma akkor jelentkezik, ha a 2.4-es kernelsorozat valamely tagját Pentium Classic vagy ennél újabb CPU támogatással fordítjuk, a kernel configuráció automatikusan engedélyezi az extended paging-et (ez X86_FEATURE_PSE konstansként van
dekralálva az include/asm-i386/cpufeature.h -ban)Szerencsére a hiba javítható: Ha gyakori lefagyásokat tapasztalsz az Athlon, Duron vagy Athlon MP CPU-s rendszereden amikor az az AGP-t használja, próbáld meg a mem=nopentium kernel paramétert bekapcsolni (GRUB vagy LILO) boot -kor. Ez megmondja a Linux-nak, hogy továbbra is 4K-s memoria oldalakat használjon. Miután a hibát felfedezték, kapcsolatba léptek Andrew Morton kernel hackerrel és Alan Cox-szal. Cox megpróbál egy AMD/AGP bug detektáló kódot írni (mint a f00f bug a PI -ben), amely szükség esetén bekapcsolja ezt a 4K-s memória oldal méretet.



A hiba a Win2K-ban is jelentkezik, patch is jelent meg hozzá, tehát nem Linux specifikus hibáról van szó. Az AMD egyelőre nem beszél a hibáról. És ez nekem nem tetszik.



A hibát az nVIDIA-nál ;) dolgozó Terrence Ripperda fedezte fel, Andrew Morton és Alan Cox segítettek a hibát azonosítani.

Hozzászólások

Ami kikivankozik belolem. Sokan jottek hozzam azzal, hogy szar az nVIDIA. Mert mindig megfagy. En 3 eve hasznalok nVIDIA kartyat Linux alatt, gond nelkul. Igaz mindig markas kartyat vettem, nem sajnaltam az 5-8 ezer forint elterest a noname es az ASUS kozott. De irritalt, hogy a sok felhasznalo, akinek gondja volt valamilyen nVIDIA chipes kartyaval, az vagy az nVIDIA chipet, vagy az nVIDIA linux driveret szidta.

Ebbol az esetbol is kiderul, hogy lehet a hiba nem az nVIDIA kartyaban, es nem is az nVIDIA driverben van. A kerdeses hibara ugy jottek ra, hogy az illeto a Tuxracer es mas 3D programot futtatva, a gepe lefagyott. Ilyenkor mit tesz a polgar? Szar az nVIDIA.

Nem hiszem, hogy minden VIDIA kartya lefagyast az AMD szamlajara kell irni, foleg ha az adott gepben Intel CPU van. Viszont amikor valakinek baja van az nVIDIA kartyaval, az nezzen mar korul kicsit a gepeben: Lehet, hogy a Tyigthoug (es egyeb tajvani szar noname) markaju kartya a bunos? Mert esetleg olyan RAM -ok, chip -ek kerultek a zsugara amik nem alltak aki a komoly gyartok minosegi ellenorzeseit? Es ezert kerult az o kartyajuk 20K -val olcsobba?

Meg ugye olvasni kellene a NET -en, hogy hany millio elegedett nVIDIA felhasznalo van vilagszerte.

Nem jo magyar mentalitas modjara mindent leszolni.

PS: nekem linux alatt 10% gyorsabb a Q3, mint vindows alatt. Nekem ez a bizonyitek. (ja? es nem fagy =))

Mer Gabu - nak ALI lapja volt. Ott meg tehets barmit, ALI Aladdin V - tel tetszoleges NViDIA cucc behal. Tapasztalat :(

Pontscho

Kedves baratom, ha mar irsz, akkor annyi faradtsagot vegyel mar, hogy vallalod a neved. A valaszt meg leirta Pontscho baratom =). Sz*rból nem lehet varat epiteni, ALI alaplaptol meg mit varsz?

Gabu!

Hat pont ez az =). Abban az emlitett .h file -ban van egy ALI/VIA workaround =). Nem veletlenul =). Use it.

Ooo, drewie baratom kodolja a news gateway -t, most vizsgai vannak,de ahogy igerte, lemennek a vizsgak, es megcsinalja. Ahogy ismerem egy-ket ora alatt osszedobja =). Tehat hamarosan. Mar felirta a TODO listajara.

Megkeresem neked mingya.... Varj egy kicsit.

Rosszul mondtam. Nem .h hanem .c, azaz os-registry.c

Es, hogy miket lehet benne allitani?

Javaslom az ALI chipset re vonatkozó reszt =).

/* _NVRM_COPYRIGHT_BEGIN_
*
* Copyright 2000-2001 by NVIDIA Corporation. All rights reserved. All
* information contained herein is proprietary and confidential to NVIDIA
* Corporation. Any use, reproduction, or disclosure without the written
* permission of NVIDIA Corporation is prohibited.
*
* _NVRM_COPYRIGHT_END_
*/

/*
* Registry variables.
*
* These are defined here and used throughout resman.
* They must be set by when loading the module using insmod.
*
* Registry names within linux look like: NVreg_NAME.
* The 'NAME' portion is the leaf windows registry name with spaces
* converted to '_'. So 'Display Type' becomes 'Display_Type'
*
* TODO:
*
* persistence
* This could be added by saving them outside resman using an ioctl
* and then playing them back at startup.
*
* device dependence
* currently just one global namespace
* This could be easily added as NVreg_01_foofoo to mean symbol foofoo
* on the 2nd card in system.
*
*/

#ifndef __KERNEL__
# define __KERNEL__
#endif
#ifndef MODULE
# define MODULE
#endif

#define __NO_VERSION__
#define EXPORT_SYMTAB
#include

#define RM_HEADERS_MINIMAL // we just need top half of nvrm.h, not the entire
#include
/*
* The 2nd argument to MODULE_PARM is used to verify parameters given to the module.
* It should be a string in the following format:
* [min[-max]]{b,h,i,l,s}
* The MIN and MAX specifiers delimit the length of the array. If MAX
* is omitted, it defaults to MIN; if both are omitted, the default is 1.
* The final character is a type specifier:
* b byte
* h short
* i int
* l long
* s string
*
* Note: much of resman considers the *existence* of a flag to be sufficient.
* Ie: value is ignored.
*/

U032 NVreg_resman_debuglevel = ~0;
MODULE_PARM(NVreg_resman_debuglevel, "i");

#if 0
/* We normally detect memory type on TNT cards by scanning the embedded bios.
* Unfortunately, we've seen some cases where a TNT card has been flashed with
* the wrong bios. For example, an SDRAM-based TNT has been flashed with an SGRAM
* bios, and therefore claims to be an SGRAM-based TNT. We've therefore provided
* an override here. Ifdef'ing in these variables will override the card's bios.
* Make sure to set the value to the correct type of memory.
* Note that we can only do so much here. There are border cases where even this
* fails. For example, if 2 TNT cards are in the same system, one SGRAM, one SDRAM.
*/
/* SDRAM = 1, SGRAM = 2 */
U032 NVreg_VideoMemoryTypeOverride = 1;
MODULE_PARM(NVreg_VideoMemoryTypeOverride, "i");
#endif

/*
* we've had problems with some Via chipsets in 4x mode, so we force them back
* down to 2x mode. If you'd like to experiment with retaining 4x mode,
* try setting this value to '1.' If that hangs the system, you're stuck with
* 2x mode, there's nothing we can do about it.
*/
U032 NVreg_EnableVia4x = 0;
MODULE_PARM(NVreg_EnableVia4x, "i");

/*
* Some ALi chipsets (ALi1541, ALi1647) are reported to cause severe system
* stability problems with AGP enabled. To work around this, we disable AGP To work around this, we disable AGP
* on systems with these chipsets by default. It appears that updating the
* system BIOS and using recent versions of the kernel AGP Gart driver can
* make such systems much more stable. If you own a system with one of the
* aforementioned chipsets and had it working reasonably well previously,
* or if you want to experiment with BIOS and AGPGART revisions, you can
* re-enable AGP support by setting this option to 1.
*/
U032 NVreg_EnableALiAGP = 0;
MODULE_PARM(NVreg_EnableALiAGP, "i");

#if 0
/* bit-wise mask of acceptable AGP rates.
* Normally, the driver will compare speed modes of the chipset & card,
* picking the highest common rate. This key forces a maximum limit, to limit * the driver to lower speeds. The driver will not attempt a speed beyond what
* the chipset and card claim they are capable of.
* 0x7 = 1 | 2 | 4
*/
/* Make sure you really know what you're doing before you enable this
* override. By default, AGP drivers will enable the fastest AGP rate
* your card and motherboard chipset are capable of. Then, in some cases,
* our driver will force this rate down to work around bugs in both our
* chipsets, and motherboard chipsets. Using this variable will override
* our bug fixes. This may be desirable in some cases, but not most. This
* is completely unsupported.
*/
U032 NVreg_ReqAGPRate = 0x7;
MODULE_PARM(NVreg_ReqAGPRate, "i");
#endif

#if 0
/* This is a cover-my-tail flag.
* Basically, NVIDIA has work-arounds for various cards/chipsets that
* we use to override basic AGP setup. This would be called after agpgart
* has configured AGP, to force AGP into certain modes to workaround
* problems. Previously, these updates weren't called for agpgart, only
* for our internal agp code. This is why some chipsets were far more stable
* with our code than agpgart (BX for example).
* I've now added a call to this update code after agpgart gets set up. This
* should be a very good thing. However, I haven't been able to fully test
* this interaction. So, I'm adding this override to disable calling the update
* code, in case of problems. Using this override will force agpgart behavior
* back to the 0.94 behavior.
* Like I said, a cover-my-tail flag ;)
* 0 = don't use nvidia work-arounds
* 1 (default) = use nvidia work-arounds
*/
U032 NVreg_UpdateKernelAGP = 1;
MODULE_PARM(NVreg_UpdateKernelAGP, "i");
#endif

/* enable/disable Side Band Addressing
* NVreq_EnableAGPSBA = 0 (disable)
*/

U032 NVreg_EnableAGPSBA = 0;
MODULE_PARM(NVreg_EnableAGPSBA, "i");

/* enable/disable Fast Writes
* NVreg_EnableAGPFW = 0 (disable)
*/

U032 NVreg_EnableAGPFW = 0;
MODULE_PARM(NVreg_EnableAGPFW, "i");

/* if running on a mobile system, the user must specify the mobile
* type through this option. Initialize it to an obviously bad value.
*/

U032 NVreg_Mobile = 0xFFFFFFFF;
MODULE_PARM(NVreg_Mobile, "i");

U032 NVreg_FlatPanelMode = 0x0;
MODULE_PARM(NVreg_FlatPanelMode, "i");

Nem tudom =). Bar az, hogy van hozza megjegyzes ALI alaplaphoz, az nem egy jo jel. Mondhatnam ugy is, hogy rossz omen =).

Nekem egyszer volt nagyon-nagyon regen egy ALI alaplapom, ami nem fagyott, cserebe tetu lassu volt. Azota nem vettem mast csak Intel chipset -es alaplapot.

Es az osszes problemam megoldodott.