<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/drivers/edac/sb_edac.c, branch linux-3.5.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.5.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.5.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2012-06-11T14:49:51Z</updated>
<entry>
<title>edac: fix the error about memory type detection on SandyBridge</title>
<updated>2012-06-11T14:49:51Z</updated>
<author>
<name>Chen Gong</name>
</author>
<published>2012-05-14T08:51:26Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=2cbb587d3bc41a305168e91b4f3c5b6944a12566'/>
<id>urn:sha1:2cbb587d3bc41a305168e91b4f3c5b6944a12566</id>
<content type='text'>
On SandyBridge, DDRIOA(Dev: 17 Func: 0 Offset: 328) is used
to detect whether DIMM is RDIMM/LRDIMM, not TA(Dev: 15 Func: 0).

Signed-off-by: Chen Gong &lt;gong.chen@linux.intel.com&gt;
Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>edac: avoid mce decoding crash after edac driver unloaded</title>
<updated>2012-06-11T14:49:51Z</updated>
<author>
<name>Chen Gong</name>
</author>
<published>2012-05-08T23:40:12Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=e35fca4791fcdd43dc1fd769797df40c562ab491'/>
<id>urn:sha1:e35fca4791fcdd43dc1fd769797df40c562ab491</id>
<content type='text'>
Some edac drivers register themselves as mce decoders via
notifier_chain. But in current notifier_chain implementation logic,
it doesn't accept same notifier registered twice. If so, it will be
wrong when adding/removing the element from the list. For example,
on one SandyBridge platform, remove module sb_edac and then trigger
one error, it will hit oops because it has no mce decoder registered
but related notifier_chain still points to an invalid callback
function. Here is an example:

Call Trace:
 [&lt;ffffffff8150ef6a&gt;] atomic_notifier_call_chain+0x1a/0x20
 [&lt;ffffffff8102b936&gt;] mce_log+0x46/0x180
 [&lt;ffffffff8102eaea&gt;] apei_mce_report_mem_error+0x4a/0x60
 [&lt;ffffffff812e19d2&gt;] ghes_do_proc+0x192/0x210
 [&lt;ffffffff812e2066&gt;] ghes_proc+0x46/0x70
 [&lt;ffffffff812e20d8&gt;] ghes_notify_sci+0x48/0x80
 [&lt;ffffffff8150ef05&gt;] notifier_call_chain+0x55/0x80
 [&lt;ffffffff81076f1a&gt;] __blocking_notifier_call_chain+0x5a/0x80
 [&lt;ffffffff812aea11&gt;] ? acpi_os_wait_events_complete+0x23/0x23
 [&lt;ffffffff81076f56&gt;] blocking_notifier_call_chain+0x16/0x20
 [&lt;ffffffff812ddc4d&gt;] acpi_hed_notify+0x19/0x1b
 [&lt;ffffffff812b16bd&gt;] acpi_device_notify+0x19/0x1b
 [&lt;ffffffff812beb38&gt;] acpi_ev_notify_dispatch+0x67/0x7f
 [&lt;ffffffff812aea3a&gt;] acpi_os_execute_deferred+0x29/0x36
 [&lt;ffffffff81069dc2&gt;] process_one_work+0x132/0x450
 [&lt;ffffffff8106bbcb&gt;] worker_thread+0x17b/0x3c0
 [&lt;ffffffff8106ba50&gt;] ? manage_workers+0x120/0x120
 [&lt;ffffffff81070aee&gt;] kthread+0x9e/0xb0
 [&lt;ffffffff81514724&gt;] kernel_thread_helper+0x4/0x10
 [&lt;ffffffff81070a50&gt;] ? kthread_freezable_should_stop+0x70/0x70
 [&lt;ffffffff81514720&gt;] ? gs_change+0x13/0x13
Code: f3 49 89 d4 45 85 ed 4d 89 c6 48 8b 0f 74 48 48 85 c9 75 17 eb 41
0f 1f 80 00 00 00 00 41 83 ed 01 4c 89 f9 74 22 4d 85 ff 74 1d &lt;4c&gt; 8b
79 08 4c 89 e2 48 89 de 48 89 cf ff 11 4d 85 f6 74 04 41
RIP  [&lt;ffffffff8150eef6&gt;] notifier_call_chain+0x46/0x80
 RSP &lt;ffff88042868fb20&gt;
