Commit f8e85c63 authored by Brian King's avatar Brian King Committed by James Bottomley

[PATCH] ipr gcc attributes fixes

This patch fixes an issue where ipr was including a kernel
data structure, list_head, in a packed structure, which causes
compile issues on some architectures, and is just a bad thing to do.
parent f59da631
...@@ -736,13 +736,13 @@ static void ipr_send_hcam(struct ipr_ioa_cfg *ioa_cfg, u8 type, ...@@ -736,13 +736,13 @@ static void ipr_send_hcam(struct ipr_ioa_cfg *ioa_cfg, u8 type,
ioarcb->cmd_pkt.request_type = IPR_RQTYPE_HCAM; ioarcb->cmd_pkt.request_type = IPR_RQTYPE_HCAM;
ioarcb->cmd_pkt.cdb[0] = IPR_HOST_CONTROLLED_ASYNC; ioarcb->cmd_pkt.cdb[0] = IPR_HOST_CONTROLLED_ASYNC;
ioarcb->cmd_pkt.cdb[1] = type; ioarcb->cmd_pkt.cdb[1] = type;
ioarcb->cmd_pkt.cdb[7] = (IPR_HOSTRCB_SZ >> 8) & 0xff; ioarcb->cmd_pkt.cdb[7] = (sizeof(hostrcb->hcam) >> 8) & 0xff;
ioarcb->cmd_pkt.cdb[8] = IPR_HOSTRCB_SZ & 0xff; ioarcb->cmd_pkt.cdb[8] = sizeof(hostrcb->hcam) & 0xff;
ioarcb->read_data_transfer_length = cpu_to_be32(IPR_HOSTRCB_SZ); ioarcb->read_data_transfer_length = cpu_to_be32(sizeof(hostrcb->hcam));
ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc)); ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
ipr_cmd->ioadl[0].flags_and_data_len = ipr_cmd->ioadl[0].flags_and_data_len =
cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | IPR_HOSTRCB_SZ); cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | sizeof(hostrcb->hcam));
ipr_cmd->ioadl[0].address = cpu_to_be32(hostrcb->hostrcb_dma); ipr_cmd->ioadl[0].address = cpu_to_be32(hostrcb->hostrcb_dma);
if (type == IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE) if (type == IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE)
...@@ -794,7 +794,7 @@ static void ipr_handle_config_change(struct ipr_ioa_cfg *ioa_cfg, ...@@ -794,7 +794,7 @@ static void ipr_handle_config_change(struct ipr_ioa_cfg *ioa_cfg,
struct ipr_config_table_entry *cfgte; struct ipr_config_table_entry *cfgte;
u32 is_ndn = 1; u32 is_ndn = 1;
cfgte = &hostrcb->ccn.cfgte; cfgte = &hostrcb->hcam.ccn.cfgte;
list_for_each_entry(res, &ioa_cfg->used_res_q, queue) { list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
if (!memcmp(&res->cfgte.res_addr, &cfgte->res_addr, if (!memcmp(&res->cfgte.res_addr, &cfgte->res_addr,
...@@ -822,7 +822,7 @@ static void ipr_handle_config_change(struct ipr_ioa_cfg *ioa_cfg, ...@@ -822,7 +822,7 @@ static void ipr_handle_config_change(struct ipr_ioa_cfg *ioa_cfg,
memcpy(&res->cfgte, cfgte, sizeof(struct ipr_config_table_entry)); memcpy(&res->cfgte, cfgte, sizeof(struct ipr_config_table_entry));
if (hostrcb->notify_type == IPR_HOST_RCB_NOTIF_TYPE_REM_ENTRY) { if (hostrcb->hcam.notify_type == IPR_HOST_RCB_NOTIF_TYPE_REM_ENTRY) {
if (res->sdev) { if (res->sdev) {
res->sdev->hostdata = NULL; res->sdev->hostdata = NULL;
res->del_from_ml = 1; res->del_from_ml = 1;
...@@ -902,7 +902,7 @@ static void ipr_log_vpd(struct ipr_std_inq_vpids *vpids, u8 *serial_num) ...@@ -902,7 +902,7 @@ static void ipr_log_vpd(struct ipr_std_inq_vpids *vpids, u8 *serial_num)
static void ipr_log_cache_error(struct ipr_ioa_cfg *ioa_cfg, static void ipr_log_cache_error(struct ipr_ioa_cfg *ioa_cfg,
struct ipr_hostrcb *hostrcb) struct ipr_hostrcb *hostrcb)
{ {
struct ipr_hostrcb_type_02_error *error = &hostrcb->error.type_02_error; struct ipr_hostrcb_type_02_error *error = &hostrcb->hcam.error.type_02_error;
ipr_err("-----Current Configuration-----\n"); ipr_err("-----Current Configuration-----\n");
ipr_err("Cache Directory Card Information:\n"); ipr_err("Cache Directory Card Information:\n");
...@@ -938,13 +938,13 @@ static void ipr_log_config_error(struct ipr_ioa_cfg *ioa_cfg, ...@@ -938,13 +938,13 @@ static void ipr_log_config_error(struct ipr_ioa_cfg *ioa_cfg,
int errors_logged, i; int errors_logged, i;
struct ipr_hostrcb_device_data_entry *dev_entry; struct ipr_hostrcb_device_data_entry *dev_entry;
errors_logged = be32_to_cpu(hostrcb->error.type_03_error.errors_logged); errors_logged = be32_to_cpu(hostrcb->hcam.error.type_03_error.errors_logged);
ipr_err("Device Errors Detected/Logged: %d/%d\n", ipr_err("Device Errors Detected/Logged: %d/%d\n",
be32_to_cpu(hostrcb->error.type_03_error.errors_detected), be32_to_cpu(hostrcb->hcam.error.type_03_error.errors_detected),
errors_logged); errors_logged);
dev_entry = hostrcb->error.type_03_error.dev_entry; dev_entry = hostrcb->hcam.error.type_03_error.dev_entry;
for (i = 0; i < errors_logged; i++, dev_entry++) { for (i = 0; i < errors_logged; i++, dev_entry++) {
ipr_err_separator; ipr_err_separator;
...@@ -996,7 +996,7 @@ static void ipr_log_array_error(struct ipr_ioa_cfg *ioa_cfg, ...@@ -996,7 +996,7 @@ static void ipr_log_array_error(struct ipr_ioa_cfg *ioa_cfg,
memset(zero_sn, '0', IPR_SERIAL_NUM_LEN); memset(zero_sn, '0', IPR_SERIAL_NUM_LEN);
error = &hostrcb->error.type_04_error; error = &hostrcb->hcam.error.type_04_error;
ipr_err_separator; ipr_err_separator;
...@@ -1064,7 +1064,7 @@ static void ipr_log_generic_error(struct ipr_ioa_cfg *ioa_cfg, ...@@ -1064,7 +1064,7 @@ static void ipr_log_generic_error(struct ipr_ioa_cfg *ioa_cfg,
struct ipr_hostrcb *hostrcb) struct ipr_hostrcb *hostrcb)
{ {
int i; int i;
int ioa_data_len = be32_to_cpu(hostrcb->length); int ioa_data_len = be32_to_cpu(hostrcb->hcam.length);
if (ioa_data_len == 0) if (ioa_data_len == 0)
return; return;
...@@ -1074,10 +1074,10 @@ static void ipr_log_generic_error(struct ipr_ioa_cfg *ioa_cfg, ...@@ -1074,10 +1074,10 @@ static void ipr_log_generic_error(struct ipr_ioa_cfg *ioa_cfg,
for (i = 0; i < ioa_data_len / 4; i += 4) { for (i = 0; i < ioa_data_len / 4; i += 4) {
ipr_err("%08X: %08X %08X %08X %08X\n", i*4, ipr_err("%08X: %08X %08X %08X %08X\n", i*4,
be32_to_cpu(hostrcb->raw.data[i]), be32_to_cpu(hostrcb->hcam.raw.data[i]),
be32_to_cpu(hostrcb->raw.data[i+1]), be32_to_cpu(hostrcb->hcam.raw.data[i+1]),
be32_to_cpu(hostrcb->raw.data[i+2]), be32_to_cpu(hostrcb->hcam.raw.data[i+2]),
be32_to_cpu(hostrcb->raw.data[i+3])); be32_to_cpu(hostrcb->hcam.raw.data[i+3]));
} }
} }
...@@ -1119,19 +1119,19 @@ static void ipr_handle_log_data(struct ipr_ioa_cfg *ioa_cfg, ...@@ -1119,19 +1119,19 @@ static void ipr_handle_log_data(struct ipr_ioa_cfg *ioa_cfg,
u32 ioasc; u32 ioasc;
int error_index; int error_index;
if (hostrcb->notify_type != IPR_HOST_RCB_NOTIF_TYPE_ERROR_LOG_ENTRY) if (hostrcb->hcam.notify_type != IPR_HOST_RCB_NOTIF_TYPE_ERROR_LOG_ENTRY)
return; return;
if (hostrcb->notifications_lost == IPR_HOST_RCB_NOTIFICATIONS_LOST) if (hostrcb->hcam.notifications_lost == IPR_HOST_RCB_NOTIFICATIONS_LOST)
dev_err(&ioa_cfg->pdev->dev, "Error notifications lost\n"); dev_err(&ioa_cfg->pdev->dev, "Error notifications lost\n");
ioasc = be32_to_cpu(hostrcb->error.failing_dev_ioasc); ioasc = be32_to_cpu(hostrcb->hcam.error.failing_dev_ioasc);
if (ioasc == IPR_IOASC_BUS_WAS_RESET || if (ioasc == IPR_IOASC_BUS_WAS_RESET ||
ioasc == IPR_IOASC_BUS_WAS_RESET_BY_OTHER) { ioasc == IPR_IOASC_BUS_WAS_RESET_BY_OTHER) {
/* Tell the midlayer we had a bus reset so it will handle the UA properly */ /* Tell the midlayer we had a bus reset so it will handle the UA properly */
scsi_report_bus_reset(ioa_cfg->host, scsi_report_bus_reset(ioa_cfg->host,
hostrcb->error.failing_dev_res_addr.bus); hostrcb->hcam.error.failing_dev_res_addr.bus);
} }
error_index = ipr_get_error(ioasc); error_index = ipr_get_error(ioasc);
...@@ -1139,8 +1139,8 @@ static void ipr_handle_log_data(struct ipr_ioa_cfg *ioa_cfg, ...@@ -1139,8 +1139,8 @@ static void ipr_handle_log_data(struct ipr_ioa_cfg *ioa_cfg,
if (!ipr_error_table[error_index].log_hcam) if (!ipr_error_table[error_index].log_hcam)
return; return;
if (ipr_is_device(&hostrcb->error.failing_dev_res_addr)) { if (ipr_is_device(&hostrcb->hcam.error.failing_dev_res_addr)) {
ipr_res_err(ioa_cfg, hostrcb->error.failing_dev_res_addr, ipr_res_err(ioa_cfg, hostrcb->hcam.error.failing_dev_res_addr,
"%s\n", ipr_error_table[error_index].error); "%s\n", ipr_error_table[error_index].error);
} else { } else {
dev_err(&ioa_cfg->pdev->dev, "%s\n", dev_err(&ioa_cfg->pdev->dev, "%s\n",
...@@ -1153,7 +1153,7 @@ static void ipr_handle_log_data(struct ipr_ioa_cfg *ioa_cfg, ...@@ -1153,7 +1153,7 @@ static void ipr_handle_log_data(struct ipr_ioa_cfg *ioa_cfg,
if (ioa_cfg->log_level < IPR_DEFAULT_LOG_LEVEL) if (ioa_cfg->log_level < IPR_DEFAULT_LOG_LEVEL)
return; return;
switch (hostrcb->overlay_id) { switch (hostrcb->hcam.overlay_id) {
case IPR_HOST_RCB_OVERLAY_ID_1: case IPR_HOST_RCB_OVERLAY_ID_1:
ipr_log_generic_error(ioa_cfg, hostrcb); ipr_log_generic_error(ioa_cfg, hostrcb);
break; break;
...@@ -1173,7 +1173,7 @@ static void ipr_handle_log_data(struct ipr_ioa_cfg *ioa_cfg, ...@@ -1173,7 +1173,7 @@ static void ipr_handle_log_data(struct ipr_ioa_cfg *ioa_cfg,
default: default:
dev_err(&ioa_cfg->pdev->dev, dev_err(&ioa_cfg->pdev->dev,
"Unknown error received. Overlay ID: %d\n", "Unknown error received. Overlay ID: %d\n",
hostrcb->overlay_id); hostrcb->hcam.overlay_id);
break; break;
} }
} }
...@@ -4886,12 +4886,12 @@ static void ipr_get_unit_check_buffer(struct ipr_ioa_cfg *ioa_cfg) ...@@ -4886,12 +4886,12 @@ static void ipr_get_unit_check_buffer(struct ipr_ioa_cfg *ioa_cfg)
hostrcb = list_entry(ioa_cfg->hostrcb_free_q.next, hostrcb = list_entry(ioa_cfg->hostrcb_free_q.next,
struct ipr_hostrcb, queue); struct ipr_hostrcb, queue);
list_del(&hostrcb->queue); list_del(&hostrcb->queue);
memset(hostrcb, 0, IPR_HOSTRCB_SZ); memset(&hostrcb->hcam, 0, sizeof(hostrcb->hcam));
rc = ipr_get_ldump_data_section(ioa_cfg, rc = ipr_get_ldump_data_section(ioa_cfg,
be32_to_cpu(sdt.entry[0].bar_str_offset), be32_to_cpu(sdt.entry[0].bar_str_offset),
(u32 *)hostrcb, (u32 *)&hostrcb->hcam,
min(length, (int)IPR_HOSTRCB_SZ) / sizeof(u32)); min(length, (int)sizeof(hostrcb->hcam)) / sizeof(u32));
if (!rc) if (!rc)
ipr_handle_log_data(ioa_cfg, hostrcb); ipr_handle_log_data(ioa_cfg, hostrcb);
...@@ -5531,7 +5531,8 @@ static int __devinit ipr_alloc_mem(struct ipr_ioa_cfg *ioa_cfg) ...@@ -5531,7 +5531,8 @@ static int __devinit ipr_alloc_mem(struct ipr_ioa_cfg *ioa_cfg)
goto cleanup; goto cleanup;
memset(ioa_cfg->hostrcb[i], 0, sizeof(struct ipr_hostrcb)); memset(ioa_cfg->hostrcb[i], 0, sizeof(struct ipr_hostrcb));
ioa_cfg->hostrcb[i]->hostrcb_dma = ioa_cfg->hostrcb_dma[i]; ioa_cfg->hostrcb[i]->hostrcb_dma =
ioa_cfg->hostrcb_dma[i] + offsetof(struct ipr_hostrcb, hcam);
list_add_tail(&ioa_cfg->hostrcb[i]->queue, &ioa_cfg->hostrcb_free_q); list_add_tail(&ioa_cfg->hostrcb[i]->queue, &ioa_cfg->hostrcb_free_q);
} }
......
...@@ -624,7 +624,7 @@ struct ipr_hostrcb_raw { ...@@ -624,7 +624,7 @@ struct ipr_hostrcb_raw {
u32 data[sizeof(struct ipr_hostrcb_error)/sizeof(u32)]; u32 data[sizeof(struct ipr_hostrcb_error)/sizeof(u32)];
}__attribute__((packed, aligned (4))); }__attribute__((packed, aligned (4)));
struct ipr_hostrcb { struct ipr_hcam {
u8 op_code; u8 op_code;
#define IPR_HOST_RCB_OP_CODE_CONFIG_CHANGE 0xE1 #define IPR_HOST_RCB_OP_CODE_CONFIG_CHANGE 0xE1
#define IPR_HOST_RCB_OP_CODE_LOG_DATA 0xE2 #define IPR_HOST_RCB_OP_CODE_LOG_DATA 0xE2
...@@ -663,13 +663,13 @@ struct ipr_hostrcb { ...@@ -663,13 +663,13 @@ struct ipr_hostrcb {
struct ipr_hostrcb_cfg_ch_not ccn; struct ipr_hostrcb_cfg_ch_not ccn;
struct ipr_hostrcb_raw raw; struct ipr_hostrcb_raw raw;
}; };
}__attribute__((packed, aligned (4)));
/* Driver added data */ struct ipr_hostrcb {
struct ipr_hcam hcam;
u32 hostrcb_dma; u32 hostrcb_dma;
struct list_head queue; struct list_head queue;
}__attribute__((packed, aligned (4))); };
#define IPR_HOSTRCB_SZ offsetof(struct ipr_hostrcb, hostrcb_dma)
/* IPR smart dump table structures */ /* IPR smart dump table structures */
struct ipr_sdt_entry { struct ipr_sdt_entry {
......
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