aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJoe Lawrence <joe.lawrence@stratus.com>2014-06-25 17:06:42 -0400
committerChristoph Hellwig <hch@lst.de>2014-07-25 17:16:58 -0400
commit32696198745a74b37bc27498a5ade169d2c04c5e (patch)
tree6b86964c219585ccd11131dc3523b78eff309299 /drivers
parentc9834c70efbaaa1461ec04289d97a842244fb294 (diff)
mptfusion: combine fw_event_work and its event_data
Tack the firmware reply event_data payload to the end of its corresponding struct fw_event_work allocation. Rework fw_event_work allocation calculations to include the event_data size where appropriate. This clarifies the code a bit and avoids the following smatch warnings: drivers/message/fusion/mptsas.c:1003 mptsas_queue_device_delete() error: memcpy() 'fw_event->event_data' too small (29 vs 36) drivers/message/fusion/mptsas.c:1017 mptsas_queue_rescan() error: not allocating enough data 168 vs 160 Signed-off-by: Joe Lawrence <joe.lawrence@stratus.com> Acked-by: Sreekanth Reddy <Sreekanth.Reddy@avagotech.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/message/fusion/mptsas.c16
-rw-r--r--drivers/message/fusion/mptsas.h2
2 files changed, 7 insertions, 11 deletions
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c
index a0d4218103db..b0b74c4d2645 100644
--- a/drivers/message/fusion/mptsas.c
+++ b/drivers/message/fusion/mptsas.c
@@ -990,11 +990,10 @@ mptsas_queue_device_delete(MPT_ADAPTER *ioc,
990 MpiEventDataSasDeviceStatusChange_t *sas_event_data) 990 MpiEventDataSasDeviceStatusChange_t *sas_event_data)
991{ 991{
992 struct fw_event_work *fw_event; 992 struct fw_event_work *fw_event;
993 int sz;
994 993
995 sz = offsetof(struct fw_event_work, event_data) + 994 fw_event = kzalloc(sizeof(*fw_event) +
996 sizeof(MpiEventDataSasDeviceStatusChange_t); 995 sizeof(MpiEventDataSasDeviceStatusChange_t),
997 fw_event = kzalloc(sz, GFP_ATOMIC); 996 GFP_ATOMIC);
998 if (!fw_event) { 997 if (!fw_event) {
999 printk(MYIOC_s_WARN_FMT "%s: failed at (line=%d)\n", 998 printk(MYIOC_s_WARN_FMT "%s: failed at (line=%d)\n",
1000 ioc->name, __func__, __LINE__); 999 ioc->name, __func__, __LINE__);
@@ -1011,10 +1010,8 @@ static void
1011mptsas_queue_rescan(MPT_ADAPTER *ioc) 1010mptsas_queue_rescan(MPT_ADAPTER *ioc)
1012{ 1011{
1013 struct fw_event_work *fw_event; 1012 struct fw_event_work *fw_event;
1014 int sz;
1015 1013
1016 sz = offsetof(struct fw_event_work, event_data); 1014 fw_event = kzalloc(sizeof(*fw_event), GFP_ATOMIC);
1017 fw_event = kzalloc(sz, GFP_ATOMIC);
1018 if (!fw_event) { 1015 if (!fw_event) {
1019 printk(MYIOC_s_WARN_FMT "%s: failed at (line=%d)\n", 1016 printk(MYIOC_s_WARN_FMT "%s: failed at (line=%d)\n",
1020 ioc->name, __func__, __LINE__); 1017 ioc->name, __func__, __LINE__);
@@ -4983,7 +4980,7 @@ static int
4983mptsas_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *reply) 4980mptsas_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *reply)
4984{ 4981{
4985 u32 event = le32_to_cpu(reply->Event); 4982 u32 event = le32_to_cpu(reply->Event);
4986 int sz, event_data_sz; 4983 int event_data_sz;
4987 struct fw_event_work *fw_event; 4984 struct fw_event_work *fw_event;
4988 unsigned long delay; 4985 unsigned long delay;
4989 4986
@@ -5093,8 +5090,7 @@ mptsas_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *reply)
5093 5090
5094 event_data_sz = ((reply->MsgLength * 4) - 5091 event_data_sz = ((reply->MsgLength * 4) -
5095 offsetof(EventNotificationReply_t, Data)); 5092 offsetof(EventNotificationReply_t, Data));
5096 sz = offsetof(struct fw_event_work, event_data) + event_data_sz; 5093 fw_event = kzalloc(sizeof(*fw_event) + event_data_sz, GFP_ATOMIC);
5097 fw_event = kzalloc(sz, GFP_ATOMIC);
5098 if (!fw_event) { 5094 if (!fw_event) {
5099 printk(MYIOC_s_WARN_FMT "%s: failed at (line=%d)\n", ioc->name, 5095 printk(MYIOC_s_WARN_FMT "%s: failed at (line=%d)\n", ioc->name,
5100 __func__, __LINE__); 5096 __func__, __LINE__);
diff --git a/drivers/message/fusion/mptsas.h b/drivers/message/fusion/mptsas.h
index 57e86ab77661..c396483d3624 100644
--- a/drivers/message/fusion/mptsas.h
+++ b/drivers/message/fusion/mptsas.h
@@ -110,7 +110,7 @@ struct fw_event_work {
110 MPT_ADAPTER *ioc; 110 MPT_ADAPTER *ioc;
111 u32 event; 111 u32 event;
112 u8 retries; 112 u8 retries;
113 u8 __attribute__((aligned(4))) event_data[1]; 113 char event_data[0] __aligned(4);
114}; 114};
115 115
116struct mptsas_discovery_event { 116struct mptsas_discovery_event {