@@ -181,6 +181,11 @@ enum skd_check_status_action {
181
181
SKD_CHECK_STATUS_BUSY_IMMINENT ,
182
182
};
183
183
184
+ struct skd_msg_buf {
185
+ struct fit_msg_hdr fmh ;
186
+ struct skd_scsi_request scsi [SKD_MAX_REQ_PER_MSG ];
187
+ };
188
+
184
189
struct skd_fitmsg_context {
185
190
enum skd_fit_msg_state state ;
186
191
@@ -191,7 +196,7 @@ struct skd_fitmsg_context {
191
196
192
197
u32 length ;
193
198
194
- u8 * msg_buf ;
199
+ struct skd_msg_buf * msg_buf ;
195
200
dma_addr_t mb_dma_address ;
196
201
};
197
202
@@ -231,7 +236,7 @@ struct skd_special_context {
231
236
void * data_buf ;
232
237
dma_addr_t db_dma_address ;
233
238
234
- u8 * msg_buf ;
239
+ struct skd_msg_buf * msg_buf ;
235
240
dma_addr_t mb_dma_address ;
236
241
};
237
242
@@ -520,7 +525,6 @@ static void skd_request_fn(struct request_queue *q)
520
525
__be64 be_dmaa ;
521
526
u64 cmdctxt ;
522
527
u32 timo_slot ;
523
- void * cmd_ptr ;
524
528
int flush , fua ;
525
529
526
530
if (skdev -> state != SKD_DRVR_STATE_ONLINE ) {
@@ -639,21 +643,21 @@ static void skd_request_fn(struct request_queue *q)
639
643
skmsg -> id += SKD_ID_INCR ;
640
644
641
645
/* Initialize the FIT msg header */
642
- fmh = ( struct fit_msg_hdr * ) skmsg -> msg_buf ;
646
+ fmh = & skmsg -> msg_buf -> fmh ;
643
647
memset (fmh , 0 , sizeof (* fmh ));
644
648
fmh -> protocol_id = FIT_PROTOCOL_ID_SOFIT ;
645
649
skmsg -> length = sizeof (* fmh );
646
650
}
647
651
648
652
skreq -> fitmsg_id = skmsg -> id ;
649
653
650
- cmd_ptr = & skmsg -> msg_buf [skmsg -> length ];
651
- memset (cmd_ptr , 0 , 32 );
654
+ scsi_req =
655
+ & skmsg -> msg_buf -> scsi [fmh -> num_protocol_cmds_coalesced ];
656
+ memset (scsi_req , 0 , sizeof (* scsi_req ));
652
657
653
658
be_dmaa = cpu_to_be64 (skreq -> sksg_dma_address );
654
659
cmdctxt = skreq -> id + SKD_ID_INCR ;
655
660
656
- scsi_req = cmd_ptr ;
657
661
scsi_req -> hdr .tag = cmdctxt ;
658
662
scsi_req -> hdr .sg_list_dma_address = be_dmaa ;
659
663
@@ -1549,8 +1553,8 @@ static int skd_sg_io_send_fitmsg(struct skd_device *skdev,
1549
1553
struct skd_sg_io * sksgio )
1550
1554
{
1551
1555
struct skd_special_context * skspcl = sksgio -> skspcl ;
1552
- struct fit_msg_hdr * fmh = ( struct fit_msg_hdr * ) skspcl -> msg_buf ;
1553
- struct skd_scsi_request * scsi_req = ( struct skd_scsi_request * ) & fmh [ 1 ];
1556
+ struct fit_msg_hdr * fmh = & skspcl -> msg_buf -> fmh ;
1557
+ struct skd_scsi_request * scsi_req = & skspcl -> msg_buf -> scsi [ 0 ];
1554
1558
1555
1559
memset (skspcl -> msg_buf , 0 , SKD_N_SPECIAL_FITMSG_BYTES );
1556
1560
@@ -1709,11 +1713,11 @@ static int skd_format_internal_skspcl(struct skd_device *skdev)
1709
1713
uint64_t dma_address ;
1710
1714
struct skd_scsi_request * scsi ;
1711
1715
1712
- fmh = ( struct fit_msg_hdr * ) & skspcl -> msg_buf [ 0 ] ;
1716
+ fmh = & skspcl -> msg_buf -> fmh ;
1713
1717
fmh -> protocol_id = FIT_PROTOCOL_ID_SOFIT ;
1714
1718
fmh -> num_protocol_cmds_coalesced = 1 ;
1715
1719
1716
- scsi = ( struct skd_scsi_request * ) & skspcl -> msg_buf [ 64 ];
1720
+ scsi = & skspcl -> msg_buf -> scsi [ 0 ];
1717
1721
memset (scsi , 0 , sizeof (* scsi ));
1718
1722
dma_address = skspcl -> req .sksg_dma_address ;
1719
1723
scsi -> hdr .sg_list_dma_address = cpu_to_be64 (dma_address );
@@ -1748,7 +1752,7 @@ static void skd_send_internal_skspcl(struct skd_device *skdev,
1748
1752
skspcl -> req .state = SKD_REQ_STATE_BUSY ;
1749
1753
skspcl -> req .id += SKD_ID_INCR ;
1750
1754
1751
- scsi = ( struct skd_scsi_request * ) & skspcl -> msg_buf [ 64 ];
1755
+ scsi = & skspcl -> msg_buf -> scsi [ 0 ];
1752
1756
scsi -> hdr .tag = skspcl -> req .id ;
1753
1757
1754
1758
memset (scsi -> cdb , 0 , sizeof (scsi -> cdb ));
@@ -1853,8 +1857,7 @@ static void skd_complete_internal(struct skd_device *skdev,
1853
1857
u8 * buf = skspcl -> data_buf ;
1854
1858
u8 status ;
1855
1859
int i ;
1856
- struct skd_scsi_request * scsi =
1857
- (struct skd_scsi_request * )& skspcl -> msg_buf [64 ];
1860
+ struct skd_scsi_request * scsi = & skspcl -> msg_buf -> scsi [0 ];
1858
1861
1859
1862
lockdep_assert_held (& skdev -> lock );
1860
1863
@@ -2020,7 +2023,7 @@ static void skd_send_fitmsg(struct skd_device *skdev,
2020
2023
qcmd = skmsg -> mb_dma_address ;
2021
2024
qcmd |= FIT_QCMD_QID_NORMAL ;
2022
2025
2023
- fmh = ( struct fit_msg_hdr * ) skmsg -> msg_buf ;
2026
+ fmh = & skmsg -> msg_buf -> fmh ;
2024
2027
skmsg -> outstanding = fmh -> num_protocol_cmds_coalesced ;
2025
2028
2026
2029
if (unlikely (skdev -> dbg_level > 1 )) {
@@ -2501,8 +2504,7 @@ static void skd_process_scsi_inq(struct skd_device *skdev,
2501
2504
struct skd_special_context * skspcl )
2502
2505
{
2503
2506
uint8_t * buf ;
2504
- struct fit_msg_hdr * fmh = (struct fit_msg_hdr * )skspcl -> msg_buf ;
2505
- struct skd_scsi_request * scsi_req = (struct skd_scsi_request * )& fmh [1 ];
2507
+ struct skd_scsi_request * scsi_req = & skspcl -> msg_buf -> scsi [0 ];
2506
2508
2507
2509
dma_sync_sg_for_cpu (skdev -> class_dev , skspcl -> req .sg , skspcl -> req .n_sg ,
2508
2510
skspcl -> req .sg_data_dir );
@@ -4957,8 +4959,9 @@ static void skd_log_skreq(struct skd_device *skdev,
4957
4959
4958
4960
static int __init skd_init (void )
4959
4961
{
4960
- BUILD_BUG_ON (sizeof (struct fit_msg_hdr ) + SKD_MAX_REQ_PER_MSG *
4961
- sizeof (struct skd_scsi_request ) != SKD_N_FITMSG_BYTES );
4962
+ BUILD_BUG_ON (offsetof(struct skd_msg_buf , fmh ) != 0 );
4963
+ BUILD_BUG_ON (offsetof(struct skd_msg_buf , scsi ) != 64 );
4964
+ BUILD_BUG_ON (sizeof (struct skd_msg_buf ) != SKD_N_FITMSG_BYTES );
4962
4965
4963
4966
pr_info (PFX " v%s-b%s loaded\n" , DRV_VERSION , DRV_BUILD_ID );
4964
4967
0 commit comments