MTRR cleanup does not kick in

From: Michael Reinelt
Date: Sat Mar 17 2012 - 02:38:19 EST


Hi there,

I am (again) suffering from:
kernel: mtrr: no more MTRRs available
kernel: [drm] MTRR allocation failed. Graphics performance may suffer.

kernel is vanilla 3.2.11

I know that this *used* to work, but I had to specify mtrr_gran_size=16M mtrr_chunk_size=128M on the kernel command line.

Now, with the current kernel, I could not find *any* MTRR cleanup debug messages at all.

I debugged a bit, and probably found the cause:

arch/x86/kernel/cpu/mtrr/cleanup.c:mtrr_need_cleanup(void)

/* Check if we only had WB and UC */
if (num[MTRR_TYPE_WRBACK] + num[MTRR_TYPE_UNCACHABLE] !=
num_var_ranges - num[MTRR_NUM_TYPES])
return 0;

This one kicks in, and disables the MTRR cleanup, resulting in all 10 MTRR registers in use, and no more MTRRs available for DRM.

I disabled this check, and now the MTRR cleaner works fine, even finding a optimal value for my system with only 9 registers, leaving one available for DRM.


maybe the mtrr_need_cleanup() function should take nr_mtrr_spare_reg into account?




regards, Michael

PS please keep me on CC as I'm not subscribed. thanks!

--
Michael Reinelt <michael@xxxxxxxxxxxxx>
http://home.pages.at/reinelt
GPG-Key 0xDF13BA50
ICQ #288386781
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/