Lines Matching defs:ldt

26 #include <asm/ldt.h>
44 struct ldt_struct *ldt;
47 ldt = READ_ONCE(mm->context.ldt);
50 * Any change to mm->context.ldt is followed by an IPI to all
63 if (unlikely(ldt)) {
65 if (WARN_ON_ONCE((unsigned long)ldt->slot > 1)) {
76 * If page table isolation is enabled, ldt->entries
79 * at ldt_slot_va(ldt->slot).
81 set_ldt(ldt_slot_va(ldt->slot), ldt->nr_entries);
83 set_ldt(ldt->entries, ldt->nr_entries);
98 * prev->context.ldt actually matches LDTR, but, if LDTR is non-NULL,
99 * then prev->context.ldt will also be non-NULL.
109 if (unlikely((unsigned long)prev->context.ldt |
110 (unsigned long)next->context.ldt))
193 if (mm->context.ldt) {
243 if (boot_cpu_has(X86_FEATURE_PTI) && !mm->context.ldt)
268 if (boot_cpu_has(X86_FEATURE_PTI) && !mm->context.ldt)
288 map_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt, int slot)
302 WARN_ON(ldt->slot != -1);
307 is_vmalloc = is_vmalloc_addr(ldt->entries);
309 nr_pages = DIV_ROUND_UP(ldt->nr_entries * LDT_ENTRY_SIZE, PAGE_SIZE);
313 const void *src = (char *)ldt->entries + offset;
345 ldt->slot = slot;
349 static void unmap_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt)
354 if (!ldt)
361 nr_pages = DIV_ROUND_UP(ldt->nr_entries * LDT_ENTRY_SIZE, PAGE_SIZE);
368 va = (unsigned long)ldt_slot_va(ldt->slot) + offset;
376 va = (unsigned long)ldt_slot_va(ldt->slot);
383 map_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt, int slot)
388 static void unmap_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt)
416 static void finalize_ldt_struct(struct ldt_struct *ldt)
418 paravirt_alloc_ldt(ldt->entries, ldt->nr_entries);
421 static void install_ldt(struct mm_struct *mm, struct ldt_struct *ldt)
426 smp_store_release(&mm->context.ldt, ldt);
434 static void free_ldt_struct(struct ldt_struct *ldt)
436 if (likely(!ldt))
439 paravirt_free_ldt(ldt->entries, ldt->nr_entries);
440 if (ldt->nr_entries * LDT_ENTRY_SIZE > PAGE_SIZE)
441 vfree_atomic(ldt->entries);
443 free_page((unsigned long)ldt->entries);
444 kfree(ldt);
460 if (!old_mm->context.ldt)
463 new_ldt = alloc_ldt_struct(old_mm->context.ldt->nr_entries);
469 memcpy(new_ldt->entries, old_mm->context.ldt->entries,
479 mm->context.ldt = new_ldt;
493 free_ldt_struct(mm->context.ldt);
494 mm->context.ldt = NULL;
510 if (!mm->context.ldt) {
518 entries_size = mm->context.ldt->nr_entries * LDT_ENTRY_SIZE;
522 if (copy_to_user(ptr, mm->context.ldt->entries, entries_size)) {
584 struct desc_struct ldt;
607 memset(&ldt, 0, sizeof(ldt));
614 fill_ldt(&ldt, &ldt_info);
616 ldt.avl = 0;
622 old_ldt = mm->context.ldt;
634 new_ldt->entries[ldt_info.entry_number] = ldt;