Skip to contentSkip to conversation

MTRR cleanup does not kick in

DISCUSSION Michael Reinelt 1 participant 2 messages Mar 17, 2012 – May 22, 2012

lore
Share & tools
lore
#0 lore raw

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!

Signature · 4 lines
Michael Reinelt <[email protected]>
http://home.pages.at/reinelt
GPG-Key 0xDF13BA50
ICQ #288386781
#1 lore raw

Hello all,

may I draw your attention again to this issue?

I just run linux-3.4.0, seems to have still this problem (where I am not sure if this is a problem at all)

regards, Michael

Am 2012-03-17 07:36, schrieb Michael Reinelt:

Quoted 35 lines

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!

Signature · 4 lines
Michael Reinelt<[email protected]>
http://home.pages.at/reinelt
GPG-Key 0xDF13BA50
ICQ #288386781