]> www.infradead.org Git - users/mchehab/edac.git/commitdiff
Merge tag 'v3.3-rc1' into new_v8 hw_events_v8
authorMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 16 Mar 2012 18:56:20 +0000 (15:56 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 16 Mar 2012 18:56:20 +0000 (15:56 -0300)
* tag 'v3.3-rc1': (8899 commits)
  Linux 3.3-rc1
  x86, syscall: Need __ARCH_WANT_SYS_IPC for 32 bits
  qnx4: don't leak ->BitMap on late failure exits
  qnx4: reduce the insane nesting in qnx4_checkroot()
  qnx4: di_fname is an array, for crying out loud...
  KEYS: Permit key_serial() to be called with a const key pointer
  keys: fix user_defined key sparse messages
  ima: fix cred sparse warning
  uml: fix compile for x86-64
  MPILIB: Add a missing ENOMEM check
  tpm: fix (ACPI S3) suspend regression
  nvme: fix merge error due to change of 'make_request_fn' fn type
  xen: using EXPORT_SYMBOL requires including export.h
  gpio: tps65910: Use correct offset for gpio initialization
  acpi/apei/einj: Add extensions to EINJ from rev 5.0 of acpi spec
  intel_idle: Split up and provide per CPU initialization func
  ACPI processor: Remove unneeded variable passed by acpi_processor_hotadd_init V2
  tg3: Fix single-vector MSI-X code
  openvswitch: Fix multipart datapath dumps.
  ipv6: fix per device IP snmp counters
  ...

Conflicts:
drivers/edac/edac_mc_sysfs.c
drivers/edac/i82975x_edac.c
include/linux/edac.h

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
12 files changed:
1  2 
drivers/edac/edac_core.h
drivers/edac/edac_device.c
drivers/edac/edac_mc.c
drivers/edac/edac_mc_sysfs.c
drivers/edac/edac_module.h
drivers/edac/edac_pci.c
drivers/edac/i7core_edac.c
drivers/edac/i82975x_edac.c
drivers/edac/ppc4xx_edac.c
drivers/edac/r82600_edac.c
drivers/edac/sb_edac.c
include/linux/edac.h

Simple merge
Simple merge
Simple merge
index 9b1cdd911d6f7e66b8fe8e1dae4cc278f6185322,d56e63477d5cd286a99eaa06e20d8bbca36ddb2c..5f8f8642bcdd1b0e506b1aa52060af478c4e846f
@@@ -824,64 -977,88 +824,100 @@@ void edac_remove_sysfs_mci_device(struc
  
        debugf0("%s()\n", __func__);
  
 -      /* remove all csrow kobjects */
 -      debugf4("%s()  unregister this mci kobj\n", __func__);
 -      for (i = 0; i < mci->nr_csrows; i++) {
 -              if (mci->csrows[i].nr_pages > 0) {
 -                      debugf0("%s()  unreg csrow-%d\n", __func__, i);
 -                      kobject_put(&mci->csrows[i].kobj);
 -              }
 -      }
 -
 -      /* remove this mci instance's attribtes */
 -      if (mci->mc_driver_sysfs_attributes) {
 -              debugf4("%s()  unregister mci private attributes\n", __func__);
 -              edac_remove_mci_instance_attributes(mci,
 -                                              mci->mc_driver_sysfs_attributes,
 -                                              &mci->edac_mci_kobj, 0);
 +      for (i = 0; i < mci->tot_dimms; i++) {
 +              struct dimm_info *dimm = &mci->dimms[i];
 +              if (dimm->nr_pages == 0)
 +                      continue;
 +              debugf0("%s(): removing device %s\n", __func__,
 +                      dev_name(&dimm->dev));
 +              put_device(&dimm->dev);
        }
  
 -      /* remove the symlink */
 -      debugf4("%s()  remove_link\n", __func__);
 -      sysfs_remove_link(&mci->edac_mci_kobj, EDAC_DEVICE_SYMLINK);
 -
 -      /* unregister this instance's kobject */
 -      debugf4("%s()  remove_mci_instance\n", __func__);
 -      kobject_put(&mci->edac_mci_kobj);
 +      debugf0("%s(): removing device %s\n", __func__,
 +              dev_name(&mci->dev));
 +      put_device(&mci->dev);
  }
  
 -
 -
 -
  /*
 - * edac_setup_sysfs_mc_kset(void)
 - *
 - * Initialize the mc_kset for the 'mc' entry
 - *    This requires creating the top 'mc' directory with a kset
 - *    and its controls/attributes.
 - *
 - *    To this 'mc' kset, instance 'mci' will be grouped as children.
 - *
 - * Return:  0 SUCCESS
 - *         !0 FAILURE error code
 + * Init/exit code for the module. Basically, creates/removes /sys/class/rc
   */
 -int edac_sysfs_setup_mc_kset(void)
 +
 +int __init edac_mc_sysfs_init(void)
  {
++<<<<<<< HEAD
 +      int rc;
 +      struct sysdev_class *edac_class;
 +
 +      /* get the /sys/devices/system/edac class reference */
 +      edac_class = edac_get_sysfs_class();
 +      if (edac_class == NULL) {
 +              debugf1("%s() no edac_class\n", __func__);
 +              return -EINVAL;
 +      }
 +
 +      /*
 +       * FIXME: fake a parent device for the EDAC node
 +       *
 +       * Unfortunately, I couldn't find any easy way to do it, as sysdev
 +       * doesn't use struct device.
 +       */
 +      mci_parent.type = &mci_attr_type;
 +      mci_parent.bus = &mci_bus_type;
 +      device_initialize(&mci_parent);
 +      dev_set_name(&mci_parent, "edac");
 +      memcpy(&mci_parent.kobj, &edac_class->kset.kobj,
 +             sizeof(mci_parent.kobj));
 +
 +      rc = bus_register(&mci_bus_type);
 +      if (rc) {
 +              printk(KERN_ERR "rc_core: unable to register rc class\n");
 +              return rc;
++=======
+       int err = -EINVAL;
+       struct bus_type *edac_subsys;
+       debugf1("%s()\n", __func__);
+       /* get the /sys/devices/system/edac subsys reference */
+       edac_subsys = edac_get_sysfs_subsys();
+       if (edac_subsys == NULL) {
+               debugf1("%s() no edac_subsys error=%d\n", __func__, err);
+               goto fail_out;
+       }
+       /* Init the MC's kobject */
+       mc_kset = kset_create_and_add("mc", NULL, &edac_subsys->dev_root->kobj);
+       if (!mc_kset) {
+               err = -ENOMEM;
+               debugf1("%s() Failed to register '.../edac/mc'\n", __func__);
+               goto fail_kset;
++>>>>>>> dcd6c92267155e70a94b3927bce681ce74b80d1f
        }
  
        debugf1("%s() Registered '.../edac/mc' kobject\n", __func__);
  
        return 0;
++<<<<<<< HEAD
++=======
+ fail_kset:
+       edac_put_sysfs_subsys();
+ fail_out:
+       return err;
++>>>>>>> dcd6c92267155e70a94b3927bce681ce74b80d1f
  }
  
 -/*
 - * edac_sysfs_teardown_mc_kset
 - *
 - *    deconstruct the mc_ket for memory controllers
 - */
 -void edac_sysfs_teardown_mc_kset(void)
 +void __exit edac_mc_sysfs_exit(void)
  {
++<<<<<<< HEAD
 +      debugf0("%s() removing mc bus\n", __func__);
 +      edac_put_sysfs_class();
++=======
+       kset_unregister(mc_kset);
+       edac_put_sysfs_subsys();
+ }
++>>>>>>> dcd6c92267155e70a94b3927bce681ce74b80d1f
  
 +      bus_unregister(&mci_bus_type);
 +}
Simple merge
Simple merge
Simple merge
index 22a4102bf702e6efff19ea965b52e938f979d889,4184e0171f0079ccc09f63f39bdbfccac1a3b474..d8a3115836653825d789816e0a5fa611e7575994
@@@ -296,24 -292,30 +294,40 @@@ static int i82975x_process_error_info(s
        }
  
        page = (unsigned long) info->eap;
-       if (info->xeap & 1)
-               page |= 0x100000000ul;
-       chan = page & 1;
        page >>= 1;
-       offst = page & ((1 << PAGE_SHIFT) - 1);
-       page >>= PAGE_SHIFT;
+       if (info->xeap & 1)
+               page |= 0x80000000;
+       page >>= (PAGE_SHIFT - 1);
        row = edac_mc_find_csrow_by_page(mci, page);
  
+       if (row == -1)  {
+               i82975x_mc_printk(mci, KERN_ERR, "error processing EAP:\n"
+                       "\tXEAP=%u\n"
+                       "\t EAP=0x%08x\n"
+                       "\tPAGE=0x%08x\n",
+                       (info->xeap & 1) ? 1 : 0, info->eap, (unsigned int) page);
+               return 0;
+       }
+       chan = (mci->csrows[row].nr_channels == 1) ? 0 : info->eap & 1;
+       offst = info->eap
+                       & ((1 << PAGE_SHIFT) -
+                               (1 << mci->csrows[row].grain));
        if (info->errsts & 0x0002)
 -              edac_mc_handle_ue(mci, page, offst , row, "i82975x UE");
 +              edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci,
 +                                   page, offst, 0,
 +                                   row, -1, -1,
 +                                   "i82975x UE", "", NULL);
        else
++<<<<<<< HEAD
 +              edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci,
 +                                   page, offst, info->derrsyn,
 +                                   row, multi_chan ? chan : 0, -1,
 +                                   "i82975x CE", "", NULL);
