Commit c41f8cbd authored by Swen Schillig's avatar Swen Schillig Committed by James Bottomley

[SCSI] zfcp: zfcp_fsf cleanup.

Code cleanup for the zfcp_fsf.c file.
Signed-off-by: default avatarSwen Schillig <swen@vnet.ibm.com>
Signed-off-by: default avatarChristof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent 60221920
...@@ -433,7 +433,7 @@ static void zfcp_dummy_release(struct device *dev) ...@@ -433,7 +433,7 @@ static void zfcp_dummy_release(struct device *dev)
int zfcp_status_read_refill(struct zfcp_adapter *adapter) int zfcp_status_read_refill(struct zfcp_adapter *adapter)
{ {
while (atomic_read(&adapter->stat_miss) > 0) while (atomic_read(&adapter->stat_miss) > 0)
if (zfcp_fsf_status_read(adapter, ZFCP_WAIT_FOR_SBAL)) { if (zfcp_fsf_status_read(adapter)) {
if (atomic_read(&adapter->stat_miss) >= 16) { if (atomic_read(&adapter->stat_miss) >= 16) {
zfcp_erp_adapter_reopen(adapter, 0, 103, NULL); zfcp_erp_adapter_reopen(adapter, 0, 103, NULL);
return 1; return 1;
...@@ -518,10 +518,10 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device) ...@@ -518,10 +518,10 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device)
spin_lock_init(&adapter->san_dbf_lock); spin_lock_init(&adapter->san_dbf_lock);
spin_lock_init(&adapter->scsi_dbf_lock); spin_lock_init(&adapter->scsi_dbf_lock);
spin_lock_init(&adapter->rec_dbf_lock); spin_lock_init(&adapter->rec_dbf_lock);
spin_lock_init(&adapter->req_q.lock);
rwlock_init(&adapter->erp_lock); rwlock_init(&adapter->erp_lock);
rwlock_init(&adapter->abort_lock); rwlock_init(&adapter->abort_lock);
rwlock_init(&adapter->req_q.lock);
sema_init(&adapter->erp_ready_sem, 0); sema_init(&adapter->erp_ready_sem, 0);
......
...@@ -961,7 +961,7 @@ void zfcp_san_dbf_event_incoming_els(struct zfcp_fsf_req *fsf_req) ...@@ -961,7 +961,7 @@ void zfcp_san_dbf_event_incoming_els(struct zfcp_fsf_req *fsf_req)
zfcp_san_dbf_event_els("iels", 1, fsf_req, buf->d_id, zfcp_san_dbf_event_els("iels", 1, fsf_req, buf->d_id,
fc_host_port_id(adapter->scsi_host), fc_host_port_id(adapter->scsi_host),
*(u8 *)buf->payload, (void *)buf->payload, buf->payload.data[0], (void *)buf->payload.data,
length); length);
} }
......
...@@ -76,11 +76,6 @@ zfcp_address_to_sg(void *address, struct scatterlist *list, unsigned int size) ...@@ -76,11 +76,6 @@ zfcp_address_to_sg(void *address, struct scatterlist *list, unsigned int size)
#define ZFCP_DEVICE_MODEL 0x03 #define ZFCP_DEVICE_MODEL 0x03
#define ZFCP_DEVICE_MODEL_PRIV 0x04 #define ZFCP_DEVICE_MODEL_PRIV 0x04
/* allow as many chained SBALs as are supported by hardware */
#define ZFCP_MAX_SBALS_PER_REQ FSF_MAX_SBALS_PER_REQ
#define ZFCP_MAX_SBALS_PER_CT_REQ FSF_MAX_SBALS_PER_REQ
#define ZFCP_MAX_SBALS_PER_ELS_REQ FSF_MAX_SBALS_PER_ELS_REQ
/* DMQ bug workaround: don't use last SBALE */ /* DMQ bug workaround: don't use last SBALE */
#define ZFCP_MAX_SBALES_PER_SBAL (QDIO_MAX_ELEMENTS_PER_BUFFER - 1) #define ZFCP_MAX_SBALES_PER_SBAL (QDIO_MAX_ELEMENTS_PER_BUFFER - 1)
...@@ -89,21 +84,17 @@ zfcp_address_to_sg(void *address, struct scatterlist *list, unsigned int size) ...@@ -89,21 +84,17 @@ zfcp_address_to_sg(void *address, struct scatterlist *list, unsigned int size)
/* max. number of (data buffer) SBALEs in largest SBAL chain */ /* max. number of (data buffer) SBALEs in largest SBAL chain */
#define ZFCP_MAX_SBALES_PER_REQ \ #define ZFCP_MAX_SBALES_PER_REQ \
(ZFCP_MAX_SBALS_PER_REQ * ZFCP_MAX_SBALES_PER_SBAL - 2) (FSF_MAX_SBALS_PER_REQ * ZFCP_MAX_SBALES_PER_SBAL - 2)
/* request ID + QTCB in SBALE 0 + 1 of first SBAL in chain */ /* request ID + QTCB in SBALE 0 + 1 of first SBAL in chain */
#define ZFCP_MAX_SECTORS (ZFCP_MAX_SBALES_PER_REQ * 8) #define ZFCP_MAX_SECTORS (ZFCP_MAX_SBALES_PER_REQ * 8)
/* max. number of (data buffer) SBALEs in largest SBAL chain /* max. number of (data buffer) SBALEs in largest SBAL chain
multiplied with number of sectors per 4k block */ multiplied with number of sectors per 4k block */
#define ZFCP_SBAL_TIMEOUT (5*HZ)
#define ZFCP_TYPE2_RECOVERY_TIME 8 /* seconds */ #define ZFCP_TYPE2_RECOVERY_TIME 8 /* seconds */
/********************* FSF SPECIFIC DEFINES *********************************/ /********************* FSF SPECIFIC DEFINES *********************************/
#define ZFCP_ULP_INFO_VERSION 26
#define ZFCP_QTCB_VERSION FSF_QTCB_CURRENT_VERSION
/* ATTENTION: value must not be used by hardware */ /* ATTENTION: value must not be used by hardware */
#define FSF_QTCB_UNSOLICITED_STATUS 0x6305 #define FSF_QTCB_UNSOLICITED_STATUS 0x6305
...@@ -121,8 +112,6 @@ typedef unsigned long long fcp_lun_t; ...@@ -121,8 +112,6 @@ typedef unsigned long long fcp_lun_t;
/* data length field may be at variable position in FCP-2 FCP_CMND IU */ /* data length field may be at variable position in FCP-2 FCP_CMND IU */
typedef unsigned int fcp_dl_t; typedef unsigned int fcp_dl_t;
#define ZFCP_FC_SERVICE_CLASS_DEFAULT FSF_CLASS_3
/* timeout for name-server lookup (in seconds) */ /* timeout for name-server lookup (in seconds) */
#define ZFCP_NS_GID_PN_TIMEOUT 10 #define ZFCP_NS_GID_PN_TIMEOUT 10
...@@ -228,7 +217,6 @@ struct fcp_logo { ...@@ -228,7 +217,6 @@ struct fcp_logo {
* FC-FS stuff * FC-FS stuff
*/ */
#define R_A_TOV 10 /* seconds */ #define R_A_TOV 10 /* seconds */
#define ZFCP_ELS_TIMEOUT (2 * R_A_TOV)
#define ZFCP_LS_RLS 0x0f #define ZFCP_LS_RLS 0x0f
#define ZFCP_LS_ADISC 0x52 #define ZFCP_LS_ADISC 0x52
...@@ -521,7 +509,7 @@ struct zfcp_qdio_queue { ...@@ -521,7 +509,7 @@ struct zfcp_qdio_queue {
in queue (free_count>0) */ in queue (free_count>0) */
atomic_t count; /* number of free buffers atomic_t count; /* number of free buffers
in queue */ in queue */
rwlock_t lock; /* lock for operations on queue */ spinlock_t lock; /* lock for operations on queue */
int pci_batch; /* SBALs since PCI indication int pci_batch; /* SBALs since PCI indication
was last set */ was last set */
}; };
...@@ -686,7 +674,7 @@ struct zfcp_fsf_req { ...@@ -686,7 +674,7 @@ struct zfcp_fsf_req {
u32 fsf_command; /* FSF Command copy */ u32 fsf_command; /* FSF Command copy */
struct fsf_qtcb *qtcb; /* address of associated QTCB */ struct fsf_qtcb *qtcb; /* address of associated QTCB */
u32 seq_no; /* Sequence number of request */ u32 seq_no; /* Sequence number of request */
unsigned long data; /* private data of request */ void *data; /* private data of request */
struct timer_list timer; /* used for erp or scsi er */ struct timer_list timer; /* used for erp or scsi er */
struct zfcp_erp_action *erp_action; /* used if this request is struct zfcp_erp_action *erp_action; /* used if this request is
issued on behalf of erp */ issued on behalf of erp */
...@@ -694,10 +682,9 @@ struct zfcp_fsf_req { ...@@ -694,10 +682,9 @@ struct zfcp_fsf_req {
from emergency pool */ from emergency pool */
unsigned long long issued; /* request sent time (STCK) */ unsigned long long issued; /* request sent time (STCK) */
struct zfcp_unit *unit; struct zfcp_unit *unit;
void (*handler)(struct zfcp_fsf_req *);
}; };
typedef void zfcp_fsf_req_handler_t(struct zfcp_fsf_req*);
/* driver data */ /* driver data */
struct zfcp_data { struct zfcp_data {
struct scsi_host_template scsi_host_template; struct scsi_host_template scsi_host_template;
...@@ -730,7 +717,6 @@ struct zfcp_fsf_req_qtcb { ...@@ -730,7 +717,6 @@ struct zfcp_fsf_req_qtcb {
/********************** ZFCP SPECIFIC DEFINES ********************************/ /********************** ZFCP SPECIFIC DEFINES ********************************/
#define ZFCP_REQ_AUTO_CLEANUP 0x00000002 #define ZFCP_REQ_AUTO_CLEANUP 0x00000002
#define ZFCP_WAIT_FOR_SBAL 0x00000004
#define ZFCP_REQ_NO_QTCB 0x00000008 #define ZFCP_REQ_NO_QTCB 0x00000008
#define ZFCP_SET 0x00000100 #define ZFCP_SET 0x00000100
...@@ -753,15 +739,6 @@ static inline int zfcp_reqlist_hash(unsigned long req_id) ...@@ -753,15 +739,6 @@ static inline int zfcp_reqlist_hash(unsigned long req_id)
return req_id % REQUEST_LIST_SIZE; return req_id % REQUEST_LIST_SIZE;
} }
static inline void zfcp_reqlist_add(struct zfcp_adapter *adapter,
struct zfcp_fsf_req *fsf_req)
{
unsigned int idx;
idx = zfcp_reqlist_hash(fsf_req->req_id);
list_add_tail(&fsf_req->list, &adapter->req_list[idx]);
}
static inline void zfcp_reqlist_remove(struct zfcp_adapter *adapter, static inline void zfcp_reqlist_remove(struct zfcp_adapter *adapter,
struct zfcp_fsf_req *fsf_req) struct zfcp_fsf_req *fsf_req)
{ {
......
...@@ -70,21 +70,19 @@ extern struct zfcp_fsf_req *zfcp_fsf_control_file(struct zfcp_adapter *adapter, ...@@ -70,21 +70,19 @@ extern struct zfcp_fsf_req *zfcp_fsf_control_file(struct zfcp_adapter *adapter,
extern void zfcp_fsf_start_timer(struct zfcp_fsf_req *, unsigned long); extern void zfcp_fsf_start_timer(struct zfcp_fsf_req *, unsigned long);
extern void zfcp_erp_start_timer(struct zfcp_fsf_req *); extern void zfcp_erp_start_timer(struct zfcp_fsf_req *);
extern void zfcp_fsf_req_dismiss_all(struct zfcp_adapter *); extern void zfcp_fsf_req_dismiss_all(struct zfcp_adapter *);
extern int zfcp_fsf_status_read(struct zfcp_adapter *, int); extern int zfcp_fsf_status_read(struct zfcp_adapter *);
extern int zfcp_status_read_refill(struct zfcp_adapter *adapter); extern int zfcp_status_read_refill(struct zfcp_adapter *adapter);
extern int zfcp_fsf_req_create(struct zfcp_adapter *, u32, int, mempool_t *,
unsigned long *, struct zfcp_fsf_req **)
__acquires(adapter->req_q.lock);
extern int zfcp_fsf_send_ct(struct zfcp_send_ct *, mempool_t *, extern int zfcp_fsf_send_ct(struct zfcp_send_ct *, mempool_t *,
struct zfcp_erp_action *); struct zfcp_erp_action *);
extern int zfcp_fsf_send_els(struct zfcp_send_els *); extern int zfcp_fsf_send_els(struct zfcp_send_els *);
extern int zfcp_fsf_send_fcp_command_task(struct zfcp_adapter *, extern int zfcp_fsf_send_fcp_command_task(struct zfcp_adapter *,
struct zfcp_unit *, struct zfcp_unit *,
struct scsi_cmnd *, int, int); struct scsi_cmnd *, int, int);
extern int zfcp_fsf_req_complete(struct zfcp_fsf_req *); extern void zfcp_fsf_req_complete(struct zfcp_fsf_req *);
extern void zfcp_fsf_req_free(struct zfcp_fsf_req *); extern void zfcp_fsf_req_free(struct zfcp_fsf_req *);
extern struct zfcp_fsf_req *zfcp_fsf_send_fcp_command_task_management( extern struct zfcp_fsf_req *zfcp_fsf_send_fcp_ctm(struct zfcp_adapter *,
struct zfcp_adapter *, struct zfcp_unit *, u8, int); struct zfcp_unit *, u8,
int);
extern struct zfcp_fsf_req *zfcp_fsf_abort_fcp_command( extern struct zfcp_fsf_req *zfcp_fsf_abort_fcp_command(
unsigned long, struct zfcp_adapter *, struct zfcp_unit *, int); unsigned long, struct zfcp_adapter *, struct zfcp_unit *, int);
......
...@@ -83,8 +83,8 @@ static void zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req) ...@@ -83,8 +83,8 @@ static void zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req)
u16 no_entries; u16 no_entries;
u32 range_mask; u32 range_mask;
fcp_rscn_head = (struct fcp_rscn_head *) status_buffer->payload; fcp_rscn_head = (struct fcp_rscn_head *) status_buffer->payload.data;
fcp_rscn_element = (struct fcp_rscn_element *) status_buffer->payload; fcp_rscn_element = (struct fcp_rscn_element *) fcp_rscn_head;
/* see FC-FS */ /* see FC-FS */
no_entries = fcp_rscn_head->payload_len / no_entries = fcp_rscn_head->payload_len /
...@@ -135,7 +135,7 @@ static void zfcp_fc_incoming_plogi(struct zfcp_fsf_req *req) ...@@ -135,7 +135,7 @@ static void zfcp_fc_incoming_plogi(struct zfcp_fsf_req *req)
struct fsf_status_read_buffer *status_buffer = struct fsf_status_read_buffer *status_buffer =
(struct fsf_status_read_buffer *)req->data; (struct fsf_status_read_buffer *)req->data;
struct fsf_plogi *els_plogi = struct fsf_plogi *els_plogi =
(struct fsf_plogi *) status_buffer->payload; (struct fsf_plogi *) status_buffer->payload.data;
zfcp_fc_incoming_wwpn(req, els_plogi->serv_param.wwpn); zfcp_fc_incoming_wwpn(req, els_plogi->serv_param.wwpn);
} }
...@@ -144,7 +144,8 @@ static void zfcp_fc_incoming_logo(struct zfcp_fsf_req *req) ...@@ -144,7 +144,8 @@ static void zfcp_fc_incoming_logo(struct zfcp_fsf_req *req)
{ {
struct fsf_status_read_buffer *status_buffer = struct fsf_status_read_buffer *status_buffer =
(struct fsf_status_read_buffer *)req->data; (struct fsf_status_read_buffer *)req->data;
struct fcp_logo *els_logo = (struct fcp_logo *) status_buffer->payload; struct fcp_logo *els_logo =
(struct fcp_logo *) status_buffer->payload.data;
zfcp_fc_incoming_wwpn(req, els_logo->nport_wwpn); zfcp_fc_incoming_wwpn(req, els_logo->nport_wwpn);
} }
...@@ -157,7 +158,7 @@ void zfcp_fc_incoming_els(struct zfcp_fsf_req *fsf_req) ...@@ -157,7 +158,7 @@ void zfcp_fc_incoming_els(struct zfcp_fsf_req *fsf_req)
{ {
struct fsf_status_read_buffer *status_buffer = struct fsf_status_read_buffer *status_buffer =
(struct fsf_status_read_buffer *) fsf_req->data; (struct fsf_status_read_buffer *) fsf_req->data;
unsigned int els_type = status_buffer->payload[0]; unsigned int els_type = status_buffer->payload.data[0];
zfcp_san_dbf_event_incoming_els(fsf_req); zfcp_san_dbf_event_incoming_els(fsf_req);
if (els_type == LS_PLOGI) if (els_type == LS_PLOGI)
......
This diff is collapsed.
...@@ -287,6 +287,18 @@ struct fsf_bit_error_payload { ...@@ -287,6 +287,18 @@ struct fsf_bit_error_payload {
u32 current_transmit_b2b_credit; u32 current_transmit_b2b_credit;
} __attribute__ ((packed)); } __attribute__ ((packed));
struct fsf_link_down_info {
u32 error_code;
u32 res1;
u8 res2[2];
u8 primary_status;
u8 ioerr_code;
u8 action_code;
u8 reason_code;
u8 explanation_code;
u8 vendor_specific_code;
} __attribute__ ((packed));
struct fsf_status_read_buffer { struct fsf_status_read_buffer {
u32 status_type; u32 status_type;
u32 status_subtype; u32 status_subtype;
...@@ -297,7 +309,12 @@ struct fsf_status_read_buffer { ...@@ -297,7 +309,12 @@ struct fsf_status_read_buffer {
u32 class; u32 class;
u64 fcp_lun; u64 fcp_lun;
u8 res3[24]; u8 res3[24];
u8 payload[FSF_STATUS_READ_PAYLOAD_SIZE]; union {
u8 data[FSF_STATUS_READ_PAYLOAD_SIZE];
u32 word[FSF_STATUS_READ_PAYLOAD_SIZE/sizeof(u32)];
struct fsf_link_down_info link_down_info;
struct fsf_bit_error_payload bit_error;
} payload;
} __attribute__ ((packed)); } __attribute__ ((packed));
struct fsf_qual_version_error { struct fsf_qual_version_error {
...@@ -310,18 +327,6 @@ struct fsf_qual_sequence_error { ...@@ -310,18 +327,6 @@ struct fsf_qual_sequence_error {
u32 res1[3]; u32 res1[3];
} __attribute__ ((packed)); } __attribute__ ((packed));
struct fsf_link_down_info {
u32 error_code;
u32 res1;
u8 res2[2];
u8 primary_status;
u8 ioerr_code;
u8 action_code;
u8 reason_code;
u8 explanation_code;
u8 vendor_specific_code;
} __attribute__ ((packed));
struct fsf_qual_latency_info { struct fsf_qual_latency_info {
u32 channel_lat; u32 channel_lat;
u32 fabric_lat; u32 fabric_lat;
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
/* FIXME(tune): free space should be one max. SBAL chain plus what? */ /* FIXME(tune): free space should be one max. SBAL chain plus what? */
#define ZFCP_QDIO_PCI_INTERVAL (QDIO_MAX_BUFFERS_PER_Q \ #define ZFCP_QDIO_PCI_INTERVAL (QDIO_MAX_BUFFERS_PER_Q \
- (ZFCP_MAX_SBALS_PER_REQ + 4)) - (FSF_MAX_SBALS_PER_REQ + 4))
#define QBUFF_PER_PAGE (PAGE_SIZE / sizeof(struct qdio_buffer)) #define QBUFF_PER_PAGE (PAGE_SIZE / sizeof(struct qdio_buffer))
static int zfcp_qdio_buffers_enqueue(struct qdio_buffer **sbal) static int zfcp_qdio_buffers_enqueue(struct qdio_buffer **sbal)
...@@ -432,9 +432,9 @@ void zfcp_qdio_close(struct zfcp_adapter *adapter) ...@@ -432,9 +432,9 @@ void zfcp_qdio_close(struct zfcp_adapter *adapter)
/* clear QDIOUP flag, thus do_QDIO is not called during qdio_shutdown */ /* clear QDIOUP flag, thus do_QDIO is not called during qdio_shutdown */
req_q = &adapter->req_q; req_q = &adapter->req_q;
write_lock_irq(&req_q->lock); spin_lock(&req_q->lock);
atomic_clear_mask(ZFCP_STATUS_ADAPTER_QDIOUP, &adapter->status); atomic_clear_mask(ZFCP_STATUS_ADAPTER_QDIOUP, &adapter->status);
write_unlock_irq(&req_q->lock); spin_unlock(&req_q->lock);
while (qdio_shutdown(adapter->ccw_device, QDIO_FLAG_CLEANUP_USING_CLEAR) while (qdio_shutdown(adapter->ccw_device, QDIO_FLAG_CLEANUP_USING_CLEAR)
== -EINPROGRESS) == -EINPROGRESS)
......
...@@ -182,7 +182,7 @@ static int zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt) ...@@ -182,7 +182,7 @@ static int zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt)
zfcp_scsi_dbf_event_abort("lte1", adapter, scpnt, NULL, 0); zfcp_scsi_dbf_event_abort("lte1", adapter, scpnt, NULL, 0);
return retval; return retval;
} }
fsf_req->data = 0; fsf_req->data = NULL;
fsf_req->status |= ZFCP_STATUS_FSFREQ_ABORTING; fsf_req->status |= ZFCP_STATUS_FSFREQ_ABORTING;
/* don't access old fsf_req after releasing the abort_lock */ /* don't access old fsf_req after releasing the abort_lock */
...@@ -220,8 +220,7 @@ static int zfcp_task_mgmt_function(struct zfcp_unit *unit, u8 tm_flags, ...@@ -220,8 +220,7 @@ static int zfcp_task_mgmt_function(struct zfcp_unit *unit, u8 tm_flags,
int retval = SUCCESS; int retval = SUCCESS;
/* issue task management function */ /* issue task management function */
fsf_req = zfcp_fsf_send_fcp_command_task_management fsf_req = zfcp_fsf_send_fcp_ctm(adapter, unit, tm_flags, 0);
(adapter, unit, tm_flags, 0);
if (!fsf_req) { if (!fsf_req) {
zfcp_scsi_dbf_event_devreset("nres", tm_flags, unit, scpnt); zfcp_scsi_dbf_event_devreset("nres", tm_flags, unit, scpnt);
return FAILED; return FAILED;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment