Commit 7f680d7e authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 fixes from Thomas Gleixner:
 "Another pile of small fixes and updates for x86:

   - Plug a hole in the SMAP implementation which misses to clear AC on
     NMI entry

   - Fix the norandmaps/ADDR_NO_RANDOMIZE logic so the command line
     parameter works correctly again

   - Use the proper accessor in the startup64 code for next_early_pgt to
     prevent accessing of invalid addresses and faulting in the early
     boot code.

   - Prevent CPU hotplug lock recursion in the MTRR code

   - Unbreak CPU0 hotplugging

   - Rename overly long CPUID bits which got introduced in this cycle

   - Two commits which mark data 'const' and restrict the scope of data
     and functions to file scope by making them 'static'"

* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86: Constify attribute_group structures
  x86/boot/64/clang: Use fixup_pointer() to access 'next_early_pgt'
  x86/elf: Remove the unnecessary ADDR_NO_RANDOMIZE checks
  x86: Fix norandmaps/ADDR_NO_RANDOMIZE
  x86/mtrr: Prevent CPU hotplug lock recursion
  x86: Mark various structures and functions as 'static'
  x86/cpufeature, kvm/svm: Rename (shorten) the new "virtualized VMSAVE/VMLOAD" CPUID flag
  x86/smpboot: Unbreak CPU0 hotplug
  x86/asm/64: Clear AC on NMI entries