++=======
+               edac_mc_handle_ce(mci, page, offst, info->derrsyn, row,
+                               chan, "i82975x CE");
++>>>>>>> dcd6c92267155e70a94b3927bce681ce74b80d1f
  
        return 1;
  }
@@@ -429,7 -416,12 +443,14 @@@ static void i82975x_init_csrows(struct 
  
                csrow->first_page = last_cumul_size;
                csrow->last_page = cumul_size - 1;
 -              csrow->nr_pages = cumul_size - last_cumul_size;
                last_cumul_size = cumul_size;
++<<<<<<< HEAD
++=======
+               csrow->grain = 1 << 7;  /* 128Byte cache-line resolution */
+               csrow->mtype = MEM_DDR2; /* I82975x supports only DDR2 */
+               csrow->dtype = i82975x_dram_type(mch_window, index);
+               csrow->edac_mode = EDAC_SECDED; /* only supported */
++>>>>>>> dcd6c92267155e70a94b3927bce681ce74b80d1f
        }
  }
  
Simple merge
Simple merge
index 65d6e0be777bf2125aac1092fc1213e2b51e0ca3,1dc118d83cc6a25ddb0be845677574e393d6492b..ff07f340e8e00dd41f3e3835edbca214ae57a36f
@@@ -1611,11 -1659,10 +1609,10 @@@ static void sbridge_unregister_mci(stru
        debugf0("MC: " __FILE__ ": %s(): mci = %p, dev = %p\n",
                __func__, mci, &sbridge_dev->pdev[0]->dev);
  
-       atomic_notifier_chain_unregister(&x86_mce_decoder_chain,
-                                        &sbridge_mce_dec);
+       mce_unregister_decode_chain(&sbridge_mce_dec);
  
        /* Remove MC sysfs nodes */
 -      edac_mc_del_mc(mci->dev);
 +      edac_mc_del_mc(mci->pdev);
  
        debugf1("%s: free mci struct\n", mci->ctl_name);
        kfree(mci->ctl_name);
index 81dbdf548b353ad11a4fc483b46cba217705eb86,1cd3947987e571489b2e0a6a2b5df88480d72e50..d6ad253890f627740e889840312221ae7367ee7e
  #define _LINUX_EDAC_H_
  
  #include <linux/atomic.h>
++<<<<<<< HEAD
 +#include <linux/sysdev.h>
++=======
++>>>>>>> dcd6c92267155e70a94b3927bce681ce74b80d1f
  #include <linux/device.h>
  
  #define EDAC_OPSTATE_INVAL    -1