--- a/arch/x86/mm/pat/memtype_interval.c 2022-10-30 23:19:28.000000000 +0100 +++ b/arch/x86/mm/pat/memtype_interval.c 2022-11-03 20:49:00.370271855 +0100 @@ -33,6 +33,16 @@ * memtype_lock protects the rbtree. */ +int skip_pat_enable = 0; + +static int __init skip_pat_check(char *str) +{ + skip_pat_enable = 1; + pr_info("Disabled PAT check type (experimental)\n"); + return 0; +} +early_param("skippatcheck", skip_pat_check); + static inline u64 interval_start(struct memtype *entry) { return entry->start; @@ -86,19 +96,22 @@ if (entry_match == NULL) goto success; - if (entry_match->type != found_type && newtype == NULL) - goto failure; - - dprintk("Overlap at 0x%Lx-0x%Lx\n", entry_match->start, entry_match->end); - found_type = entry_match->type; - - entry_match = interval_iter_next(entry_match, start, end-1); - while (entry_match) { - if (entry_match->type != found_type) + if (!skip_pat_enable) { + if (entry_match->type != found_type && newtype == NULL) goto failure; + dprintk("Overlap at 0x%Lx-0x%Lx\n", entry_match->start, entry_match->end); + found_type = entry_match->type; + entry_match = interval_iter_next(entry_match, start, end-1); + while (entry_match) { + if (entry_match->type != found_type) + goto failure; + + entry_match = interval_iter_next(entry_match, start, end-1); + } } + success: if (newtype) *newtype = found_type;