hsa: enable interruptible hsa signal support

Event creation and management support from emulated drivers is required to
support interruptible signals in HSA and this support was not available. This
changeset adds the event creation and management support in the emulated
driver.  With this patch, each interruptible signal created by the HSA runtime
is associated with a signal event. The HSA runtime can then put a thread
waiting on a signal condition to sleep asking the driver to monitor the event
associated with that signal. If the signal is modified by the GPU, the
dispatcher notifies the driver about signal value change.  If the modifier is a
CPU thread, the thread will have to make HSA API calls to modify the signal and
these API calls will notify the driver about signal value change. Once the
driver is notified about a change in the signal value, the driver checks to see
if any thread is sleeping on that signal and wake up the sleeping thread
associated with that event. The driver has also implemented the time_out wakeup
that can wake up the thread after a certain time period has expired. This
is also true for barrier packets. This changeset also fixes a bug in the mmap
syscall.

Each signal has an event address in a kernel managed and allocated  event page
that can be used as a mailbox pointer to notify an event. However, this feature
used by non-CPU agents to communicate with the driver is not implemented by
this changeset because the non-CPU HSA agents in our model can directly
communicate with driver in our implementation. Having said that, adding that
feature should be trivial because the event address and event pages are
correctly setup by this changeset and just adding the event page's virtual
address to our PIO doorbell interface in the page tables and registering that
pio address to the driver should be sufficient. Managing mailbox pointer for an
event is based on event ID and using this event ID as an index into event page,
this changeset already provides a unique mailbox pointer for each event.

Change-Id: Ic62794076ddd47526b1f952fdb4c1bad632bdd2e
16 files changed