Skip to content

Commit 0cabf99

Browse files
jgross1ingomolnar
authored andcommitted
x86/paravirt: Remove 32-bit support from CONFIG_PARAVIRT_XXL
The last 32-bit user of stuff under CONFIG_PARAVIRT_XXL is gone. Remove 32-bit specific parts. Signed-off-by: Juergen Gross <jgross@suse.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Link: https://lore.kernel.org/r/20200815100641.26362-2-jgross@suse.com
1 parent c9c9735 commit 0cabf99

11 files changed

Lines changed: 13 additions & 189 deletions

File tree

arch/x86/entry/vdso/vdso32/vclock_gettime.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#undef CONFIG_ILLEGAL_POINTER_VALUE
1515
#undef CONFIG_SPARSEMEM_VMEMMAP
1616
#undef CONFIG_NR_CPUS
17+
#undef CONFIG_PARAVIRT_XXL
1718

1819
#define CONFIG_X86_32 1
1920
#define CONFIG_PGTABLE_LEVELS 2

arch/x86/include/asm/paravirt.h

Lines changed: 12 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,6 @@ static inline void wbinvd(void)
160160
PVOP_VCALL0(cpu.wbinvd);
161161
}
162162

163-
#define get_kernel_rpl() (pv_info.kernel_rpl)
164-
165163
static inline u64 paravirt_read_msr(unsigned msr)
166164
{
167165
return PVOP_CALL1(u64, cpu.read_msr, msr);
@@ -277,12 +275,10 @@ static inline void load_TLS(struct thread_struct *t, unsigned cpu)
277275
PVOP_VCALL2(cpu.load_tls, t, cpu);
278276
}
279277

280-
#ifdef CONFIG_X86_64
281278
static inline void load_gs_index(unsigned int gs)
282279
{
283280
PVOP_VCALL1(cpu.load_gs_index, gs);
284281
}
285-
#endif
286282

287283
static inline void write_ldt_entry(struct desc_struct *dt, int entry,
288284
const void *desc)
@@ -375,52 +371,22 @@ static inline void paravirt_release_p4d(unsigned long pfn)
375371

376372
static inline pte_t __pte(pteval_t val)
377373
{
378-
pteval_t ret;
379-
380-
if (sizeof(pteval_t) > sizeof(long))
381-
ret = PVOP_CALLEE2(pteval_t, mmu.make_pte, val, (u64)val >> 32);
382-
else
383-
ret = PVOP_CALLEE1(pteval_t, mmu.make_pte, val);
384-
385-
return (pte_t) { .pte = ret };
374+
return (pte_t) { PVOP_CALLEE1(pteval_t, mmu.make_pte, val) };
386375
}
387376

388377
static inline pteval_t pte_val(pte_t pte)
389378
{
390-
pteval_t ret;
391-
392-
if (sizeof(pteval_t) > sizeof(long))
393-
ret = PVOP_CALLEE2(pteval_t, mmu.pte_val,
394-
pte.pte, (u64)pte.pte >> 32);
395-
else
396-
ret = PVOP_CALLEE1(pteval_t, mmu.pte_val, pte.pte);
397-
398-
return ret;
379+
return PVOP_CALLEE1(pteval_t, mmu.pte_val, pte.pte);
399380
}
400381

401382
static inline pgd_t __pgd(pgdval_t val)
402383
{
403-
pgdval_t ret;
404-
405-
if (sizeof(pgdval_t) > sizeof(long))
406-
ret = PVOP_CALLEE2(pgdval_t, mmu.make_pgd, val, (u64)val >> 32);
407-
else
408-
ret = PVOP_CALLEE1(pgdval_t, mmu.make_pgd, val);
409-
410-
return (pgd_t) { ret };
384+
return (pgd_t) { PVOP_CALLEE1(pgdval_t, mmu.make_pgd, val) };
411385
}
412386

413387
static inline pgdval_t pgd_val(pgd_t pgd)
414388
{
415-
pgdval_t ret;
416-
417-
if (sizeof(pgdval_t) > sizeof(long))
418-
ret = PVOP_CALLEE2(pgdval_t, mmu.pgd_val,
419-
pgd.pgd, (u64)pgd.pgd >> 32);
420-
else
421-
ret = PVOP_CALLEE1(pgdval_t, mmu.pgd_val, pgd.pgd);
422-
423-
return ret;
389+
return PVOP_CALLEE1(pgdval_t, mmu.pgd_val, pgd.pgd);
424390
}
425391

