Merge tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 6 Jul 2017 00:09:27 +0000 (17:09 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 6 Jul 2017 00:09:27 +0000 (17:09 -0700)
Pull arm64 updates from Will Deacon:

 - RAS reporting via GHES/APEI (ACPI)

 - Indirect ftrace trampolines for modules

 - Improvements to kernel fault reporting

 - Page poisoning

 - Sigframe cleanups and preparation for SVE context

 - Core dump fixes

 - Sparse fixes (mainly relating to endianness)

 - xgene SoC PMU v3 driver

 - Misc cleanups and non-critical fixes

* tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: (75 commits)
  arm64: fix endianness annotation for 'struct jit_ctx' and friends
  arm64: cpuinfo: constify attribute_group structures.
  arm64: ptrace: Fix incorrect get_user() use in compat_vfp_set()
  arm64: ptrace: Remove redundant overrun check from compat_vfp_set()
  arm64: ptrace: Avoid setting compat FP[SC]R to garbage if get_user fails
  arm64: fix endianness annotation for __apply_alternatives()/get_alt_insn()
  arm64: fix endianness annotation in get_kaslr_seed()
  arm64: add missing conversion to __wsum in ip_fast_csum()
  arm64: fix endianness annotation in acpi_parking_protocol.c
  arm64: use readq() instead of readl() to read 64bit entry_point
  arm64: fix endianness annotation for reloc_insn_movw() & reloc_insn_imm()
  arm64: fix endianness annotation for aarch64_insn_write()
  arm64: fix endianness annotation in aarch64_insn_read()
  arm64: fix endianness annotation in call_undef_hook()
  arm64: fix endianness annotation for debug-monitors.c
  ras: mark stub functions as 'inline'
  arm64: pass endianness info to sparse
  arm64: ftrace: fix !CONFIG_ARM64_MODULE_PLTS kernels
  arm64: signal: Allow expansion of the signal frame
  acpi: apei: check for pending errors when probing GHES entries
  ...

1  2 
arch/arm64/Kconfig
arch/arm64/kernel/insn.c
arch/arm64/kernel/vdso.c
arch/arm64/net/bpf_jit_comp.c
drivers/acpi/apei/ghes.c
drivers/acpi/arm64/iort.c
drivers/char/Kconfig
drivers/irqchip/Kconfig
drivers/ras/ras.c
include/linux/uuid.h
virt/kvm/arm/mmu.c

Simple merge
Simple merge
Simple merge
index 2f0505b5c24043dee627e72e54ea663b238fd29f,bd2ac9912087d0c6a315e9350a6f012d9db79e90..f32144b2e07fc13e39baa929bfb9f9c29796905f
@@@ -70,8 -68,7 +70,8 @@@ struct jit_ctx 
        int idx;
        int epilogue_offset;
        int *offset;
-       u32 *image;
+       __le32 *image;
 +      u32 stack_size;
  };
  
  static inline void emit(const u32 insn, struct jit_ctx *ctx)
