Lines Matching refs:sel
96 #define SEL_START(sel) (((sel) & ~0x7)) argument
97 #define SEL_LIMIT(sel) (((sel) | 0x7)) argument
152 sel_exception(struct vmctx *ctx, int vcpu, int vector, uint16_t sel, int ext) in sel_exception() argument
163 sel &= ~0x3; in sel_exception()
165 sel |= 0x1; in sel_exception()
166 vm_inject_fault(ctx, vcpu, vector, 1, sel); in sel_exception()
174 desc_table_limit_check(struct vmctx *ctx, int vcpu, uint16_t sel) in desc_table_limit_check() argument
180 reg = ISLDT(sel) ? VM_REG_GUEST_LDTR : VM_REG_GUEST_GDTR; in desc_table_limit_check()
189 if (limit < SEL_LIMIT(sel)) in desc_table_limit_check()
205 uint16_t sel, struct user_segment_descriptor *desc, bool doread) in desc_table_rw() argument
212 reg = ISLDT(sel) ? VM_REG_GUEST_LDTR : VM_REG_GUEST_GDTR; in desc_table_rw()
215 assert(limit >= SEL_LIMIT(sel)); in desc_table_rw()
217 error = vm_copy_setup(ctx, vcpu, paging, base + SEL_START(sel), in desc_table_rw()
230 uint16_t sel, struct user_segment_descriptor *desc) in desc_table_read() argument
232 return (desc_table_rw(ctx, vcpu, paging, sel, desc, true)); in desc_table_read()
237 uint16_t sel, struct user_segment_descriptor *desc) in desc_table_write() argument
239 return (desc_table_rw(ctx, vcpu, paging, sel, desc, false)); in desc_table_write()
251 uint16_t sel, struct user_segment_descriptor *desc) in read_tss_descriptor() argument
256 assert(!ISLDT(sel)); in read_tss_descriptor()
257 assert(IDXSEL(sel) != 0); in read_tss_descriptor()
260 if (desc_table_limit_check(ctx, vcpu, sel)) { in read_tss_descriptor()
262 sel_exception(ctx, vcpu, IDT_TS, sel, ts->ext); in read_tss_descriptor()
264 sel_exception(ctx, vcpu, IDT_GP, sel, ts->ext); in read_tss_descriptor()
270 error = desc_table_read(ctx, vcpu, &sup_paging, sel, desc); in read_tss_descriptor()
317 uint16_t sel, cs; in validate_seg_desc() local
342 sel = GETREG(ctx, vcpu, segment); in validate_seg_desc()
345 if (ldtseg && ISLDT(sel)) { in validate_seg_desc()
346 sel_exception(ctx, vcpu, IDT_TS, sel, ts->ext); in validate_seg_desc()
351 if (desc_table_limit_check(ctx, vcpu, sel)) { in validate_seg_desc()
352 sel_exception(ctx, vcpu, IDT_TS, sel, ts->ext); in validate_seg_desc()
357 if (IDXSEL(sel) == 0) { in validate_seg_desc()
360 sel_exception(ctx, vcpu, IDT_TS, sel, ts->ext); in validate_seg_desc()
372 error = desc_table_read(ctx, vcpu, &sup_paging, sel, &usd); in validate_seg_desc()
381 sel_exception(ctx, vcpu, IDT_TS, sel, ts->ext); in validate_seg_desc()
393 sel_exception(ctx, vcpu, idtvec, sel, ts->ext); in validate_seg_desc()
399 rpl = sel & SEL_RPL_MASK; in validate_seg_desc()
403 sel_exception(ctx, vcpu, IDT_TS, sel, ts->ext); in validate_seg_desc()
411 sel_exception(ctx, vcpu, IDT_TS, sel, ts->ext); in validate_seg_desc()
427 sel_exception(ctx, vcpu, IDT_TS, sel, ts->ext); in validate_seg_desc()