Minor channel.c editorial changes. (no change to functionality)
Change 'INLINE' to just inline, NOT forced inline:

It's not only unwise to try and outsmart the optimizer, but forcing functions to always be inlined often results in LESS efficient (slower) code due to increased instruction cache usage (due to code duplication at different addresses) as well as larger functions hindering the optimizer's ability to do its job.
Convert some macros into (inline) functions instead:

OBTAIN_INTLOCK, RELEASE_INTLOCK, WAKEUP_CPU, WAKEUP_CPU_MASK, WAKEUP_CPUS_MASK, QUEUE_IO_INTERRUPT, QUEUE_IO_INTERRUPT_QLOCKED, DEQUEUE_IO_INTERRUPT, DEQUEUE_IO_INTERRUPT_QLOCKED, UPDATE_IC_IOPENDING, UPDATE_IC_IOPENDING_QLOCKED, IS_CCW_IMMEDIATE.
Rename execute_ccw_chain exit macros and convert to inline functions.
Issue #28 fix: part 1 of 2:

Clear subchannel busy while the I/O interrupt queue is locked during queuing of the actual I/O interrupt. NOTE: this change alone does not resolve the issue but it put me on the right path to the eventual fix.
Issue #28 fix: part 2 of 2:

Fix execute_ccw_chain lock handling during final exit sequence where primary interrupt is being queued. THIS is what finally fixed things. Closes #28.
Add S/370 archmode channel I/O test and re-enable OPTION_SHARED_DEVICES.

(I'll let someone else create one for ESA-390 mode.) (Please?)