CR2: ffffffffa01af838
---[ end trace 0100930068e73e6f ]---
BUG: unable to handle kernel paging request at fffffffffffffff8
IP: [&lt;ffffffff810705b0&gt;] kthread_data+0x10/0x20
PGD 1a0d067 PUD 1a0e067 PMD 0
Oops: 0000 [#2] SMP

Only i7core_edac and sb_edac have such issues because they have more
than one memory controller which means they have to register mce
decoder many times.

Cc: &lt;stable@vger.kernel.org&gt; # 3.2 and upper
Signed-off-by: Chen Gong &lt;gong.chen@linux.intel.com&gt;
Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>Merge git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-edac</title>
<updated>2012-05-30T01:32:37Z</updated>
<author>
<name>Linus Torvalds</name>
</author>
<published>2012-05-30T01:32:37Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=87a5af24e54857e7b15c1f1b0468512ee65c94e3'/>
<id>urn:sha1:87a5af24e54857e7b15c1f1b0468512ee65c94e3</id>
<content type='text'>
Pull EDAC internal API changes from Mauro Carvalho Chehab:
 "This changeset is the first part of a series of patches that fixes the
  EDAC sybsystem.  On this set, it changes the Kernel EDAC API in order
  to properly represent the Intel i3/i5/i7, Xeon 3xxx/5xxx/7xxx, and
  Intel E5-xxxx memory controllers.

  The EDAC core used to assume that:

       - the DRAM chip select pin is directly accessed by the memory
         controller

       - when multiple channels are used, they're all filled with the
         same type of memory.

  None of the above premises is true on Intel memory controllers since
  2002, when RAMBUS and FB-DIMMs were introduced, and Advanced Memory
  Buffer or by some similar technologies hides the direct access to the
  DRAM pins.

  So, the existing drivers for those chipsets had to lie to the EDAC
  core, in general telling that just one channel is filled.  That
  produces some hard to understand error messages like:

       EDAC MC0: CE row 3, channel 0, label "DIMM1": 1 Unknown error(s): memory read error on FATAL area : cpu=0 Err=0008:00c2 (ch=2), addr = 0xad1f73480 =&gt; socket=0, Channel=0(mask=2), rank=1

  The location information there (row3 channel 0) is completely bogus:
  it has no physical meaning, and are just some random values that the
  driver uses to talk with the EDAC core.  The error actually happened
  at CPU socket 0, channel 0, slot 1, but this is not reported anywhere,
  as the EDAC core doesn't know anything about the memory layout.  So,
  only advanced users that know how the EDAC driver works and that tests
  their systems to see how DIMMs are mapped can actually benefit for
  such error logs.

  This patch series fixes the error report logic, in order to allow the
  EDAC to expose the memory architecture used by them to the EDAC core.
  So, as the EDAC core now understands how the memory is organized, it
  can provide an useful report:

       EDAC MC0: CE memory read error on DIMM1 (channel:0 slot:1 page:0x364b1b offset:0x600 grain:32 syndrome:0x0 - count:1 area:DRAM err_code:0001:0090 socket:0 channel_mask:1 rank:4)

  The location of the DIMM where the error happened is reported by "MC0"
  (cpu socket #0), at "channel:0 slot:1" location, and matches the
  physical location of the DIMM.

  There are two remaining issues not covered by this patch series:

       - The EDAC sysfs API will still report bogus values.  So,
         userspace tools like edac-utils will still use the bogus data;

       - Add a new tracepoint-based way to get the binary information
         about the errors.

  Those are on a second series of patches (also at -next), but will
  probably miss the train for 3.5, due to the slow review process."

Fix up trivial conflict (due to spelling correction of removed code) in
drivers/edac/edac_device.c

* git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-edac: (42 commits)
  i7core: fix ranks information at the per-channel struct
  i5000: Fix the fatal error handling
  i5100_edac: Fix a warning when compiled with 32 bits
  i82975x_edac: Test nr_pages earlier to save a few CPU cycles
  e752x_edac: provide more info about how DIMMS/ranks are mapped
  i5000_edac: Fix the logic that retrieves memory information
  i5400_edac: improve debug messages to better represent the filled memory
  edac: Cleanup the logs for i7core and sb edac drivers
  edac: Initialize the dimm label with the known information
  edac: Remove the legacy EDAC ABI
  x38_edac: convert driver to use the new edac ABI
  tile_edac: convert driver to use the new edac ABI
  sb_edac: convert driver to use the new edac ABI
  r82600_edac: convert driver to use the new edac ABI
  ppc4xx_edac: convert driver to use the new edac ABI
  pasemi_edac: convert driver to use the new edac ABI
  mv64x60_edac: convert driver to use the new edac ABI
  mpc85xx_edac: convert driver to use the new edac ABI
  i82975x_edac: convert driver to use the new edac ABI
  i82875p_edac: convert driver to use the new edac ABI
  ...
</content>
</entry>
<entry>
<title>edac: Cleanup the logs for i7core and sb edac drivers</title>
<updated>2012-05-28T22:13:51Z</updated>
<author>
<name>Mauro Carvalho Chehab</name>
</author>
<published>2012-05-11T14:41:45Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=e17a2f42a484562be48128c5b8dc9f7291e8c902'/>
<id>urn:sha1:e17a2f42a484562be48128c5b8dc9f7291e8c902</id>
<content type='text'>
Remove some information that it is duplicated at the MCE log,
and don't have much usage for the error. Those data will be
added again, when creating a trace function that outputs both
memory errors and MCE fields.

Cc: Aristeu Rozanski &lt;arozansk@redhat.com&gt;
Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>edac: Remove the legacy EDAC ABI</title>
<updated>2012-05-28T22:13:50Z</updated>
<author>
<name>Mauro Carvalho Chehab</name>
</author>
<published>2012-05-02T17:37:00Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=ca0907b9e413bb1d1f3ea123b663535b74928846'/>
<id>urn:sha1:ca0907b9e413bb1d1f3ea123b663535b74928846</id>
<content type='text'>
Now that all drivers got converted to use the new ABI, we can
drop the old one.

Acked-by: Chris Metcalf &lt;cmetcalf@tilera.com&gt;
Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>sb_edac: convert driver to use the new edac ABI</title>
<updated>2012-05-28T22:13:48Z</updated>
<author>
<name>Mauro Carvalho Chehab</name>
</author>
<published>2012-04-16T18:12:22Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=c36e3e77687b39073903f55461fc9417514e831e'/>
<id>urn:sha1:c36e3e77687b39073903f55461fc9417514e831e</id>
<content type='text'>
The legacy edac ABI is going to be removed. Port the driver to use
and benefit from the new API functionality.

Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>edac: move nr_pages to dimm struct</title>
<updated>2012-05-28T22:10:58Z</updated>
<author>
<name>Mauro Carvalho Chehab</name>
</author>
<published>2012-01-28T12:09:38Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a895bf8b1e1ea4c032a8fa8a09475a2ce09fe77a'/>
<id>urn:sha1:a895bf8b1e1ea4c032a8fa8a09475a2ce09fe77a</id>
<content type='text'>
The number of pages is a dimm property. Move it to the dimm struct.

After this change, it is possible to add sysfs nodes for the DIMM's that
will properly represent the DIMM stick properties, including its size.

A TODO fix here is to properly represent dual-rank/quad-rank DIMMs when
the memory controller represents the memory via chip select rows.

Reviewed-by: Aristeu Rozanski &lt;arozansk@redhat.com&gt;
Acked-by: Borislav Petkov &lt;borislav.petkov@amd.com&gt;
Acked-by: Chris Metcalf &lt;cmetcalf@tilera.com&gt;
Cc: Doug Thompson &lt;norsk5@yahoo.com&gt;
Cc: Mark Gross &lt;mark.gross@intel.com&gt;
Cc: Jason Uhlenkott &lt;juhlenko@akamai.com&gt;
Cc: Tim Small &lt;tim@buttersideup.com&gt;
Cc: Ranganathan Desikan &lt;ravi@jetztechnologies.com&gt;
Cc: "Arvind R." &lt;arvino55@gmail.com&gt;
Cc: Olof Johansson &lt;olof@lixom.net&gt;
Cc: Egor Martovetsky &lt;egor@pasemi.com&gt;
Cc: Michal Marek &lt;mmarek@suse.cz&gt;
Cc: Jiri Kosina &lt;jkosina@suse.cz&gt;
Cc: Joe Perches &lt;joe@perches.com&gt;
Cc: Dmitry Eremin-Solenikov &lt;dbaryshkov@gmail.com&gt;
Cc: Benjamin Herrenschmidt &lt;benh@kernel.crashing.org&gt;
Cc: Hitoshi Mitake &lt;h.mitake@gmail.com&gt;
Cc: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Cc: "Niklas Söderlund" &lt;niklas.soderlund@ericsson.com&gt;
Cc: Shaohui Xie &lt;Shaohui.Xie@freescale.com&gt;
Cc: Josh Boyer &lt;jwboyer@gmail.com&gt;
Cc: linuxppc-dev@lists.ozlabs.org
Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>edac: Don't initialize csrow's first_page &amp; friends when not needed</title>
<updated>2012-05-28T22:10:58Z</updated>
<author>
<name>Mauro Carvalho Chehab</name>
</author>
<published>2012-01-28T00:20:32Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=5e2af0c09e60d11dd8297e259a9ca2b3d92d2cf4'/>
<id>urn:sha1:5e2af0c09e60d11dd8297e259a9ca2b3d92d2cf4</id>
<content type='text'>
Almost all edac	drivers	initialize csrow_info-&gt;first_page,
csrow_info-&gt;last_page and csrow_info-&gt;page_mask. Those vars are
used inside the EDAC core, in order to calculate the csrow affected
by an error, by using the routine edac_mc_find_csrow_by_page().

However, very few drivers actually use it:
        e752x_edac.c
        e7xxx_edac.c
        i3000_edac.c
        i82443bxgx_edac.c
        i82860_edac.c
        i82875p_edac.c
        i82975x_edac.c
        r82600_edac.c

There also a few other drivers that have their own calculus
formula internally using those vars.

All the others are just wasting time by initializing those
data.

While initializing data without using them won't cause any troubles, as
those information is stored at the wrong place (at csrows structure), it
is better to remove what is unused, in order to simplify the next patch.

Reviewed-by: Aristeu Rozanski &lt;arozansk@redhat.com&gt;
Acked-by: Borislav Petkov &lt;borislav.petkov@amd.com&gt;
Acked-by: Chris Metcalf &lt;cmetcalf@tilera.com&gt;
Cc: Doug Thompson &lt;norsk5@yahoo.com&gt;
Cc: Hitoshi Mitake &lt;h.mitake@gmail.com&gt;
Cc: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Cc: "Niklas Söderlund" &lt;niklas.soderlund@ericsson.com&gt;
Cc: Josh Boyer &lt;jwboyer@gmail.com&gt;
Cc: Jiri Kosina &lt;jkosina@suse.cz&gt;
Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>edac: move dimm properties to struct dimm_info</title>
<updated>2012-05-28T22:10:58Z</updated>
<author>
<name>Mauro Carvalho Chehab</name>
</author>
<published>2012-01-27T21:38:08Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=084a4fccef39ac7abb039511f32380f28d0b67e6'/>
<id>urn:sha1:084a4fccef39ac7abb039511f32380f28d0b67e6</id>
<content type='text'>
On systems based on chip select rows, all channels need to use memories
with the same properties, otherwise the memories on channels A and B
won't be recognized.

However, such assumption is not true for all types of memory
controllers.

Controllers for FB-DIMM's don't have such requirements.

Also, modern Intel controllers seem to be capable of handling such
differences.

So, we need to get rid of storing the DIMM information into a per-csrow
data, storing it, instead at the right place.

The first step is to move grain, mtype, dtype and edac_mode to the
per-dimm struct.

Reviewed-by: Aristeu Rozanski &lt;arozansk@redhat.com&gt;
Reviewed-by: Borislav Petkov &lt;borislav.petkov@amd.com&gt;
Acked-by: Chris Metcalf &lt;cmetcalf@tilera.com&gt;
Cc: Doug Thompson &lt;norsk5@yahoo.com&gt;
Cc: Borislav Petkov &lt;borislav.petkov@amd.com&gt;
Cc: Mark Gross &lt;mark.gross@intel.com&gt;
Cc: Jason Uhlenkott &lt;juhlenko@akamai.com&gt;
Cc: Tim Small &lt;tim@buttersideup.com&gt;
Cc: Ranganathan Desikan &lt;ravi@jetztechnologies.com&gt;
Cc: "Arvind R." &lt;arvino55@gmail.com&gt;
Cc: Olof Johansson &lt;olof@lixom.net&gt;
Cc: Egor Martovetsky &lt;egor@pasemi.com&gt;
Cc: Michal Marek &lt;mmarek@suse.cz&gt;
Cc: Jiri Kosina &lt;jkosina@suse.cz&gt;
Cc: Joe Perches &lt;joe@perches.com&gt;
Cc: Dmitry Eremin-Solenikov &lt;dbaryshkov@gmail.com&gt;
Cc: Benjamin Herrenschmidt &lt;benh@kernel.crashing.org&gt;
Cc: Hitoshi Mitake &lt;h.mitake@gmail.com&gt;
Cc: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Cc: James Bottomley &lt;James.Bottomley@parallels.com&gt;
Cc: "Niklas Söderlund" &lt;niklas.soderlund@ericsson.com&gt;
Cc: Shaohui Xie &lt;Shaohui.Xie@freescale.com&gt;
Cc: Josh Boyer &lt;jwboyer@gmail.com&gt;
Cc: Mike Williams &lt;mike@mikebwilliams.com&gt;
Cc: linuxppc-dev@lists.ozlabs.org
Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>edac: Create a dimm struct and move the labels into it</title>
<updated>2012-05-28T22:10:57Z</updated>
<author>
<name>Mauro Carvalho Chehab</name>
</author>
<published>2012-01-27T17:12:32Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a7d7d2e1a07e3811dc49af2962c940fd8bbb6c8f'/>
<id>urn:sha1:a7d7d2e1a07e3811dc49af2962c940fd8bbb6c8f</id>
<content type='text'>
The way a DIMM is currently represented implies that they're
linked into a per-csrow struct. However, some drivers don't see
csrows, as they're ridden behind some chip like the AMB's
on FBDIMM's, for example.

This forced drivers to fake^Wvirtualize a csrow struct, and to create
a mess under csrow/channel original's concept.

Move the DIMM labels into a per-DIMM struct, and add there
the real location of the socket, in terms of csrow/channel.
Latter patches will modify the location to properly represent the
memory architecture.

All other drivers will use a per-csrow type of location.
Some of those drivers will require a latter conversion, as
they also fake the csrows internally.

TODO: While this patch doesn't change the existing behavior, on
csrows-based memory controllers, a csrow/channel pair points to a memory
rank. There's a known bug at the EDAC core that allows having different
labels for the same DIMM, if it has more than one rank. A latter patch
is need to merge the several ranks for a DIMM into the same dimm_info
struct, in order to avoid having different labels for the same DIMM.

The edac_mc_alloc() will now contain a per-dimm initialization loop that
will be changed by latter patches in order to match other types of
memory architectures.

Reviewed-by: Aristeu Rozanski &lt;arozansk@redhat.com&gt;
Reviewed-by: Borislav Petkov &lt;borislav.petkov@amd.com&gt;
Cc: Doug Thompson &lt;norsk5@yahoo.com&gt;
Cc: Ranganathan Desikan &lt;ravi@jetztechnologies.com&gt;
Cc: "Arvind R." &lt;arvino55@gmail.com&gt;
Cc: "Niklas Söderlund" &lt;niklas.soderlund@ericsson.com&gt;
Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
</feed>
