linux/arch/x86/include/asm/processor.h
<<
>>
Prefs
   1#ifndef _ASM_X86_PROCESSOR_H
   2#define _ASM_X86_PROCESSOR_H
   3
   4#include <asm/processor-flags.h>
   5
   6/* Forward declaration, a strange C thing */
   7struct task_struct;
   8struct mm_struct;
   9
  10#include <asm/vm86.h>
  11#include <asm/math_emu.h>
  12#include <asm/segment.h>
  13#include <asm/types.h>
  14#include <asm/sigcontext.h>
  15#include <asm/current.h>
  16#include <asm/cpufeature.h>
  17#include <asm/page.h>
  18#include <asm/pgtable_types.h>
  19#include <asm/percpu.h>
  20#include <asm/msr.h>
  21#include <asm/desc_defs.h>
  22#include <asm/nops.h>
  23#include <asm/special_insns.h>
  24
  25#include <linux/personality.h>
  26#include <linux/cpumask.h>
  27#include <linux/cache.h>
  28#include <linux/threads.h>
  29#include <linux/math64.h>
  30#include <linux/init.h>
  31#include <linux/err.h>
  32#include <linux/irqflags.h>
  33
  34/*
  35 * We handle most unaligned accesses in hardware.  On the other hand
  36 * unaligned DMA can be quite expensive on some Nehalem processors.
  37 *
  38 * Based on this we disable the IP header alignment in network drivers.
  39 */
  40#define NET_IP_ALIGN    0
  41
  42#define HBP_NUM 4
  43/*
  44 * Default implementation of macro that returns current
  45 * instruction pointer ("program counter").
  46 */
  47static inline void *current_text_addr(void)
  48{
  49        void *pc;
  50
  51        asm volatile("mov $1f, %0; 1:":"=r" (pc));
  52
  53        return pc;
  54}
  55
  56#ifdef CONFIG_X86_VSMP
  57# define ARCH_MIN_TASKALIGN             (1 << INTERNODE_CACHE_SHIFT)
  58# define ARCH_MIN_MMSTRUCT_ALIGN        (1 << INTERNODE_CACHE_SHIFT)
  59#else
  60# define ARCH_MIN_TASKALIGN             16
  61# define ARCH_MIN_MMSTRUCT_ALIGN        0
  62#endif
  63
  64enum tlb_infos {
  65        ENTRIES,
  66        NR_INFO
  67};
  68
  69extern u16 __read_mostly tlb_lli_4k[NR_INFO];
  70extern u16 __read_mostly tlb_lli_2m[NR_INFO];
  71extern u16 __read_mostly tlb_lli_4m[NR_INFO];
  72extern u16 __read_mostly tlb_lld_4k[NR_INFO];
  73extern u16 __read_mostly tlb_lld_2m[NR_INFO];
  74extern u16 __read_mostly tlb_lld_4m[NR_INFO];
  75extern s8  __read_mostly tlb_flushall_shift;
  76
  77/*
  78 *  CPU type and hardware bug flags. Kept separately for each CPU.
  79 *  Members of this structure are referenced in head.S, so think twice
  80 *  before touching them. [mj]
  81 */
  82
  83struct cpuinfo_x86 {
  84        __u8                    x86;            /* CPU family */
  85        __u8                    x86_vendor;     /* CPU vendor */
  86        __u8                    x86_model;
  87        __u8                    x86_mask;
  88#ifdef CONFIG_X86_32
  89        char                    wp_works_ok;    /* It doesn't on 386's */
  90
  91        /* Problems on some 486Dx4's and old 386's: */
  92        char                    hlt_works_ok;
  93        char                    hard_math;
  94        char                    rfu;
  95        char                    fdiv_bug;
  96        char                    f00f_bug;
  97        char                    coma_bug;
  98        char                    pad0;
  99#else
 100        /* Number of 4K pages in DTLB/ITLB combined(in pages): */
 101        int                     x86_tlbsize;
 102#endif
 103        __u8                    x86_virt_bits;
 104        __u8                    x86_phys_bits;
 105        /* CPUID returned core id bits: */
 106        __u8                    x86_coreid_bits;
 107        /* Max extended CPUID function supported: */
 108        __u32                   extended_cpuid_level;
 109        /* Maximum supported CPUID level, -1=no CPUID: */
 110        int                     cpuid_level;
 111        __u32                   x86_capability[NCAPINTS];
 112        char                    x86_vendor_id[16];
 113        char                    x86_model_id[64];
 114        /* in KB - valid for CPUS which support this call: */
 115        int                     x86_cache_size;
 116        int                     x86_cache_alignment;    /* In bytes */
 117        int                     x86_power;
 118        unsigned long           loops_per_jiffy;
 119        /* cpuid returned max cores value: */
 120        u16                      x86_max_cores;
 121        u16                     apicid;
 122        u16                     initial_apicid;
 123        u16                     x86_clflush_size;
 124        /* number of cores as seen by the OS: */
 125        u16                     booted_cores;
 126        /* Physical processor id: */
 127        u16                     phys_proc_id;
 128        /* Core id: */
 129        u16                     cpu_core_id;
 130        /* Compute unit id */
 131        u8                      compute_unit_id;
 132        /* Index into per_cpu list: */
 133        u16                     cpu_index;
 134        u32                     microcode;
 135} __attribute__((__aligned__(SMP_CACHE_BYTES)));
 136
 137#define X86_VENDOR_INTEL        0
 138#define X86_VENDOR_CYRIX        1
 139#define X86_VENDOR_AMD          2
 140#define X86_VENDOR_UMC          3
 141#define X86_VENDOR_CENTAUR      5
 142#define X86_VENDOR_TRANSMETA    7
 143#define X86_VENDOR_NSC          8
 144#define X86_VENDOR_NUM          9
 145
 146#define X86_VENDOR_UNKNOWN      0xff
 147
 148/*
 149 * capabilities of CPUs
 150 */
 151extern struct cpuinfo_x86       boot_cpu_data;
 152extern struct cpuinfo_x86       new_cpu_data;
 153
 154extern struct tss_struct        doublefault_tss;
 155extern __u32                    cpu_caps_cleared[NCAPINTS];
 156extern __u32                    cpu_caps_set[NCAPINTS];
 157
 158#ifdef CONFIG_SMP
 159DECLARE_PER_CPU_SHARED_ALIGNED(struct cpuinfo_x86, cpu_info);
 160#define cpu_data(cpu)           per_cpu(cpu_info, cpu)
 161#else
 162#define cpu_info                boot_cpu_data
 163#define cpu_data(cpu)           boot_cpu_data
 164#endif
 165
 166extern const struct seq_operations cpuinfo_op;
 167
 168static inline int hlt_works(int cpu)
 169{
 170#ifdef CONFIG_X86_32
 171        return cpu_data(cpu).hlt_works_ok;
 172#else
 173        return 1;
 174#endif
 175}
 176
 177#define cache_line_size()       (boot_cpu_data.x86_cache_alignment)
 178
 179extern void cpu_detect(struct cpuinfo_x86 *c);
 180
 181extern struct pt_regs *idle_regs(struct pt_regs *);
 182
 183extern void early_cpu_init(void);
 184extern void identify_boot_cpu(void);
 185extern void identify_secondary_cpu(struct cpuinfo_x86 *);
 186extern void print_cpu_info(struct cpuinfo_x86 *);
 187void print_cpu_msr(struct cpuinfo_x86 *);
 188extern void init_scattered_cpuid_features(struct cpuinfo_x86 *c);
 189extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c);
 190extern unsigned short num_cache_leaves;
 191
 192extern void detect_extended_topology(struct cpuinfo_x86 *c);
 193extern void detect_ht(struct cpuinfo_x86 *c);
 194
 195static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,
 196                                unsigned int *ecx, unsigned int *edx)
 197{
 198        /* ecx is often an input as well as an output. */
 199        asm volatile("cpuid"
 200            : "=a" (*eax),
 201              "=b" (*ebx),
 202              "=c" (*ecx),
 203              "=d" (*edx)
 204            : "0" (*eax), "2" (*ecx)
 205            : "memory");
 206}
 207
 208static inline void load_cr3(pgd_t *pgdir)
 209{
 210        write_cr3(__pa(pgdir));
 211}
 212
 213#ifdef CONFIG_X86_32
 214/* This is the TSS defined by the hardware. */
 215struct x86_hw_tss {
 216        unsigned short          back_link, __blh;
 217        unsigned long           sp0;
 218        unsigned short          ss0, __ss0h;
 219        unsigned long           sp1;
 220        /* ss1 caches MSR_IA32_SYSENTER_CS: */
 221        unsigned short          ss1, __ss1h;
 222        unsigned long           sp2;
 223        unsigned short          ss2, __ss2h;
 224        unsigned long           __cr3;
 225        unsigned long           ip;
 226        unsigned long           flags;
 227        unsigned long           ax;
 228        unsigned long           cx;
 229        unsigned long           dx;
 230        unsigned long           bx;
 231        unsigned long           sp;
 232        unsigned long           bp;
 233        unsigned long           si;
 234        unsigned long           di;
 235        unsigned short          es, __esh;
 236        unsigned short          cs, __csh;
 237        unsigned short          ss, __ssh;
 238        unsigned short          ds, __dsh;
 239        unsigned short          fs, __fsh;
 240        unsigned short          gs, __gsh;
 241        unsigned short          ldt, __ldth;
 242        unsigned short          trace;
 243        unsigned short          io_bitmap_base;
 244
 245} __attribute__((packed));
 246#else
 247struct x86_hw_tss {
 248        u32                     reserved1;
 249        u64                     sp0;
 250        u64                     sp1;
 251        u64                     sp2;
 252        u64                     reserved2;
 253        u64                     ist[7];
 254        u32                     reserved3;
 255        u32                     reserved4;
 256        u16                     reserved5;
 257        u16                     io_bitmap_base;
 258
 259} __attribute__((packed)) ____cacheline_aligned;
 260#endif
 261
 262/*
 263 * IO-bitmap sizes:
 264 */
 265#define IO_BITMAP_BITS                  65536
 266#define IO_BITMAP_BYTES                 (IO_BITMAP_BITS/8)
 267#define IO_BITMAP_LONGS                 (IO_BITMAP_BYTES/sizeof(long))
 268#define IO_BITMAP_OFFSET                offsetof(struct tss_struct, io_bitmap)
 269#define INVALID_IO_BITMAP_OFFSET        0x8000
 270
 271struct tss_struct {
 272        /*
 273         * The hardware state:
 274         */
 275        struct x86_hw_tss       x86_tss;
 276
 277        /*
 278         * The extra 1 is there because the CPU will access an
 279         * additional byte beyond the end of the IO permission
 280         * bitmap. The extra byte must be all 1 bits, and must
 281         * be within the limit.
 282         */
 283        unsigned long           io_bitmap[IO_BITMAP_LONGS + 1];
 284
 285        /*
 286         * .. and then another 0x100 bytes for the emergency kernel stack:
 287         */
 288        unsigned long           stack[64];
 289
 290} ____cacheline_aligned;
 291
 292DECLARE_PER_CPU_SHARED_ALIGNED(struct tss_struct, init_tss);
 293
 294/*
 295 * Save the original ist values for checking stack pointers during debugging
 296 */
 297struct orig_ist {
 298        unsigned long           ist[7];
 299};
 300
 301#define MXCSR_DEFAULT           0x1f80
 302
 303struct i387_fsave_struct {
 304        u32                     cwd;    /* FPU Control Word             */
 305        u32                     swd;    /* FPU Status Word              */
 306        u32                     twd;    /* FPU Tag Word                 */
 307        u32                     fip;    /* FPU IP Offset                */
 308        u32                     fcs;    /* FPU IP Selector              */
 309        u32                     foo;    /* FPU Operand Pointer Offset   */
 310        u32                     fos;    /* FPU Operand Pointer Selector */
 311
 312        /* 8*10 bytes for each FP-reg = 80 bytes:                       */
 313        u32                     st_space[20];
 314
 315        /* Software status information [not touched by FSAVE ]:         */
 316        u32                     status;
 317};
 318
 319struct i387_fxsave_struct {
 320        u16                     cwd; /* Control Word                    */
 321        u16                     swd; /* Status Word                     */
 322        u16                     twd; /* Tag Word                        */
 323        u16                     fop; /* Last Instruction Opcode         */
 324        union {
 325                struct {
 326                        u64     rip; /* Instruction Pointer             */
 327                        u64     rdp; /* Data Pointer                    */
 328                };
 329                struct {
 330                        u32     fip; /* FPU IP Offset                   */
 331                        u32     fcs; /* FPU IP Selector                 */
 332                        u32     foo; /* FPU Operand Offset              */
 333                        u32     fos; /* FPU Operand Selector            */
 334                };
 335        };
 336        u32                     mxcsr;          /* MXCSR Register State */
 337        u32                     mxcsr_mask;     /* MXCSR Mask           */
 338
 339        /* 8*16 bytes for each FP-reg = 128 bytes:                      */
 340        u32                     st_space[32];
 341
 342        /* 16*16 bytes for each XMM-reg = 256 bytes:                    */
 343        u32                     xmm_space[64];
 344
 345        u32                     padding[12];
 346
 347        union {
 348                u32             padding1[12];
 349                u32             sw_reserved[12];
 350        };
 351
 352} __attribute__((aligned(16)));
 353
 354struct i387_soft_struct {
 355        u32                     cwd;
 356        u32                     swd;
 357        u32                     twd;
 358        u32                     fip;
 359        u32                     fcs;
 360        u32                     foo;
 361        u32                     fos;
 362        /* 8*10 bytes for each FP-reg = 80 bytes: */
 363        u32                     st_space[20];
 364        u8                      ftop;
 365        u8                      changed;
 366        u8                      lookahead;
 367        u8                      no_update;
 368        u8                      rm;
 369        u8                      alimit;
 370        struct math_emu_info    *info;
 371        u32                     entry_eip;
 372};
 373
 374struct ymmh_struct {
 375        /* 16 * 16 bytes for each YMMH-reg = 256 bytes */
 376        u32 ymmh_space[64];
 377};
 378
 379struct xsave_hdr_struct {
 380        u64 xstate_bv;
 381        u64 reserved1[2];
 382        u64 reserved2[5];
 383} __attribute__((packed));
 384
 385struct xsave_struct {
 386        struct i387_fxsave_struct i387;
 387        struct xsave_hdr_struct xsave_hdr;
 388        struct ymmh_struct ymmh;
 389        /* new processor state extensions will go here */
 390} __attribute__ ((packed, aligned (64)));
 391
 392union thread_xstate {
 393        struct i387_fsave_struct        fsave;
 394        struct i387_fxsave_struct       fxsave;
 395        struct i387_soft_struct         soft;
 396        struct xsave_struct             xsave;
 397};
 398
 399struct fpu {
 400        unsigned int last_cpu;
 401        unsigned int has_fpu;
 402        union thread_xstate *state;
 403};
 404
 405#ifdef CONFIG_X86_64
 406DECLARE_PER_CPU(struct orig_ist, orig_ist);
 407
 408union irq_stack_union {
 409        char irq_stack[IRQ_STACK_SIZE];
 410        /*
 411         * GCC hardcodes the stack canary as %gs:40.  Since the
 412         * irq_stack is the object at %gs:0, we reserve the bottom
 413         * 48 bytes of the irq stack for the canary.
 414         */
 415        struct {
 416                char gs_base[40];
 417                unsigned long stack_canary;
 418        };
 419};
 420
 421DECLARE_PER_CPU_FIRST(union irq_stack_union, irq_stack_union);
 422DECLARE_INIT_PER_CPU(irq_stack_union);
 423
 424DECLARE_PER_CPU(char *, irq_stack_ptr);
 425DECLARE_PER_CPU(unsigned int, irq_count);
 426extern unsigned long kernel_eflags;
 427extern asmlinkage void ignore_sysret(void);
 428#else   /* X86_64 */
 429#ifdef CONFIG_CC_STACKPROTECTOR
 430/*
 431 * Make sure stack canary segment base is cached-aligned:
 432 *   "For Intel Atom processors, avoid non zero segment base address
 433 *    that is not aligned to cache line boundary at all cost."
 434 * (Optim Ref Manual Assembly/Compiler Coding Rule 15.)
 435 */
 436struct stack_canary {
 437        char __pad[20];         /* canary at %gs:20 */
 438        unsigned long canary;
 439};
 440DECLARE_PER_CPU_ALIGNED(struct stack_canary, stack_canary);
 441#endif
 442#endif  /* X86_64 */
 443
 444extern unsigned int xstate_size;
 445extern void free_thread_xstate(struct task_struct *);
 446extern struct kmem_cache *task_xstate_cachep;
 447
 448struct perf_event;
 449
 450struct thread_struct {
 451        /* Cached TLS descriptors: */
 452        struct desc_struct      tls_array[GDT_ENTRY_TLS_ENTRIES];
 453        unsigned long           sp0;
 454        unsigned long           sp;
 455#ifdef CONFIG_X86_32
 456        unsigned long           sysenter_cs;
 457#else
 458        unsigned long           usersp; /* Copy from PDA */
 459        unsigned short          es;
 460        unsigned short          ds;
 461        unsigned short          fsindex;
 462        unsigned short          gsindex;
 463#endif
 464#ifdef CONFIG_X86_32
 465        unsigned long           ip;
 466#endif
 467#ifdef CONFIG_X86_64
 468        unsigned long           fs;
 469#endif
 470        unsigned long           gs;
 471        /* Save middle states of ptrace breakpoints */
 472        struct perf_event       *ptrace_bps[HBP_NUM];
 473        /* Debug status used for traps, single steps, etc... */
 474        unsigned long           debugreg6;
 475        /* Keep track of the exact dr7 value set by the user */
 476        unsigned long           ptrace_dr7;
 477        /* Fault info: */
 478        unsigned long           cr2;
 479        unsigned long           trap_nr;
 480        unsigned long           error_code;
 481        /* floating point and extended processor state */
 482        struct fpu              fpu;
 483#ifdef CONFIG_X86_32
 484        /* Virtual 86 mode info */
 485        struct vm86_struct __user *vm86_info;
 486        unsigned long           screen_bitmap;
 487        unsigned long           v86flags;
 488        unsigned long           v86mask;
 489        unsigned long           saved_sp0;
 490        unsigned int            saved_fs;
 491        unsigned int            saved_gs;
 492#endif
 493        /* IO permissions: */
 494        unsigned long           *io_bitmap_ptr;
 495        unsigned long           iopl;
 496        /* Max allowed port in the bitmap, in bytes: */
 497        unsigned                io_bitmap_max;
 498};
 499
 500/*
 501 * Set IOPL bits in EFLAGS from given mask
 502 */
 503static inline void native_set_iopl_mask(unsigned mask)
 504{
 505#ifdef CONFIG_X86_32
 506        unsigned int reg;
 507
 508        asm volatile ("pushfl;"
 509                      "popl %0;"
 510                      "andl %1, %0;"
 511                      "orl %2, %0;"
 512                      "pushl %0;"
 513                      "popfl"
 514                      : "=&r" (reg)
 515                      : "i" (~X86_EFLAGS_IOPL), "r" (mask));
 516#endif
 517}
 518
 519static inline void
 520native_load_sp0(struct tss_struct *tss, struct thread_struct *thread)
 521{
 522        tss->x86_tss.sp0 = thread->sp0;
 523#ifdef CONFIG_X86_32
 524        /* Only happens when SEP is enabled, no need to test "SEP"arately: */
 525        if (unlikely(tss->x86_tss.ss1 != thread->sysenter_cs)) {
 526                tss->x86_tss.ss1 = thread->sysenter_cs;
 527                wrmsr(MSR_IA32_SYSENTER_CS, thread->sysenter_cs, 0);
 528        }
 529#endif
 530}
 531
 532static inline void native_swapgs(void)
 533{
 534#ifdef CONFIG_X86_64
 535        asm volatile("swapgs" ::: "memory");
 536#endif
 537}
 538
 539#ifdef CONFIG_PARAVIRT
 540#include <asm/paravirt.h>
 541#else
 542#define __cpuid                 native_cpuid
 543#define paravirt_enabled()      0
 544
 545static inline void load_sp0(struct tss_struct *tss,
 546                            struct thread_struct *thread)
 547{
 548        native_load_sp0(tss, thread);
 549}
 550
 551#define set_iopl_mask native_set_iopl_mask
 552#endif /* CONFIG_PARAVIRT */
 553
 554/*
 555 * Save the cr4 feature set we're using (ie
 556 * Pentium 4MB enable and PPro Global page
 557 * enable), so that any CPU's that boot up
 558 * after us can get the correct flags.
 559 */
 560extern unsigned long mmu_cr4_features;
 561extern u32 *trampoline_cr4_features;
 562
 563static inline void set_in_cr4(unsigned long mask)
 564{
 565        unsigned long cr4;
 566
 567        mmu_cr4_features |= mask;
 568        if (trampoline_cr4_features)
 569                *trampoline_cr4_features = mmu_cr4_features;
 570        cr4 = read_cr4();
 571        cr4 |= mask;
 572        write_cr4(cr4);
 573}
 574
 575static inline void clear_in_cr4(unsigned long mask)
 576{
 577        unsigned long cr4;
 578
 579        mmu_cr4_features &= ~mask;
 580        if (trampoline_cr4_features)
 581                *trampoline_cr4_features = mmu_cr4_features;
 582        cr4 = read_cr4();
 583        cr4 &= ~mask;
 584        write_cr4(cr4);
 585}
 586
 587typedef struct {
 588        unsigned long           seg;
 589} mm_segment_t;
 590
 591
 592/*
 593 * create a kernel thread without removing it from tasklists
 594 */
 595extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
 596
 597/* Free all resources held by a thread. */
 598extern void release_thread(struct task_struct *);
 599
 600unsigned long get_wchan(struct task_struct *p);
 601
 602/*
 603 * Generic CPUID function
 604 * clear %ecx since some cpus (Cyrix MII) do not set or clear %ecx
 605 * resulting in stale register contents being returned.
 606 */
 607static inline void cpuid(unsigned int op,
 608                         unsigned int *eax, unsigned int *ebx,
 609                         unsigned int *ecx, unsigned int *edx)
 610{
 611        *eax = op;
 612        *ecx = 0;
 613        __cpuid(eax, ebx, ecx, edx);
 614}
 615
 616/* Some CPUID calls want 'count' to be placed in ecx */
 617static inline void cpuid_count(unsigned int op, int count,
 618                               unsigned int *eax, unsigned int *ebx,
 619                               unsigned int *ecx, unsigned int *edx)
 620{
 621        *eax = op;
 622        *ecx = count;
 623        __cpuid(eax, ebx, ecx, edx);
 624}
 625
 626/*
 627 * CPUID functions returning a single datum
 628 */
 629static inline unsigned int cpuid_eax(unsigned int op)
 630{
 631        unsigned int eax, ebx, ecx, edx;
 632
 633        cpuid(op, &eax, &ebx, &ecx, &edx);
 634
 635        return eax;
 636}
 637
 638static inline unsigned int cpuid_ebx(unsigned int op)
 639{
 640        unsigned int eax, ebx, ecx, edx;
 641
 642        cpuid(op, &eax, &ebx, &ecx, &edx);
 643
 644        return ebx;
 645}
 646
 647static inline unsigned int cpuid_ecx(unsigned int op)
 648{
 649        unsigned int eax, ebx, ecx, edx;
 650
 651        cpuid(op, &eax, &ebx, &ecx, &edx);
 652
 653        return ecx;
 654}
 655
 656static inline unsigned int cpuid_edx(unsigned int op)
 657{
 658        unsigned int eax, ebx, ecx, edx;
 659
 660        cpuid(op, &eax, &ebx, &ecx, &edx);
 661
 662        return edx;
 663}
 664
 665/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
 666static inline void rep_nop(void)
 667{
 668        asm volatile("rep; nop" ::: "memory");
 669}
 670
 671static inline void cpu_relax(void)
 672{
 673        rep_nop();
 674}
 675
 676/* Stop speculative execution and prefetching of modified code. */
 677static inline void sync_core(void)
 678{
 679        int tmp;
 680
 681#if defined(CONFIG_M386) || defined(CONFIG_M486)
 682        if (boot_cpu_data.x86 < 5)
 683                /* There is no speculative execution.
 684                 * jmp is a barrier to prefetching. */
 685                asm volatile("jmp 1f\n1:\n" ::: "memory");
 686        else
 687#endif
 688                /* cpuid is a barrier to speculative execution.
 689                 * Prefetched instructions are automatically
 690                 * invalidated when modified. */
 691                asm volatile("cpuid" : "=a" (tmp) : "0" (1)
 692                             : "ebx", "ecx", "edx", "memory");
 693}
 694
 695static inline void __monitor(const void *eax, unsigned long ecx,
 696                             unsigned long edx)
 697{
 698        /* "monitor %eax, %ecx, %edx;" */
 699        asm volatile(".byte 0x0f, 0x01, 0xc8;"
 700                     :: "a" (eax), "c" (ecx), "d"(edx));
 701}
 702
 703static inline void __mwait(unsigned long eax, unsigned long ecx)
 704{
 705        /* "mwait %eax, %ecx;" */
 706        asm volatile(".byte 0x0f, 0x01, 0xc9;"
 707                     :: "a" (eax), "c" (ecx));
 708}
 709
 710static inline void __sti_mwait(unsigned long eax, unsigned long ecx)
 711{
 712        trace_hardirqs_on();
 713        /* "mwait %eax, %ecx;" */
 714        asm volatile("sti; .byte 0x0f, 0x01, 0xc9;"
 715                     :: "a" (eax), "c" (ecx));
 716}
 717
 718extern void select_idle_routine(const struct cpuinfo_x86 *c);
 719extern void init_amd_e400_c1e_mask(void);
 720
 721extern unsigned long            boot_option_idle_override;
 722extern bool                     amd_e400_c1e_detected;
 723
 724enum idle_boot_override {IDLE_NO_OVERRIDE=0, IDLE_HALT, IDLE_NOMWAIT,
 725                         IDLE_POLL, IDLE_FORCE_MWAIT};
 726
 727extern void enable_sep_cpu(void);
 728extern int sysenter_setup(void);
 729
 730extern void early_trap_init(void);
 731
 732/* Defined in head.S */
 733extern struct desc_ptr          early_gdt_descr;
 734
 735extern void cpu_set_gdt(int);
 736extern void switch_to_new_gdt(int);
 737extern void load_percpu_segment(int);
 738extern void cpu_init(void);
 739
 740static inline unsigned long get_debugctlmsr(void)
 741{
 742        unsigned long debugctlmsr = 0;
 743
 744#ifndef CONFIG_X86_DEBUGCTLMSR
 745        if (boot_cpu_data.x86 < 6)
 746                return 0;
 747#endif
 748        rdmsrl(MSR_IA32_DEBUGCTLMSR, debugctlmsr);
 749
 750        return debugctlmsr;
 751}
 752
 753static inline void update_debugctlmsr(unsigned long debugctlmsr)
 754{
 755#ifndef CONFIG_X86_DEBUGCTLMSR
 756        if (boot_cpu_data.x86 < 6)
 757                return;
 758#endif
 759        wrmsrl(MSR_IA32_DEBUGCTLMSR, debugctlmsr);
 760}
 761
 762/*
 763 * from system description table in BIOS. Mostly for MCA use, but
 764 * others may find it useful:
 765 */
 766extern unsigned int             machine_id;
 767extern unsigned int             machine_submodel_id;
 768extern unsigned int             BIOS_revision;
 769
 770/* Boot loader type from the setup header: */
 771extern int                      bootloader_type;
 772extern int                      bootloader_version;
 773
 774extern char                     ignore_fpu_irq;
 775
 776#define HAVE_ARCH_PICK_MMAP_LAYOUT 1
 777#define ARCH_HAS_PREFETCHW
 778#define ARCH_HAS_SPINLOCK_PREFETCH
 779
 780#ifdef CONFIG_X86_32
 781# define BASE_PREFETCH          ASM_NOP4
 782# define ARCH_HAS_PREFETCH
 783#else
 784# define BASE_PREFETCH          "prefetcht0 (%1)"
 785#endif
 786
 787/*
 788 * Prefetch instructions for Pentium III (+) and AMD Athlon (+)
 789 *
 790 * It's not worth to care about 3dnow prefetches for the K6
 791 * because they are microcoded there and very slow.
 792 */
 793static inline void prefetch(const void *x)
 794{
 795        alternative_input(BASE_PREFETCH,
 796                          "prefetchnta (%1)",
 797                          X86_FEATURE_XMM,
 798                          "r" (x));
 799}
 800
 801/*
 802 * 3dnow prefetch to get an exclusive cache line.
 803 * Useful for spinlocks to avoid one state transition in the
 804 * cache coherency protocol:
 805 */
 806static inline void prefetchw(const void *x)
 807{
 808        alternative_input(BASE_PREFETCH,
 809                          "prefetchw (%1)",
 810                          X86_FEATURE_3DNOW,
 811                          "r" (x));
 812}
 813
 814static inline void spin_lock_prefetch(const void *x)
 815{
 816        prefetchw(x);
 817}
 818
 819#ifdef CONFIG_X86_32
 820/*
 821 * User space process size: 3GB (default).
 822 */
 823#define TASK_SIZE               PAGE_OFFSET
 824#define TASK_SIZE_MAX           TASK_SIZE
 825#define STACK_TOP               TASK_SIZE
 826#define STACK_TOP_MAX           STACK_TOP
 827
 828#define INIT_THREAD  {                                                    \
 829        .sp0                    = sizeof(init_stack) + (long)&init_stack, \
 830        .vm86_info              = NULL,                                   \
 831        .sysenter_cs            = __KERNEL_CS,                            \
 832        .io_bitmap_ptr          = NULL,                                   \
 833}
 834
 835/*
 836 * Note that the .io_bitmap member must be extra-big. This is because
 837 * the CPU will access an additional byte beyond the end of the IO
 838 * permission bitmap. The extra byte must be all 1 bits, and must
 839 * be within the limit.
 840 */
 841#define INIT_TSS  {                                                       \
 842        .x86_tss = {                                                      \
 843                .sp0            = sizeof(init_stack) + (long)&init_stack, \
 844                .ss0            = __KERNEL_DS,                            \
 845                .ss1            = __KERNEL_CS,                            \
 846                .io_bitmap_base = INVALID_IO_BITMAP_OFFSET,               \
 847         },                                                               \
 848        .io_bitmap              = { [0 ... IO_BITMAP_LONGS] = ~0 },       \
 849}
 850
 851extern unsigned long thread_saved_pc(struct task_struct *tsk);
 852
 853#define THREAD_SIZE_LONGS      (THREAD_SIZE/sizeof(unsigned long))
 854#define KSTK_TOP(info)                                                 \
 855({                                                                     \
 856       unsigned long *__ptr = (unsigned long *)(info);                 \
 857       (unsigned long)(&__ptr[THREAD_SIZE_LONGS]);                     \
 858})
 859
 860/*
 861 * The below -8 is to reserve 8 bytes on top of the ring0 stack.
 862 * This is necessary to guarantee that the entire "struct pt_regs"
 863 * is accessible even if the CPU haven't stored the SS/ESP registers
 864 * on the stack (interrupt gate does not save these registers
 865 * when switching to the same priv ring).
 866 * Therefore beware: accessing the ss/esp fields of the
 867 * "struct pt_regs" is possible, but they may contain the
 868 * completely wrong values.
 869 */
 870#define task_pt_regs(task)                                             \
 871({                                                                     \
 872       struct pt_regs *__regs__;                                       \
 873       __regs__ = (struct pt_regs *)(KSTK_TOP(task_stack_page(task))-8); \
 874       __regs__ - 1;                                                   \
 875})
 876
 877#define KSTK_ESP(task)          (task_pt_regs(task)->sp)
 878
 879#else
 880/*
 881 * User space process size. 47bits minus one guard page.
 882 */
 883#define TASK_SIZE_MAX   ((1UL << 47) - PAGE_SIZE)
 884
 885/* This decides where the kernel will search for a free chunk of vm
 886 * space during mmap's.
 887 */
 888#define IA32_PAGE_OFFSET        ((current->personality & ADDR_LIMIT_3GB) ? \
 889                                        0xc0000000 : 0xFFFFe000)
 890
 891#define TASK_SIZE               (test_thread_flag(TIF_ADDR32) ? \
 892                                        IA32_PAGE_OFFSET : TASK_SIZE_MAX)
 893#define TASK_SIZE_OF(child)     ((test_tsk_thread_flag(child, TIF_ADDR32)) ? \
 894                                        IA32_PAGE_OFFSET : TASK_SIZE_MAX)
 895
 896#define STACK_TOP               TASK_SIZE
 897#define STACK_TOP_MAX           TASK_SIZE_MAX
 898
 899#define INIT_THREAD  { \
 900        .sp0 = (unsigned long)&init_stack + sizeof(init_stack) \
 901}
 902
 903#define INIT_TSS  { \
 904        .x86_tss.sp0 = (unsigned long)&init_stack + sizeof(init_stack) \
 905}
 906
 907/*
 908 * Return saved PC of a blocked thread.
 909 * What is this good for? it will be always the scheduler or ret_from_fork.
 910 */
 911#define thread_saved_pc(t)      (*(unsigned long *)((t)->thread.sp - 8))
 912
 913#define task_pt_regs(tsk)       ((struct pt_regs *)(tsk)->thread.sp0 - 1)
 914extern unsigned long KSTK_ESP(struct task_struct *task);
 915
 916/*
 917 * User space RSP while inside the SYSCALL fast path
 918 */
 919DECLARE_PER_CPU(unsigned long, old_rsp);
 920
 921#endif /* CONFIG_X86_64 */
 922
 923extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
 924                                               unsigned long new_sp);
 925
 926/*
 927 * This decides where the kernel will search for a free chunk of vm
 928 * space during mmap's.
 929 */
 930#define TASK_UNMAPPED_BASE      (PAGE_ALIGN(TASK_SIZE / 3))
 931
 932#define KSTK_EIP(task)          (task_pt_regs(task)->ip)
 933
 934/* Get/set a process' ability to use the timestamp counter instruction */
 935#define GET_TSC_CTL(adr)        get_tsc_mode((adr))
 936#define SET_TSC_CTL(val)        set_tsc_mode((val))
 937
 938extern int get_tsc_mode(unsigned long adr);
 939extern int set_tsc_mode(unsigned int val);
 940
 941extern int amd_get_nb_id(int cpu);
 942
 943struct aperfmperf {
 944        u64 aperf, mperf;
 945};
 946
 947static inline void get_aperfmperf(struct aperfmperf *am)
 948{
 949        WARN_ON_ONCE(!boot_cpu_has(X86_FEATURE_APERFMPERF));
 950
 951        rdmsrl(MSR_IA32_APERF, am->aperf);
 952        rdmsrl(MSR_IA32_MPERF, am->mperf);
 953}
 954
 955#define APERFMPERF_SHIFT 10
 956
 957static inline
 958unsigned long calc_aperfmperf_ratio(struct aperfmperf *old,
 959                                    struct aperfmperf *new)
 960{
 961        u64 aperf = new->aperf - old->aperf;
 962        u64 mperf = new->mperf - old->mperf;
 963        unsigned long ratio = aperf;
 964
 965        mperf >>= APERFMPERF_SHIFT;
 966        if (mperf)
 967                ratio = div64_u64(aperf, mperf);
 968
 969        return ratio;
 970}
 971
 972/*
 973 * AMD errata checking
 974 */
 975#ifdef CONFIG_CPU_SUP_AMD
 976extern const int amd_erratum_383[];
 977extern const int amd_erratum_400[];
 978extern bool cpu_has_amd_erratum(const int *);
 979
 980#define AMD_LEGACY_ERRATUM(...)         { -1, __VA_ARGS__, 0 }
 981#define AMD_OSVW_ERRATUM(osvw_id, ...)  { osvw_id, __VA_ARGS__, 0 }
 982#define AMD_MODEL_RANGE(f, m_start, s_start, m_end, s_end) \
 983        ((f << 24) | (m_start << 16) | (s_start << 12) | (m_end << 4) | (s_end))
 984#define AMD_MODEL_RANGE_FAMILY(range)   (((range) >> 24) & 0xff)
 985#define AMD_MODEL_RANGE_START(range)    (((range) >> 12) & 0xfff)
 986#define AMD_MODEL_RANGE_END(range)      ((range) & 0xfff)
 987
 988#else
 989#define cpu_has_amd_erratum(x)  (false)
 990#endif /* CONFIG_CPU_SUP_AMD */
 991
 992extern unsigned long arch_align_stack(unsigned long sp);
 993extern void free_init_pages(char *what, unsigned long begin, unsigned long end);
 994
 995void default_idle(void);
 996bool set_pm_idle_to_default(void);
 997
 998void stop_this_cpu(void *dummy);
 999
1000#endif /* _ASM_X86_PROCESSOR_H */
1001