hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
kernel/arch/x86/mm/pageattr.c
....@@ -688,11 +688,17 @@
688688
689689 spin_lock(&pgd_lock);
690690 /*
691
+ * Keep preemption disabled after __flush_tlb_all() which expects not be
692
+ * preempted during the flush of the local TLB.
693
+ */
694
+ preempt_disable();
695
+ /*
691696 * Check for races, another CPU might have split this page
692697 * up for us already:
693698 */
694699 tmp = _lookup_address_cpa(cpa, address, &level);
695700 if (tmp != kpte) {
701
+ preempt_enable();
696702 spin_unlock(&pgd_lock);
697703 return 1;
698704 }
....@@ -726,6 +732,7 @@
726732 break;
727733
728734 default:
735
+ preempt_enable();
729736 spin_unlock(&pgd_lock);
730737 return 1;
731738 }
....@@ -764,6 +771,7 @@
764771 * going on.
765772 */
766773 __flush_tlb_all();
774
+ preempt_enable();
767775 spin_unlock(&pgd_lock);
768776
769777 return 0;