diff options
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/arm/Kconfig.debug | 1 | ||||
| -rw-r--r-- | arch/arm/boot/dts/tegra20.dtsi | 2 | ||||
| -rw-r--r-- | arch/arm/boot/dts/tegra30.dtsi | 2 | ||||
| -rw-r--r-- | arch/arm/mach-mxs/mach-mxs.c | 24 | ||||
| -rw-r--r-- | arch/powerpc/perf/power7-pmu.c | 13 | ||||
| -rw-r--r-- | arch/tile/configs/tilegx_defconfig | 1 | ||||
| -rw-r--r-- | arch/tile/configs/tilepro_defconfig | 1 | ||||
| -rw-r--r-- | arch/x86/include/asm/kprobes.h | 1 | ||||
| -rw-r--r-- | arch/x86/include/asm/kvm_host.h | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel.c | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/kprobes/core.c | 5 | ||||
| -rw-r--r-- | arch/x86/kernel/microcode_intel_early.c | 30 | ||||
| -rw-r--r-- | arch/x86/kvm/x86.c | 64 | ||||
| -rw-r--r-- | arch/x86/lib/usercopy_64.c | 4 |
14 files changed, 87 insertions, 69 deletions
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index ecfcdba2d17c..9b31f4311ea2 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug | |||
| @@ -495,6 +495,7 @@ config DEBUG_IMX_UART_PORT | |||
| 495 | DEBUG_IMX53_UART || \ | 495 | DEBUG_IMX53_UART || \ |
| 496 | DEBUG_IMX6Q_UART | 496 | DEBUG_IMX6Q_UART |
| 497 | default 1 | 497 | default 1 |
| 498 | depends on ARCH_MXC | ||
| 498 | help | 499 | help |
| 499 | Choose UART port on which kernel low-level debug messages | 500 | Choose UART port on which kernel low-level debug messages |
| 500 | should be output. | 501 | should be output. |
diff --git a/arch/arm/boot/dts/tegra20.dtsi b/arch/arm/boot/dts/tegra20.dtsi index 48d00a099ce3..3d3f64d2111a 100644 --- a/arch/arm/boot/dts/tegra20.dtsi +++ b/arch/arm/boot/dts/tegra20.dtsi | |||
| @@ -385,7 +385,7 @@ | |||
| 385 | 385 | ||
| 386 | spi@7000d800 { | 386 | spi@7000d800 { |
| 387 | compatible = "nvidia,tegra20-slink"; | 387 | compatible = "nvidia,tegra20-slink"; |
| 388 | reg = <0x7000d480 0x200>; | 388 | reg = <0x7000d800 0x200>; |
| 389 | interrupts = <0 83 0x04>; | 389 | interrupts = <0 83 0x04>; |
| 390 | nvidia,dma-request-selector = <&apbdma 17>; | 390 | nvidia,dma-request-selector = <&apbdma 17>; |
| 391 | #address-cells = <1>; | 391 | #address-cells = <1>; |
diff --git a/arch/arm/boot/dts/tegra30.dtsi b/arch/arm/boot/dts/tegra30.dtsi index 9d87a3ffe998..dbf46c272562 100644 --- a/arch/arm/boot/dts/tegra30.dtsi +++ b/arch/arm/boot/dts/tegra30.dtsi | |||
| @@ -372,7 +372,7 @@ | |||
| 372 | 372 | ||
| 373 | spi@7000d800 { | 373 | spi@7000d800 { |
| 374 | compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink"; | 374 | compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink"; |
| 375 | reg = <0x7000d480 0x200>; | 375 | reg = <0x7000d800 0x200>; |
| 376 | interrupts = <0 83 0x04>; | 376 | interrupts = <0 83 0x04>; |
| 377 | nvidia,dma-request-selector = <&apbdma 17>; | 377 | nvidia,dma-request-selector = <&apbdma 17>; |
| 378 | #address-cells = <1>; | 378 | #address-cells = <1>; |
diff --git a/arch/arm/mach-mxs/mach-mxs.c b/arch/arm/mach-mxs/mach-mxs.c index 3218f1f2c0e0..e7b781d3788f 100644 --- a/arch/arm/mach-mxs/mach-mxs.c +++ b/arch/arm/mach-mxs/mach-mxs.c | |||
| @@ -41,8 +41,6 @@ static struct fb_videomode mx23evk_video_modes[] = { | |||
| 41 | .lower_margin = 4, | 41 | .lower_margin = 4, |
| 42 | .hsync_len = 1, | 42 | .hsync_len = 1, |
| 43 | .vsync_len = 1, | 43 | .vsync_len = 1, |
| 44 | .sync = FB_SYNC_DATA_ENABLE_HIGH_ACT | | ||
| 45 | FB_SYNC_DOTCLK_FAILING_ACT, | ||
| 46 | }, | 44 | }, |
| 47 | }; | 45 | }; |
| 48 | 46 | ||
| @@ -59,8 +57,6 @@ static struct fb_videomode mx28evk_video_modes[] = { | |||
| 59 | .lower_margin = 10, | 57 | .lower_margin = 10, |
| 60 | .hsync_len = 10, | 58 | .hsync_len = 10, |
| 61 | .vsync_len = 10, | 59 | .vsync_len = 10, |
| 62 | .sync = FB_SYNC_DATA_ENABLE_HIGH_ACT | | ||
| 63 | FB_SYNC_DOTCLK_FAILING_ACT, | ||
| 64 | }, | 60 | }, |
| 65 | }; | 61 | }; |
| 66 | 62 | ||
| @@ -77,7 +73,6 @@ static struct fb_videomode m28evk_video_modes[] = { | |||
| 77 | .lower_margin = 45, | 73 | .lower_margin = 45, |
| 78 | .hsync_len = 1, | 74 | .hsync_len = 1, |
| 79 | .vsync_len = 1, | 75 | .vsync_len = 1, |
| 80 | .sync = FB_SYNC_DATA_ENABLE_HIGH_ACT, | ||
| 81 | }, | 76 | }, |
| 82 | }; | 77 | }; |
| 83 | 78 | ||
| @@ -94,9 +89,7 @@ static struct fb_videomode apx4devkit_video_modes[] = { | |||
| 94 | .lower_margin = 13, | 89 | .lower_margin = 13, |
| 95 | .hsync_len = 48, | 90 | .hsync_len = 48, |
| 96 | .vsync_len = 3, | 91 | .vsync_len = 3, |
| 97 | .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT | | 92 | .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, |
| 98 | FB_SYNC_DATA_ENABLE_HIGH_ACT | | ||
| 99 | FB_SYNC_DOTCLK_FAILING_ACT, | ||
| 100 | }, | 93 | }, |
| 101 | }; | 94 | }; |
| 102 | 95 | ||
| @@ -113,9 +106,7 @@ static struct fb_videomode apf28dev_video_modes[] = { | |||
| 113 | .lower_margin = 0x15, | 106 | .lower_margin = 0x15, |
| 114 | .hsync_len = 64, | 107 | .hsync_len = 64, |
| 115 | .vsync_len = 4, | 108 | .vsync_len = 4, |
| 116 | .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT | | 109 | .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, |
| 117 | FB_SYNC_DATA_ENABLE_HIGH_ACT | | ||
| 118 | FB_SYNC_DOTCLK_FAILING_ACT, | ||
| 119 | }, | 110 | }, |
| 120 | }; | 111 | }; |
| 121 | 112 | ||
| @@ -132,7 +123,6 @@ static struct fb_videomode cfa10049_video_modes[] = { | |||
| 132 | .lower_margin = 2, | 123 | .lower_margin = 2, |
| 133 | .hsync_len = 15, | 124 | .hsync_len = 15, |
| 134 | .vsync_len = 15, | 125 | .vsync_len = 15, |
| 135 | .sync = FB_SYNC_DATA_ENABLE_HIGH_ACT | ||
| 136 | }, | 126 | }, |
| 137 | }; | 127 | }; |
| 138 | 128 | ||
| @@ -259,6 +249,8 @@ static void __init imx23_evk_init(void) | |||
| 259 | mxsfb_pdata.mode_count = ARRAY_SIZE(mx23evk_video_modes); | 249 | mxsfb_pdata.mode_count = ARRAY_SIZE(mx23evk_video_modes); |
| 260 | mxsfb_pdata.default_bpp = 32; | 250 | mxsfb_pdata.default_bpp = 32; |
| 261 | mxsfb_pdata.ld_intf_width = STMLCDIF_24BIT; | 251 | mxsfb_pdata.ld_intf_width = STMLCDIF_24BIT; |
| 252 | mxsfb_pdata.sync = MXSFB_SYNC_DATA_ENABLE_HIGH_ACT | | ||
| 253 | MXSFB_SYNC_DOTCLK_FAILING_ACT; | ||
| 262 | } | 254 | } |
| 263 | 255 | ||
| 264 | static inline void enable_clk_enet_out(void) | 256 | static inline void enable_clk_enet_out(void) |
| @@ -278,6 +270,8 @@ static void __init imx28_evk_init(void) | |||
| 278 | mxsfb_pdata.mode_count = ARRAY_SIZE(mx28evk_video_modes); | 270 | mxsfb_pdata.mode_count = ARRAY_SIZE(mx28evk_video_modes); |
| 279 | mxsfb_pdata.default_bpp = 32; | 271 | mxsfb_pdata.default_bpp = 32; |
| 280 | mxsfb_pdata.ld_intf_width = STMLCDIF_24BIT; | 272 | mxsfb_pdata.ld_intf_width = STMLCDIF_24BIT; |
| 273 | mxsfb_pdata.sync = MXSFB_SYNC_DATA_ENABLE_HIGH_ACT | | ||
| 274 | MXSFB_SYNC_DOTCLK_FAILING_ACT; | ||
| 281 | 275 | ||
| 282 | mxs_saif_clkmux_select(MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR0); | 276 | mxs_saif_clkmux_select(MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR0); |
| 283 | } | 277 | } |
| @@ -297,6 +291,7 @@ static void __init m28evk_init(void) | |||
| 297 | mxsfb_pdata.mode_count = ARRAY_SIZE(m28evk_video_modes); | 291 | mxsfb_pdata.mode_count = ARRAY_SIZE(m28evk_video_modes); |
| 298 | mxsfb_pdata.default_bpp = 16; | 292 | mxsfb_pdata.default_bpp = 16; |
| 299 | mxsfb_pdata.ld_intf_width = STMLCDIF_18BIT; | 293 | mxsfb_pdata.ld_intf_width = STMLCDIF_18BIT; |
| 294 | mxsfb_pdata.sync = MXSFB_SYNC_DATA_ENABLE_HIGH_ACT; | ||
| 300 | } | 295 | } |
| 301 | 296 | ||
| 302 | static void __init sc_sps1_init(void) | 297 | static void __init sc_sps1_init(void) |
| @@ -322,6 +317,8 @@ static void __init apx4devkit_init(void) | |||
| 322 | mxsfb_pdata.mode_count = ARRAY_SIZE(apx4devkit_video_modes); | 317 | mxsfb_pdata.mode_count = ARRAY_SIZE(apx4devkit_video_modes); |
| 323 | mxsfb_pdata.default_bpp = 32; | 318 | mxsfb_pdata.default_bpp = 32; |
| 324 | mxsfb_pdata.ld_intf_width = STMLCDIF_24BIT; | 319 | mxsfb_pdata.ld_intf_width = STMLCDIF_24BIT; |
| 320 | mxsfb_pdata.sync = MXSFB_SYNC_DATA_ENABLE_HIGH_ACT | | ||
| 321 | MXSFB_SYNC_DOTCLK_FAILING_ACT; | ||
| 325 | } | 322 | } |
| 326 | 323 | ||
| 327 | #define ENET0_MDC__GPIO_4_0 MXS_GPIO_NR(4, 0) | 324 | #define ENET0_MDC__GPIO_4_0 MXS_GPIO_NR(4, 0) |
| @@ -407,6 +404,7 @@ static void __init cfa10049_init(void) | |||
| 407 | mxsfb_pdata.mode_count = ARRAY_SIZE(cfa10049_video_modes); | 404 | mxsfb_pdata.mode_count = ARRAY_SIZE(cfa10049_video_modes); |
| 408 | mxsfb_pdata.default_bpp = 32; | 405 | mxsfb_pdata.default_bpp = 32; |
| 409 | mxsfb_pdata.ld_intf_width = STMLCDIF_18BIT; | 406 | mxsfb_pdata.ld_intf_width = STMLCDIF_18BIT; |
| 407 | mxsfb_pdata.sync = MXSFB_SYNC_DATA_ENABLE_HIGH_ACT; | ||
| 410 | } | 408 | } |
| 411 | 409 | ||
| 412 | static void __init cfa10037_init(void) | 410 | static void __init cfa10037_init(void) |
| @@ -423,6 +421,8 @@ static void __init apf28_init(void) | |||
| 423 | mxsfb_pdata.mode_count = ARRAY_SIZE(apf28dev_video_modes); | 421 | mxsfb_pdata.mode_count = ARRAY_SIZE(apf28dev_video_modes); |
| 424 | mxsfb_pdata.default_bpp = 16; | 422 | mxsfb_pdata.default_bpp = 16; |
| 425 | mxsfb_pdata.ld_intf_width = STMLCDIF_16BIT; | 423 | mxsfb_pdata.ld_intf_width = STMLCDIF_16BIT; |
| 424 | mxsfb_pdata.sync = MXSFB_SYNC_DATA_ENABLE_HIGH_ACT | | ||
| 425 | MXSFB_SYNC_DOTCLK_FAILING_ACT; | ||
| 426 | } | 426 | } |
| 427 | 427 | ||
| 428 | static void __init mxs_machine_init(void) | 428 | static void __init mxs_machine_init(void) |
diff --git a/arch/powerpc/perf/power7-pmu.c b/arch/powerpc/perf/power7-pmu.c index b554879bd31e..3c475d6267c7 100644 --- a/arch/powerpc/perf/power7-pmu.c +++ b/arch/powerpc/perf/power7-pmu.c | |||
| @@ -420,7 +420,20 @@ static struct attribute_group power7_pmu_events_group = { | |||
| 420 | .attrs = power7_events_attr, | 420 | .attrs = power7_events_attr, |
| 421 | }; | 421 | }; |
| 422 | 422 | ||
| 423 | PMU_FORMAT_ATTR(event, "config:0-19"); | ||
| 424 | |||
| 425 | static struct attribute *power7_pmu_format_attr[] = { | ||
| 426 | &format_attr_event.attr, | ||
| 427 | NULL, | ||
| 428 | }; | ||
| 429 | |||
| 430 | struct attribute_group power7_pmu_format_group = { | ||
| 431 | .name = "format", | ||
| 432 | .attrs = power7_pmu_format_attr, | ||
| 433 | }; | ||
| 434 | |||
| 423 | static const struct attribute_group *power7_pmu_attr_groups[] = { | 435 | static const struct attribute_group *power7_pmu_attr_groups[] = { |
| 436 | &power7_pmu_format_group, | ||
| 424 | &power7_pmu_events_group, | 437 | &power7_pmu_events_group, |
| 425 | NULL, | 438 | NULL, |
| 426 | }; | 439 | }; |
diff --git a/arch/tile/configs/tilegx_defconfig b/arch/tile/configs/tilegx_defconfig index 8c5eff6d6df5..47684815e5c8 100644 --- a/arch/tile/configs/tilegx_defconfig +++ b/arch/tile/configs/tilegx_defconfig | |||
| @@ -330,7 +330,6 @@ CONFIG_MD_RAID0=m | |||
| 330 | CONFIG_MD_RAID1=m | 330 | CONFIG_MD_RAID1=m |
| 331 | CONFIG_MD_RAID10=m | 331 | CONFIG_MD_RAID10=m |
| 332 | CONFIG_MD_RAID456=m | 332 | CONFIG_MD_RAID456=m |
| 333 | CONFIG_MULTICORE_RAID456=y | ||
| 334 | CONFIG_MD_FAULTY=m | 333 | CONFIG_MD_FAULTY=m |
| 335 | CONFIG_BLK_DEV_DM=m | 334 | CONFIG_BLK_DEV_DM=m |
| 336 | CONFIG_DM_DEBUG=y | 335 | CONFIG_DM_DEBUG=y |
diff --git a/arch/tile/configs/tilepro_defconfig b/arch/tile/configs/tilepro_defconfig index e7a3dfcbcda7..dd2b8f0c631f 100644 --- a/arch/tile/configs/tilepro_defconfig +++ b/arch/tile/configs/tilepro_defconfig | |||
| @@ -324,7 +324,6 @@ CONFIG_MD_RAID0=m | |||
| 324 | CONFIG_MD_RAID1=m | 324 | CONFIG_MD_RAID1=m |
| 325 | CONFIG_MD_RAID10=m | 325 | CONFIG_MD_RAID10=m |
| 326 | CONFIG_MD_RAID456=m | 326 | CONFIG_MD_RAID456=m |
| 327 | CONFIG_MULTICORE_RAID456=y | ||
| 328 | CONFIG_MD_FAULTY=m | 327 | CONFIG_MD_FAULTY=m |
| 329 | CONFIG_BLK_DEV_DM=m | 328 | CONFIG_BLK_DEV_DM=m |
| 330 | CONFIG_DM_DEBUG=y | 329 | CONFIG_DM_DEBUG=y |
diff --git a/arch/x86/include/asm/kprobes.h b/arch/x86/include/asm/kprobes.h index d3ddd17405d0..5a6d2873f80e 100644 --- a/arch/x86/include/asm/kprobes.h +++ b/arch/x86/include/asm/kprobes.h | |||
| @@ -77,6 +77,7 @@ struct arch_specific_insn { | |||
| 77 | * a post_handler or break_handler). | 77 | * a post_handler or break_handler). |
| 78 | */ | 78 | */ |
| 79 | int boostable; | 79 | int boostable; |
| 80 | bool if_modifier; | ||
| 80 | }; | 81 | }; |
| 81 | 82 | ||
| 82 | struct arch_optimized_insn { | 83 | struct arch_optimized_insn { |
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 635a74d22409..4979778cc7fb 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h | |||
| @@ -414,8 +414,8 @@ struct kvm_vcpu_arch { | |||
| 414 | gpa_t time; | 414 | gpa_t time; |
| 415 | struct pvclock_vcpu_time_info hv_clock; | 415 | struct pvclock_vcpu_time_info hv_clock; |
| 416 | unsigned int hw_tsc_khz; | 416 | unsigned int hw_tsc_khz; |
| 417 | unsigned int time_offset; | 417 | struct gfn_to_hva_cache pv_time; |
| 418 | struct page *time_page; | 418 | bool pv_time_enabled; |
| 419 | /* set guest stopped flag in pvclock flags field */ | 419 | /* set guest stopped flag in pvclock flags field */ |
| 420 | bool pvclock_set_guest_stopped_request; | 420 | bool pvclock_set_guest_stopped_request; |
| 421 | 421 | ||
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c index 529c8931fc02..dab7580c47ae 100644 --- a/arch/x86/kernel/cpu/perf_event_intel.c +++ b/arch/x86/kernel/cpu/perf_event_intel.c | |||
| @@ -101,6 +101,10 @@ static struct event_constraint intel_snb_event_constraints[] __read_mostly = | |||
| 101 | FIXED_EVENT_CONSTRAINT(0x00c0, 0), /* INST_RETIRED.ANY */ | 101 | FIXED_EVENT_CONSTRAINT(0x00c0, 0), /* INST_RETIRED.ANY */ |
| 102 | FIXED_EVENT_CONSTRAINT(0x003c, 1), /* CPU_CLK_UNHALTED.CORE */ | 102 | FIXED_EVENT_CONSTRAINT(0x003c, 1), /* CPU_CLK_UNHALTED.CORE */ |
| 103 | FIXED_EVENT_CONSTRAINT(0x0300, 2), /* CPU_CLK_UNHALTED.REF */ | 103 | FIXED_EVENT_CONSTRAINT(0x0300, 2), /* CPU_CLK_UNHALTED.REF */ |
| 104 | INTEL_UEVENT_CONSTRAINT(0x04a3, 0xf), /* CYCLE_ACTIVITY.CYCLES_NO_DISPATCH */ | ||
| 105 | INTEL_UEVENT_CONSTRAINT(0x05a3, 0xf), /* CYCLE_ACTIVITY.STALLS_L2_PENDING */ | ||
| 106 | INTEL_UEVENT_CONSTRAINT(0x02a3, 0x4), /* CYCLE_ACTIVITY.CYCLES_L1D_PENDING */ | ||
| 107 | INTEL_UEVENT_CONSTRAINT(0x06a3, 0x4), /* CYCLE_ACTIVITY.STALLS_L1D_PENDING */ | ||
| 104 | INTEL_EVENT_CONSTRAINT(0x48, 0x4), /* L1D_PEND_MISS.PENDING */ | 108 | INTEL_EVENT_CONSTRAINT(0x48, 0x4), /* L1D_PEND_MISS.PENDING */ |
| 105 | INTEL_UEVENT_CONSTRAINT(0x01c0, 0x2), /* INST_RETIRED.PREC_DIST */ | 109 | INTEL_UEVENT_CONSTRAINT(0x01c0, 0x2), /* INST_RETIRED.PREC_DIST */ |
| 106 | INTEL_EVENT_CONSTRAINT(0xcd, 0x8), /* MEM_TRANS_RETIRED.LOAD_LATENCY */ | 110 | INTEL_EVENT_CONSTRAINT(0xcd, 0x8), /* MEM_TRANS_RETIRED.LOAD_LATENCY */ |
diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c index 3f06e6149981..7bfe318d3d8a 100644 --- a/arch/x86/kernel/kprobes/core.c +++ b/arch/x86/kernel/kprobes/core.c | |||
| @@ -375,6 +375,9 @@ static void __kprobes arch_copy_kprobe(struct kprobe *p) | |||
| 375 | else | 375 | else |
| 376 | p->ainsn.boostable = -1; | 376 | p->ainsn.boostable = -1; |
| 377 | 377 | ||
| 378 | /* Check whether the instruction modifies Interrupt Flag or not */ | ||
| 379 | p->ainsn.if_modifier = is_IF_modifier(p->ainsn.insn); | ||
| 380 | |||
| 378 | /* Also, displacement change doesn't affect the first byte */ | 381 | /* Also, displacement change doesn't affect the first byte */ |
| 379 | p->opcode = p->ainsn.insn[0]; | 382 | p->opcode = p->ainsn.insn[0]; |
| 380 | } | 383 | } |
| @@ -434,7 +437,7 @@ static void __kprobes set_current_kprobe(struct kprobe *p, struct pt_regs *regs, | |||
| 434 | __this_cpu_write(current_kprobe, p); | 437 | __this_cpu_write(current_kprobe, p); |
| 435 | kcb->kprobe_saved_flags = kcb->kprobe_old_flags | 438 | kcb->kprobe_saved_flags = kcb->kprobe_old_flags |
| 436 | = (regs->flags & (X86_EFLAGS_TF | X86_EFLAGS_IF)); | 439 | = (regs->flags & (X86_EFLAGS_TF | X86_EFLAGS_IF)); |
| 437 | if (is_IF_modifier(p->ainsn.insn)) | 440 | if (p->ainsn.if_modifier) |
| 438 | kcb->kprobe_saved_flags &= ~X86_EFLAGS_IF; | 441 | kcb->kprobe_saved_flags &= ~X86_EFLAGS_IF; |
| 439 | } | 442 | } |
| 440 | 443 | ||
diff --git a/arch/x86/kernel/microcode_intel_early.c b/arch/x86/kernel/microcode_intel_early.c index 7890bc838952..d893e8ed8ac9 100644 --- a/arch/x86/kernel/microcode_intel_early.c +++ b/arch/x86/kernel/microcode_intel_early.c | |||
| @@ -90,13 +90,13 @@ microcode_phys(struct microcode_intel **mc_saved_tmp, | |||
| 90 | struct microcode_intel ***mc_saved; | 90 | struct microcode_intel ***mc_saved; |
| 91 | 91 | ||
| 92 | mc_saved = (struct microcode_intel ***) | 92 | mc_saved = (struct microcode_intel ***) |
| 93 | __pa_symbol(&mc_saved_data->mc_saved); | 93 | __pa_nodebug(&mc_saved_data->mc_saved); |
| 94 | for (i = 0; i < mc_saved_data->mc_saved_count; i++) { | 94 | for (i = 0; i < mc_saved_data->mc_saved_count; i++) { |
| 95 | struct microcode_intel *p; | 95 | struct microcode_intel *p; |
| 96 | 96 | ||
| 97 | p = *(struct microcode_intel **) | 97 | p = *(struct microcode_intel **) |
| 98 | __pa(mc_saved_data->mc_saved + i); | 98 | __pa_nodebug(mc_saved_data->mc_saved + i); |
| 99 | mc_saved_tmp[i] = (struct microcode_intel *)__pa(p); | 99 | mc_saved_tmp[i] = (struct microcode_intel *)__pa_nodebug(p); |
| 100 | } | 100 | } |
| 101 | } | 101 | } |
| 102 | #endif | 102 | #endif |
| @@ -562,7 +562,7 @@ scan_microcode(unsigned long start, unsigned long end, | |||
| 562 | struct cpio_data cd; | 562 | struct cpio_data cd; |
| 563 | long offset = 0; | 563 | long offset = 0; |
| 564 | #ifdef CONFIG_X86_32 | 564 | #ifdef CONFIG_X86_32 |
| 565 | char *p = (char *)__pa_symbol(ucode_name); | 565 | char *p = (char *)__pa_nodebug(ucode_name); |
| 566 | #else | 566 | #else |
| 567 | char *p = ucode_name; | 567 | char *p = ucode_name; |
| 568 | #endif | 568 | #endif |
| @@ -630,8 +630,8 @@ static void __cpuinit print_ucode(struct ucode_cpu_info *uci) | |||
| 630 | if (mc_intel == NULL) | 630 | if (mc_intel == NULL) |
| 631 | return; | 631 | return; |
| 632 | 632 | ||
| 633 | delay_ucode_info_p = (int *)__pa_symbol(&delay_ucode_info); | 633 | delay_ucode_info_p = (int *)__pa_nodebug(&delay_ucode_info); |
| 634 | current_mc_date_p = (int *)__pa_symbol(¤t_mc_date); | 634 | current_mc_date_p = (int *)__pa_nodebug(¤t_mc_date); |
| 635 | 635 | ||
| 636 | *delay_ucode_info_p = 1; | 636 | *delay_ucode_info_p = 1; |
| 637 | *current_mc_date_p = mc_intel->hdr.date; | 637 | *current_mc_date_p = mc_intel->hdr.date; |
| @@ -659,8 +659,8 @@ static inline void __cpuinit print_ucode(struct ucode_cpu_info *uci) | |||
| 659 | } | 659 | } |
| 660 | #endif | 660 | #endif |
| 661 | 661 | ||
| 662 | static int apply_microcode_early(struct mc_saved_data *mc_saved_data, | 662 | static int __cpuinit apply_microcode_early(struct mc_saved_data *mc_saved_data, |
| 663 | struct ucode_cpu_info *uci) | 663 | struct ucode_cpu_info *uci) |
| 664 | { | 664 | { |
| 665 | struct microcode_intel *mc_intel; | 665 | struct microcode_intel *mc_intel; |
| 666 | unsigned int val[2]; | 666 | unsigned int val[2]; |
| @@ -741,15 +741,15 @@ load_ucode_intel_bsp(void) | |||
| 741 | #ifdef CONFIG_X86_32 | 741 | #ifdef CONFIG_X86_32 |
| 742 | struct boot_params *boot_params_p; | 742 | struct boot_params *boot_params_p; |
| 743 | 743 | ||
| 744 | boot_params_p = (struct boot_params *)__pa_symbol(&boot_params); | 744 | boot_params_p = (struct boot_params *)__pa_nodebug(&boot_params); |
| 745 | ramdisk_image = boot_params_p->hdr.ramdisk_image; | 745 | ramdisk_image = boot_params_p->hdr.ramdisk_image; |
| 746 | ramdisk_size = boot_params_p->hdr.ramdisk_size; | 746 | ramdisk_size = boot_params_p->hdr.ramdisk_size; |
| 747 | initrd_start_early = ramdisk_image; | 747 | initrd_start_early = ramdisk_image; |
| 748 | initrd_end_early = initrd_start_early + ramdisk_size; | 748 | initrd_end_early = initrd_start_early + ramdisk_size; |
| 749 | 749 | ||
| 750 | _load_ucode_intel_bsp( | 750 | _load_ucode_intel_bsp( |
| 751 | (struct mc_saved_data *)__pa_symbol(&mc_saved_data), | 751 | (struct mc_saved_data *)__pa_nodebug(&mc_saved_data), |
| 752 | (unsigned long *)__pa_symbol(&mc_saved_in_initrd), | 752 | (unsigned long *)__pa_nodebug(&mc_saved_in_initrd), |
| 753 | initrd_start_early, initrd_end_early, &uci); | 753 | initrd_start_early, initrd_end_early, &uci); |
| 754 | #else | 754 | #else |
| 755 | ramdisk_image = boot_params.hdr.ramdisk_image; | 755 | ramdisk_image = boot_params.hdr.ramdisk_image; |
| @@ -772,10 +772,10 @@ void __cpuinit load_ucode_intel_ap(void) | |||
| 772 | unsigned long *initrd_start_p; | 772 | unsigned long *initrd_start_p; |
| 773 | 773 | ||
| 774 | mc_saved_in_initrd_p = | 774 | mc_saved_in_initrd_p = |
| 775 | (unsigned long *)__pa_symbol(mc_saved_in_initrd); | 775 | (unsigned long *)__pa_nodebug(mc_saved_in_initrd); |
| 776 | mc_saved_data_p = (struct mc_saved_data *)__pa_symbol(&mc_saved_data); | 776 | mc_saved_data_p = (struct mc_saved_data *)__pa_nodebug(&mc_saved_data); |
| 777 | initrd_start_p = (unsigned long *)__pa_symbol(&initrd_start); | 777 | initrd_start_p = (unsigned long *)__pa_nodebug(&initrd_start); |
| 778 | initrd_start_addr = (unsigned long)__pa_symbol(*initrd_start_p); | 778 | initrd_start_addr = (unsigned long)__pa_nodebug(*initrd_start_p); |
| 779 | #else | 779 | #else |
| 780 | mc_saved_data_p = &mc_saved_data; | 780 | mc_saved_data_p = &mc_saved_data; |
| 781 | mc_saved_in_initrd_p = mc_saved_in_initrd; | 781 | mc_saved_in_initrd_p = mc_saved_in_initrd; |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index f71500af1f81..f19ac0aca60d 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
| @@ -1406,25 +1406,15 @@ static int kvm_guest_time_update(struct kvm_vcpu *v) | |||
| 1406 | unsigned long flags, this_tsc_khz; | 1406 | unsigned long flags, this_tsc_khz; |
| 1407 | struct kvm_vcpu_arch *vcpu = &v->arch; | 1407 | struct kvm_vcpu_arch *vcpu = &v->arch; |
| 1408 | struct kvm_arch *ka = &v->kvm->arch; | 1408 | struct kvm_arch *ka = &v->kvm->arch; |
| 1409 | void *shared_kaddr; | ||
| 1410 | s64 kernel_ns, max_kernel_ns; | 1409 | s64 kernel_ns, max_kernel_ns; |
| 1411 | u64 tsc_timestamp, host_tsc; | 1410 | u64 tsc_timestamp, host_tsc; |
| 1412 | struct pvclock_vcpu_time_info *guest_hv_clock; | 1411 | struct pvclock_vcpu_time_info guest_hv_clock; |
| 1413 | u8 pvclock_flags; | 1412 | u8 pvclock_flags; |
| 1414 | bool use_master_clock; | 1413 | bool use_master_clock; |
| 1415 | 1414 | ||
| 1416 | kernel_ns = 0; | 1415 | kernel_ns = 0; |
| 1417 | host_tsc = 0; | 1416 | host_tsc = 0; |
| 1418 | 1417 | ||
| 1419 | /* Keep irq disabled to prevent changes to the clock */ | ||
| 1420 | local_irq_save(flags); | ||
| 1421 | this_tsc_khz = __get_cpu_var(cpu_tsc_khz); | ||
| 1422 | if (unlikely(this_tsc_khz == 0)) { | ||
| 1423 | local_irq_restore(flags); | ||
| 1424 | kvm_make_request(KVM_REQ_CLOCK_UPDATE, v); | ||
| 1425 | return 1; | ||
| 1426 | } | ||
| 1427 | |||
| 1428 | /* | 1418 | /* |
| 1429 | * If the host uses TSC clock, then passthrough TSC as stable | 1419 | * If the host uses TSC clock, then passthrough TSC as stable |
| 1430 | * to the guest. | 1420 | * to the guest. |
| @@ -1436,6 +1426,15 @@ static int kvm_guest_time_update(struct kvm_vcpu *v) | |||
| 1436 | kernel_ns = ka->master_kernel_ns; | 1426 | kernel_ns = ka->master_kernel_ns; |
| 1437 | } | 1427 | } |
| 1438 | spin_unlock(&ka->pvclock_gtod_sync_lock); | 1428 | spin_unlock(&ka->pvclock_gtod_sync_lock); |
| 1429 | |||
| 1430 | /* Keep irq disabled to prevent changes to the clock */ | ||
| 1431 | local_irq_save(flags); | ||
| 1432 | this_tsc_khz = __get_cpu_var(cpu_tsc_khz); | ||
| 1433 | if (unlikely(this_tsc_khz == 0)) { | ||
| 1434 | local_irq_restore(flags); | ||
| 1435 | kvm_make_request(KVM_REQ_CLOCK_UPDATE, v); | ||
| 1436 | return 1; | ||
| 1437 | } | ||
| 1439 | if (!use_master_clock) { | 1438 | if (!use_master_clock) { |
| 1440 | host_tsc = native_read_tsc(); | 1439 | host_tsc = native_read_tsc(); |
| 1441 | kernel_ns = get_kernel_ns(); | 1440 | kernel_ns = get_kernel_ns(); |
| @@ -1463,7 +1462,7 @@ static int kvm_guest_time_update(struct kvm_vcpu *v) | |||
| 1463 | 1462 | ||
| 1464 | local_irq_restore(flags); | 1463 | local_irq_restore(flags); |
| 1465 | 1464 | ||
| 1466 | if (!vcpu->time_page) | 1465 | if (!vcpu->pv_time_enabled) |
| 1467 | return 0; | 1466 | return 0; |
| 1468 | 1467 | ||
| 1469 | /* | 1468 | /* |
| @@ -1525,12 +1524,12 @@ static int kvm_guest_time_update(struct kvm_vcpu *v) | |||
| 1525 | */ | 1524 | */ |
| 1526 | vcpu->hv_clock.version += 2; | 1525 | vcpu->hv_clock.version += 2; |
| 1527 | 1526 | ||
| 1528 | shared_kaddr = kmap_atomic(vcpu->time_page); | 1527 | if (unlikely(kvm_read_guest_cached(v->kvm, &vcpu->pv_time, |
| 1529 | 1528 | &guest_hv_clock, sizeof(guest_hv_clock)))) | |
| 1530 | guest_hv_clock = shared_kaddr + vcpu->time_offset; | 1529 | return 0; |
| 1531 | 1530 | ||
| 1532 | /* retain PVCLOCK_GUEST_STOPPED if set in guest copy */ | 1531 | /* retain PVCLOCK_GUEST_STOPPED if set in guest copy */ |
| 1533 | pvclock_flags = (guest_hv_clock->flags & PVCLOCK_GUEST_STOPPED); | 1532 | pvclock_flags = (guest_hv_clock.flags & PVCLOCK_GUEST_STOPPED); |
| 1534 | 1533 | ||
| 1535 | if (vcpu->pvclock_set_guest_stopped_request) { | 1534 | if (vcpu->pvclock_set_guest_stopped_request) { |
| 1536 | pvclock_flags |= PVCLOCK_GUEST_STOPPED; | 1535 | pvclock_flags |= PVCLOCK_GUEST_STOPPED; |
| @@ -1543,12 +1542,9 @@ static int kvm_guest_time_update(struct kvm_vcpu *v) | |||
| 1543 | 1542 | ||
| 1544 | vcpu->hv_clock.flags = pvclock_flags; | 1543 | vcpu->hv_clock.flags = pvclock_flags; |
| 1545 | 1544 | ||
| 1546 | memcpy(shared_kaddr + vcpu->time_offset, &vcpu->hv_clock, | 1545 | kvm_write_guest_cached(v->kvm, &vcpu->pv_time, |
| 1547 | sizeof(vcpu->hv_clock)); | 1546 | &vcpu->hv_clock, |
| 1548 | 1547 | sizeof(vcpu->hv_clock)); | |
| 1549 | kunmap_atomic(shared_kaddr); | ||
| 1550 | |||
| 1551 | mark_page_dirty(v->kvm, vcpu->time >> PAGE_SHIFT); | ||
| 1552 | return 0; | 1548 | return 0; |
| 1553 | } | 1549 | } |
| 1554 | 1550 | ||
| @@ -1837,10 +1833,7 @@ static int kvm_pv_enable_async_pf(struct kvm_vcpu *vcpu, u64 data) | |||
| 1837 | 1833 | ||
| 1838 | static void kvmclock_reset(struct kvm_vcpu *vcpu) | 1834 | static void kvmclock_reset(struct kvm_vcpu *vcpu) |
| 1839 | { | 1835 | { |
| 1840 | if (vcpu->arch.time_page) { | 1836 | vcpu->arch.pv_time_enabled = false; |
| 1841 | kvm_release_page_dirty(vcpu->arch.time_page); | ||
| 1842 | vcpu->arch.time_page = NULL; | ||
| 1843 | } | ||
| 1844 | } | 1837 | } |
| 1845 | 1838 | ||
| 1846 | static void accumulate_steal_time(struct kvm_vcpu *vcpu) | 1839 | static void accumulate_steal_time(struct kvm_vcpu *vcpu) |
| @@ -1947,6 +1940,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) | |||
| 1947 | break; | 1940 | break; |
| 1948 | case MSR_KVM_SYSTEM_TIME_NEW: | 1941 | case MSR_KVM_SYSTEM_TIME_NEW: |
| 1949 | case MSR_KVM_SYSTEM_TIME: { | 1942 | case MSR_KVM_SYSTEM_TIME: { |
| 1943 | u64 gpa_offset; | ||
| 1950 | kvmclock_reset(vcpu); | 1944 | kvmclock_reset(vcpu); |
| 1951 | 1945 | ||
| 1952 | vcpu->arch.time = data; | 1946 | vcpu->arch.time = data; |
| @@ -1956,14 +1950,17 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) | |||
| 1956 | if (!(data & 1)) | 1950 | if (!(data & 1)) |
| 1957 | break; | 1951 | break; |
| 1958 | 1952 | ||
| 1959 | /* ...but clean it before doing the actual write */ | 1953 | gpa_offset = data & ~(PAGE_MASK | 1); |
| 1960 | vcpu->arch.time_offset = data & ~(PAGE_MASK | 1); | ||
| 1961 | 1954 | ||
| 1962 | vcpu->arch.time_page = | 1955 | /* Check that the address is 32-byte aligned. */ |
| 1963 | gfn_to_page(vcpu->kvm, data >> PAGE_SHIFT); | 1956 | if (gpa_offset & (sizeof(struct pvclock_vcpu_time_info) - 1)) |
| 1957 | break; | ||
| 1964 | 1958 | ||
| 1965 | if (is_error_page(vcpu->arch.time_page)) | 1959 | if (kvm_gfn_to_hva_cache_init(vcpu->kvm, |
| 1966 | vcpu->arch.time_page = NULL; | 1960 | &vcpu->arch.pv_time, data & ~1ULL)) |
| 1961 | vcpu->arch.pv_time_enabled = false; | ||
| 1962 | else | ||
| 1963 | vcpu->arch.pv_time_enabled = true; | ||
| 1967 | 1964 | ||
| 1968 | break; | 1965 | break; |
| 1969 | } | 1966 | } |
| @@ -2967,7 +2964,7 @@ static int kvm_vcpu_ioctl_x86_set_xcrs(struct kvm_vcpu *vcpu, | |||
| 2967 | */ | 2964 | */ |
| 2968 | static int kvm_set_guest_paused(struct kvm_vcpu *vcpu) | 2965 | static int kvm_set_guest_paused(struct kvm_vcpu *vcpu) |
| 2969 | { | 2966 | { |
| 2970 | if (!vcpu->arch.time_page) | 2967 | if (!vcpu->arch.pv_time_enabled) |
| 2971 | return -EINVAL; | 2968 | return -EINVAL; |
| 2972 | vcpu->arch.pvclock_set_guest_stopped_request = true; | 2969 | vcpu->arch.pvclock_set_guest_stopped_request = true; |
| 2973 | kvm_make_request(KVM_REQ_CLOCK_UPDATE, vcpu); | 2970 | kvm_make_request(KVM_REQ_CLOCK_UPDATE, vcpu); |
| @@ -6718,6 +6715,7 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu) | |||
| 6718 | goto fail_free_wbinvd_dirty_mask; | 6715 | goto fail_free_wbinvd_dirty_mask; |
| 6719 | 6716 | ||
| 6720 | vcpu->arch.ia32_tsc_adjust_msr = 0x0; | 6717 | vcpu->arch.ia32_tsc_adjust_msr = 0x0; |
| 6718 | vcpu->arch.pv_time_enabled = false; | ||
| 6721 | kvm_async_pf_hash_reset(vcpu); | 6719 | kvm_async_pf_hash_reset(vcpu); |
| 6722 | kvm_pmu_init(vcpu); | 6720 | kvm_pmu_init(vcpu); |
| 6723 | 6721 | ||
diff --git a/arch/x86/lib/usercopy_64.c b/arch/x86/lib/usercopy_64.c index 05928aae911e..906fea315791 100644 --- a/arch/x86/lib/usercopy_64.c +++ b/arch/x86/lib/usercopy_64.c | |||
| @@ -74,10 +74,10 @@ copy_user_handle_tail(char *to, char *from, unsigned len, unsigned zerorest) | |||
| 74 | char c; | 74 | char c; |
| 75 | unsigned zero_len; | 75 | unsigned zero_len; |
| 76 | 76 | ||
| 77 | for (; len; --len) { | 77 | for (; len; --len, to++) { |
| 78 | if (__get_user_nocheck(c, from++, sizeof(char))) | 78 | if (__get_user_nocheck(c, from++, sizeof(char))) |
| 79 | break; | 79 | break; |
| 80 | if (__put_user_nocheck(c, to++, sizeof(char))) | 80 | if (__put_user_nocheck(c, to, sizeof(char))) |
| 81 | break; | 81 | break; |
| 82 | } | 82 | } |
| 83 | 83 | ||