426392
#define __HAVE_ARCH_PTEP_MODIFY_PROT_TRANSACTION
@@ -438,78 +404,40 @@ static inline void ptep_modify_prot_commit(struct vm_area_struct *vma, unsigned
438404
pte_t *ptep, pte_t old_pte, pte_t pte)
439405
{
440406

441-
if (sizeof(pteval_t) > sizeof(long))
442-
/* 5 arg words */
443-
pv_ops.mmu.ptep_modify_prot_commit(vma, addr, ptep, pte);
444-
else
445-
PVOP_VCALL4(mmu.ptep_modify_prot_commit,
446-
vma, addr, ptep, pte.pte);
407+
PVOP_VCALL4(mmu.ptep_modify_prot_commit, vma, addr, ptep, pte.pte);
447408
}
448409

449410
static inline void set_pte(pte_t *ptep, pte_t pte)
450411
{
451-
if (sizeof(pteval_t) > sizeof(long))
452-
PVOP_VCALL3(mmu.set_pte, ptep, pte.pte, (u64)pte.pte >> 32);
453-
else
454-
PVOP_VCALL2(mmu.set_pte, ptep, pte.pte);
412+
PVOP_VCALL2(mmu.set_pte, ptep, pte.pte);
455413
}
456414

457415
static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
458416
pte_t *ptep, pte_t pte)
459417
{
460-
if (sizeof(pteval_t) > sizeof(long))
461-
/* 5 arg words */
462-
pv_ops.mmu.set_pte_at(mm, addr, ptep, pte);
463-
else
464-
PVOP_VCALL4(mmu.set_pte_at, mm, addr, ptep, pte.pte);
418+
PVOP_VCALL4(mmu.set_pte_at, mm, addr, ptep, pte.pte);
465419
}
466420

467421
static inline void set_pmd(pmd_t *pmdp, pmd_t pmd)
468422
{
469-
pmdval_t val = native_pmd_val(pmd);
470-
471-
if (sizeof(pmdval_t) > sizeof(long))
472-
PVOP_VCALL3(mmu.set_pmd, pmdp, val, (u64)val >> 32);
473-
else
474-
PVOP_VCALL2(mmu.set_pmd, pmdp, val);
423+
PVOP_VCALL2(mmu.set_pmd, pmdp, native_pmd_val(pmd));
475424
}
476425

477-
#if CONFIG_PGTABLE_LEVELS >= 3
478426
static inline pmd_t __pmd(pmdval_t val)
479427
{
480-
pmdval_t ret;
481-
482-
if (sizeof(pmdval_t) > sizeof(long))
483-
ret = PVOP_CALLEE2(pmdval_t, mmu.make_pmd, val, (u64)val >> 32);
484-
else
485-
ret = PVOP_CALLEE1(pmdval_t, mmu.make_pmd, val);
486-
487-
return (pmd_t) { ret };
428+
return (pmd_t) { PVOP_CALLEE1(pmdval_t, mmu.make_pmd, val) };
488429
}
489430

490431
static inline pmdval_t pmd_val(pmd_t pmd)
491432
{
492-
pmdval_t ret;
493-
494-
if (sizeof(pmdval_t) > sizeof(long))
495-
ret = PVOP_CALLEE2(pmdval_t, mmu.pmd_val,
496-
pmd.pmd, (u64)pmd.pmd >> 32);
497-
else
498-
ret = PVOP_CALLEE1(pmdval_t, mmu.pmd_val, pmd.pmd);
499-
500-
return ret;
433+
return PVOP_CALLEE1(pmdval_t, mmu.pmd_val, pmd.pmd);
501434
}
502435

503436
static inline void set_pud(pud_t *pudp, pud_t pud)
504437
{
505-
pudval_t val = native_pud_val(pud);
506-
507-
if (sizeof(pudval_t) > sizeof(long))
508-
PVOP_VCALL3(mmu.set_pud, pudp, val, (u64)val >> 32);
509-
else
510-
PVOP_VCALL2(mmu.set_pud, pudp, val);
438+
PVOP_VCALL2(mmu.set_pud, pudp, native_pud_val(pud));
511439
}
512-
#if CONFIG_PGTABLE_LEVELS >= 4
440+
513441
static inline pud_t __pud(pudval_t val)
514442
{
515443
pudval_t ret;
@@ -574,29 +502,6 @@ static inline void p4d_clear(p4d_t *p4dp)
574502
set_p4d(p4dp, __p4d(0));
575503
}
576504

