diff options
Diffstat (limited to 'arch/x86/mm/pat.c')
| -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); |
