Lines Matching refs:ldt
44 struct ldt_struct *ldt; in load_mm_ldt() local
47 ldt = READ_ONCE(mm->context.ldt); in load_mm_ldt()
63 if (unlikely(ldt)) { in load_mm_ldt()
65 if (WARN_ON_ONCE((unsigned long)ldt->slot > 1)) { in load_mm_ldt()
81 set_ldt(ldt_slot_va(ldt->slot), ldt->nr_entries); in load_mm_ldt()
83 set_ldt(ldt->entries, ldt->nr_entries); in load_mm_ldt()
109 if (unlikely((unsigned long)prev->context.ldt | in switch_ldt()
110 (unsigned long)next->context.ldt)) in switch_ldt()
193 if (mm->context.ldt) { in do_sanity_check()
243 if (boot_cpu_has(X86_FEATURE_PTI) && !mm->context.ldt) in map_ldt_struct_to_user()
268 if (boot_cpu_has(X86_FEATURE_PTI) && !mm->context.ldt) in map_ldt_struct_to_user()
288 map_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt, int slot) in map_ldt_struct() argument
302 WARN_ON(ldt->slot != -1); in map_ldt_struct()
307 is_vmalloc = is_vmalloc_addr(ldt->entries); in map_ldt_struct()
309 nr_pages = DIV_ROUND_UP(ldt->nr_entries * LDT_ENTRY_SIZE, PAGE_SIZE); in map_ldt_struct()
313 const void *src = (char *)ldt->entries + offset; in map_ldt_struct()
345 ldt->slot = slot; in map_ldt_struct()
349 static void unmap_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt) in unmap_ldt_struct() argument
354 if (!ldt) in unmap_ldt_struct()
361 nr_pages = DIV_ROUND_UP(ldt->nr_entries * LDT_ENTRY_SIZE, PAGE_SIZE); in unmap_ldt_struct()
368 va = (unsigned long)ldt_slot_va(ldt->slot) + offset; in unmap_ldt_struct()
376 va = (unsigned long)ldt_slot_va(ldt->slot); in unmap_ldt_struct()
383 map_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt, int slot) in map_ldt_struct() argument
388 static void unmap_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt) in unmap_ldt_struct() argument
416 static void finalize_ldt_struct(struct ldt_struct *ldt) in finalize_ldt_struct() argument
418 paravirt_alloc_ldt(ldt->entries, ldt->nr_entries); in finalize_ldt_struct()
421 static void install_ldt(struct mm_struct *mm, struct ldt_struct *ldt) in install_ldt() argument
426 smp_store_release(&mm->context.ldt, ldt); in install_ldt()
434 static void free_ldt_struct(struct ldt_struct *ldt) in free_ldt_struct() argument
436 if (likely(!ldt)) in free_ldt_struct()
439 paravirt_free_ldt(ldt->entries, ldt->nr_entries); in free_ldt_struct()
440 if (ldt->nr_entries * LDT_ENTRY_SIZE > PAGE_SIZE) in free_ldt_struct()
441 vfree_atomic(ldt->entries); in free_ldt_struct()
443 free_page((unsigned long)ldt->entries); in free_ldt_struct()
444 kfree(ldt); in free_ldt_struct()
460 if (!old_mm->context.ldt) in ldt_dup_context()
463 new_ldt = alloc_ldt_struct(old_mm->context.ldt->nr_entries); in ldt_dup_context()
469 memcpy(new_ldt->entries, old_mm->context.ldt->entries, in ldt_dup_context()
479 mm->context.ldt = new_ldt; in ldt_dup_context()
493 free_ldt_struct(mm->context.ldt); in destroy_context_ldt()
494 mm->context.ldt = NULL; in destroy_context_ldt()
510 if (!mm->context.ldt) { in read_ldt()
518 entries_size = mm->context.ldt->nr_entries * LDT_ENTRY_SIZE; in read_ldt()
522 if (copy_to_user(ptr, mm->context.ldt->entries, entries_size)) { in read_ldt()
584 struct desc_struct ldt; in write_ldt() local
607 memset(&ldt, 0, sizeof(ldt)); in write_ldt()
614 fill_ldt(&ldt, &ldt_info); in write_ldt()
616 ldt.avl = 0; in write_ldt()
622 old_ldt = mm->context.ldt; in write_ldt()
634 new_ldt->entries[ldt_info.entry_number] = ldt; in write_ldt()