ACPI/osl: speedup grace period in acpi_os_map_cleanup

ACPI maintains cache of  ioremap regions  for speedup operations and
access to them from irq context where ioremap() calls aren't allowed.
This code abuses synchronize_rcu() on unmap path for synchronization
with fast-path in acpi_os_read/write_memory which uses these regions.

Since v3.10 CPUs are allowed to enter idle state even if they have RCU
callbacks queued (see commit c0f4dfd4f90f1667d234d21f15153ea09a2eaa66).
That change caused problems with nvidia proprietary driver which seems
to call acpi_os_map_generic_address/acpi_os_unmap_generic_address more
times than needed (each unmap calls synchronize_rcu). Everything works
so slow that hardware decides to "fell off the bus". Widely spread
workaround for this is reducing "rcu_idle_gp_delay" from 4 to 1 jiffy.

This patch replaces synchronize_rcu with per-acpi_ioremap atomic counter
of side users and wait-queue which signals when counter falls to zero.
List of struct acpi_ioremap is still protected by RCU but they're freed
asynchronously using kfree_rcu.

Signed-off-by: Konstantin Khlebnikov <koct9i@gmail.com>
Reported-by: Alexander Monakov <amonakov@gmail.com>
Link: https://devtalk.nvidia.com/default/topic/567297/linux/linux-3-10-driver-crash/