Skip to content

Commit d891fe6

Browse files
KAGA-KOKOaxboe
authored andcommitted
skd: Use a structure instead of hardcoding structure offsets
This change makes the source code easier to read. Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Hannes Reinecke <hare@suse.de> Cc: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent 6507f43 commit d891fe6

File tree

1 file changed

+22
-19
lines changed

1 file changed

+22
-19
lines changed

drivers/block/skd_main.c

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,11 @@ enum skd_check_status_action {
181181
SKD_CHECK_STATUS_BUSY_IMMINENT,
182182
};
183183

184+
struct skd_msg_buf {
185+
struct fit_msg_hdr fmh;
186+
struct skd_scsi_request scsi[SKD_MAX_REQ_PER_MSG];
187+
};
188+
184189
struct skd_fitmsg_context {
185190
enum skd_fit_msg_state state;
186191

@@ -191,7 +196,7 @@ struct skd_fitmsg_context {
191196

192197
u32 length;
193198

194-
u8 *msg_buf;
199+
struct skd_msg_buf *msg_buf;
195200
dma_addr_t mb_dma_address;
196201
};
197202

@@ -231,7 +236,7 @@ struct skd_special_context {
231236
void *data_buf;
232237
dma_addr_t db_dma_address;
233238

234-
u8 *msg_buf;
239+
struct skd_msg_buf *msg_buf;
235240
dma_addr_t mb_dma_address;
236241
};
237242

@@ -520,7 +525,6 @@ static void skd_request_fn(struct request_queue *q)
520525
__be64 be_dmaa;
521526
u64 cmdctxt;
522527
u32 timo_slot;
523-
void *cmd_ptr;
524528
int flush, fua;
525529

526530
if (skdev->state != SKD_DRVR_STATE_ONLINE) {
@@ -639,21 +643,21 @@ static void skd_request_fn(struct request_queue *q)
639643
skmsg->id += SKD_ID_INCR;
640644

641645
/* Initialize the FIT msg header */
642-
fmh = (struct fit_msg_hdr *)skmsg->msg_buf;
646+
fmh = &skmsg->msg_buf->fmh;
643647
memset(fmh, 0, sizeof(*fmh));
644648
fmh->protocol_id = FIT_PROTOCOL_ID_SOFIT;
645649
skmsg->length = sizeof(*fmh);
646650
}
647651

648652
skreq->fitmsg_id = skmsg->id;
649653

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));
652657

653658
be_dmaa = cpu_to_be64(skreq->sksg_dma_address);
654659
cmdctxt = skreq->id + SKD_ID_INCR;
655660

656-
scsi_req = cmd_ptr;
657661
scsi_req->hdr.tag = cmdctxt;
658662
scsi_req->hdr.sg_list_dma_address = be_dmaa;
659663

@@ -1549,8 +1553,8 @@ static int skd_sg_io_send_fitmsg(struct skd_device *skdev,
15491553
struct skd_sg_io *sksgio)
15501554
{
15511555
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];
15541558

15551559
memset(skspcl->msg_buf, 0, SKD_N_SPECIAL_FITMSG_BYTES);
15561560

@@ -1709,11 +1713,11 @@ static int skd_format_internal_skspcl(struct skd_device *skdev)
17091713
uint64_t dma_address;
17101714
struct skd_scsi_request *scsi;
17111715

1712-
fmh = (struct fit_msg_hdr *)&skspcl->msg_buf[0];
1716+
fmh = &skspcl->msg_buf->fmh;
17131717
fmh->protocol_id = FIT_PROTOCOL_ID_SOFIT;
17141718
fmh->num_protocol_cmds_coalesced = 1;
17151719

1716-
scsi = (struct skd_scsi_request *)&skspcl->msg_buf[64];
1720+
scsi = &skspcl->msg_buf->scsi[0];
17171721
memset(scsi, 0, sizeof(*scsi));
17181722
dma_address = skspcl->req.sksg_dma_address;
17191723
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,
17481752
skspcl->req.state = SKD_REQ_STATE_BUSY;
17491753
skspcl->req.id += SKD_ID_INCR;
17501754

1751-
scsi = (struct skd_scsi_request *)&skspcl->msg_buf[64];
1755+
scsi = &skspcl->msg_buf->scsi[0];
17521756
scsi->hdr.tag = skspcl->req.id;
17531757

17541758
memset(scsi->cdb, 0, sizeof(scsi->cdb));
@@ -1853,8 +1857,7 @@ static void skd_complete_internal(struct skd_device *skdev,
18531857
u8 *buf = skspcl->data_buf;
18541858
u8 status;
18551859
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];
18581861

18591862
lockdep_assert_held(&skdev->lock);
18601863

@@ -2020,7 +2023,7 @@ static void skd_send_fitmsg(struct skd_device *skdev,
20202023
qcmd = skmsg->mb_dma_address;
20212024
qcmd |= FIT_QCMD_QID_NORMAL;
20222025

2023-
fmh = (struct fit_msg_hdr *)skmsg->msg_buf;
2026+
fmh = &skmsg->msg_buf->fmh;
20242027
skmsg->outstanding = fmh->num_protocol_cmds_coalesced;
20252028

20262029
if (unlikely(skdev->dbg_level > 1)) {
@@ -2501,8 +2504,7 @@ static void skd_process_scsi_inq(struct skd_device *skdev,
25012504
struct skd_special_context *skspcl)
25022505
{
25032506
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];
25062508

25072509
dma_sync_sg_for_cpu(skdev->class_dev, skspcl->req.sg, skspcl->req.n_sg,
25082510
skspcl->req.sg_data_dir);
@@ -4957,8 +4959,9 @@ static void skd_log_skreq(struct skd_device *skdev,
49574959

49584960
static int __init skd_init(void)
49594961
{
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);
49624965

49634966
pr_info(PFX " v%s-b%s loaded\n", DRV_VERSION, DRV_BUILD_ID);
49644967

0 commit comments

Comments
 (0)