]> git.baikalelectronics.ru Git - kernel.git/commit
ACPI: Fix acpi_os_read_memory() and acpi_os_write_memory() (v2)
authorRafael J. Wysocki <rjw@sisk.pl>
Tue, 8 Feb 2011 22:37:16 +0000 (23:37 +0100)
committerRafael J. Wysocki <rjw@sisk.pl>
Tue, 8 Feb 2011 22:37:16 +0000 (23:37 +0100)
commitafa03c116398cf6c837e4187d3581dfa682c86c3
tree3ac23b3a2a3fc881efb3a255d5ad42bde8737051
parent869003efd1b68e37d3711bba73fdc4b999e3a7b7
ACPI: Fix acpi_os_read_memory() and acpi_os_write_memory() (v2)

The functions acpi_os_read_memory() and acpi_os_write_memory() do
two wrong things.  First, they shouldn't call rcu_read_unlock()
before the looked up address is actually used for I/O, because in
that case the iomap it belongs to may be removed before the I/O
is done.  Second, if they have to create a new mapping, they should
check the returned virtual address and tell the caller that the
operation failed if it is NULL (in fact, I think they even should not
attempt to map an address that's not present in one of the existing
ACPI iomaps, because that may cause problems to happen when they are
called from nonpreemptible context and their callers ought to know
what they are doing and map the requisite memory regions beforehand).

Make these functions call rcu_read_unlock() when the I/O is complete
(or if it's necessary to map the given address "on the fly") and
return an error code if the requested physical address is not present
in the existing ACPI iomaps and cannot be mapped.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
drivers/acpi/osl.c