<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux.git/drivers/acpi, branch v3.1-rc2</title>
<subtitle>Linux kernel source tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/'/>
<entry>
<title>Merge branch 'battery' into release</title>
<updated>2011-08-06T02:16:42+00:00</updated>
<author>
<name>Len Brown</name>
<email>len.brown@intel.com</email>
</author>
<published>2011-08-06T02:16:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=5389102e231d5f06da8b2897336293db18af9d76'/>
<id>5389102e231d5f06da8b2897336293db18af9d76</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Battery: sysfs_remove_battery(): possible circular locking</title>
<updated>2011-08-06T02:15:18+00:00</updated>
<author>
<name>Sergey Senozhatsky</name>
<email>sergey.senozhatsky@gmail.com</email>
</author>
<published>2011-08-05T22:34:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=69d94ec6d83d84044252d9ba03f6a8970816e350'/>
<id>69d94ec6d83d84044252d9ba03f6a8970816e350</id>
<content type='text'>
Commit 9c921c22a7f33397a6774d7fa076db9b6a0fd669
Author: Lan Tianyu &lt;tianyu.lan@intel.com&gt;

    ACPI / Battery: Resolve the race condition in the sysfs_remove_battery()

fixed BUG https://bugzilla.kernel.org/show_bug.cgi?id=35642 , but as a side
effect made lockdep unhappy with sysfs_remove_battery():

