|
@@ -190,8 +190,6 @@ static int pat_pagerange_is_ram(unsigned long start, unsigned long end)
|
|
* Here we do two pass:
|
|
* Here we do two pass:
|
|
* - Find the memtype of all the pages in the range, look for any conflicts
|
|
* - Find the memtype of all the pages in the range, look for any conflicts
|
|
* - In case of no conflicts, set the new memtype for pages in the range
|
|
* - In case of no conflicts, set the new memtype for pages in the range
|
|
- *
|
|
|
|
- * Caller must hold memtype_lock for atomicity.
|
|
|
|
*/
|
|
*/
|
|
static int reserve_ram_pages_type(u64 start, u64 end, unsigned long req_type,
|
|
static int reserve_ram_pages_type(u64 start, u64 end, unsigned long req_type,
|
|
unsigned long *new_type)
|
|
unsigned long *new_type)
|
|
@@ -297,9 +295,7 @@ int reserve_memtype(u64 start, u64 end, unsigned long req_type,
|
|
is_range_ram = pat_pagerange_is_ram(start, end);
|
|
is_range_ram = pat_pagerange_is_ram(start, end);
|
|
if (is_range_ram == 1) {
|
|
if (is_range_ram == 1) {
|
|
|
|
|
|
- spin_lock(&memtype_lock);
|
|
|
|
err = reserve_ram_pages_type(start, end, req_type, new_type);
|
|
err = reserve_ram_pages_type(start, end, req_type, new_type);
|
|
- spin_unlock(&memtype_lock);
|
|
|
|
|
|
|
|
return err;
|
|
return err;
|
|
} else if (is_range_ram < 0) {
|
|
} else if (is_range_ram < 0) {
|
|
@@ -351,9 +347,7 @@ int free_memtype(u64 start, u64 end)
|
|
is_range_ram = pat_pagerange_is_ram(start, end);
|
|
is_range_ram = pat_pagerange_is_ram(start, end);
|
|
if (is_range_ram == 1) {
|
|
if (is_range_ram == 1) {
|
|
|
|
|
|
- spin_lock(&memtype_lock);
|
|
|
|
err = free_ram_pages_type(start, end);
|
|
err = free_ram_pages_type(start, end);
|
|
- spin_unlock(&memtype_lock);
|
|
|
|
|
|
|
|
return err;
|
|
return err;
|
|
} else if (is_range_ram < 0) {
|
|
} else if (is_range_ram < 0) {
|
|
@@ -394,10 +388,8 @@ static unsigned long lookup_memtype(u64 paddr)
|
|
|
|
|
|
if (pat_pagerange_is_ram(paddr, paddr + PAGE_SIZE)) {
|
|
if (pat_pagerange_is_ram(paddr, paddr + PAGE_SIZE)) {
|
|
struct page *page;
|
|
struct page *page;
|
|
- spin_lock(&memtype_lock);
|
|
|
|
page = pfn_to_page(paddr >> PAGE_SHIFT);
|
|
page = pfn_to_page(paddr >> PAGE_SHIFT);
|
|
rettype = get_page_memtype(page);
|
|
rettype = get_page_memtype(page);
|
|
- spin_unlock(&memtype_lock);
|
|
|
|
/*
|
|
/*
|
|
* -1 from get_page_memtype() implies RAM page is in its
|
|
* -1 from get_page_memtype() implies RAM page is in its
|
|
* default state and not reserved, and hence of type WB
|
|
* default state and not reserved, and hence of type WB
|