* [PATCH 4/5] ipr remove anonymous unions for gcc 2.95
@ 2004-05-23 0:52 Brian King
0 siblings, 0 replies; only message in thread
From: Brian King @ 2004-05-23 0:52 UTC (permalink / raw)
To: James Bottomley; +Cc: linux-scsi
[-- Attachment #1: Type: text/plain, Size: 64 bytes --]
--
Brian King
eServer Storage I/O
IBM Linux Technology Center
[-- Attachment #2: ipr_delete_anon_unions-4.patch --]
[-- Type: text/plain, Size: 14397 bytes --]
This patch removes all usage of anonymous unions from the ipr
driver since gcc 2.95 does not support anonymous unions.
---
linux-2.6.6-bjking1/drivers/scsi/ipr.c | 100 ++++++++++++++++-----------------
linux-2.6.6-bjking1/drivers/scsi/ipr.h | 14 ++--
2 files changed, 58 insertions(+), 56 deletions(-)
diff -puN drivers/scsi/ipr.h~ipr_delete_anon_unions drivers/scsi/ipr.h
--- linux-2.6.6/drivers/scsi/ipr.h~ipr_delete_anon_unions 2004-05-22 14:49:57.000000000 -0500
+++ linux-2.6.6-bjking1/drivers/scsi/ipr.h 2004-05-22 17:05:26.000000000 -0500
@@ -413,8 +413,8 @@ struct ipr_ioasa_af_dasd {
}__attribute__((packed, aligned (4)));
struct ipr_ioasa_gpdd {
- u8 device_end_state;
- u8 device_bus_phase;
+ u8 end_state;
+ u8 bus_phase;
u16 reserved;
u32 ioa_data[23];
}__attribute__((packed, aligned (4)));
@@ -457,7 +457,7 @@ struct ipr_ioasa {
struct ipr_ioasa_af_dasd dasd;
struct ipr_ioasa_gpdd gpdd;
struct ipr_ioasa_raw raw;
- };
+ } u;
}__attribute__((packed, aligned (4)));
struct ipr_mode_parm_hdr {
@@ -617,7 +617,7 @@ struct ipr_hostrcb_error {
struct ipr_hostrcb_type_02_error type_02_error;
struct ipr_hostrcb_type_03_error type_03_error;
struct ipr_hostrcb_type_04_error type_04_error;
- };
+ } u;
}__attribute__((packed, aligned (4)));
struct ipr_hostrcb_raw {
@@ -662,7 +662,7 @@ struct ipr_hcam {
struct ipr_hostrcb_error error;
struct ipr_hostrcb_cfg_ch_not ccn;
struct ipr_hostrcb_raw raw;
- };
+ } u;
}__attribute__((packed, aligned (4)));
struct ipr_hostrcb {
@@ -785,7 +785,7 @@ struct ipr_trace_entry {
u32 ioasc;
u32 add_data;
u32 res_addr;
- };
+ } u;
};
struct ipr_sglist {
@@ -940,7 +940,7 @@ struct ipr_cmnd {
struct ipr_resource_entry *res;
struct ipr_cmnd *sibling;
struct scsi_device *sdev;
- };
+ } u;
struct ipr_ioa_cfg *ioa_cfg;
};
diff -puN drivers/scsi/ipr.c~ipr_delete_anon_unions drivers/scsi/ipr.c
--- linux-2.6.6/drivers/scsi/ipr.c~ipr_delete_anon_unions 2004-05-22 14:49:57.000000000 -0500
+++ linux-2.6.6-bjking1/drivers/scsi/ipr.c 2004-05-22 14:50:39.000000000 -0500
@@ -406,7 +406,7 @@ static void ipr_trc_hook(struct ipr_cmnd
trace_entry->type = type;
trace_entry->cmd_index = ipr_cmd->cmd_index;
trace_entry->res_handle = ipr_cmd->ioarcb.res_handle;
- trace_entry->add_data = add_data;
+ trace_entry->u.add_data = add_data;
}
#else
#define ipr_trc_hook(ipr_cmd, type, add_data) do { } while(0)
@@ -447,7 +447,7 @@ static void ipr_reinit_ipr_cmnd(struct i
static void ipr_init_ipr_cmnd(struct ipr_cmnd *ipr_cmd)
{
ipr_reinit_ipr_cmnd(ipr_cmd);
- ipr_cmd->scratch = 0;
+ ipr_cmd->u.scratch = 0;
init_timer(&ipr_cmd->timer);
}
@@ -676,8 +676,8 @@ static void ipr_do_req(struct ipr_cmnd *
**/
static void ipr_internal_cmd_done(struct ipr_cmnd *ipr_cmd)
{
- if (ipr_cmd->sibling)
- ipr_cmd->sibling = NULL;
+ if (ipr_cmd->u.sibling)
+ ipr_cmd->u.sibling = NULL;
else
complete(&ipr_cmd->completion);
}
@@ -729,7 +729,7 @@ static void ipr_send_hcam(struct ipr_ioa
list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q);
list_add_tail(&hostrcb->queue, &ioa_cfg->hostrcb_pending_q);
- ipr_cmd->hostrcb = hostrcb;
+ ipr_cmd->u.hostrcb = hostrcb;
ioarcb = &ipr_cmd->ioarcb;
ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
@@ -794,7 +794,7 @@ static void ipr_handle_config_change(str
struct ipr_config_table_entry *cfgte;
u32 is_ndn = 1;
- cfgte = &hostrcb->hcam.ccn.cfgte;
+ cfgte = &hostrcb->hcam.u.ccn.cfgte;
list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
if (!memcmp(&res->cfgte.res_addr, &cfgte->res_addr,
@@ -852,7 +852,7 @@ static void ipr_handle_config_change(str
static void ipr_process_ccn(struct ipr_cmnd *ipr_cmd)
{
struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
- struct ipr_hostrcb *hostrcb = ipr_cmd->hostrcb;
+ struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb;
u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
list_del(&hostrcb->queue);
@@ -902,7 +902,8 @@ static void ipr_log_vpd(struct ipr_std_i
static void ipr_log_cache_error(struct ipr_ioa_cfg *ioa_cfg,
struct ipr_hostrcb *hostrcb)
{
- struct ipr_hostrcb_type_02_error *error = &hostrcb->hcam.error.type_02_error;
+ struct ipr_hostrcb_type_02_error *error =
+ &hostrcb->hcam.u.error.u.type_02_error;
ipr_err("-----Current Configuration-----\n");
ipr_err("Cache Directory Card Information:\n");
@@ -937,14 +938,15 @@ static void ipr_log_config_error(struct
{
int errors_logged, i;
struct ipr_hostrcb_device_data_entry *dev_entry;
+ struct ipr_hostrcb_type_03_error *error;
- errors_logged = be32_to_cpu(hostrcb->hcam.error.type_03_error.errors_logged);
+ error = &hostrcb->hcam.u.error.u.type_03_error;
+ errors_logged = be32_to_cpu(error->errors_logged);
ipr_err("Device Errors Detected/Logged: %d/%d\n",
- be32_to_cpu(hostrcb->hcam.error.type_03_error.errors_detected),
- errors_logged);
+ be32_to_cpu(error->errors_detected), errors_logged);
- dev_entry = hostrcb->hcam.error.type_03_error.dev_entry;
+ dev_entry = error->dev_entry;
for (i = 0; i < errors_logged; i++, dev_entry++) {
ipr_err_separator;
@@ -996,7 +998,7 @@ static void ipr_log_array_error(struct i
memset(zero_sn, '0', IPR_SERIAL_NUM_LEN);
- error = &hostrcb->hcam.error.type_04_error;
+ error = &hostrcb->hcam.u.error.u.type_04_error;
ipr_err_separator;
@@ -1074,10 +1076,10 @@ static void ipr_log_generic_error(struct
for (i = 0; i < ioa_data_len / 4; i += 4) {
ipr_err("%08X: %08X %08X %08X %08X\n", i*4,
- be32_to_cpu(hostrcb->hcam.raw.data[i]),
- be32_to_cpu(hostrcb->hcam.raw.data[i+1]),
- be32_to_cpu(hostrcb->hcam.raw.data[i+2]),
- be32_to_cpu(hostrcb->hcam.raw.data[i+3]));
+ be32_to_cpu(hostrcb->hcam.u.raw.data[i]),
+ be32_to_cpu(hostrcb->hcam.u.raw.data[i+1]),
+ be32_to_cpu(hostrcb->hcam.u.raw.data[i+2]),
+ be32_to_cpu(hostrcb->hcam.u.raw.data[i+3]));
}
}
@@ -1125,13 +1127,13 @@ static void ipr_handle_log_data(struct i
if (hostrcb->hcam.notifications_lost == IPR_HOST_RCB_NOTIFICATIONS_LOST)
dev_err(&ioa_cfg->pdev->dev, "Error notifications lost\n");
- ioasc = be32_to_cpu(hostrcb->hcam.error.failing_dev_ioasc);
+ ioasc = be32_to_cpu(hostrcb->hcam.u.error.failing_dev_ioasc);
if (ioasc == IPR_IOASC_BUS_WAS_RESET ||
ioasc == IPR_IOASC_BUS_WAS_RESET_BY_OTHER) {
/* Tell the midlayer we had a bus reset so it will handle the UA properly */
scsi_report_bus_reset(ioa_cfg->host,
- hostrcb->hcam.error.failing_dev_res_addr.bus);
+ hostrcb->hcam.u.error.failing_dev_res_addr.bus);
}
error_index = ipr_get_error(ioasc);
@@ -1139,8 +1141,8 @@ static void ipr_handle_log_data(struct i
if (!ipr_error_table[error_index].log_hcam)
return;
- if (ipr_is_device(&hostrcb->hcam.error.failing_dev_res_addr)) {
- ipr_res_err(ioa_cfg, hostrcb->hcam.error.failing_dev_res_addr,
+ if (ipr_is_device(&hostrcb->hcam.u.error.failing_dev_res_addr)) {
+ ipr_res_err(ioa_cfg, hostrcb->hcam.u.error.failing_dev_res_addr,
"%s\n", ipr_error_table[error_index].error);
} else {
dev_err(&ioa_cfg->pdev->dev, "%s\n",
@@ -1192,7 +1194,7 @@ static void ipr_handle_log_data(struct i
static void ipr_process_error(struct ipr_cmnd *ipr_cmd)
{
struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
- struct ipr_hostrcb *hostrcb = ipr_cmd->hostrcb;
+ struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb;
u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
list_del(&hostrcb->queue);
@@ -3012,10 +3014,10 @@ static void ipr_bus_reset_done(struct ip
* If abort has not completed, indicate the reset has, else call the
* abort's done function to wake the sleeping eh thread
*/
- if (ipr_cmd->sibling->sibling)
- ipr_cmd->sibling->sibling = NULL;
+ if (ipr_cmd->u.sibling->u.sibling)
+ ipr_cmd->u.sibling->u.sibling = NULL;
else
- ipr_cmd->sibling->done(ipr_cmd->sibling);
+ ipr_cmd->u.sibling->done(ipr_cmd->u.sibling);
list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
LEAVE;
@@ -3046,10 +3048,10 @@ static void ipr_abort_timeout(struct ipr
return;
}
- ipr_sdev_err(ipr_cmd->sdev, "Abort timed out. Resetting bus\n");
+ ipr_sdev_err(ipr_cmd->u.sdev, "Abort timed out. Resetting bus\n");
reset_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
- ipr_cmd->sibling = reset_cmd;
- reset_cmd->sibling = ipr_cmd;
+ ipr_cmd->u.sibling = reset_cmd;
+ reset_cmd->u.sibling = ipr_cmd;
reset_cmd->ioarcb.res_handle = ipr_cmd->ioarcb.res_handle;
cmd_pkt = &reset_cmd->ioarcb.cmd_pkt;
cmd_pkt->request_type = IPR_RQTYPE_IOACMD;
@@ -3108,7 +3110,7 @@ static int ipr_cancel_op(struct scsi_cmn
cmd_pkt->cdb[3] = (ioarcb_addr >> 16) & 0xff;
cmd_pkt->cdb[4] = (ioarcb_addr >> 8) & 0xff;
cmd_pkt->cdb[5] = ioarcb_addr & 0xff;
- ipr_cmd->sdev = scsi_cmd->device;
+ ipr_cmd->u.sdev = scsi_cmd->device;
ipr_sdev_err(scsi_cmd->device, "Aborting command: %02X\n", scsi_cmd->cmnd[0]);
ipr_send_blocking_cmd(ipr_cmd, ipr_abort_timeout, IPR_ABORT_TASK_TIMEOUT);
@@ -3575,12 +3577,12 @@ static void ipr_dump_ioasa(struct ipr_io
ipr_sdev_err(ipr_cmd->scsi_cmd->device, "%s\n",
ipr_error_table[error_index].error);
- if ((ioasa->gpdd.device_end_state <= ARRAY_SIZE(ipr_gpdd_dev_end_states)) &&
- (ioasa->gpdd.device_bus_phase <= ARRAY_SIZE(ipr_gpdd_dev_bus_phases))) {
+ if ((ioasa->u.gpdd.end_state <= ARRAY_SIZE(ipr_gpdd_dev_end_states)) &&
+ (ioasa->u.gpdd.bus_phase <= ARRAY_SIZE(ipr_gpdd_dev_bus_phases))) {
ipr_sdev_err(ipr_cmd->scsi_cmd->device,
"Device End state: %s Phase: %s\n",
- ipr_gpdd_dev_end_states[ioasa->gpdd.device_end_state],
- ipr_gpdd_dev_bus_phases[ioasa->gpdd.device_bus_phase]);
+ ipr_gpdd_dev_end_states[ioasa->u.gpdd.end_state],
+ ipr_gpdd_dev_bus_phases[ioasa->u.gpdd.bus_phase]);
}
if (sizeof(struct ipr_ioasa) < be16_to_cpu(ioasa->ret_stat_len))
@@ -3624,7 +3626,7 @@ static void ipr_gen_sense(struct ipr_cmn
if (ipr_is_vset_device(res) &&
ioasc == IPR_IOASC_MED_DO_NOT_REALLOC &&
- ioasa->vset.failing_lba_hi != 0) {
+ ioasa->u.vset.failing_lba_hi != 0) {
sense_buf[0] = 0x72;
sense_buf[1] = IPR_IOASC_SENSE_KEY(ioasc);
sense_buf[2] = IPR_IOASC_SENSE_CODE(ioasc);
@@ -3635,14 +3637,14 @@ static void ipr_gen_sense(struct ipr_cmn
sense_buf[9] = 0x0A;
sense_buf[10] = 0x80;
- failing_lba = be32_to_cpu(ioasa->vset.failing_lba_hi);
+ failing_lba = be32_to_cpu(ioasa->u.vset.failing_lba_hi);
sense_buf[12] = (failing_lba & 0xff000000) >> 24;
sense_buf[13] = (failing_lba & 0x00ff0000) >> 16;
sense_buf[14] = (failing_lba & 0x0000ff00) >> 8;
sense_buf[15] = failing_lba & 0x000000ff;
- failing_lba = be32_to_cpu(ioasa->vset.failing_lba_lo);
+ failing_lba = be32_to_cpu(ioasa->u.vset.failing_lba_lo);
sense_buf[16] = (failing_lba & 0xff000000) >> 24;
sense_buf[17] = (failing_lba & 0x00ff0000) >> 16;
@@ -3674,9 +3676,9 @@ static void ipr_gen_sense(struct ipr_cmn
} else {
if (ioasc == IPR_IOASC_MED_DO_NOT_REALLOC) {
if (ipr_is_vset_device(res))
- failing_lba = be32_to_cpu(ioasa->vset.failing_lba_lo);
+ failing_lba = be32_to_cpu(ioasa->u.vset.failing_lba_lo);
else
- failing_lba = be32_to_cpu(ioasa->dasd.failing_lba);
+ failing_lba = be32_to_cpu(ioasa->u.dasd.failing_lba);
sense_buf[0] |= 0x80; /* Or in the Valid bit */
sense_buf[3] = (failing_lba & 0xff000000) >> 24;
@@ -4123,7 +4125,7 @@ static int ipr_set_supported_devs(struct
struct ipr_supported_device *supp_dev = &ioa_cfg->vpd_cbs->supp_dev;
struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
- struct ipr_resource_entry *res = ipr_cmd->res;
+ struct ipr_resource_entry *res = ipr_cmd->u.res;
ipr_cmd->job_step = ipr_ioa_reset_done;
@@ -4131,7 +4133,7 @@ static int ipr_set_supported_devs(struct
if (!ipr_is_af_dasd_device(res))
continue;
- ipr_cmd->res = res;
+ ipr_cmd->u.res = res;
ipr_set_sup_dev_dflt(supp_dev, &res->cfgte.std_inq_data.vpids);
ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
@@ -4372,8 +4374,8 @@ static int ipr_ioafp_mode_select_page28(
length);
ipr_cmd->job_step = ipr_set_supported_devs;
- ipr_cmd->res = list_entry(ioa_cfg->used_res_q.next,
- struct ipr_resource_entry, queue);
+ ipr_cmd->u.res = list_entry(ioa_cfg->used_res_q.next,
+ struct ipr_resource_entry, queue);
ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
@@ -5028,8 +5030,8 @@ static int ipr_reset_wait_to_start_bist(
struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
int rc = IPR_RC_JOB_RETURN;
- if (!ipr_reset_allowed(ioa_cfg) && ipr_cmd->time_left) {
- ipr_cmd->time_left -= IPR_CHECK_FOR_RESET_TIMEOUT;
+ if (!ipr_reset_allowed(ioa_cfg) && ipr_cmd->u.time_left) {
+ ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT;
ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT);
} else {
ipr_cmd->job_step = ipr_reset_start_bist;
@@ -5068,7 +5070,7 @@ static int ipr_reset_alert(struct ipr_cm
ipr_cmd->job_step = ipr_reset_start_bist;
}
- ipr_cmd->time_left = IPR_WAIT_FOR_RESET_TIMEOUT;
+ ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT;
ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT);
LEAVE;
@@ -5154,7 +5156,7 @@ static int ipr_reset_ucode_download(stru
static int ipr_reset_shutdown_ioa(struct ipr_cmnd *ipr_cmd)
{
struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
- enum ipr_shutdown_type shutdown_type = ipr_cmd->shutdown_type;
+ enum ipr_shutdown_type shutdown_type = ipr_cmd->u.shutdown_type;
unsigned long timeout;
int rc = IPR_RC_JOB_CONTINUE;
@@ -5195,7 +5197,7 @@ static int ipr_reset_shutdown_ioa(struct
static void ipr_reset_ioa_job(struct ipr_cmnd *ipr_cmd)
{
u32 rc, ioasc;
- unsigned long scratch = ipr_cmd->scratch;
+ unsigned long scratch = ipr_cmd->u.scratch;
struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
do {
@@ -5221,7 +5223,7 @@ static void ipr_reset_ioa_job(struct ipr
}
ipr_reinit_ipr_cmnd(ipr_cmd);
- ipr_cmd->scratch = scratch;
+ ipr_cmd->u.scratch = scratch;
rc = ipr_cmd->job_step(ipr_cmd);
} while(rc == IPR_RC_JOB_CONTINUE);
}
@@ -5253,7 +5255,7 @@ static void _ipr_initiate_ioa_reset(stru
ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
ioa_cfg->reset_cmd = ipr_cmd;
ipr_cmd->job_step = job_step;
- ipr_cmd->shutdown_type = shutdown_type;
+ ipr_cmd->u.shutdown_type = shutdown_type;
ipr_reset_ioa_job(ipr_cmd);
}
_
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2004-05-23 0:52 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-05-23 0:52 [PATCH 4/5] ipr remove anonymous unions for gcc 2.95 Brian King
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.