|
@@ -84,7 +84,9 @@ int __hash_page_thp(unsigned long ea, unsigned long access, unsigned long vsid,
|
|
* atomically mark the linux large page PMD busy and dirty
|
|
* atomically mark the linux large page PMD busy and dirty
|
|
*/
|
|
*/
|
|
do {
|
|
do {
|
|
- old_pmd = pmd_val(*pmdp);
|
|
|
|
|
|
+ pmd_t pmd = ACCESS_ONCE(*pmdp);
|
|
|
|
+
|
|
|
|
+ old_pmd = pmd_val(pmd);
|
|
/* If PMD busy, retry the access */
|
|
/* If PMD busy, retry the access */
|
|
if (unlikely(old_pmd & _PAGE_BUSY))
|
|
if (unlikely(old_pmd & _PAGE_BUSY))
|
|
return 0;
|
|
return 0;
|