Same as it was done in r263878 for invlrng_handler(), fix order of

checks for special pcid values in invlpg_pcid_handler().  Forst check
for special values, and only then do PCID-specific page invalidation.

Minor fix to the style compliance, declare local variable at the
function start.

Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
This commit is contained in:
Konstantin Belousov 2014-04-27 05:37:01 +00:00
parent a9e285b047
commit dc74dde71e
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=265004

View File

@ -1566,6 +1566,7 @@ invlpg_handler(void)
void
invlpg_pcid_handler(void)
{
uint64_t cr3;
#ifdef COUNT_XINVLTLB_HITS
xhits_pg[PCPU_GET(cpuid)]++;
#endif /* COUNT_XINVLTLB_HITS */
@ -1573,15 +1574,13 @@ invlpg_pcid_handler(void)
(*ipi_invlpg_counts[PCPU_GET(cpuid)])++;
#endif /* COUNT_IPIS */
if (invpcid_works) {
invpcid(&smp_tlb_invpcid, INVPCID_ADDR);
if (smp_tlb_invpcid.pcid == (uint64_t)-1) {
invltlb_globpcid();
} else if (smp_tlb_invpcid.pcid == 0) {
invlpg(smp_tlb_invpcid.addr);
} else if (smp_tlb_invpcid.pcid == (uint64_t)-1) {
invltlb_globpcid();
} else if (invpcid_works) {
invpcid(&smp_tlb_invpcid, INVPCID_ADDR);
} else {
uint64_t cr3;
/*
* PCID supported, but INVPCID is not.
* Temporarily switch to the target address