index 0968816f57553a620066198f614bacf14c671a4e,bb830444df284c6b6a1989cb73a991a91eabbe0f..d661d452b238b882cfc65dfd94ac5881c5e211c7
@@@ -718,10 -809,59 +809,59 @@@ static int ghes_notify_hed(struct notif
        return ret;
  }
  
 -static struct notifier_block ghes_notifier_sci = {
 -      .notifier_call = ghes_notify_sci,
 +static struct notifier_block ghes_notifier_hed = {
 +      .notifier_call = ghes_notify_hed,
  };
  
+ #ifdef CONFIG_ACPI_APEI_SEA
+ static LIST_HEAD(ghes_sea);
+ /*
+  * Return 0 only if one of the SEA error sources successfully reported an error
+  * record sent from the firmware.
+  */
+ int ghes_notify_sea(void)
+ {
+       struct ghes *ghes;
+       int ret = -ENOENT;
+       rcu_read_lock();
+       list_for_each_entry_rcu(ghes, &ghes_sea, list) {
+               if (!ghes_proc(ghes))
+                       ret = 0;
+       }
+       rcu_read_unlock();
+       return ret;
+ }
+ static void ghes_sea_add(struct ghes *ghes)
+ {
+       mutex_lock(&ghes_list_mutex);
+       list_add_rcu(&ghes->list, &ghes_sea);
+       mutex_unlock(&ghes_list_mutex);
+ }
+ static void ghes_sea_remove(struct ghes *ghes)
+ {
+       mutex_lock(&ghes_list_mutex);
+       list_del_rcu(&ghes->list);
+       mutex_unlock(&ghes_list_mutex);
+       synchronize_rcu();
+ }
+ #else /* CONFIG_ACPI_APEI_SEA */
+ static inline void ghes_sea_add(struct ghes *ghes)
+ {
+       pr_err(GHES_PFX "ID: %d, trying to add SEA notification which is not supported\n",
+              ghes->generic->header.source_id);
+ }
+ static inline void ghes_sea_remove(struct ghes *ghes)
+ {
+       pr_err(GHES_PFX "ID: %d, trying to remove SEA notification which is not supported\n",
+              ghes->generic->header.source_id);
+ }
+ #endif /* CONFIG_ACPI_APEI_SEA */
  #ifdef CONFIG_HAVE_ACPI_APEI_NMI
  /*
   * printk is not safe in NMI context.  So in NMI handler, we allocate
@@@ -966,10 -1095,15 +1095,18 @@@ static int ghes_probe(struct platform_d
        case ACPI_HEST_NOTIFY_POLLED:
        case ACPI_HEST_NOTIFY_EXTERNAL:
        case ACPI_HEST_NOTIFY_SCI:
 +      case ACPI_HEST_NOTIFY_GSIV:
 +      case ACPI_HEST_NOTIFY_GPIO:
                break;
 +
+       case ACPI_HEST_NOTIFY_SEA:
+               if (!IS_ENABLED(CONFIG_ACPI_APEI_SEA)) {
+                       pr_warn(GHES_PFX "Generic hardware error source: %d notified via SEA is not supported\n",
+                               generic->header.source_id);
+                       rc = -ENOTSUPP;
+                       goto err;
+               }
+               break;
        case ACPI_HEST_NOTIFY_NMI:
                if (!IS_ENABLED(CONFIG_HAVE_ACPI_APEI_NMI)) {
                        pr_warn(GHES_PFX "Generic hardware error source: %d notified via NMI interrupt is not supported!\n",
                        goto err_edac_unreg;
                }
                break;
 +
        case ACPI_HEST_NOTIFY_SCI:
 +      case ACPI_HEST_NOTIFY_GSIV:
 +      case ACPI_HEST_NOTIFY_GPIO:
                mutex_lock(&ghes_list_mutex);
 -              if (list_empty(&ghes_sci))
 -                      register_acpi_hed_notifier(&ghes_notifier_sci);
 -              list_add_rcu(&ghes->list, &ghes_sci);
 +              if (list_empty(&ghes_hed))
 +                      register_acpi_hed_notifier(&ghes_notifier_hed);
 +              list_add_rcu(&ghes->list, &ghes_hed);
                mutex_unlock(&ghes_list_mutex);
                break;
 +
+       case ACPI_HEST_NOTIFY_SEA:
+               ghes_sea_add(ghes);
+               break;
        case ACPI_HEST_NOTIFY_NMI:
                ghes_nmi_add(ghes);
                break;
@@@ -1084,7 -1217,9 +1227,10 @@@ static int ghes_remove(struct platform_
                mutex_unlock(&ghes_list_mutex);
                synchronize_rcu();
                break;
 +
+       case ACPI_HEST_NOTIFY_SEA:
+               ghes_sea_remove(ghes);
+               break;
        case ACPI_HEST_NOTIFY_NMI:
                ghes_nmi_remove(ghes);
                break;
Simple merge
Simple merge
Simple merge
index ed4c343d08c44a4795d04cb16d5d81047b1d9633,39701a5c3f495958ed7294e347f6f9ded2cd1f33..5429d37957329f83387a2da6bc687162024de1b0
@@@ -27,9 -40,10 +40,10 @@@ subsys_initcall(ras_init)
  EXPORT_TRACEPOINT_SYMBOL_GPL(extlog_mem_event);
  #endif
  EXPORT_TRACEPOINT_SYMBOL_GPL(mc_event);
+ EXPORT_TRACEPOINT_SYMBOL_GPL(non_standard_event);
+ EXPORT_TRACEPOINT_SYMBOL_GPL(arm_event);
  
 -int __init parse_ras_param(char *str)
 +static int __init parse_ras_param(char *str)
  {
  #ifdef CONFIG_RAS_CEC
        parse_cec_param(str);
Simple merge
Simple merge