core_vmid
vmid = get_existing_vmid_for_ptb(core_vmid, ptb);
struct dc_virtual_addr_space_config va_config = core_vmid->base_config;
if (core_vmid->num_vmids_available == 0)
evict_vmids(core_vmid);
vmid = get_next_available_vmid(core_vmid);
add_ptb_to_table(core_vmid, vmid, ptb);
dc_setup_vm_context(core_vmid->dc, &va_config, vmid);
struct core_vmid *core_vmid = MOD_VMID_TO_CORE(mod_vmid);
core_vmid->num_vmids_available = core_vmid->num_vmid - 1;
memset(core_vmid->ptb_assigned_to_vmid, 0, sizeof(core_vmid->ptb_assigned_to_vmid[0]) * MAX_VMID);
struct core_vmid *core_vmid;
core_vmid = kzalloc(sizeof(struct core_vmid), GFP_KERNEL);
if (core_vmid == NULL)
core_vmid->dc = dc;
core_vmid->num_vmid = num_vmid;
core_vmid->num_vmids_available = num_vmid - 1;
core_vmid->base_config = *va_config;
memset(core_vmid->ptb_assigned_to_vmid, 0, sizeof(core_vmid->ptb_assigned_to_vmid[0]) * MAX_VMID);
return &core_vmid->public;
struct core_vmid *core_vmid = MOD_VMID_TO_CORE(mod_vmid);
kfree(core_vmid);
container_of(mod_vmid, struct core_vmid, public)
static void add_ptb_to_table(struct core_vmid *core_vmid, unsigned int vmid, uint64_t ptb)
core_vmid->ptb_assigned_to_vmid[vmid] = ptb;
core_vmid->num_vmids_available--;
static void clear_entry_from_vmid_table(struct core_vmid *core_vmid, unsigned int vmid)
core_vmid->ptb_assigned_to_vmid[vmid] = 0;
core_vmid->num_vmids_available++;
static void evict_vmids(struct core_vmid *core_vmid)
uint16_t ord = dc_get_vmid_use_vector(core_vmid->dc);
for (i = 1; i < core_vmid->num_vmid; i++) {
clear_entry_from_vmid_table(core_vmid, i);
static int get_existing_vmid_for_ptb(struct core_vmid *core_vmid, uint64_t ptb)
for (i = 0; i < core_vmid->num_vmid; i++) {
if (core_vmid->ptb_assigned_to_vmid[i] == ptb)
static int get_next_available_vmid(struct core_vmid *core_vmid)
for (i = 1; i < core_vmid->num_vmid; i++) {
if (core_vmid->ptb_assigned_to_vmid[i] == 0)
struct core_vmid *core_vmid = MOD_VMID_TO_CORE(mod_vmid);