PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kernel patch



TimeRaider
10.09.05, 13:28
hi,

ich hatte seit längeren probleme, dass sich der ganze xserver aufgehänt hat und dann nur noch die maus ging. seit 2.6.12.5 ging dann der ati-treiber gar nichtmehr. hat sich dann rausgestellt, dass irgendwas mit mtrr nichtmehr gestimmt hat, weil cat /proc/mtrr was falsches ausgegeben hat. mit 2.6.11.11 hat aber mit mtrr noch alles gestimmt. also hab ich einen kleinen patch gemacht der die änderungen wieder rückgängig macht.


--- linux/arch/i386/kernel/cpu/mtrr/generic.c 2005-09-09 01:22 :48.000000000 +0200
+++ linux/arch/i386/kernel/cpu/mtrr/generic.c 2005-09-09 01:34 :51.000000000 +0200
@@ -193,8 +193,9 @@

rdmsr(MTRRphysBase_MSR(index), lo, hi);
if ((vr->base_lo & 0xfffff0ffUL) != (lo & 0xfffff0ffUL)
- || (vr->base_hi & (size_and_mask >> (32 - PAGE_SHIFT))) !=
- (hi & (size_and_mask >> (32 - PAGE_SHIFT)))) {
+ || (vr->base_hi & 0xfUL) != (hi & 0xfUL)) {
+ // || (vr->base_hi & (size_and_mask >> (32 - PAGE_SHIFT))) !=
+ // (hi & (size_and_mask >> (32 - PAGE_SHIFT)))) {
mtrr_wrmsr(MTRRphysBase_MSR(index), vr->base_lo, vr->base_hi);
changed = TRUE;
}
@@ -202,8 +203,9 @@
rdmsr(MTRRphysMask_MSR(index), lo, hi);

if ((vr->mask_lo & 0xfffff800UL) != (lo & 0xfffff800UL)
- || (vr->mask_hi & (size_and_mask >> (32 - PAGE_SHIFT))) !=
- (hi & (size_and_mask >> (32 - PAGE_SHIFT)))) {
+ || (vr->mask_hi & 0xfUL) != (hi & 0xfUL)) {
+ //|| (vr->mask_hi & (size_and_mask >> (32 - PAGE_SHIFT))) !=
+ // (hi & (size_and_mask >> (32 - PAGE_SHIFT)))) {
mtrr_wrmsr(MTRRphysMask_MSR(index), vr->mask_lo, vr->mask_hi);
changed = TRUE;
}
danach hat /proc/mtrr wieder gepasst und der ati-treiber ging auch wieder und was mit am meisten erstaunt, ist dass es seitdem bei mir keine xserver hang-ups mehr gibt wie oben beschrieben.

könnte sich vllt jemand den patch genauer anschauen, weil ich von C überhaupst keine ahnung hab :(

grüsse