[14818.477168]
[14818.477170] =======================================================
[14818.477200] [ INFO: possible circular locking dependency detected ]
[14818.477221] 3.1.0-dbg-07865-g1280ea8-dirty #668
[14818.477236] -------------------------------------------------------
[14818.477257] s2ram/1599 is trying to acquire lock:
[14818.477276]  (s_active#8){++++.+}, at: [&lt;ffffffff81169147&gt;] sysfs_addrm_finish+0x31/0x5a
[14818.477323]
[14818.477325] but task is already holding lock:
[14818.477350]  (&amp;battery-&gt;lock){+.+.+.}, at: [&lt;ffffffffa0047278&gt;] sysfs_remove_battery+0x10/0x4b [battery]
[14818.477395]
[14818.477397] which lock already depends on the new lock.
[14818.477399]
[..]
[14818.479121] stack backtrace:
[14818.479148] Pid: 1599, comm: s2ram Not tainted 3.1.0-dbg-07865-g1280ea8-dirty #668
[14818.479175] Call Trace:
[14818.479198]  [&lt;ffffffff814828c3&gt;] print_circular_bug+0x293/0x2a4
[14818.479228]  [&lt;ffffffff81070cb5&gt;] __lock_acquire+0xfe4/0x164b
[14818.479260]  [&lt;ffffffff81169147&gt;] ? sysfs_addrm_finish+0x31/0x5a
[14818.479288]  [&lt;ffffffff810718d2&gt;] lock_acquire+0x138/0x1ac
[14818.479316]  [&lt;ffffffff81169147&gt;] ? sysfs_addrm_finish+0x31/0x5a
[14818.479345]  [&lt;ffffffff81168a79&gt;] sysfs_deactivate+0x9b/0xec
[14818.479373]  [&lt;ffffffff81169147&gt;] ? sysfs_addrm_finish+0x31/0x5a
[14818.479405]  [&lt;ffffffff81169147&gt;] sysfs_addrm_finish+0x31/0x5a
[14818.479433]  [&lt;ffffffff81167bc5&gt;] sysfs_hash_and_remove+0x54/0x77
[14818.479461]  [&lt;ffffffff811681b9&gt;] sysfs_remove_file+0x12/0x14
[14818.479488]  [&lt;ffffffff81385bf8&gt;] device_remove_file+0x12/0x14
[14818.479516]  [&lt;ffffffff81386504&gt;] device_del+0x119/0x17c
[14818.479542]  [&lt;ffffffff81386575&gt;] device_unregister+0xe/0x1a
[14818.479570]  [&lt;ffffffff813c6ef9&gt;] power_supply_unregister+0x23/0x27
[14818.479601]  [&lt;ffffffffa004729c&gt;] sysfs_remove_battery+0x34/0x4b [battery]
[14818.479632]  [&lt;ffffffffa004778f&gt;] battery_notify+0x2c/0x3a [battery]
[14818.479662]  [&lt;ffffffff8148fe82&gt;] notifier_call_chain+0x74/0xa1
[14818.479692]  [&lt;ffffffff810624b4&gt;] __blocking_notifier_call_chain+0x6c/0x89
[14818.479722]  [&lt;ffffffff810624e0&gt;] blocking_notifier_call_chain+0xf/0x11
[14818.479751]  [&lt;ffffffff8107e40e&gt;] pm_notifier_call_chain+0x15/0x27
[14818.479770]  [&lt;ffffffff8107ee1a&gt;] enter_state+0xa7/0xd5
[14818.479782]  [&lt;ffffffff8107e341&gt;] state_store+0xaa/0xc0
[14818.479795]  [&lt;ffffffff8107e297&gt;] ? pm_async_store+0x45/0x45
[14818.479807]  [&lt;ffffffff81248837&gt;] kobj_attr_store+0x17/0x19
[14818.479820]  [&lt;ffffffff81167e27&gt;] sysfs_write_file+0x103/0x13f
[14818.479834]  [&lt;ffffffff81109037&gt;] vfs_write+0xad/0x13d
[14818.479847]  [&lt;ffffffff811092b2&gt;] sys_write+0x45/0x6c
[14818.479860]  [&lt;ffffffff81492f92&gt;] system_call_fastpath+0x16/0x1b

This patch introduces separate lock to struct acpi_battery to
grab in sysfs_remove_battery() instead of battery-&gt;lock.
So fix by Lan Tianyu is still there, we just grab independent lock.

Signed-off-by: Sergey Senozhatsky &lt;sergey.senozhatsky@gmail.com&gt;
Tested-by: Lan Tianyu &lt;tianyu.lan@intel.com&gt;
Signed-off-by: Len Brown &lt;len.brown@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Commit 9c921c22a7f33397a6774d7fa076db9b6a0fd669
Author: Lan Tianyu &lt;tianyu.lan@intel.com&gt;

    ACPI / Battery: Resolve the race condition in the sysfs_remove_battery()

fixed BUG https://bugzilla.kernel.org/show_bug.cgi?id=35642 , but as a side
effect made lockdep unhappy with sysfs_remove_battery():

[14818.477168]
[14818.477170] =======================================================
[14818.477200] [ INFO: possible circular locking dependency detected ]
[14818.477221] 3.1.0-dbg-07865-g1280ea8-dirty #668
[14818.477236] -------------------------------------------------------
[14818.477257] s2ram/1599 is trying to acquire lock:
[14818.477276]  (s_active#8){++++.+}, at: [&lt;ffffffff81169147&gt;] sysfs_addrm_finish+0x31/0x5a
[14818.477323]
[14818.477325] but task is already holding lock:
[14818.477350]  (&amp;battery-&gt;lock){+.+.+.}, at: [&lt;ffffffffa0047278&gt;] sysfs_remove_battery+0x10/0x4b [battery]
[14818.477395]
[14818.477397] which lock already depends on the new lock.
[14818.477399]
[..]
[14818.479121] stack backtrace:
[14818.479148] Pid: 1599, comm: s2ram Not tainted 3.1.0-dbg-07865-g1280ea8-dirty #668
[14818.479175] Call Trace:
[14818.479198]  [&lt;ffffffff814828c3&gt;] print_circular_bug+0x293/0x2a4
[14818.479228]  [&lt;ffffffff81070cb5&gt;] __lock_acquire+0xfe4/0x164b
[14818.479260]  [&lt;ffffffff81169147&gt;] ? sysfs_addrm_finish+0x31/0x5a
[14818.479288]  [&lt;ffffffff810718d2&gt;] lock_acquire+0x138/0x1ac
[14818.479316]  [&lt;ffffffff81169147&gt;] ? sysfs_addrm_finish+0x31/0x5a
[14818.479345]  [&lt;ffffffff81168a79&gt;] sysfs_deactivate+0x9b/0xec
[14818.479373]  [&lt;ffffffff81169147&gt;] ? sysfs_addrm_finish+0x31/0x5a
[14818.479405]  [&lt;ffffffff81169147&gt;] sysfs_addrm_finish+0x31/0x5a
[14818.479433]  [&lt;ffffffff81167bc5&gt;] sysfs_hash_and_remove+0x54/0x77
[14818.479461]  [&lt;ffffffff811681b9&gt;] sysfs_remove_file+0x12/0x14
[14818.479488]  [&lt;ffffffff81385bf8&gt;] device_remove_file+0x12/0x14
[14818.479516]  [&lt;ffffffff81386504&gt;] device_del+0x119/0x17c
[14818.479542]  [&lt;ffffffff81386575&gt;] device_unregister+0xe/0x1a
[14818.479570]  [&lt;ffffffff813c6ef9&gt;] power_supply_unregister+0x23/0x27
[14818.479601]  [&lt;ffffffffa004729c&gt;] sysfs_remove_battery+0x34/0x4b [battery]
[14818.479632]  [&lt;ffffffffa004778f&gt;] battery_notify+0x2c/0x3a [battery]
[14818.479662]  [&lt;ffffffff8148fe82&gt;] notifier_call_chain+0x74/0xa1
[14818.479692]  [&lt;ffffffff810624b4&gt;] __blocking_notifier_call_chain+0x6c/0x89
[14818.479722]  [&lt;ffffffff810624e0&gt;] blocking_notifier_call_chain+0xf/0x11
[14818.479751]  [&lt;ffffffff8107e40e&gt;] pm_notifier_call_chain+0x15/0x27
[14818.479770]  [&lt;ffffffff8107ee1a&gt;] enter_state+0xa7/0xd5
[14818.479782]  [&lt;ffffffff8107e341&gt;] state_store+0xaa/0xc0
[14818.479795]  [&lt;ffffffff8107e297&gt;] ? pm_async_store+0x45/0x45
[14818.479807]  [&lt;ffffffff81248837&gt;] kobj_attr_store+0x17/0x19
[14818.479820]  [&lt;ffffffff81167e27&gt;] sysfs_write_file+0x103/0x13f
[14818.479834]  [&lt;ffffffff81109037&gt;] vfs_write+0xad/0x13d
[14818.479847]  [&lt;ffffffff811092b2&gt;] sys_write+0x45/0x6c
[14818.479860]  [&lt;ffffffff81492f92&gt;] system_call_fastpath+0x16/0x1b

This patch introduces separate lock to struct acpi_battery to
grab in sysfs_remove_battery() instead of battery-&gt;lock.
So fix by Lan Tianyu is still there, we just grab independent lock.

Signed-off-by: Sergey Senozhatsky &lt;sergey.senozhatsky@gmail.com&gt;
Tested-by: Lan Tianyu &lt;tianyu.lan@intel.com&gt;
Signed-off-by: Len Brown &lt;len.brown@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'apei-release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6</title>
<updated>2011-08-04T07:53:27+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2011-08-04T07:53:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=c0c770e610cc4cdcd66c7e939bdf89cc3e72f79d'/>
<id>c0c770e610cc4cdcd66c7e939bdf89cc3e72f79d</id>
<content type='text'>
* 'apei-release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6:
  ACPI, APEI, EINJ Param support is disabled by default
  APEI GHES: 32-bit buildfix
  ACPI: APEI build fix
  ACPI, APEI, GHES: Add hardware memory error recovery support
  HWPoison: add memory_failure_queue()
  ACPI, APEI, GHES, Error records content based throttle
  ACPI, APEI, GHES, printk support for recoverable error via NMI
  lib, Make gen_pool memory allocator lockless
  lib, Add lock-less NULL terminated single list
  Add Kconfig option ARCH_HAVE_NMI_SAFE_CMPXCHG
  ACPI, APEI, Add WHEA _OSC support
  ACPI, APEI, Add APEI bit support in generic _OSC call
  ACPI, APEI, GHES, Support disable GHES at boot time
  ACPI, APEI, GHES, Prevent GHES to be built as module
  ACPI, APEI, Use apei_exec_run_optional in APEI EINJ and ERST
  ACPI, APEI, Add apei_exec_run_optional
  ACPI, APEI, GHES, Do not ratelimit fatal error printk before panic
  ACPI, APEI, ERST, Fix erst-dbg long record reading issue
  ACPI, APEI, ERST, Prevent erst_dbg from loading if ERST is disabled
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* 'apei-release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6:
  ACPI, APEI, EINJ Param support is disabled by default
  APEI GHES: 32-bit buildfix
  ACPI: APEI build fix
  ACPI, APEI, GHES: Add hardware memory error recovery support
  HWPoison: add memory_failure_queue()
  ACPI, APEI, GHES, Error records content based throttle
  ACPI, APEI, GHES, printk support for recoverable error via NMI
  lib, Make gen_pool memory allocator lockless
  lib, Add lock-less NULL terminated single list
  Add Kconfig option ARCH_HAVE_NMI_SAFE_CMPXCHG
  ACPI, APEI, Add WHEA _OSC support
  ACPI, APEI, Add APEI bit support in generic _OSC call
  ACPI, APEI, GHES, Support disable GHES at boot time
  ACPI, APEI, GHES, Prevent GHES to be built as module
  ACPI, APEI, Use apei_exec_run_optional in APEI EINJ and ERST
  ACPI, APEI, Add apei_exec_run_optional
  ACPI, APEI, GHES, Do not ratelimit fatal error printk before panic
  ACPI, APEI, ERST, Fix erst-dbg long record reading issue
  ACPI, APEI, ERST, Prevent erst_dbg from loading if ERST is disabled
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'apei' into apei-release</title>
<updated>2011-08-03T15:30:42+00:00</updated>
<author>
<name>Len Brown</name>
<email>len.brown@intel.com</email>
</author>
<published>2011-08-03T15:30:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=d0e323b47057f4492b8fa22345f38d80a469bf8d'/>
<id>d0e323b47057f4492b8fa22345f38d80a469bf8d</id>
<content type='text'>
Some trivial conflicts due to other various merges
adding to the end of common lists sooner than this one.

	arch/ia64/Kconfig
	arch/powerpc/Kconfig
	arch/x86/Kconfig
	lib/Kconfig
	lib/Makefile

Signed-off-by: Len Brown &lt;len.brown@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Some trivial conflicts due to other various merges
adding to the end of common lists sooner than this one.

	arch/ia64/Kconfig
	arch/powerpc/Kconfig
	arch/x86/Kconfig
	lib/Kconfig
	lib/Makefile

Signed-off-by: Len Brown &lt;len.brown@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ACPI, APEI, EINJ Param support is disabled by default</title>
<updated>2011-08-03T15:15:59+00:00</updated>
<author>
<name>Huang Ying</name>
<email>ying.huang@intel.com</email>
</author>
<published>2011-07-20T08:09:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=c3e6088e1036f8084bc7444b38437da136b7588b'/>
<id>c3e6088e1036f8084bc7444b38437da136b7588b</id>
<content type='text'>
EINJ parameter support is only usable for some specific BIOS.
Originally, it is expected to have no harm for BIOS does not support
it.  But now, we found it will cause issue (memory overwriting) for
some BIOS.  So param support is disabled by default and only enabled
when newly added module parameter named "param_extension" is
explicitly specified.

Signed-off-by: Huang Ying &lt;ying.huang@intel.com&gt;
Cc: Matthew Garrett &lt;mjg@redhat.com&gt;
Acked-by: Don Zickus &lt;dzickus@redhat.com&gt;
Acked-by: Tony Luck &lt;tony.luck@intel.com&gt;
Signed-off-by: Len Brown &lt;len.brown@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
EINJ parameter support is only usable for some specific BIOS.
Originally, it is expected to have no harm for BIOS does not support
it.  But now, we found it will cause issue (memory overwriting) for
some BIOS.  So param support is disabled by default and only enabled
when newly added module parameter named "param_extension" is
explicitly specified.

Signed-off-by: Huang Ying &lt;ying.huang@intel.com&gt;
Cc: Matthew Garrett &lt;mjg@redhat.com&gt;
Acked-by: Don Zickus &lt;dzickus@redhat.com&gt;
Acked-by: Tony Luck &lt;tony.luck@intel.com&gt;
Signed-off-by: Len Brown &lt;len.brown@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>APEI GHES: 32-bit buildfix</title>
<updated>2011-08-03T15:15:59+00:00</updated>
<author>
<name>Len Brown</name>
<email>len.brown@intel.com</email>
</author>
<published>2011-08-02T22:00:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=70cb6e1da00db6c9212e6fd69bd96fd41c797077'/>
<id>70cb6e1da00db6c9212e6fd69bd96fd41c797077</id>
<content type='text'>
drivers/acpi/apei/ghes.c:542: warning: integer overflow in expression
drivers/acpi/apei/ghes.c:619: warning: integer overflow in expression

ghes.c:(.text+0x46289): undefined reference to `__udivdi3'
  in function ghes_estatus_cache_add().

Reported-by: Randy Dunlap &lt;rdunlap@xenotime.net&gt;
Signed-off-by: Len Brown &lt;len.brown@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
drivers/acpi/apei/ghes.c:542: warning: integer overflow in expression
drivers/acpi/apei/ghes.c:619: warning: integer overflow in expression

ghes.c:(.text+0x46289): undefined reference to `__udivdi3'
  in function ghes_estatus_cache_add().

Reported-by: Randy Dunlap &lt;rdunlap@xenotime.net&gt;
Signed-off-by: Len Brown &lt;len.brown@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ACPI: APEI build fix</title>
<updated>2011-08-03T15:15:59+00:00</updated>
<author>
<name>Len Brown</name>
<email>len.brown@intel.com</email>
</author>
<published>2011-07-16T22:14:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=a7e09d450b2e0b068e850d103b6ee1af537d1910'/>
<id>a7e09d450b2e0b068e850d103b6ee1af537d1910</id>
<content type='text'>
as GHES is optional...

When # CONFIG_ACPI_APEI_GHES is not set:

(.init.text+0x4c22): undefined reference to `ghes_disable'

Reported-by: Randy Dunlap &lt;rdunlap@xenotime.net&gt;
Acked-by: Randy Dunlap &lt;rdunlap@xenotime.net&gt;
Signed-off-by: Len Brown &lt;len.brown@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
as GHES is optional...

When # CONFIG_ACPI_APEI_GHES is not set:

(.init.text+0x4c22): undefined reference to `ghes_disable'

Reported-by: Randy Dunlap &lt;rdunlap@xenotime.net&gt;
Acked-by: Randy Dunlap &lt;rdunlap@xenotime.net&gt;
Signed-off-by: Len Brown &lt;len.brown@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ACPI, APEI, GHES: Add hardware memory error recovery support</title>
<updated>2011-08-03T15:15:58+00:00</updated>
<author>
<name>Huang Ying</name>
<email>ying.huang@intel.com</email>
</author>
<published>2011-07-13T05:14:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=ba61ca4aab47441f1c6cec28a9a6aa0489fd1df3'/>
<id>ba61ca4aab47441f1c6cec28a9a6aa0489fd1df3</id>
<content type='text'>
memory_failure_queue() is called when recoverable memory errors are
notified by firmware to do the recovery work.

Signed-off-by: Huang Ying &lt;ying.huang@intel.com&gt;
Signed-off-by: Len Brown &lt;len.brown@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
memory_failure_queue() is called when recoverable memory errors are
notified by firmware to do the recovery work.

Signed-off-by: Huang Ying &lt;ying.huang@intel.com&gt;
Signed-off-by: Len Brown &lt;len.brown@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ACPI, APEI, GHES, Error records content based throttle</title>
<updated>2011-08-03T15:15:57+00:00</updated>
<author>
<name>Huang Ying</name>
<email>ying.huang@intel.com</email>
</author>
<published>2011-07-13T05:14:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=152cef40a808d3034e383465b3f7d6783613e458'/>
<id>152cef40a808d3034e383465b3f7d6783613e458</id>
<content type='text'>
printk is used by GHES to report hardware errors.  Ratelimit is
enforced on the printk to avoid too many hardware error reports in
kernel log.  Because there may be thousands or even millions of
corrected hardware errors during system running.

Currently, a simple scheme is used.  That is, the total number of
hardware error reporting is ratelimited.  This may cause some issues
in practice.

For example, there are two kinds of hardware errors occurred in
system.  One is corrected memory error, because the fault memory
address is accessed frequently, there may be hundreds error report
per-second.  The other is corrected PCIe AER error, it will be
reported once per-second.  Because they share one ratelimit control
structure, it is highly possible that only memory error is reported.

To avoid the above issue, an error record content based throttle
algorithm is implemented in the patch.  Where after the first
successful reporting, all error records that are same are throttled for
some time, to let other kinds of error records have the opportunity to
be reported.

In above example, the memory errors will be throttled for some time,
after being printked.  Then the PCIe AER error will be printked
successfully.

Signed-off-by: Huang Ying &lt;ying.huang@intel.com&gt;
Signed-off-by: Len Brown &lt;len.brown@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
printk is used by GHES to report hardware errors.  Ratelimit is
enforced on the printk to avoid too many hardware error reports in
kernel log.  Because there may be thousands or even millions of
corrected hardware errors during system running.

Currently, a simple scheme is used.  That is, the total number of
hardware error reporting is ratelimited.  This may cause some issues
in practice.

For example, there are two kinds of hardware errors occurred in
system.  One is corrected memory error, because the fault memory
address is accessed frequently, there may be hundreds error report
per-second.  The other is corrected PCIe AER error, it will be
reported once per-second.  Because they share one ratelimit control
structure, it is highly possible that only memory error is reported.

To avoid the above issue, an error record content based throttle
algorithm is implemented in the patch.  Where after the first
successful reporting, all error records that are same are throttled for
some time, to let other kinds of error records have the opportunity to
be reported.

In above example, the memory errors will be throttled for some time,
after being printked.  Then the PCIe AER error will be printked
successfully.

Signed-off-by: Huang Ying &lt;ying.huang@intel.com&gt;
Signed-off-by: Len Brown &lt;len.brown@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ACPI, APEI, GHES, printk support for recoverable error via NMI</title>
<updated>2011-08-03T15:15:57+00:00</updated>
<author>
<name>Huang Ying</name>
<email>ying.huang@intel.com</email>
</author>
<published>2011-07-13T05:14:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=67eb2e99076708cc790019a6a08ca3e0ae130a3a'/>
<id>67eb2e99076708cc790019a6a08ca3e0ae130a3a</id>
<content type='text'>
Some APEI GHES recoverable errors are reported via NMI, but printk is
not safe in NMI context.

To solve the issue, a lock-less memory allocator is used to allocate
memory in NMI handler, save the error record into the allocated
memory, put the error record into a lock-less list.  On the other
hand, an irq_work is used to delay the operation from NMI context to
IRQ context.  The irq_work IRQ handler will remove nodes from
lock-less list, printk the error record and do some further processing
include recovery operation, then free the memory.

Signed-off-by: Huang Ying &lt;ying.huang@intel.com&gt;
Signed-off-by: Len Brown &lt;len.brown@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Some APEI GHES recoverable errors are reported via NMI, but printk is
not safe in NMI context.

To solve the issue, a lock-less memory allocator is used to allocate
memory in NMI handler, save the error record into the allocated
memory, put the error record into a lock-less list.  On the other
hand, an irq_work is used to delay the operation from NMI context to
IRQ context.  The irq_work IRQ handler will remove nodes from
lock-less list, printk the error record and do some further processing
include recovery operation, then free the memory.

Signed-off-by: Huang Ying &lt;ying.huang@intel.com&gt;
Signed-off-by: Len Brown &lt;len.brown@intel.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
