Print this page
8956 Implement KPTI
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/i86pc/sys/pc_mmu.h
          +++ new/usr/src/uts/i86pc/sys/pc_mmu.h
↓ open down ↓ 13 lines elided ↑ open up ↑
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  23   23   * Use is subject to license terms.
       24 + *
       25 + * Copyright 2018 Joyent, Inc.
  24   26   */
  25   27  
  26   28  #ifndef _SYS_PC_MMU_H
  27   29  #define _SYS_PC_MMU_H
  28   30  
  29      -#pragma ident   "%Z%%M% %I%     %E% SMI"
  30      -
  31   31  #ifdef __cplusplus
  32   32  extern "C" {
  33   33  #endif
  34   34  
  35   35  /*
  36   36   * Platform-dependent MMU routines and types for real x86 hardware.
  37   37   *
  38   38   * WARNING: this header file is used by both dboot and i86pc, so don't go using
  39   39   * normal kernel headers.
  40   40   */
↓ open down ↓ 2 lines elided ↑ open up ↑
  43   43  
  44   44  void reload_cr3(void);
  45   45  
  46   46  #define pa_to_ma(pa) (pa)
  47   47  #define ma_to_pa(ma) (ma)
  48   48  #define pfn_to_mfn(pfn) (pfn)
  49   49  #define mfn_to_pfn(mfn) (mfn)
  50   50  
  51   51  #ifndef _BOOT
  52   52  
  53      -void mmu_tlbflush_entry(caddr_t);
  54      -void setcr3(ulong_t);
       53 +extern uint64_t kpti_safe_cr3;
  55   54  
       55 +#define INVPCID_ADDR            (0)
       56 +#define INVPCID_ID              (1)
       57 +#define INVPCID_ALL_GLOBAL      (2)
       58 +#define INVPCID_ALL_NONGLOBAL   (3)
       59 +
       60 +extern void invpcid_insn(uint64_t, uint64_t, uintptr_t);
       61 +extern void tr_mmu_flush_user_range(uint64_t, size_t, size_t, uint64_t);
       62 +
  56   63  #if defined(__GNUC__)
  57   64  #include <asm/mmu.h>
  58   65  #endif
  59   66  
  60   67  #endif /* !_BOOT */
  61   68  
  62   69  #ifdef __cplusplus
  63   70  }
  64   71  #endif
  65   72  
  66   73  #endif  /* _SYS_PC_MMU_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX