|
|
@ -0,0 +1,185 @@ |
|
|
|
diff -ruN linux-2.6.9/drivers/scsi/qla2xxx/qla_os.c linux-2.6.9-new/drivers/scsi/qla2xxx/qla_os.c
|
|
|
|
--- linux-2.6.9/drivers/scsi/qla2xxx/qla_os.c 2004-10-18 23:55:29.000000000 +0200
|
|
|
|
+++ linux-2.6.9-new/drivers/scsi/qla2xxx/qla_os.c 2004-10-19 12:18:38.573385688 +0200
|
|
|
|
@@ -235,67 +235,6 @@
|
|
|
|
static __inline__ void |
|
|
|
qla2x00_delete_from_done_queue(scsi_qla_host_t *, srb_t *); |
|
|
|
|
|
|
|
-/**************************************************************************
|
|
|
|
-* sp_put
|
|
|
|
-*
|
|
|
|
-* Description:
|
|
|
|
-* Decrement reference count and call the callback if we're the last
|
|
|
|
-* owner of the specified sp. Will get the host_lock before calling
|
|
|
|
-* the callback.
|
|
|
|
-*
|
|
|
|
-* Input:
|
|
|
|
-* ha - pointer to the scsi_qla_host_t where the callback is to occur.
|
|
|
|
-* sp - pointer to srb_t structure to use.
|
|
|
|
-*
|
|
|
|
-* Returns:
|
|
|
|
-*
|
|
|
|
-**************************************************************************/
|
|
|
|
-static inline void
|
|
|
|
-sp_put(struct scsi_qla_host * ha, srb_t *sp)
|
|
|
|
-{
|
|
|
|
- if (atomic_read(&sp->ref_count) == 0) {
|
|
|
|
- qla_printk(KERN_INFO, ha,
|
|
|
|
- "%s(): **** SP->ref_count not zero\n",
|
|
|
|
- __func__);
|
|
|
|
- DEBUG2(BUG();)
|
|
|
|
-
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (!atomic_dec_and_test(&sp->ref_count)) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- qla2x00_callback(ha, sp->cmd);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/**************************************************************************
|
|
|
|
-* sp_get
|
|
|
|
-*
|
|
|
|
-* Description:
|
|
|
|
-* Increment reference count of the specified sp.
|
|
|
|
-*
|
|
|
|
-* Input:
|
|
|
|
-* sp - pointer to srb_t structure to use.
|
|
|
|
-*
|
|
|
|
-* Returns:
|
|
|
|
-*
|
|
|
|
-**************************************************************************/
|
|
|
|
-static inline void
|
|
|
|
-sp_get(struct scsi_qla_host * ha, srb_t *sp)
|
|
|
|
-{
|
|
|
|
- atomic_inc(&sp->ref_count);
|
|
|
|
-
|
|
|
|
- if (atomic_read(&sp->ref_count) > 2) {
|
|
|
|
- qla_printk(KERN_INFO, ha,
|
|
|
|
- "%s(): **** SP->ref_count greater than two\n",
|
|
|
|
- __func__);
|
|
|
|
- DEBUG2(BUG();)
|
|
|
|
-
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/* |
|
|
|
* qla2x00_callback |
|
|
|
* Returns the completed SCSI command to LINUX. |
|
|
|
@@ -366,6 +305,68 @@
|
|
|
|
(*(cmd)->scsi_done)(cmd); |
|
|
|
} |
|
|
|
|
|
|
|
+/**************************************************************************
|
|
|
|
+* sp_put
|
|
|
|
+*
|
|
|
|
+* Description:
|
|
|
|
+* Decrement reference count and call the callback if we're the last
|
|
|
|
+* owner of the specified sp. Will get the host_lock before calling
|
|
|
|
+* the callback.
|
|
|
|
+*
|
|
|
|
+* Input:
|
|
|
|
+* ha - pointer to the scsi_qla_host_t where the callback is to occur.
|
|
|
|
+* sp - pointer to srb_t structure to use.
|
|
|
|
+*
|
|
|
|
+* Returns:
|
|
|
|
+*
|
|
|
|
+**************************************************************************/
|
|
|
|
+static inline void
|
|
|
|
+sp_put(struct scsi_qla_host * ha, srb_t *sp)
|
|
|
|
+{
|
|
|
|
+ if (atomic_read(&sp->ref_count) == 0) {
|
|
|
|
+ qla_printk(KERN_INFO, ha,
|
|
|
|
+ "%s(): **** SP->ref_count not zero\n",
|
|
|
|
+ __func__);
|
|
|
|
+ DEBUG2(BUG();)
|
|
|
|
+
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!atomic_dec_and_test(&sp->ref_count)) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ qla2x00_callback(ha, sp->cmd);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**************************************************************************
|
|
|
|
+* sp_get
|
|
|
|
+*
|
|
|
|
+* Description:
|
|
|
|
+* Increment reference count of the specified sp.
|
|
|
|
+*
|
|
|
|
+* Input:
|
|
|
|
+* sp - pointer to srb_t structure to use.
|
|
|
|
+*
|
|
|
|
+* Returns:
|
|
|
|
+*
|
|
|
|
+**************************************************************************/
|
|
|
|
+static inline void
|
|
|
|
+sp_get(struct scsi_qla_host * ha, srb_t *sp)
|
|
|
|
+{
|
|
|
|
+ atomic_inc(&sp->ref_count);
|
|
|
|
+
|
|
|
|
+ if (atomic_read(&sp->ref_count) > 2) {
|
|
|
|
+ qla_printk(KERN_INFO, ha,
|
|
|
|
+ "%s(): **** SP->ref_count greater than two\n",
|
|
|
|
+ __func__);
|
|
|
|
+ DEBUG2(BUG();)
|
|
|
|
+
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
static inline void |
|
|
|
qla2x00_delete_from_done_queue(scsi_qla_host_t *dest_ha, srb_t *sp) |
|
|
|
{ |
|
|
|
diff -ruN linux-2.6.9/drivers/scsi/qla2xxx/qla_rscn.c linux-2.6.9-new/drivers/scsi/qla2xxx/qla_rscn.c
|
|
|
|
--- linux-2.6.9/drivers/scsi/qla2xxx/qla_rscn.c 2004-10-18 23:53:50.000000000 +0200
|
|
|
|
+++ linux-2.6.9-new/drivers/scsi/qla2xxx/qla_rscn.c 2004-10-19 12:20:38.270189008 +0200
|
|
|
|
@@ -242,6 +242,20 @@
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
+ * qla2x00_remove_iodesc_timer() - Remove an active timer from an IO descriptor.
|
|
|
|
+ * @iodesc: io descriptor
|
|
|
|
+ */
|
|
|
|
+static inline void
|
|
|
|
+qla2x00_remove_iodesc_timer(struct io_descriptor *iodesc)
|
|
|
|
+{
|
|
|
|
+ if (iodesc->timer.function != NULL) {
|
|
|
|
+ del_timer_sync(&iodesc->timer);
|
|
|
|
+ iodesc->timer.data = (unsigned long) NULL;
|
|
|
|
+ iodesc->timer.function = NULL;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
* qla2x00_init_io_descriptors() - Initialize the pool of IO descriptors. |
|
|
|
* @ha: HA context |
|
|
|
*/ |
|
|
|
@@ -311,20 +325,6 @@
|
|
|
|
add_timer(&iodesc->timer); |
|
|
|
} |
|
|
|
|
|
|
|
-/**
|
|
|
|
- * qla2x00_remove_iodesc_timer() - Remove an active timer from an IO descriptor.
|
|
|
|
- * @iodesc: io descriptor
|
|
|
|
- */
|
|
|
|
-static inline void
|
|
|
|
-qla2x00_remove_iodesc_timer(struct io_descriptor *iodesc)
|
|
|
|
-{
|
|
|
|
- if (iodesc->timer.function != NULL) {
|
|
|
|
- del_timer_sync(&iodesc->timer);
|
|
|
|
- iodesc->timer.data = (unsigned long) NULL;
|
|
|
|
- iodesc->timer.function = NULL;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/** |
|
|
|
* IO descriptor support routines. |
|
|
|
**/ |