diff options
author | Huang Ying <ying.huang@intel.com> | 2010-05-18 14:35:11 +0800 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2010-05-19 11:40:03 -0400 |
commit | 15651291a2f8c11e7e6a42d8bfde7a213ff13262 (patch) | |
tree | 0bbb96e22231e2b4da4ce9b264dfce8c54a52efc /include/acpi/atomicio.h | |
parent | e40152ee1e1c7a63f4777791863215e3faa37a86 (diff) | |
download | kernel_samsung_crespo-15651291a2f8c11e7e6a42d8bfde7a213ff13262.zip kernel_samsung_crespo-15651291a2f8c11e7e6a42d8bfde7a213ff13262.tar.gz kernel_samsung_crespo-15651291a2f8c11e7e6a42d8bfde7a213ff13262.tar.bz2 |
ACPI, IO memory pre-mapping and atomic accessing
Some ACPI IO accessing need to be done in atomic context. For example,
APEI ERST operations may be used for permanent storage in hardware
error handler. That is, it may be called in atomic contexts such as
IRQ or NMI, etc. And, ERST/EINJ implement their operations via IO
memory/port accessing. But the IO memory accessing method provided by
ACPI (acpi_read/acpi_write) maps the IO memory during it is accessed,
so it can not be used in atomic context. To solve the issue, the IO
memory should be pre-mapped during EINJ/ERST initializing. A linked
list is used to record which memory area has been mapped, when memory
is accessed in hardware error handler, search the linked list for the
mapped virtual address from the given physical address.
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'include/acpi/atomicio.h')
-rw-r--r-- | include/acpi/atomicio.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/include/acpi/atomicio.h b/include/acpi/atomicio.h new file mode 100644 index 0000000..8b9fb4b --- /dev/null +++ b/include/acpi/atomicio.h @@ -0,0 +1,10 @@ +#ifndef ACPI_ATOMIC_IO_H +#define ACPI_ATOMIC_IO_H + +int acpi_pre_map_gar(struct acpi_generic_address *reg); +int acpi_post_unmap_gar(struct acpi_generic_address *reg); + +int acpi_atomic_read(u64 *val, struct acpi_generic_address *reg); +int acpi_atomic_write(u64 val, struct acpi_generic_address *reg); + +#endif |