577-
#endif /* CONFIG_PGTABLE_LEVELS == 4 */
578-
579-
#endif /* CONFIG_PGTABLE_LEVELS >= 3 */
580-
581-
#ifdef CONFIG_X86_PAE
582-
/* Special-case pte-setting operations for PAE, which can't update a
583-
64-bit pte atomically */
584-
static inline void set_pte_atomic(pte_t *ptep, pte_t pte)
585-
{
586-
PVOP_VCALL3(mmu.set_pte_atomic, ptep, pte.pte, pte.pte >> 32);
587-
}
588-
589-
static inline void pte_clear(struct mm_struct *mm, unsigned long addr,
590-
pte_t *ptep)
591-
{
592-
PVOP_VCALL3(mmu.pte_clear, mm, addr, ptep);
593-
}
594-
595-
static inline void pmd_clear(pmd_t *pmdp)
596-
{
597-
PVOP_VCALL1(mmu.pmd_clear, pmdp);
598-
}
599-
#else /* !CONFIG_X86_PAE */
600505
static inline void set_pte_atomic(pte_t *ptep, pte_t pte)
601506
{
602507
set_pte(ptep, pte);
@@ -612,7 +517,6 @@ static inline void pmd_clear(pmd_t *pmdp)
612517
{
613518
set_pmd(pmdp, __pmd(0));
614519
}
615-
#endif /* CONFIG_X86_PAE */
616520

617521
#define __HAVE_ARCH_START_CONTEXT_SWITCH
618522
static inline void arch_start_context_switch(struct task_struct *prev)

arch/x86/include/asm/paravirt_types.h

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,7 @@ struct paravirt_callee_save {
6868
/* general info */
6969
struct pv_info {
7070
#ifdef CONFIG_PARAVIRT_XXL
71-
unsigned int kernel_rpl;
72-
int shared_kernel_pmd;
73-
74-
#ifdef CONFIG_X86_64
7571
u16 extra_user_64bit_cs; /* __USER_CS if none */
76-
#endif
7772
#endif
7873

7974
const char *name;
@@ -126,9 +121,7 @@ struct pv_cpu_ops {
126121
void (*set_ldt)(const void *desc, unsigned entries);
127122
unsigned long (*store_tr)(void);
128123
void (*load_tls)(struct thread_struct *t, unsigned int cpu);
129-
#ifdef CONFIG_X86_64
130124
void (*load_gs_index)(unsigned int idx);
131-
#endif
132125
void (*write_ldt_entry)(struct desc_struct *ldt, int entrynum,
133126
const void *desc);
134127
void (*write_gdt_entry)(struct desc_struct *,
@@ -264,21 +257,11 @@ struct pv_mmu_ops {
264257
struct paravirt_callee_save pgd_val;
265258
struct paravirt_callee_save make_pgd;
266259

267-
#if CONFIG_PGTABLE_LEVELS >= 3
268-
#ifdef CONFIG_X86_PAE
269-
void (*set_pte_atomic)(pte_t *ptep, pte_t pteval);
270-
void (*pte_clear)(struct mm_struct *mm, unsigned long addr,
271-
pte_t *ptep);
272-
void (*pmd_clear)(pmd_t *pmdp);
273-
274-
#endif /* CONFIG_X86_PAE */
275-
276260
void (*set_pud)(pud_t *pudp, pud_t pudval);
277261

278262
struct paravirt_callee_save pmd_val;
279263
struct paravirt_callee_save make_pmd;
280264

281-
#if CONFIG_PGTABLE_LEVELS >= 4
282265
struct paravirt_callee_save pud_val;
283266
struct paravirt_callee_save make_pud;
284267

@@ -291,10 +274,6 @@ struct pv_mmu_ops {
291274
void (*set_pgd)(pgd_t *pgdp, pgd_t pgdval);
292275
#endif /* CONFIG_PGTABLE_LEVELS >= 5 */
293276

294-
#endif /* CONFIG_PGTABLE_LEVELS >= 4 */
295-
296-
#endif /* CONFIG_PGTABLE_LEVELS >= 3 */
297-
298277
struct pv_lazy_ops lazy_mode;
299278

300279
/* dom0 ops */

arch/x86/include/asm/pgtable-3level_types.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,7 @@ typedef union {
2020
} pte_t;
2121
#endif /* !__ASSEMBLY__ */
2222

23-
#ifdef CONFIG_PARAVIRT_XXL
24-
#define SHARED_KERNEL_PMD ((!static_cpu_has(X86_FEATURE_PTI) && \
25-
(pv_info.shared_kernel_pmd)))
26-
#else
2723
#define SHARED_KERNEL_PMD (!static_cpu_has(X86_FEATURE_PTI))
28-
#endif
2924

3025
#define ARCH_PAGE_TABLE_SYNC_MASK (SHARED_KERNEL_PMD ? 0 : PGTBL_PMD_MODIFIED)
3126

arch/x86/include/asm/segment.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -222,10 +222,6 @@
222222

223223
#endif
224224

225-
#ifndef CONFIG_PARAVIRT_XXL
226-
# define get_kernel_rpl() 0
227-
#endif
228-
229225
#define IDT_ENTRIES 256
230226
#define NUM_EXCEPTION_VECTORS 32
231227

arch/x86/kernel/cpu/common.c

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1413,15 +1413,7 @@ static void generic_identify(struct cpuinfo_x86 *c)
14131413
* ESPFIX issue, we can change this.
14141414
*/
14151415
#ifdef CONFIG_X86_32
1416-
# ifdef CONFIG_PARAVIRT_XXL
1417-
do {
1418-
extern void native_iret(void);
1419-
if (pv_ops.cpu.iret == native_iret)
1420-
set_cpu_bug(c, X86_BUG_ESPFIX);
1421-
} while (0);
1422-
# else
14231416
set_cpu_bug(c, X86_BUG_ESPFIX);
1424-
# endif
14251417
#endif
14261418
}
14271419

arch/x86/kernel/kprobes/core.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,6 @@ __used __visible void *trampoline_handler(struct pt_regs *regs)
793793
/* fixup registers */
794794
regs->cs = __KERNEL_CS;
795795
#ifdef CONFIG_X86_32
796-
regs->cs |= get_kernel_rpl();
797796
regs->gs = 0;
798797
#endif
799798
/* We use pt_regs->sp for return address holder. */

arch/x86/kernel/kprobes/opt.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,6 @@ optimized_callback(struct optimized_kprobe *op, struct pt_regs *regs)
181181
/* Save skipped registers */
182182
regs->cs = __KERNEL_CS;
183183
#ifdef CONFIG_X86_32
184-
regs->cs |= get_kernel_rpl();
185184
regs->gs = 0;
186185
#endif
187186
regs->ip = (unsigned long)op->kp.addr + INT3_INSN_SIZE;

arch/x86/kernel/paravirt.c

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -263,13 +263,8 @@ enum paravirt_lazy_mode paravirt_get_lazy_mode(void)
263263
struct pv_info pv_info = {
264264
.name = "bare hardware",
265265
#ifdef CONFIG_PARAVIRT_XXL
266-
.kernel_rpl = 0,
267-
.shared_kernel_pmd = 1, /* Only used when CONFIG_X86_PAE is set */
268-
269-
#ifdef CONFIG_X86_64
270266
.extra_user_64bit_cs = __USER_CS,
271267
#endif
272-
#endif
273268
};
274269

275270
/* 64-bit pagetable entries */
@@ -305,9 +300,7 @@ struct paravirt_patch_template pv_ops = {
305300
.cpu.load_idt = native_load_idt,
306301
.cpu.store_tr = native_store_tr,
307302
.cpu.load_tls = native_load_tls,
308-
#ifdef CONFIG_X86_64
309303
.cpu.load_gs_index = native_load_gs_index,
310-
#endif
311304
.cpu.write_ldt_entry = native_write_ldt_entry,
312305
.cpu.write_gdt_entry = native_write_gdt_entry,
313306
.cpu.write_idt_entry = native_write_idt_entry,
@@ -317,9 +310,7 @@ struct paravirt_patch_template pv_ops = {
317310

318311
.cpu.load_sp0 = native_load_sp0,
319312

320-
#ifdef CONFIG_X86_64
321313
.cpu.usergs_sysret64 = native_usergs_sysret64,
322-
#endif
323314
.cpu.iret = native_iret,
324315
.cpu.swapgs = native_swapgs,
325316

@@ -375,18 +366,11 @@ struct paravirt_patch_template pv_ops = {
375366
.mmu.ptep_modify_prot_start = __ptep_modify_prot_start,
376367
.mmu.ptep_modify_prot_commit = __ptep_modify_prot_commit,
377368

378-
#if CONFIG_PGTABLE_LEVELS >= 3
379-
#ifdef CONFIG_X86_PAE
380-
.mmu.set_pte_atomic = native_set_pte_atomic,
381-
.mmu.pte_clear = native_pte_clear,
382-
.mmu.pmd_clear = native_pmd_clear,
383-
#endif
384369
.mmu.set_pud = native_set_pud,
385370

386371
.mmu.pmd_val = PTE_IDENT,
387372
.mmu.make_pmd = PTE_IDENT,
388373

389-
#if CONFIG_PGTABLE_LEVELS >= 4
390374
.mmu.pud_val = PTE_IDENT,
391375
.mmu.make_pud = PTE_IDENT,
392376

@@ -398,8 +382,6 @@ struct paravirt_patch_template pv_ops = {
398382

399383
.mmu.set_pgd = native_set_pgd,
400384
#endif /* CONFIG_PGTABLE_LEVELS >= 5 */
401-
#endif /* CONFIG_PGTABLE_LEVELS >= 4 */
402-
#endif /* CONFIG_PGTABLE_LEVELS >= 3 */
403385

404386
.mmu.pte_val = PTE_IDENT,
405387
.mmu.pgd_val = PTE_IDENT,

0 commit comments

Comments
 (0)