isci: replace isci_timer list with proper embedded timers

Rather than preallocating a list of timers and doling them out at runtime,
embed a struct timerlist in each object that needs one.  A struct sci_timer
interface is introduced to manage the timer cancellation semantics which
currently need to guarantee the timer is cancelled while holding
spin_lock(ihost->scic_lock).  Since the timeout functions also need to acquire
the lock it currently prevents the driver from using del_timer_sync() for
runtime cancellations.

del_timer_sync() is used however before the objects go out of scope.

Signed-off-by: Edmund Nadolski <edmund.nadolski@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
diff --git a/drivers/scsi/isci/port.h b/drivers/scsi/isci/port.h
index af540e5..9a69128 100644
--- a/drivers/scsi/isci/port.h
+++ b/drivers/scsi/isci/port.h
@@ -139,10 +139,8 @@
 	 */
 	struct scic_sds_controller *owning_controller;
 
-	/**
-	 * This field contains the port start/stop timer handle.
-	 */
-	void *timer_handle;
+	/* timer used for port start/stop operations */
+	struct sci_timer	timer;
 
 	/**
 	 * This field is the pointer to the port task scheduler registers