parents 2615a38f 45bd07ad
...@@ -1211,6 +1211,8 @@ ENTRY(nmi) ...@@ -1211,6 +1211,8 @@ ENTRY(nmi)
* other IST entries. * other IST entries.
*/ */
ASM_CLAC
/* Use %rdx as our temp variable throughout */ /* Use %rdx as our temp variable throughout */
pushq %rdx pushq %rdx
......
...@@ -69,7 +69,7 @@ struct bts_buffer { ...@@ -69,7 +69,7 @@ struct bts_buffer {
struct bts_phys buf[0]; struct bts_phys buf[0];
}; };
struct pmu bts_pmu; static struct pmu bts_pmu;
static size_t buf_size(struct page *page) static size_t buf_size(struct page *page)
{ {
......
...@@ -587,7 +587,7 @@ static __initconst const u64 p4_hw_cache_event_ids ...@@ -587,7 +587,7 @@ static __initconst const u64 p4_hw_cache_event_ids
* P4_CONFIG_ALIASABLE or bits for P4_PEBS_METRIC, they are * P4_CONFIG_ALIASABLE or bits for P4_PEBS_METRIC, they are
* either up to date automatically or not applicable at all. * either up to date automatically or not applicable at all.
*/ */
struct p4_event_alias { static struct p4_event_alias {
u64 original; u64 original;
u64 alternative; u64 alternative;
} p4_event_aliases[] = { } p4_event_aliases[] = {
......
...@@ -559,7 +559,7 @@ static struct attribute_group rapl_pmu_format_group = { ...@@ -559,7 +559,7 @@ static struct attribute_group rapl_pmu_format_group = {
.attrs = rapl_formats_attr, .attrs = rapl_formats_attr,
}; };
const struct attribute_group *rapl_attr_groups[] = { static const struct attribute_group *rapl_attr_groups[] = {
&rapl_pmu_attr_group, &rapl_pmu_attr_group,
&rapl_pmu_format_group, &rapl_pmu_format_group,
&rapl_pmu_events_group, &rapl_pmu_events_group,
......
...@@ -721,7 +721,7 @@ static struct attribute *uncore_pmu_attrs[] = { ...@@ -721,7 +721,7 @@ static struct attribute *uncore_pmu_attrs[] = {
NULL, NULL,
}; };
static struct attribute_group uncore_pmu_attr_group = { static const struct attribute_group uncore_pmu_attr_group = {
.attrs = uncore_pmu_attrs, .attrs = uncore_pmu_attrs,
}; };
......
...@@ -272,7 +272,7 @@ static struct attribute *nhmex_uncore_ubox_formats_attr[] = { ...@@ -272,7 +272,7 @@ static struct attribute *nhmex_uncore_ubox_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group nhmex_uncore_ubox_format_group = { static const struct attribute_group nhmex_uncore_ubox_format_group = {
.name = "format", .name = "format",
.attrs = nhmex_uncore_ubox_formats_attr, .attrs = nhmex_uncore_ubox_formats_attr,
}; };
...@@ -299,7 +299,7 @@ static struct attribute *nhmex_uncore_cbox_formats_attr[] = { ...@@ -299,7 +299,7 @@ static struct attribute *nhmex_uncore_cbox_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group nhmex_uncore_cbox_format_group = { static const struct attribute_group nhmex_uncore_cbox_format_group = {
.name = "format", .name = "format",
.attrs = nhmex_uncore_cbox_formats_attr, .attrs = nhmex_uncore_cbox_formats_attr,
}; };
...@@ -407,7 +407,7 @@ static struct attribute *nhmex_uncore_bbox_formats_attr[] = { ...@@ -407,7 +407,7 @@ static struct attribute *nhmex_uncore_bbox_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group nhmex_uncore_bbox_format_group = { static const struct attribute_group nhmex_uncore_bbox_format_group = {
.name = "format", .name = "format",
.attrs = nhmex_uncore_bbox_formats_attr, .attrs = nhmex_uncore_bbox_formats_attr,
}; };
...@@ -484,7 +484,7 @@ static struct attribute *nhmex_uncore_sbox_formats_attr[] = { ...@@ -484,7 +484,7 @@ static struct attribute *nhmex_uncore_sbox_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group nhmex_uncore_sbox_format_group = { static const struct attribute_group nhmex_uncore_sbox_format_group = {
.name = "format", .name = "format",
.attrs = nhmex_uncore_sbox_formats_attr, .attrs = nhmex_uncore_sbox_formats_attr,
}; };
...@@ -898,7 +898,7 @@ static struct attribute *nhmex_uncore_mbox_formats_attr[] = { ...@@ -898,7 +898,7 @@ static struct attribute *nhmex_uncore_mbox_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group nhmex_uncore_mbox_format_group = { static const struct attribute_group nhmex_uncore_mbox_format_group = {
.name = "format", .name = "format",
.attrs = nhmex_uncore_mbox_formats_attr, .attrs = nhmex_uncore_mbox_formats_attr,
}; };
...@@ -1163,7 +1163,7 @@ static struct attribute *nhmex_uncore_rbox_formats_attr[] = { ...@@ -1163,7 +1163,7 @@ static struct attribute *nhmex_uncore_rbox_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group nhmex_uncore_rbox_format_group = { static const struct attribute_group nhmex_uncore_rbox_format_group = {
.name = "format", .name = "format",
.attrs = nhmex_uncore_rbox_formats_attr, .attrs = nhmex_uncore_rbox_formats_attr,
}; };
......
...@@ -130,7 +130,7 @@ static struct attribute *snb_uncore_formats_attr[] = { ...@@ -130,7 +130,7 @@ static struct attribute *snb_uncore_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group snb_uncore_format_group = { static const struct attribute_group snb_uncore_format_group = {
.name = "format", .name = "format",
.attrs = snb_uncore_formats_attr, .attrs = snb_uncore_formats_attr,
}; };
...@@ -289,7 +289,7 @@ static struct attribute *snb_uncore_imc_formats_attr[] = { ...@@ -289,7 +289,7 @@ static struct attribute *snb_uncore_imc_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group snb_uncore_imc_format_group = { static const struct attribute_group snb_uncore_imc_format_group = {
.name = "format", .name = "format",
.attrs = snb_uncore_imc_formats_attr, .attrs = snb_uncore_imc_formats_attr,
}; };
...@@ -769,7 +769,7 @@ static struct attribute *nhm_uncore_formats_attr[] = { ...@@ -769,7 +769,7 @@ static struct attribute *nhm_uncore_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group nhm_uncore_format_group = { static const struct attribute_group nhm_uncore_format_group = {
.name = "format", .name = "format",
.attrs = nhm_uncore_formats_attr, .attrs = nhm_uncore_formats_attr,
}; };
......
...@@ -602,27 +602,27 @@ static struct uncore_event_desc snbep_uncore_qpi_events[] = { ...@@ -602,27 +602,27 @@ static struct uncore_event_desc snbep_uncore_qpi_events[] = {
{ /* end: all zeroes */ }, { /* end: all zeroes */ },
}; };
static struct attribute_group snbep_uncore_format_group = { static const struct attribute_group snbep_uncore_format_group = {
.name = "format", .name = "format",
.attrs = snbep_uncore_formats_attr, .attrs = snbep_uncore_formats_attr,
}; };
static struct attribute_group snbep_uncore_ubox_format_group = { static const struct attribute_group snbep_uncore_ubox_format_group = {
.name = "format", .name = "format",
.attrs = snbep_uncore_ubox_formats_attr, .attrs = snbep_uncore_ubox_formats_attr,
}; };
static struct attribute_group snbep_uncore_cbox_format_group = { static const struct attribute_group snbep_uncore_cbox_format_group = {
.name = "format", .name = "format",
.attrs = snbep_uncore_cbox_formats_attr, .attrs = snbep_uncore_cbox_formats_attr,
}; };
static struct attribute_group snbep_uncore_pcu_format_group = { static const struct attribute_group snbep_uncore_pcu_format_group = {
.name = "format", .name = "format",
.attrs = snbep_uncore_pcu_formats_attr, .attrs = snbep_uncore_pcu_formats_attr,
}; };
static struct attribute_group snbep_uncore_qpi_format_group = { static const struct attribute_group snbep_uncore_qpi_format_group = {
.name = "format", .name = "format",
.attrs = snbep_uncore_qpi_formats_attr, .attrs = snbep_uncore_qpi_formats_attr,
}; };
...@@ -1431,27 +1431,27 @@ static struct attribute *ivbep_uncore_qpi_formats_attr[] = { ...@@ -1431,27 +1431,27 @@ static struct attribute *ivbep_uncore_qpi_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group ivbep_uncore_format_group = { static const struct attribute_group ivbep_uncore_format_group = {
.name = "format", .name = "format",
.attrs = ivbep_uncore_formats_attr, .attrs = ivbep_uncore_formats_attr,
}; };
static struct attribute_group ivbep_uncore_ubox_format_group = { static const struct attribute_group ivbep_uncore_ubox_format_group = {
.name = "format", .name = "format",
.attrs = ivbep_uncore_ubox_formats_attr, .attrs = ivbep_uncore_ubox_formats_attr,
}; };
static struct attribute_group ivbep_uncore_cbox_format_group = { static const struct attribute_group ivbep_uncore_cbox_format_group = {
.name = "format", .name = "format",
.attrs = ivbep_uncore_cbox_formats_attr, .attrs = ivbep_uncore_cbox_formats_attr,
}; };
static struct attribute_group ivbep_uncore_pcu_format_group = { static const struct attribute_group ivbep_uncore_pcu_format_group = {
.name = "format", .name = "format",
.attrs = ivbep_uncore_pcu_formats_attr, .attrs = ivbep_uncore_pcu_formats_attr,
}; };
static struct attribute_group ivbep_uncore_qpi_format_group = { static const struct attribute_group ivbep_uncore_qpi_format_group = {
.name = "format", .name = "format",
.attrs = ivbep_uncore_qpi_formats_attr, .attrs = ivbep_uncore_qpi_formats_attr,
}; };
...@@ -1887,7 +1887,7 @@ static struct attribute *knl_uncore_ubox_formats_attr[] = { ...@@ -1887,7 +1887,7 @@ static struct attribute *knl_uncore_ubox_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group knl_uncore_ubox_format_group = { static const struct attribute_group knl_uncore_ubox_format_group = {
.name = "format", .name = "format",
.attrs = knl_uncore_ubox_formats_attr, .attrs = knl_uncore_ubox_formats_attr,
}; };
...@@ -1927,7 +1927,7 @@ static struct attribute *knl_uncore_cha_formats_attr[] = { ...@@ -1927,7 +1927,7 @@ static struct attribute *knl_uncore_cha_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group knl_uncore_cha_format_group = { static const struct attribute_group knl_uncore_cha_format_group = {
.name = "format", .name = "format",
.attrs = knl_uncore_cha_formats_attr, .attrs = knl_uncore_cha_formats_attr,
}; };
...@@ -2037,7 +2037,7 @@ static struct attribute *knl_uncore_pcu_formats_attr[] = { ...@@ -2037,7 +2037,7 @@ static struct attribute *knl_uncore_pcu_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group knl_uncore_pcu_format_group = { static const struct attribute_group knl_uncore_pcu_format_group = {
.name = "format", .name = "format",
.attrs = knl_uncore_pcu_formats_attr, .attrs = knl_uncore_pcu_formats_attr,
}; };
...@@ -2187,7 +2187,7 @@ static struct attribute *knl_uncore_irp_formats_attr[] = { ...@@ -2187,7 +2187,7 @@ static struct attribute *knl_uncore_irp_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group knl_uncore_irp_format_group = { static const struct attribute_group knl_uncore_irp_format_group = {
.name = "format", .name = "format",
.attrs = knl_uncore_irp_formats_attr, .attrs = knl_uncore_irp_formats_attr,
}; };
...@@ -2385,7 +2385,7 @@ static struct attribute *hswep_uncore_ubox_formats_attr[] = { ...@@ -2385,7 +2385,7 @@ static struct attribute *hswep_uncore_ubox_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group hswep_uncore_ubox_format_group = { static const struct attribute_group hswep_uncore_ubox_format_group = {
.name = "format", .name = "format",
.attrs = hswep_uncore_ubox_formats_attr, .attrs = hswep_uncore_ubox_formats_attr,
}; };
...@@ -2439,7 +2439,7 @@ static struct attribute *hswep_uncore_cbox_formats_attr[] = { ...@@ -2439,7 +2439,7 @@ static struct attribute *hswep_uncore_cbox_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group hswep_uncore_cbox_format_group = { static const struct attribute_group hswep_uncore_cbox_format_group = {
.name = "format", .name = "format",
.attrs = hswep_uncore_cbox_formats_attr, .attrs = hswep_uncore_cbox_formats_attr,
}; };
...@@ -2621,7 +2621,7 @@ static struct attribute *hswep_uncore_sbox_formats_attr[] = { ...@@ -2621,7 +2621,7 @@ static struct attribute *hswep_uncore_sbox_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group hswep_uncore_sbox_format_group = { static const struct attribute_group hswep_uncore_sbox_format_group = {
.name = "format", .name = "format",
.attrs = hswep_uncore_sbox_formats_attr, .attrs = hswep_uncore_sbox_formats_attr,
}; };
...@@ -3314,7 +3314,7 @@ static struct attribute *skx_uncore_cha_formats_attr[] = { ...@@ -3314,7 +3314,7 @@ static struct attribute *skx_uncore_cha_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group skx_uncore_chabox_format_group = { static const struct attribute_group skx_uncore_chabox_format_group = {
.name = "format", .name = "format",
.attrs = skx_uncore_cha_formats_attr, .attrs = skx_uncore_cha_formats_attr,
}; };
...@@ -3427,7 +3427,7 @@ static struct attribute *skx_uncore_iio_formats_attr[] = { ...@@ -3427,7 +3427,7 @@ static struct attribute *skx_uncore_iio_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group skx_uncore_iio_format_group = { static const struct attribute_group skx_uncore_iio_format_group = {
.name = "format", .name = "format",
.attrs = skx_uncore_iio_formats_attr, .attrs = skx_uncore_iio_formats_attr,
}; };
...@@ -3484,7 +3484,7 @@ static struct attribute *skx_uncore_formats_attr[] = { ...@@ -3484,7 +3484,7 @@ static struct attribute *skx_uncore_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group skx_uncore_format_group = { static const struct attribute_group skx_uncore_format_group = {
.name = "format", .name = "format",
.attrs = skx_uncore_formats_attr, .attrs = skx_uncore_formats_attr,
}; };
...@@ -3605,7 +3605,7 @@ static struct attribute *skx_upi_uncore_formats_attr[] = { ...@@ -3605,7 +3605,7 @@ static struct attribute *skx_upi_uncore_formats_attr[] = {
NULL, NULL,
}; };
static struct attribute_group skx_upi_uncore_format_group = { static const struct attribute_group skx_upi_uncore_format_group = {
.name = "format", .name = "format",
.attrs = skx_upi_uncore_formats_attr, .attrs = skx_upi_uncore_formats_attr,
}; };
......
...@@ -286,7 +286,7 @@ ...@@ -286,7 +286,7 @@
#define X86_FEATURE_PAUSEFILTER (15*32+10) /* filtered pause intercept */ #define X86_FEATURE_PAUSEFILTER (15*32+10) /* filtered pause intercept */
#define X86_FEATURE_PFTHRESHOLD (15*32+12) /* pause filter threshold */ #define X86_FEATURE_PFTHRESHOLD (15*32+12) /* pause filter threshold */
#define X86_FEATURE_AVIC (15*32+13) /* Virtual Interrupt Controller */ #define X86_FEATURE_AVIC (15*32+13) /* Virtual Interrupt Controller */
#define X86_FEATURE_VIRTUAL_VMLOAD_VMSAVE (15*32+15) /* Virtual VMLOAD VMSAVE */ #define X86_FEATURE_V_VMSAVE_VMLOAD (15*32+15) /* Virtual VMSAVE VMLOAD */
/* Intel-defined CPU features, CPUID level 0x00000007:0 (ecx), word 16 */ /* Intel-defined CPU features, CPUID level 0x00000007:0 (ecx), word 16 */
#define X86_FEATURE_AVX512VBMI (16*32+ 1) /* AVX512 Vector Bit Manipulation instructions*/ #define X86_FEATURE_AVX512VBMI (16*32+ 1) /* AVX512 Vector Bit Manipulation instructions*/
......
...@@ -122,7 +122,7 @@ static struct attribute *thermal_throttle_attrs[] = { ...@@ -122,7 +122,7 @@ static struct attribute *thermal_throttle_attrs[] = {
NULL NULL
}; };
static struct attribute_group thermal_attr_group = { static const struct attribute_group thermal_attr_group = {
.attrs = thermal_throttle_attrs, .attrs = thermal_throttle_attrs,
.name = "thermal_throttle" .name = "thermal_throttle"
}; };
......
...@@ -561,7 +561,7 @@ static struct attribute *mc_default_attrs[] = { ...@@ -561,7 +561,7 @@ static struct attribute *mc_default_attrs[] = {
NULL NULL
}; };
static struct attribute_group mc_attr_group = { static const struct attribute_group mc_attr_group = {
.attrs = mc_default_attrs, .attrs = mc_default_attrs,
.name = "microcode", .name = "microcode",
}; };
...@@ -707,7 +707,7 @@ static struct attribute *cpu_root_microcode_attrs[] = { ...@@ -707,7 +707,7 @@ static struct attribute *cpu_root_microcode_attrs[] = {
NULL NULL
}; };
static struct attribute_group cpu_root_microcode_group = { static const struct attribute_group cpu_root_microcode_group = {
.name = "microcode", .name = "microcode",
.attrs = cpu_root_microcode_attrs, .attrs = cpu_root_microcode_attrs,
}; };
......
...@@ -237,6 +237,18 @@ set_mtrr(unsigned int reg, unsigned long base, unsigned long size, mtrr_type typ ...@@ -237,6 +237,18 @@ set_mtrr(unsigned int reg, unsigned long base, unsigned long size, mtrr_type typ
stop_machine(mtrr_rendezvous_handler, &data, cpu_online_mask); stop_machine(mtrr_rendezvous_handler, &data, cpu_online_mask);
} }
static void set_mtrr_cpuslocked(unsigned int reg, unsigned long base,
unsigned long size, mtrr_type type)
{
struct set_mtrr_data data = { .smp_reg = reg,
.smp_base = base,
.smp_size = size,
.smp_type = type
};
stop_machine_cpuslocked(mtrr_rendezvous_handler, &data, cpu_online_mask);
}
static void set_mtrr_from_inactive_cpu(unsigned int reg, unsigned long base, static void set_mtrr_from_inactive_cpu(unsigned int reg, unsigned long base,
unsigned long size, mtrr_type type) unsigned long size, mtrr_type type)
{ {
...@@ -370,7 +382,7 @@ int mtrr_add_page(unsigned long base, unsigned long size, ...@@ -370,7 +382,7 @@ int mtrr_add_page(unsigned long base, unsigned long size,
/* Search for an empty MTRR */ /* Search for an empty MTRR */
i = mtrr_if->get_free_region(base, size, replace); i = mtrr_if->get_free_region(base, size, replace);
if (i >= 0) { if (i >= 0) {
set_mtrr(i, base, size, type); set_mtrr_cpuslocked(i, base, size, type);
if (likely(replace < 0)) { if (likely(replace < 0)) {
mtrr_usage_table[i] = 1; mtrr_usage_table[i] = 1;
} else { } else {
...@@ -378,7 +390,7 @@ int mtrr_add_page(unsigned long base, unsigned long size, ...@@ -378,7 +390,7 @@ int mtrr_add_page(unsigned long base, unsigned long size,
if (increment) if (increment)
mtrr_usage_table[i]++; mtrr_usage_table[i]++;
if (unlikely(replace != i)) { if (unlikely(replace != i)) {
set_mtrr(replace, 0, 0, 0); set_mtrr_cpuslocked(replace, 0, 0, 0);
mtrr_usage_table[replace] = 0; mtrr_usage_table[replace] = 0;
} }
} }
...@@ -506,7 +518,7 @@ int mtrr_del_page(int reg, unsigned long base, unsigned long size) ...@@ -506,7 +518,7 @@ int mtrr_del_page(int reg, unsigned long base, unsigned long size)
goto out; goto out;
} }
if (--mtrr_usage_table[reg] < 1) if (--mtrr_usage_table[reg] < 1)
set_mtrr(reg, 0, 0, 0); set_mtrr_cpuslocked(reg, 0, 0, 0);
error = reg; error = reg;
out: out:
mutex_unlock(&mtrr_mutex); mutex_unlock(&mtrr_mutex);
......
...@@ -53,6 +53,7 @@ void __head __startup_64(unsigned long physaddr) ...@@ -53,6 +53,7 @@ void __head __startup_64(unsigned long physaddr)
pudval_t *pud; pudval_t *pud;
pmdval_t *pmd, pmd_entry; pmdval_t *pmd, pmd_entry;
int i; int i;
unsigned int *next_pgt_ptr;
/* Is the address too large? */ /* Is the address too large? */
if (physaddr >> MAX_PHYSMEM_BITS) if (physaddr >> MAX_PHYSMEM_BITS)
...@@ -91,9 +92,9 @@ void __head __startup_64(unsigned long physaddr) ...@@ -91,9 +92,9 @@ void __head __startup_64(unsigned long physaddr)
* creates a bunch of nonsense entries but that is fine -- * creates a bunch of nonsense entries but that is fine --
* it avoids problems around wraparound. * it avoids problems around wraparound.
*/ */
next_pgt_ptr = fixup_pointer(&next_early_pgt, physaddr);
pud = fixup_pointer(early_dynamic_pgts[next_early_pgt++], physaddr); pud = fixup_pointer(early_dynamic_pgts[(*next_pgt_ptr)++], physaddr);
pmd = fixup_pointer(early_dynamic_pgts[next_early_pgt++], physaddr); pmd = fixup_pointer(early_dynamic_pgts[(*next_pgt_ptr)++], physaddr);
if (IS_ENABLED(CONFIG_X86_5LEVEL)) { if (IS_ENABLED(CONFIG_X86_5LEVEL)) {
p4d = fixup_pointer(early_dynamic_pgts[next_early_pgt++], physaddr); p4d = fixup_pointer(early_dynamic_pgts[next_early_pgt++], physaddr);
......
...@@ -55,7 +55,7 @@ static struct bin_attribute *boot_params_data_attrs[] = { ...@@ -55,7 +55,7 @@ static struct bin_attribute *boot_params_data_attrs[] = {
NULL, NULL,
}; };
static struct attribute_group boot_params_attr_group = { static const struct attribute_group boot_params_attr_group = {
.attrs = boot_params_version_attrs, .attrs = boot_params_version_attrs,
.bin_attrs = boot_params_data_attrs, .bin_attrs = boot_params_data_attrs,
}; };
...@@ -202,7 +202,7 @@ static struct bin_attribute *setup_data_data_attrs[] = { ...@@ -202,7 +202,7 @@ static struct bin_attribute *setup_data_data_attrs[] = {
NULL, NULL,
}; };
static struct attribute_group setup_data_attr_group = { static const struct attribute_group setup_data_attr_group = {
.attrs = setup_data_type_attrs, .attrs = setup_data_type_attrs,
.bin_attrs = setup_data_data_attrs, .bin_attrs = setup_data_data_attrs,
}; };
......
...@@ -971,7 +971,8 @@ void common_cpu_up(unsigned int cpu, struct task_struct *idle) ...@@ -971,7 +971,8 @@ void common_cpu_up(unsigned int cpu, struct task_struct *idle)
* Returns zero if CPU booted OK, else error code from * Returns zero if CPU booted OK, else error code from
* ->wakeup_secondary_cpu. * ->wakeup_secondary_cpu.
*/ */
static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle) static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle,
int *cpu0_nmi_registered)
{ {
volatile u32 *trampoline_status = volatile u32 *trampoline_status =
(volatile u32 *) __va(real_mode_header->trampoline_status); (volatile u32 *) __va(real_mode_header->trampoline_status);
...@@ -979,7 +980,6 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle) ...@@ -979,7 +980,6 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
unsigned long start_ip = real_mode_header->trampoline_start; unsigned long start_ip = real_mode_header->trampoline_start;
unsigned long boot_error = 0; unsigned long boot_error = 0;
int cpu0_nmi_registered = 0;
unsigned long timeout; unsigned long timeout;
idle->thread.sp = (unsigned long)task_pt_regs(idle); idle->thread.sp = (unsigned long)task_pt_regs(idle);
...@@ -1035,7 +1035,7 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle) ...@@ -1035,7 +1035,7 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
boot_error = apic->wakeup_secondary_cpu(apicid, start_ip); boot_error = apic->wakeup_secondary_cpu(apicid, start_ip);
else else
boot_error = wakeup_cpu_via_init_nmi(cpu, start_ip, apicid, boot_error = wakeup_cpu_via_init_nmi(cpu, start_ip, apicid,
&cpu0_nmi_registered); cpu0_nmi_registered);
if (!boot_error) { if (!boot_error) {
/* /*
...@@ -1080,12 +1080,6 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle) ...@@ -1080,12 +1080,6 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
*/ */
smpboot_restore_warm_reset_vector(); smpboot_restore_warm_reset_vector();
} }
/*
* Clean up the nmi handler. Do this after the callin and callout sync
* to avoid impact of possible long unregister time.
*/
if (cpu0_nmi_registered)
unregister_nmi_handler(NMI_LOCAL, "wake_cpu0");
return boot_error; return boot_error;
} }
...@@ -1093,8 +1087,9 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle) ...@@ -1093,8 +1087,9 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
int native_cpu_up(unsigned int cpu, struct task_struct *tidle) int native_cpu_up(unsigned int cpu, struct task_struct *tidle)
{ {
int apicid = apic->cpu_present_to_apicid(cpu); int apicid = apic->cpu_present_to_apicid(cpu);
int cpu0_nmi_registered = 0;
unsigned long flags; unsigned long flags;
int err; int err, ret = 0;
WARN_ON(irqs_disabled()); WARN_ON(irqs_disabled());
...@@ -1131,10 +1126,11 @@ int native_cpu_up(unsigned int cpu, struct task_struct *tidle) ...@@ -1131,10 +1126,11 @@ int native_cpu_up(unsigned int cpu, struct task_struct *tidle)
common_cpu_up(cpu, tidle); common_cpu_up(cpu, tidle);
err = do_boot_cpu(apicid, cpu, tidle); err = do_boot_cpu(apicid, cpu, tidle, &cpu0_nmi_registered);
if (err) { if (err) {
pr_err("do_boot_cpu failed(%d) to wakeup CPU#%u\n", err, cpu); pr_err("do_boot_cpu failed(%d) to wakeup CPU#%u\n", err, cpu);
return -EIO; ret = -EIO;
goto unreg_nmi;
} }
/* /*
...@@ -1150,7 +1146,15 @@ int native_cpu_up(unsigned int cpu, struct task_struct *tidle) ...@@ -1150,7 +1146,15 @@ int native_cpu_up(unsigned int cpu, struct task_struct *tidle)
touch_nmi_watchdog(); touch_nmi_watchdog();
} }
return 0; unreg_nmi:
/*
* Clean up the nmi handler. Do this after the callin and callout sync
* to avoid impact of possible long unregister time.
*/
if (cpu0_nmi_registered)
unregister_nmi_handler(NMI_LOCAL, "wake_cpu0");
return ret;
} }
/** /**
......
...@@ -1100,7 +1100,7 @@ static __init int svm_hardware_setup(void) ...@@ -1100,7 +1100,7 @@ static __init int svm_hardware_setup(void)
if (vls) { if (vls) {
if (!npt_enabled || if (!npt_enabled ||
!boot_cpu_has(X86_FEATURE_VIRTUAL_VMLOAD_VMSAVE) || !boot_cpu_has(X86_FEATURE_V_VMSAVE_VMLOAD) ||
!IS_ENABLED(CONFIG_X86_64)) { !IS_ENABLED(CONFIG_X86_64)) {
vls = false; vls = false;
} else { } else {
......
...@@ -50,8 +50,7 @@ unsigned long tasksize_64bit(void) ...@@ -50,8 +50,7 @@ unsigned long tasksize_64bit(void)
static unsigned long stack_maxrandom_size(unsigned long task_size) static unsigned long stack_maxrandom_size(unsigned long task_size)
{ {
unsigned long max = 0; unsigned long max = 0;
if ((current->flags & PF_RANDOMIZE) && if (current->flags & PF_RANDOMIZE) {
!(current->personality & ADDR_NO_RANDOMIZE)) {
max = (-1UL) & __STACK_RND_MASK(task_size == tasksize_32bit()); max = (-1UL) & __STACK_RND_MASK(task_size == tasksize_32bit());
max <<= PAGE_SHIFT; max <<= PAGE_SHIFT;
} }
...@@ -79,13 +78,13 @@ static int mmap_is_legacy(void) ...@@ -79,13 +78,13 @@ static int mmap_is_legacy(void)
static unsigned long arch_rnd(unsigned int rndbits) static unsigned long arch_rnd(unsigned int rndbits)
{ {
if (!(current->flags & PF_RANDOMIZE))
return 0;
return (get_random_long() & ((1UL << rndbits) - 1)) << PAGE_SHIFT; return (get_random_long() & ((1UL << rndbits) - 1)) << PAGE_SHIFT;
} }
unsigned long arch_mmap_rnd(void) unsigned long arch_mmap_rnd(void)
{ {
if (!(current->flags & PF_RANDOMIZE))
return 0;
return arch_rnd(mmap_is_ia32() ? mmap32_rnd_bits : mmap64_rnd_bits); return arch_rnd(mmap_is_ia32() ? mmap32_rnd_bits : mmap64_rnd_bits);
} }
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
static struct bau_operations ops __ro_after_init; static struct bau_operations ops __ro_after_init;
/* timeouts in nanoseconds (indexed by UVH_AGING_PRESCALE_SEL urgency7 30:28) */ /* timeouts in nanoseconds (indexed by UVH_AGING_PRESCALE_SEL urgency7 30:28) */
static int timeout_base_ns[] = { static const int timeout_base_ns[] = {
20, 20,
160, 160,
1280, 1280,
...@@ -1216,7 +1216,7 @@ static struct bau_pq_entry *find_another_by_swack(struct bau_pq_entry *msg, ...@@ -1216,7 +1216,7 @@ static struct bau_pq_entry *find_another_by_swack(struct bau_pq_entry *msg,
* set a bit in the UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE register. * set a bit in the UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE register.
* Such a message must be ignored. * Such a message must be ignored.
*/ */
void process_uv2_message(struct msg_desc *mdp, struct bau_control *bcp) static void process_uv2_message(struct msg_desc *mdp, struct bau_control *bcp)
{ {
unsigned long mmr_image; unsigned long mmr_image;
unsigned char swack_vec; unsigned char swack_vec;
......
...@@ -664,8 +664,7 @@ static unsigned long randomize_stack_top(unsigned long stack_top) ...@@ -664,8 +664,7 @@ static unsigned long randomize_stack_top(unsigned long stack_top)
{ {
unsigned long random_variable = 0; unsigned long random_variable = 0;
if ((current->flags & PF_RANDOMIZE) && if (current->flags & PF_RANDOMIZE) {
!(current->personality & ADDR_NO_RANDOMIZE)) {
random_variable = get_random_long(); random_variable = get_random_long();
random_variable &= STACK_RND_MASK; random_variable &= STACK_RND_MASK;
random_variable <<= PAGE_SHIFT; random_variable <<= PAGE_SHIFT;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment