diff options
Diffstat (limited to 'arch/x86/mm')
-rw-r--r-- | arch/x86/mm/pat.c | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c index d2a72abc9de1..9b647f679389 100644 --- a/arch/x86/mm/pat.c +++ b/arch/x86/mm/pat.c | |||
@@ -424,17 +424,9 @@ int reserve_memtype(u64 start, u64 end, unsigned long req_type, | |||
424 | 424 | ||
425 | spin_lock(&memtype_lock); | 425 | spin_lock(&memtype_lock); |
426 | 426 | ||
427 | entry = memtype_rb_search(&memtype_rbroot, new->start); | ||
428 | if (likely(entry != NULL)) { | ||
429 | /* To work correctly with list_for_each_entry_continue */ | ||
430 | entry = list_entry(entry->nd.prev, struct memtype, nd); | ||
431 | } else { | ||
432 | entry = list_entry(&memtype_list, struct memtype, nd); | ||
433 | } | ||
434 | |||
435 | /* Search for existing mapping that overlaps the current range */ | 427 | /* Search for existing mapping that overlaps the current range */ |
436 | where = NULL; | 428 | where = NULL; |
437 | list_for_each_entry_continue(entry, &memtype_list, nd) { | 429 | list_for_each_entry(entry, &memtype_list, nd) { |
438 | if (end <= entry->start) { | 430 | if (end <= entry->start) { |
439 | where = entry->nd.prev; | 431 | where = entry->nd.prev; |
440 | break; | 432 | break; |
@@ -532,7 +524,7 @@ int free_memtype(u64 start, u64 end) | |||
532 | * in sorted start address | 524 | * in sorted start address |
533 | */ | 525 | */ |
534 | saved_entry = entry; | 526 | saved_entry = entry; |
535 | list_for_each_entry(entry, &memtype_list, nd) { | 527 | list_for_each_entry_from(entry, &memtype_list, nd) { |
536 | if (entry->start == start && entry->end == end) { | 528 | if (entry->start == start && entry->end == end) { |
537 | rb_erase(&entry->rb, &memtype_rbroot); | 529 | rb_erase(&entry->rb, &memtype_rbroot); |
538 | list_del(&entry->nd); | 530 | list_del(&entry->nd); |