Re: linux-next: manual merge of the nvdimm tree with the tip tree

2018-08-18 Thread Stephen Rothwell
Hi all,

On Tue, 26 Jun 2018 12:18:53 +1000 Stephen Rothwell  
wrote:
>
> Today's linux-next merge of the nvdimm tree got a conflict in:
> 
>   arch/x86/kernel/cpu/mcheck/mce.c
> 
> between commit:
> 
>   d3d6923cd1ae ("x86/mce: Carve out the crashing_cpu check")
> 
> from the tip tree and commit:
> 
>   f6785eac562b ("x86/memory_failure: Introduce {set,clear}_mce_nospec()")
> 
> from the nvdimm tree.
> 
> I fixed it up (see below) and can carry the fix as necessary. This
> is now fixed as far as linux-next is concerned, but any non trivial
> conflicts should be mentioned to your upstream maintainer when your tree
> is submitted for merging.  You may also want to consider cooperating
> with the maintainer of the conflicting tree to minimise any particularly
> complex conflicts.
> 
> -- 
> Cheers,
> Stephen Rothwell
> 
> diff --cc arch/x86/kernel/cpu/mcheck/mce.c
> index 9a16f15f79eb,a0fbf0a8b7e6..
> --- a/arch/x86/kernel/cpu/mcheck/mce.c
> +++ b/arch/x86/kernel/cpu/mcheck/mce.c
> @@@ -1076,129 -1070,6 +1072,100 @@@ static int do_memory_failure(struct mc
>   return ret;
>   }
>   
> - #ifndef mce_unmap_kpfn
> - static void mce_unmap_kpfn(unsigned long pfn)
> - {
> - unsigned long decoy_addr;
> - 
> - /*
> -  * Unmap this page from the kernel 1:1 mappings to make sure
> -  * we don't log more errors because of speculative access to
> -  * the page.
> -  * We would like to just call:
> -  *  set_memory_np((unsigned long)pfn_to_kaddr(pfn), 1);
> -  * but doing that would radically increase the odds of a
> -  * speculative access to the poison page because we'd have
> -  * the virtual address of the kernel 1:1 mapping sitting
> -  * around in registers.
> -  * Instead we get tricky.  We create a non-canonical address
> -  * that looks just like the one we want, but has bit 63 flipped.
> -  * This relies on set_memory_np() not checking whether we passed
> -  * a legal address.
> -  */
> - 
> - decoy_addr = (pfn << PAGE_SHIFT) + (PAGE_OFFSET ^ BIT(63));
> - 
> - if (set_memory_np(decoy_addr, 1))
> - pr_warn("Could not invalidate pfn=0x%lx from 1:1 map\n", pfn);
> - }
> - #endif
> - 
> - 
>  +/*
>  + * Cases where we avoid rendezvous handler timeout:
>  + * 1) If this CPU is offline.
>  + *
>  + * 2) If crashing_cpu was set, e.g. we're entering kdump and we need to
>  + *  skip those CPUs which remain looping in the 1st kernel - see
>  + *  crash_nmi_callback().
>  + *
>  + * Note: there still is a small window between kexec-ing and the new,
>  + * kdump kernel establishing a new #MC handler where a broadcasted MCE
>  + * might not get handled properly.
>  + */
>  +static bool __mc_check_crashing_cpu(int cpu)
>  +{
>  +if (cpu_is_offline(cpu) ||
>  +(crashing_cpu != -1 && crashing_cpu != cpu)) {
>  +u64 mcgstatus;
>  +
>  +mcgstatus = mce_rdmsrl(MSR_IA32_MCG_STATUS);
>  +if (mcgstatus & MCG_STATUS_RIPV) {
>  +mce_wrmsrl(MSR_IA32_MCG_STATUS, 0);
>  +return true;
>  +}
>  +}
>  +return false;
>  +}
>  +
>  +static void __mc_scan_banks(struct mce *m, struct mce *final,
>  +unsigned long *toclear, unsigned long *valid_banks,
>  +int no_way_out, int *worst)
>  +{
>  +struct mca_config *cfg = _cfg;
>  +int severity, i;
>  +
>  +for (i = 0; i < cfg->banks; i++) {
>  +__clear_bit(i, toclear);
>  +if (!test_bit(i, valid_banks))
>  +continue;
>  +
>  +if (!mce_banks[i].ctl)
>  +continue;
>  +
>  +m->misc = 0;
>  +m->addr = 0;
>  +m->bank = i;
>  +
>  +m->status = mce_rdmsrl(msr_ops.status(i));
>  +if (!(m->status & MCI_STATUS_VAL))
>  +continue;
>  +
>  +/*
>  + * Corrected or non-signaled errors are handled by
>  + * machine_check_poll(). Leave them alone, unless this panics.
>  + */
>  +if (!(m->status & (cfg->ser ? MCI_STATUS_S : MCI_STATUS_UC)) &&
>  +!no_way_out)
>  +continue;
>  +
>  +/* Set taint even when machine check was not enabled. */
>  +add_taint(TAINT_MACHINE_CHECK, LOCKDEP_NOW_UNRELIABLE);
>  +
>  +severity = mce_severity(m, cfg->tolerant, NULL, true);
>  +
>  +/*
>  + * When machine check was for corrected/deferred handler don't
>  + * touch, unless we're panicking.
>  + */
>  +if ((severity == MCE_KEEP_SEVERITY ||
>  + severity == MCE_UCNA_SEVERITY) && !no_way_out)
>  +continue;
>  +
>  +__set_bit(i, toclear);
>  +
>  +/* Machine check event was not enabled. Clear, but ignore. */
>  +if (severity == MCE_NO_SEVERITY)
>  +   

Re: linux-next: manual merge of the nvdimm tree with the tip tree

2018-08-18 Thread Stephen Rothwell
Hi all,

On Tue, 26 Jun 2018 12:18:53 +1000 Stephen Rothwell  
wrote:
>
> Today's linux-next merge of the nvdimm tree got a conflict in:
> 
>   arch/x86/kernel/cpu/mcheck/mce.c
> 
> between commit:
> 
>   d3d6923cd1ae ("x86/mce: Carve out the crashing_cpu check")
> 
> from the tip tree and commit:
> 
>   f6785eac562b ("x86/memory_failure: Introduce {set,clear}_mce_nospec()")
> 
> from the nvdimm tree.
> 
> I fixed it up (see below) and can carry the fix as necessary. This
> is now fixed as far as linux-next is concerned, but any non trivial
> conflicts should be mentioned to your upstream maintainer when your tree
> is submitted for merging.  You may also want to consider cooperating
> with the maintainer of the conflicting tree to minimise any particularly
> complex conflicts.
> 
> -- 
> Cheers,
> Stephen Rothwell
> 
> diff --cc arch/x86/kernel/cpu/mcheck/mce.c
> index 9a16f15f79eb,a0fbf0a8b7e6..
> --- a/arch/x86/kernel/cpu/mcheck/mce.c
> +++ b/arch/x86/kernel/cpu/mcheck/mce.c
> @@@ -1076,129 -1070,6 +1072,100 @@@ static int do_memory_failure(struct mc
>   return ret;
>   }
>   
> - #ifndef mce_unmap_kpfn
> - static void mce_unmap_kpfn(unsigned long pfn)
> - {
> - unsigned long decoy_addr;
> - 
> - /*
> -  * Unmap this page from the kernel 1:1 mappings to make sure
> -  * we don't log more errors because of speculative access to
> -  * the page.
> -  * We would like to just call:
> -  *  set_memory_np((unsigned long)pfn_to_kaddr(pfn), 1);
> -  * but doing that would radically increase the odds of a
> -  * speculative access to the poison page because we'd have
> -  * the virtual address of the kernel 1:1 mapping sitting
> -  * around in registers.
> -  * Instead we get tricky.  We create a non-canonical address
> -  * that looks just like the one we want, but has bit 63 flipped.
> -  * This relies on set_memory_np() not checking whether we passed
> -  * a legal address.
> -  */
> - 
> - decoy_addr = (pfn << PAGE_SHIFT) + (PAGE_OFFSET ^ BIT(63));
> - 
> - if (set_memory_np(decoy_addr, 1))
> - pr_warn("Could not invalidate pfn=0x%lx from 1:1 map\n", pfn);
> - }
> - #endif
> - 
> - 
>  +/*
>  + * Cases where we avoid rendezvous handler timeout:
>  + * 1) If this CPU is offline.
>  + *
>  + * 2) If crashing_cpu was set, e.g. we're entering kdump and we need to
>  + *  skip those CPUs which remain looping in the 1st kernel - see
>  + *  crash_nmi_callback().
>  + *
>  + * Note: there still is a small window between kexec-ing and the new,
>  + * kdump kernel establishing a new #MC handler where a broadcasted MCE
>  + * might not get handled properly.
>  + */
>  +static bool __mc_check_crashing_cpu(int cpu)
>  +{
>  +if (cpu_is_offline(cpu) ||
>  +(crashing_cpu != -1 && crashing_cpu != cpu)) {
>  +u64 mcgstatus;
>  +
>  +mcgstatus = mce_rdmsrl(MSR_IA32_MCG_STATUS);
>  +if (mcgstatus & MCG_STATUS_RIPV) {
>  +mce_wrmsrl(MSR_IA32_MCG_STATUS, 0);
>  +return true;
>  +}
>  +}
>  +return false;
>  +}
>  +
>  +static void __mc_scan_banks(struct mce *m, struct mce *final,
>  +unsigned long *toclear, unsigned long *valid_banks,
>  +int no_way_out, int *worst)
>  +{
>  +struct mca_config *cfg = _cfg;
>  +int severity, i;
>  +
>  +for (i = 0; i < cfg->banks; i++) {
>  +__clear_bit(i, toclear);
>  +if (!test_bit(i, valid_banks))
>  +continue;
>  +
>  +if (!mce_banks[i].ctl)
>  +continue;
>  +
>  +m->misc = 0;
>  +m->addr = 0;
>  +m->bank = i;
>  +
>  +m->status = mce_rdmsrl(msr_ops.status(i));
>  +if (!(m->status & MCI_STATUS_VAL))
>  +continue;
>  +
>  +/*
>  + * Corrected or non-signaled errors are handled by
>  + * machine_check_poll(). Leave them alone, unless this panics.
>  + */
>  +if (!(m->status & (cfg->ser ? MCI_STATUS_S : MCI_STATUS_UC)) &&
>  +!no_way_out)
>  +continue;
>  +
>  +/* Set taint even when machine check was not enabled. */
>  +add_taint(TAINT_MACHINE_CHECK, LOCKDEP_NOW_UNRELIABLE);
>  +
>  +severity = mce_severity(m, cfg->tolerant, NULL, true);
>  +
>  +/*
>  + * When machine check was for corrected/deferred handler don't
>  + * touch, unless we're panicking.
>  + */
>  +if ((severity == MCE_KEEP_SEVERITY ||
>  + severity == MCE_UCNA_SEVERITY) && !no_way_out)
>  +continue;
>  +
>  +__set_bit(i, toclear);
>  +
>  +/* Machine check event was not enabled. Clear, but ignore. */
>  +if (severity == MCE_NO_SEVERITY)
>  +   

Re: linux-next: manual merge of the nvdimm tree with the tip tree

2018-06-26 Thread Dan Williams
On Tue, Jun 26, 2018 at 3:21 AM, Thomas Gleixner  wrote:
> On Tue, 26 Jun 2018, Stephen Rothwell wrote:
>> Today's linux-next merge of the nvdimm tree got a conflict in:
>>
>>   arch/x86/kernel/cpu/mcheck/mce.c
>>
>> between commit:
>>
>>   d3d6923cd1ae ("x86/mce: Carve out the crashing_cpu check")
>>
>> from the tip tree and commit:
>>
>>   f6785eac562b ("x86/memory_failure: Introduce {set,clear}_mce_nospec()")
>>
>> from the nvdimm tree.
>
> Dan, we have rules how to deal with that stuff and there is no excuse for
> you to collect random patches and apply them as you see fit. Stop this
> please.
>

Yes, it was stale from the merge window when I was getting late 0day
and -next testing coverage. I held them back from the merge window
precisely due to lack of acks and review comments. My mistake was not
immediately pulling them down from my -next branch when it was clear
that I needed to circle back and try again for 4.19.

> MCE/RAS patches have a well established and working route and if something
> in your tree really depends on this, which I'm not seeing at all, then
> there are well documented and established procedures to do that.

Sorry, again I had no intention of bypassing x86 and the offending
patches have been pulled from my -next branch.

I need them for teaching memory_failure() how to handle DAX and
persistent memory. The primary challenge DAX and PMEM pose to the
existing error handling flow is that the errors can be repaired and
that the same poison pages can be accessed safely through the
device-driver with memcpy_mcsafe().


Re: linux-next: manual merge of the nvdimm tree with the tip tree

2018-06-26 Thread Dan Williams
On Tue, Jun 26, 2018 at 3:21 AM, Thomas Gleixner  wrote:
> On Tue, 26 Jun 2018, Stephen Rothwell wrote:
>> Today's linux-next merge of the nvdimm tree got a conflict in:
>>
>>   arch/x86/kernel/cpu/mcheck/mce.c
>>
>> between commit:
>>
>>   d3d6923cd1ae ("x86/mce: Carve out the crashing_cpu check")
>>
>> from the tip tree and commit:
>>
>>   f6785eac562b ("x86/memory_failure: Introduce {set,clear}_mce_nospec()")
>>
>> from the nvdimm tree.
>
> Dan, we have rules how to deal with that stuff and there is no excuse for
> you to collect random patches and apply them as you see fit. Stop this
> please.
>

Yes, it was stale from the merge window when I was getting late 0day
and -next testing coverage. I held them back from the merge window
precisely due to lack of acks and review comments. My mistake was not
immediately pulling them down from my -next branch when it was clear
that I needed to circle back and try again for 4.19.

> MCE/RAS patches have a well established and working route and if something
> in your tree really depends on this, which I'm not seeing at all, then
> there are well documented and established procedures to do that.

Sorry, again I had no intention of bypassing x86 and the offending
patches have been pulled from my -next branch.

I need them for teaching memory_failure() how to handle DAX and
persistent memory. The primary challenge DAX and PMEM pose to the
existing error handling flow is that the errors can be repaired and
that the same poison pages can be accessed safely through the
device-driver with memcpy_mcsafe().


Re: linux-next: manual merge of the nvdimm tree with the tip tree

2018-06-26 Thread Thomas Gleixner
On Tue, 26 Jun 2018, Stephen Rothwell wrote:
> Today's linux-next merge of the nvdimm tree got a conflict in:
> 
>   arch/x86/kernel/cpu/mcheck/mce.c
> 
> between commit:
> 
>   d3d6923cd1ae ("x86/mce: Carve out the crashing_cpu check")
> 
> from the tip tree and commit:
> 
>   f6785eac562b ("x86/memory_failure: Introduce {set,clear}_mce_nospec()")
> 
> from the nvdimm tree.

Dan, we have rules how to deal with that stuff and there is no excuse for
you to collect random patches and apply them as you see fit. Stop this
please.

MCE/RAS patches have a well established and working route and if something
in your tree really depends on this, which I'm not seeing at all, then
there are well documented and established procedures to do that.

Thanks,

tglx


Re: linux-next: manual merge of the nvdimm tree with the tip tree

2018-06-26 Thread Thomas Gleixner
On Tue, 26 Jun 2018, Stephen Rothwell wrote:
> Today's linux-next merge of the nvdimm tree got a conflict in:
> 
>   arch/x86/kernel/cpu/mcheck/mce.c
> 
> between commit:
> 
>   d3d6923cd1ae ("x86/mce: Carve out the crashing_cpu check")
> 
> from the tip tree and commit:
> 
>   f6785eac562b ("x86/memory_failure: Introduce {set,clear}_mce_nospec()")
> 
> from the nvdimm tree.

Dan, we have rules how to deal with that stuff and there is no excuse for
you to collect random patches and apply them as you see fit. Stop this
please.

MCE/RAS patches have a well established and working route and if something
in your tree really depends on this, which I'm not seeing at all, then
there are well documented and established procedures to do that.

Thanks,

tglx


linux-next: manual merge of the nvdimm tree with the tip tree

2018-06-25 Thread Stephen Rothwell
Hi all,

Today's linux-next merge of the nvdimm tree got a conflict in:

  arch/x86/kernel/cpu/mcheck/mce.c

between commit:

  d3d6923cd1ae ("x86/mce: Carve out the crashing_cpu check")

from the tip tree and commit:

  f6785eac562b ("x86/memory_failure: Introduce {set,clear}_mce_nospec()")

from the nvdimm tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

-- 
Cheers,
Stephen Rothwell

diff --cc arch/x86/kernel/cpu/mcheck/mce.c
index 9a16f15f79eb,a0fbf0a8b7e6..
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@@ -1076,129 -1070,6 +1072,100 @@@ static int do_memory_failure(struct mc
return ret;
  }
  
- #ifndef mce_unmap_kpfn
- static void mce_unmap_kpfn(unsigned long pfn)
- {
-   unsigned long decoy_addr;
- 
-   /*
-* Unmap this page from the kernel 1:1 mappings to make sure
-* we don't log more errors because of speculative access to
-* the page.
-* We would like to just call:
-*  set_memory_np((unsigned long)pfn_to_kaddr(pfn), 1);
-* but doing that would radically increase the odds of a
-* speculative access to the poison page because we'd have
-* the virtual address of the kernel 1:1 mapping sitting
-* around in registers.
-* Instead we get tricky.  We create a non-canonical address
-* that looks just like the one we want, but has bit 63 flipped.
-* This relies on set_memory_np() not checking whether we passed
-* a legal address.
-*/
- 
-   decoy_addr = (pfn << PAGE_SHIFT) + (PAGE_OFFSET ^ BIT(63));
- 
-   if (set_memory_np(decoy_addr, 1))
-   pr_warn("Could not invalidate pfn=0x%lx from 1:1 map\n", pfn);
- }
- #endif
- 
- 
 +/*
 + * Cases where we avoid rendezvous handler timeout:
 + * 1) If this CPU is offline.
 + *
 + * 2) If crashing_cpu was set, e.g. we're entering kdump and we need to
 + *  skip those CPUs which remain looping in the 1st kernel - see
 + *  crash_nmi_callback().
 + *
 + * Note: there still is a small window between kexec-ing and the new,
 + * kdump kernel establishing a new #MC handler where a broadcasted MCE
 + * might not get handled properly.
 + */
 +static bool __mc_check_crashing_cpu(int cpu)
 +{
 +  if (cpu_is_offline(cpu) ||
 +  (crashing_cpu != -1 && crashing_cpu != cpu)) {
 +  u64 mcgstatus;
 +
 +  mcgstatus = mce_rdmsrl(MSR_IA32_MCG_STATUS);
 +  if (mcgstatus & MCG_STATUS_RIPV) {
 +  mce_wrmsrl(MSR_IA32_MCG_STATUS, 0);
 +  return true;
 +  }
 +  }
 +  return false;
 +}
 +
 +static void __mc_scan_banks(struct mce *m, struct mce *final,
 +  unsigned long *toclear, unsigned long *valid_banks,
 +  int no_way_out, int *worst)
 +{
 +  struct mca_config *cfg = _cfg;
 +  int severity, i;
 +
 +  for (i = 0; i < cfg->banks; i++) {
 +  __clear_bit(i, toclear);
 +  if (!test_bit(i, valid_banks))
 +  continue;
 +
 +  if (!mce_banks[i].ctl)
 +  continue;
 +
 +  m->misc = 0;
 +  m->addr = 0;
 +  m->bank = i;
 +
 +  m->status = mce_rdmsrl(msr_ops.status(i));
 +  if (!(m->status & MCI_STATUS_VAL))
 +  continue;
 +
 +  /*
 +   * Corrected or non-signaled errors are handled by
 +   * machine_check_poll(). Leave them alone, unless this panics.
 +   */
 +  if (!(m->status & (cfg->ser ? MCI_STATUS_S : MCI_STATUS_UC)) &&
 +  !no_way_out)
 +  continue;
 +
 +  /* Set taint even when machine check was not enabled. */
 +  add_taint(TAINT_MACHINE_CHECK, LOCKDEP_NOW_UNRELIABLE);
 +
 +  severity = mce_severity(m, cfg->tolerant, NULL, true);
 +
 +  /*
 +   * When machine check was for corrected/deferred handler don't
 +   * touch, unless we're panicking.
 +   */
 +  if ((severity == MCE_KEEP_SEVERITY ||
 +   severity == MCE_UCNA_SEVERITY) && !no_way_out)
 +  continue;
 +
 +  __set_bit(i, toclear);
 +
 +  /* Machine check event was not enabled. Clear, but ignore. */
 +  if (severity == MCE_NO_SEVERITY)
 +  continue;
 +
 +  mce_read_aux(m, i);
 +
 +  /* assuming valid severity level != 0 */
 +  m->severity = severity;
 +
 +  mce_log(m);
 +
 +   

linux-next: manual merge of the nvdimm tree with the tip tree

2018-06-25 Thread Stephen Rothwell
Hi all,

Today's linux-next merge of the nvdimm tree got a conflict in:

  arch/x86/kernel/cpu/mcheck/mce.c

between commit:

  d3d6923cd1ae ("x86/mce: Carve out the crashing_cpu check")

from the tip tree and commit:

  f6785eac562b ("x86/memory_failure: Introduce {set,clear}_mce_nospec()")

from the nvdimm tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

-- 
Cheers,
Stephen Rothwell

diff --cc arch/x86/kernel/cpu/mcheck/mce.c
index 9a16f15f79eb,a0fbf0a8b7e6..
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@@ -1076,129 -1070,6 +1072,100 @@@ static int do_memory_failure(struct mc
return ret;
  }
  
- #ifndef mce_unmap_kpfn
- static void mce_unmap_kpfn(unsigned long pfn)
- {
-   unsigned long decoy_addr;
- 
-   /*
-* Unmap this page from the kernel 1:1 mappings to make sure
-* we don't log more errors because of speculative access to
-* the page.
-* We would like to just call:
-*  set_memory_np((unsigned long)pfn_to_kaddr(pfn), 1);
-* but doing that would radically increase the odds of a
-* speculative access to the poison page because we'd have
-* the virtual address of the kernel 1:1 mapping sitting
-* around in registers.
-* Instead we get tricky.  We create a non-canonical address
-* that looks just like the one we want, but has bit 63 flipped.
-* This relies on set_memory_np() not checking whether we passed
-* a legal address.
-*/
- 
-   decoy_addr = (pfn << PAGE_SHIFT) + (PAGE_OFFSET ^ BIT(63));
- 
-   if (set_memory_np(decoy_addr, 1))
-   pr_warn("Could not invalidate pfn=0x%lx from 1:1 map\n", pfn);
- }
- #endif
- 
- 
 +/*
 + * Cases where we avoid rendezvous handler timeout:
 + * 1) If this CPU is offline.
 + *
 + * 2) If crashing_cpu was set, e.g. we're entering kdump and we need to
 + *  skip those CPUs which remain looping in the 1st kernel - see
 + *  crash_nmi_callback().
 + *
 + * Note: there still is a small window between kexec-ing and the new,
 + * kdump kernel establishing a new #MC handler where a broadcasted MCE
 + * might not get handled properly.
 + */
 +static bool __mc_check_crashing_cpu(int cpu)
 +{
 +  if (cpu_is_offline(cpu) ||
 +  (crashing_cpu != -1 && crashing_cpu != cpu)) {
 +  u64 mcgstatus;
 +
 +  mcgstatus = mce_rdmsrl(MSR_IA32_MCG_STATUS);
 +  if (mcgstatus & MCG_STATUS_RIPV) {
 +  mce_wrmsrl(MSR_IA32_MCG_STATUS, 0);
 +  return true;
 +  }
 +  }
 +  return false;
 +}
 +
 +static void __mc_scan_banks(struct mce *m, struct mce *final,
 +  unsigned long *toclear, unsigned long *valid_banks,
 +  int no_way_out, int *worst)
 +{
 +  struct mca_config *cfg = _cfg;
 +  int severity, i;
 +
 +  for (i = 0; i < cfg->banks; i++) {
 +  __clear_bit(i, toclear);
 +  if (!test_bit(i, valid_banks))
 +  continue;
 +
 +  if (!mce_banks[i].ctl)
 +  continue;
 +
 +  m->misc = 0;
 +  m->addr = 0;
 +  m->bank = i;
 +
 +  m->status = mce_rdmsrl(msr_ops.status(i));
 +  if (!(m->status & MCI_STATUS_VAL))
 +  continue;
 +
 +  /*
 +   * Corrected or non-signaled errors are handled by
 +   * machine_check_poll(). Leave them alone, unless this panics.
 +   */
 +  if (!(m->status & (cfg->ser ? MCI_STATUS_S : MCI_STATUS_UC)) &&
 +  !no_way_out)
 +  continue;
 +
 +  /* Set taint even when machine check was not enabled. */
 +  add_taint(TAINT_MACHINE_CHECK, LOCKDEP_NOW_UNRELIABLE);
 +
 +  severity = mce_severity(m, cfg->tolerant, NULL, true);
 +
 +  /*
 +   * When machine check was for corrected/deferred handler don't
 +   * touch, unless we're panicking.
 +   */
 +  if ((severity == MCE_KEEP_SEVERITY ||
 +   severity == MCE_UCNA_SEVERITY) && !no_way_out)
 +  continue;
 +
 +  __set_bit(i, toclear);
 +
 +  /* Machine check event was not enabled. Clear, but ignore. */
 +  if (severity == MCE_NO_SEVERITY)
 +  continue;
 +
 +  mce_read_aux(m, i);
 +
 +  /* assuming valid severity level != 0 */
 +  m->severity = severity;
 +
 +  mce_log(m);
 +
 +   

linux-next: manual merge of the nvdimm tree with the tip tree

2018-06-06 Thread Stephen Rothwell
Hi all,

Today's linux-next merge of the nvdimm tree got a conflict in:

  kernel/Makefile

between commit:

  d7822b1e24f2 ("rseq: Introduce restartable sequences system call")

from the tip tree and commit:

  5981690ddb8f ("memremap: split devm_memremap_pages() and memremap() 
infrastructure")

from the nvdimm tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

-- 
Cheers,
Stephen Rothwell

diff --cc kernel/Makefile
index 7085c841c413,9b9241361311..
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@@ -112,8 -112,8 +112,9 @@@ obj-$(CONFIG_JUMP_LABEL) += jump_label.
  obj-$(CONFIG_CONTEXT_TRACKING) += context_tracking.o
  obj-$(CONFIG_TORTURE_TEST) += torture.o
  
- obj-$(CONFIG_HAS_IOMEM) += memremap.o
+ obj-$(CONFIG_HAS_IOMEM) += iomem.o
+ obj-$(CONFIG_ZONE_DEVICE) += memremap.o
 +obj-$(CONFIG_RSEQ) += rseq.o
  
  $(obj)/configs.o: $(obj)/config_data.h
  


pgphsiKSy5d3l.pgp
Description: OpenPGP digital signature


linux-next: manual merge of the nvdimm tree with the tip tree

2018-06-06 Thread Stephen Rothwell
Hi all,

Today's linux-next merge of the nvdimm tree got a conflict in:

  kernel/Makefile

between commit:

  d7822b1e24f2 ("rseq: Introduce restartable sequences system call")

from the tip tree and commit:

  5981690ddb8f ("memremap: split devm_memremap_pages() and memremap() 
infrastructure")

from the nvdimm tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

-- 
Cheers,
Stephen Rothwell

diff --cc kernel/Makefile
index 7085c841c413,9b9241361311..
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@@ -112,8 -112,8 +112,9 @@@ obj-$(CONFIG_JUMP_LABEL) += jump_label.
  obj-$(CONFIG_CONTEXT_TRACKING) += context_tracking.o
  obj-$(CONFIG_TORTURE_TEST) += torture.o
  
- obj-$(CONFIG_HAS_IOMEM) += memremap.o
+ obj-$(CONFIG_HAS_IOMEM) += iomem.o
+ obj-$(CONFIG_ZONE_DEVICE) += memremap.o
 +obj-$(CONFIG_RSEQ) += rseq.o
  
  $(obj)/configs.o: $(obj)/config_data.h
  


pgphsiKSy5d3l.pgp
Description: OpenPGP digital signature


linux-next: manual merge of the nvdimm tree with the tip tree

2018-03-15 Thread Stephen Rothwell
Hi all,

Today's linux-next merge of the nvdimm tree got a conflict in:

  arch/x86/mm/init_64.c

between commit:

  91f606a8fa68 ("x86/mm: Replace compile-time checks for 5-level paging with 
runtime-time checks")

from the tip tree and commit:

  a7e6c7015bf3 ("x86, memremap: fix altmap accounting at free")

from the nvdimm tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

-- 
Cheers,
Stephen Rothwell

diff --cc arch/x86/mm/init_64.c
index 9bbc51ae54a6,af11a2890235..
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@@ -1099,8 -1089,8 +1095,8 @@@ remove_p4d_table(p4d_t *p4d_start, unsi
 * 5-level case we should free them. This code will have to 
change
 * to adapt for boot-time switching between 4 and 5 level page 
tables.
 */
 -  if (CONFIG_PGTABLE_LEVELS == 5)
 +  if (pgtable_l5_enabled)
-   free_pud_table(pud_base, p4d, altmap);
+   free_pud_table(pud_base, p4d);
}
  
if (direct)


pgp4MhEZAO68H.pgp
Description: OpenPGP digital signature


linux-next: manual merge of the nvdimm tree with the tip tree

2018-03-15 Thread Stephen Rothwell
Hi all,

Today's linux-next merge of the nvdimm tree got a conflict in:

  arch/x86/mm/init_64.c

between commit:

  91f606a8fa68 ("x86/mm: Replace compile-time checks for 5-level paging with 
runtime-time checks")

from the tip tree and commit:

  a7e6c7015bf3 ("x86, memremap: fix altmap accounting at free")

from the nvdimm tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

-- 
Cheers,
Stephen Rothwell

diff --cc arch/x86/mm/init_64.c
index 9bbc51ae54a6,af11a2890235..
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@@ -1099,8 -1089,8 +1095,8 @@@ remove_p4d_table(p4d_t *p4d_start, unsi
 * 5-level case we should free them. This code will have to 
change
 * to adapt for boot-time switching between 4 and 5 level page 
tables.
 */
 -  if (CONFIG_PGTABLE_LEVELS == 5)
 +  if (pgtable_l5_enabled)
-   free_pud_table(pud_base, p4d, altmap);
+   free_pud_table(pud_base, p4d);
}
  
if (direct)


pgp4MhEZAO68H.pgp
Description: OpenPGP digital signature


linux-next: manual merge of the nvdimm tree with the tip tree

2017-05-01 Thread Stephen Rothwell
Hi Dan,

Today's linux-next merge of the nvdimm tree got a conflict in:

  drivers/nvdimm/pmem.c

between commit:

  71389703839e ("mm, zone_device: Replace {get, put}_zone_device_page() with a 
single reference to fix pmem crash")

from the tip tree and commit:

  c1d6e828a35d ("pmem: add dax_operations support")

from the nvdimm tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

-- 
Cheers,
Stephen Rothwell

diff --cc drivers/nvdimm/pmem.c
index fbc640bf06b0,58db813e7b7b..
--- a/drivers/nvdimm/pmem.c
+++ b/drivers/nvdimm/pmem.c
@@@ -232,15 -243,14 +244,19 @@@ static void pmem_release_queue(void *q
blk_cleanup_queue(q);
  }
  
 +static void pmem_freeze_queue(void *q)
 +{
 +  blk_freeze_queue_start(q);
 +}
 +
- static void pmem_release_disk(void *disk)
+ static void pmem_release_disk(void *__pmem)
  {
-   del_gendisk(disk);
-   put_disk(disk);
+   struct pmem_device *pmem = __pmem;
+ 
+   kill_dax(pmem->dax_dev);
+   put_dax(pmem->dax_dev);
+   del_gendisk(pmem->disk);
+   put_disk(pmem->disk);
  }
  
  static int pmem_attach_disk(struct device *dev,


linux-next: manual merge of the nvdimm tree with the tip tree

2017-05-01 Thread Stephen Rothwell
Hi Dan,

Today's linux-next merge of the nvdimm tree got a conflict in:

  drivers/nvdimm/pmem.c

between commit:

  71389703839e ("mm, zone_device: Replace {get, put}_zone_device_page() with a 
single reference to fix pmem crash")

from the tip tree and commit:

  c1d6e828a35d ("pmem: add dax_operations support")

from the nvdimm tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

-- 
Cheers,
Stephen Rothwell

diff --cc drivers/nvdimm/pmem.c
index fbc640bf06b0,58db813e7b7b..
--- a/drivers/nvdimm/pmem.c
+++ b/drivers/nvdimm/pmem.c
@@@ -232,15 -243,14 +244,19 @@@ static void pmem_release_queue(void *q
blk_cleanup_queue(q);
  }
  
 +static void pmem_freeze_queue(void *q)
 +{
 +  blk_freeze_queue_start(q);
 +}
 +
- static void pmem_release_disk(void *disk)
+ static void pmem_release_disk(void *__pmem)
  {
-   del_gendisk(disk);
-   put_disk(disk);
+   struct pmem_device *pmem = __pmem;
+ 
+   kill_dax(pmem->dax_dev);
+   put_dax(pmem->dax_dev);
+   del_gendisk(pmem->disk);
+   put_disk(pmem->disk);
  }
  
  static int pmem_attach_disk(struct device *dev,