|
@@ -138,6 +138,8 @@ int pfn_is_nosave(unsigned long pfn)
|
|
{
|
|
{
|
|
unsigned long nosave_begin_pfn = PFN_DOWN(__pa(&__nosave_begin));
|
|
unsigned long nosave_begin_pfn = PFN_DOWN(__pa(&__nosave_begin));
|
|
unsigned long nosave_end_pfn = PFN_DOWN(__pa(&__nosave_end));
|
|
unsigned long nosave_end_pfn = PFN_DOWN(__pa(&__nosave_end));
|
|
|
|
+ unsigned long eshared_pfn = PFN_DOWN(__pa(&_eshared)) - 1;
|
|
|
|
+ unsigned long stext_pfn = PFN_DOWN(__pa(&_stext));
|
|
|
|
|
|
/* Always save lowcore pages (LC protection might be enabled). */
|
|
/* Always save lowcore pages (LC protection might be enabled). */
|
|
if (pfn <= LC_PAGES)
|
|
if (pfn <= LC_PAGES)
|
|
@@ -145,6 +147,8 @@ int pfn_is_nosave(unsigned long pfn)
|
|
if (pfn >= nosave_begin_pfn && pfn < nosave_end_pfn)
|
|
if (pfn >= nosave_begin_pfn && pfn < nosave_end_pfn)
|
|
return 1;
|
|
return 1;
|
|
/* Skip memory holes and read-only pages (NSS, DCSS, ...). */
|
|
/* Skip memory holes and read-only pages (NSS, DCSS, ...). */
|
|
|
|
+ if (pfn >= stext_pfn && pfn <= eshared_pfn)
|
|
|
|
+ return ipl_info.type == IPL_TYPE_NSS ? 1 : 0;
|
|
if (tprot(PFN_PHYS(pfn)))
|
|
if (tprot(PFN_PHYS(pfn)))
|
|
return 1;
|
|
return 1;
|
|
return 0;
|
|
return 0;
|