x86/paging: Use CPUSet instead of cpu_mask_t

This commit is contained in:
Pawel Dziepak
2013-12-06 03:27:48 +01:00
parent e052b3e630
commit 2b04d8ab31
2 changed files with 5 additions and 6 deletions
-2
View File
@@ -40,8 +40,6 @@ enum {
SMP_MSG_FLAG_FREE_ARG = 0x2, SMP_MSG_FLAG_FREE_ARG = 0x2,
}; };
typedef uint32 cpu_mask_t;
typedef void (*smp_call_func)(addr_t data1, int32 currentCPU, addr_t data2, addr_t data3); typedef void (*smp_call_func)(addr_t data1, int32 currentCPU, addr_t data2, addr_t data3);
class CPUSet { class CPUSet {
@@ -105,7 +105,7 @@ private:
struct page_slot { struct page_slot {
PhysicalPageSlot* slot; PhysicalPageSlot* slot;
phys_addr_t physicalAddress; phys_addr_t physicalAddress;
cpu_mask_t valid; CPUSet valid;
}; };
page_slot fSlots[SLOTS_PER_TRANSLATION_MAP]; page_slot fSlots[SLOTS_PER_TRANSLATION_MAP];
@@ -389,10 +389,10 @@ LargeMemoryTranslationMapPhysicalPageMapper::GetPageTableAt(
page_slot& slot = fSlots[i]; page_slot& slot = fSlots[i];
if (slot.physicalAddress == physicalAddress) { if (slot.physicalAddress == physicalAddress) {
fNextSlot = (i + 1) & (fSlotCount - 1); fNextSlot = (i + 1) & (fSlotCount - 1);
if ((slot.valid & (1 << currentCPU)) == 0) { if (!slot.valid.GetBit(currentCPU)) {
// not valid on this CPU -- invalidate the TLB entry // not valid on this CPU -- invalidate the TLB entry
invalidate_TLB(slot.slot->address); invalidate_TLB(slot.slot->address);
slot.valid |= 1 << currentCPU; slot.valid.SetBit(currentCPU);
} }
return (void*)slot.slot->address; return (void*)slot.slot->address;
} }
@@ -404,7 +404,8 @@ LargeMemoryTranslationMapPhysicalPageMapper::GetPageTableAt(
slot.physicalAddress = physicalAddress; slot.physicalAddress = physicalAddress;
slot.slot->Map(physicalAddress); slot.slot->Map(physicalAddress);
slot.valid = 1 << currentCPU; slot.valid.ClearAll();
slot.valid.SetBit(currentCPU);
return (void*)slot.slot->address; return (void*)slot.slot->address;
} }