Skip to content

Commit b5209da

Browse files
committed
cxl: Convert cxl_internal_send_cmd() to use 'struct cxl_mailbox' as input
With the CXL mailbox context split out, cxl_internal_send_cmd() can take 'struct cxl_mailbox' as an input parameter rather than 'struct memdev_dev_state'. Change input parameter for cxl_internal_send_cmd() and fixup all impacted call sites. Reviewed-by: Fan Ni <[email protected]> Reviewed-by: Jonathan Cameron <[email protected]> Reviewed-by: Alison Schofield <[email protected]> Reviewed-by: Ira Weiny <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Dave Jiang <[email protected]>
1 parent 8d8081c commit b5209da

File tree

6 files changed

+54
-44
lines changed

6 files changed

+54
-44
lines changed

drivers/cxl/core/mbox.c

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ static const char *cxl_mem_opcode_to_name(u16 opcode)
225225

226226
/**
227227
* cxl_internal_send_cmd() - Kernel internal interface to send a mailbox command
228-
* @mds: The driver data for the operation
228+
* @cxl_mbox: CXL mailbox context
229229
* @mbox_cmd: initialized command to execute
230230
*
231231
* Context: Any context.
@@ -241,10 +241,9 @@ static const char *cxl_mem_opcode_to_name(u16 opcode)
241241
* error. While this distinction can be useful for commands from userspace, the
242242
* kernel will only be able to use results when both are successful.
243243
*/
244-
int cxl_internal_send_cmd(struct cxl_memdev_state *mds,
244+
int cxl_internal_send_cmd(struct cxl_mailbox *cxl_mbox,
245245
struct cxl_mbox_cmd *mbox_cmd)
246246
{
247-
struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
248247
size_t out_size, min_out;
249248
int rc;
250249

@@ -689,7 +688,7 @@ static int cxl_xfer_log(struct cxl_memdev_state *mds, uuid_t *uuid,
689688
.payload_out = out,
690689
};
691690

692-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
691+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
693692

694693
/*
695694
* The output payload length that indicates the number
@@ -775,7 +774,7 @@ static struct cxl_mbox_get_supported_logs *cxl_get_gsl(struct cxl_memdev_state *
775774
/* At least the record number field must be valid */
776775
.min_out = 2,
777776
};
778-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
777+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
779778
if (rc < 0) {
780779
kvfree(ret);
781780
return ERR_PTR(rc);
@@ -964,7 +963,7 @@ static int cxl_clear_event_record(struct cxl_memdev_state *mds,
964963

965964
if (i == max_handles) {
966965
payload->nr_recs = i;
967-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
966+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
968967
if (rc)
969968
goto free_pl;
970969
i = 0;
@@ -975,7 +974,7 @@ static int cxl_clear_event_record(struct cxl_memdev_state *mds,
975974
if (i) {
976975
payload->nr_recs = i;
977976
mbox_cmd.size_in = struct_size(payload, handles, i);
978-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
977+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
979978
if (rc)
980979
goto free_pl;
981980
}
@@ -1009,7 +1008,7 @@ static void cxl_mem_get_records_log(struct cxl_memdev_state *mds,
10091008
.min_out = struct_size(payload, records, 0),
10101009
};
10111010

1012-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
1011+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
10131012
if (rc) {
10141013
dev_err_ratelimited(dev,
10151014
"Event log '%d': Failed to query event records : %d",
@@ -1080,6 +1079,7 @@ EXPORT_SYMBOL_NS_GPL(cxl_mem_get_event_records, CXL);
10801079
*/
10811080
static int cxl_mem_get_partition_info(struct cxl_memdev_state *mds)
10821081
{
1082+
struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
10831083
struct cxl_mbox_get_partition_info pi;
10841084
struct cxl_mbox_cmd mbox_cmd;
10851085
int rc;
@@ -1089,7 +1089,7 @@ static int cxl_mem_get_partition_info(struct cxl_memdev_state *mds)
10891089
.size_out = sizeof(pi),
10901090
.payload_out = &pi,
10911091
};
1092-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
1092+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
10931093
if (rc)
10941094
return rc;
10951095

@@ -1116,6 +1116,7 @@ static int cxl_mem_get_partition_info(struct cxl_memdev_state *mds)
11161116
*/
11171117
int cxl_dev_state_identify(struct cxl_memdev_state *mds)
11181118
{
1119+
struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
11191120
/* See CXL 2.0 Table 175 Identify Memory Device Output Payload */
11201121
struct cxl_mbox_identify id;
11211122
struct cxl_mbox_cmd mbox_cmd;
@@ -1130,7 +1131,7 @@ int cxl_dev_state_identify(struct cxl_memdev_state *mds)
11301131
.size_out = sizeof(id),
11311132
.payload_out = &id,
11321133
};
1133-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
1134+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
11341135
if (rc < 0)
11351136
return rc;
11361137

@@ -1158,6 +1159,7 @@ EXPORT_SYMBOL_NS_GPL(cxl_dev_state_identify, CXL);
11581159

11591160
static int __cxl_mem_sanitize(struct cxl_memdev_state *mds, u16 cmd)
11601161
{
1162+
struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
11611163
int rc;
11621164
u32 sec_out = 0;
11631165
struct cxl_get_security_output {
@@ -1169,14 +1171,13 @@ static int __cxl_mem_sanitize(struct cxl_memdev_state *mds, u16 cmd)
11691171
.size_out = sizeof(out),
11701172
};
11711173
struct cxl_mbox_cmd mbox_cmd = { .opcode = cmd };
1172-
struct cxl_dev_state *cxlds = &mds->cxlds;
11731174

11741175
if (cmd != CXL_MBOX_OP_SANITIZE && cmd != CXL_MBOX_OP_SECURE_ERASE)
11751176
return -EINVAL;
11761177

1177-
rc = cxl_internal_send_cmd(mds, &sec_cmd);
1178+
rc = cxl_internal_send_cmd(cxl_mbox, &sec_cmd);
11781179
if (rc < 0) {
1179-
dev_err(cxlds->dev, "Failed to get security state : %d", rc);
1180+
dev_err(cxl_mbox->host, "Failed to get security state : %d", rc);
11801181
return rc;
11811182
}
11821183

@@ -1193,9 +1194,9 @@ static int __cxl_mem_sanitize(struct cxl_memdev_state *mds, u16 cmd)
11931194
sec_out & CXL_PMEM_SEC_STATE_LOCKED)
11941195
return -EINVAL;
11951196

1196-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
1197+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
11971198
if (rc < 0) {
1198-
dev_err(cxlds->dev, "Failed to sanitize device : %d", rc);
1199+
dev_err(cxl_mbox->host, "Failed to sanitize device : %d", rc);
11991200
return rc;
12001201
}
12011202

@@ -1309,6 +1310,7 @@ EXPORT_SYMBOL_NS_GPL(cxl_mem_create_range_info, CXL);
13091310

13101311
int cxl_set_timestamp(struct cxl_memdev_state *mds)
13111312
{
1313+
struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
13121314
struct cxl_mbox_cmd mbox_cmd;
13131315
struct cxl_mbox_set_timestamp_in pi;
13141316
int rc;
@@ -1320,7 +1322,7 @@ int cxl_set_timestamp(struct cxl_memdev_state *mds)
13201322
.payload_in = &pi,
13211323
};
13221324

1323-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
1325+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
13241326
/*
13251327
* Command is optional. Devices may have another way of providing
13261328
* a timestamp, or may return all 0s in timestamp fields.
@@ -1337,7 +1339,7 @@ int cxl_mem_get_poison(struct cxl_memdev *cxlmd, u64 offset, u64 len,
13371339
struct cxl_region *cxlr)
13381340
{
13391341
struct cxl_memdev_state *mds = to_cxl_memdev_state(cxlmd->cxlds);
1340-
struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
1342+
struct cxl_mailbox *cxl_mbox = &cxlmd->cxlds->cxl_mbox;
13411343
struct cxl_mbox_poison_out *po;
13421344
struct cxl_mbox_poison_in pi;
13431345
int nr_records = 0;
@@ -1361,7 +1363,7 @@ int cxl_mem_get_poison(struct cxl_memdev *cxlmd, u64 offset, u64 len,
13611363
.min_out = struct_size(po, record, 0),
13621364
};
13631365

1364-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
1366+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
13651367
if (rc)
13661368
break;
13671369

drivers/cxl/core/memdev.c

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ static int cxl_validate_poison_dpa(struct cxl_memdev *cxlmd, u64 dpa)
278278

279279
int cxl_inject_poison(struct cxl_memdev *cxlmd, u64 dpa)
280280
{
281-
struct cxl_memdev_state *mds = to_cxl_memdev_state(cxlmd->cxlds);
281+
struct cxl_mailbox *cxl_mbox = &cxlmd->cxlds->cxl_mbox;
282282
struct cxl_mbox_inject_poison inject;
283283
struct cxl_poison_record record;
284284
struct cxl_mbox_cmd mbox_cmd;
@@ -308,13 +308,13 @@ int cxl_inject_poison(struct cxl_memdev *cxlmd, u64 dpa)
308308
.size_in = sizeof(inject),
309309
.payload_in = &inject,
310310
};
311-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
311+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
312312
if (rc)
313313
goto out;
314314

315315
cxlr = cxl_dpa_to_region(cxlmd, dpa);
316316
if (cxlr)
317-
dev_warn_once(mds->cxlds.dev,
317+
dev_warn_once(cxl_mbox->host,
318318
"poison inject dpa:%#llx region: %s\n", dpa,
319319
dev_name(&cxlr->dev));
320320

@@ -333,7 +333,7 @@ EXPORT_SYMBOL_NS_GPL(cxl_inject_poison, CXL);
333333

334334
int cxl_clear_poison(struct cxl_memdev *cxlmd, u64 dpa)
335335
{
336-
struct cxl_memdev_state *mds = to_cxl_memdev_state(cxlmd->cxlds);
336+
struct cxl_mailbox *cxl_mbox = &cxlmd->cxlds->cxl_mbox;
337337
struct cxl_mbox_clear_poison clear;
338338
struct cxl_poison_record record;
339339
struct cxl_mbox_cmd mbox_cmd;
@@ -372,13 +372,13 @@ int cxl_clear_poison(struct cxl_memdev *cxlmd, u64 dpa)
372372
.payload_in = &clear,
373373
};
374374

375-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
375+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
376376
if (rc)
377377
goto out;
378378

379379
cxlr = cxl_dpa_to_region(cxlmd, dpa);
380380
if (cxlr)
381-
dev_warn_once(mds->cxlds.dev,
381+
dev_warn_once(cxl_mbox->host,
382382
"poison clear dpa:%#llx region: %s\n", dpa,
383383
dev_name(&cxlr->dev));
384384

@@ -715,6 +715,7 @@ static int cxl_memdev_release_file(struct inode *inode, struct file *file)
715715
*/
716716
static int cxl_mem_get_fw_info(struct cxl_memdev_state *mds)
717717
{
718+
struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
718719
struct cxl_mbox_get_fw_info info;
719720
struct cxl_mbox_cmd mbox_cmd;
720721
int rc;
@@ -725,7 +726,7 @@ static int cxl_mem_get_fw_info(struct cxl_memdev_state *mds)
725726
.payload_out = &info,
726727
};
727728

728-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
729+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
729730
if (rc < 0)
730731
return rc;
731732

@@ -749,6 +750,7 @@ static int cxl_mem_get_fw_info(struct cxl_memdev_state *mds)
749750
*/
750751
static int cxl_mem_activate_fw(struct cxl_memdev_state *mds, int slot)
751752
{
753+
struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
752754
struct cxl_mbox_activate_fw activate;
753755
struct cxl_mbox_cmd mbox_cmd;
754756

@@ -765,7 +767,7 @@ static int cxl_mem_activate_fw(struct cxl_memdev_state *mds, int slot)
765767
activate.action = CXL_FW_ACTIVATE_OFFLINE;
766768
activate.slot = slot;
767769

768-
return cxl_internal_send_cmd(mds, &mbox_cmd);
770+
return cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
769771
}
770772

771773
/**
@@ -780,6 +782,7 @@ static int cxl_mem_activate_fw(struct cxl_memdev_state *mds, int slot)
780782
*/
781783
static int cxl_mem_abort_fw_xfer(struct cxl_memdev_state *mds)
782784
{
785+
struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
783786
struct cxl_mbox_transfer_fw *transfer;
784787
struct cxl_mbox_cmd mbox_cmd;
785788
int rc;
@@ -799,7 +802,7 @@ static int cxl_mem_abort_fw_xfer(struct cxl_memdev_state *mds)
799802

800803
transfer->action = CXL_FW_TRANSFER_ACTION_ABORT;
801804

802-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
805+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
803806
kfree(transfer);
804807
return rc;
805808
}
@@ -924,7 +927,7 @@ static enum fw_upload_err cxl_fw_write(struct fw_upload *fwl, const u8 *data,
924927
.poll_count = 30,
925928
};
926929

927-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
930+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
928931
if (rc < 0) {
929932
rc = FW_UPLOAD_ERR_RW_ERROR;
930933
goto out_free;

drivers/cxl/cxlmem.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -811,7 +811,7 @@ enum {
811811
CXL_PMEM_SEC_PASS_USER,
812812
};
813813

814-
int cxl_internal_send_cmd(struct cxl_memdev_state *mds,
814+
int cxl_internal_send_cmd(struct cxl_mailbox *cxl_mbox,
815815
struct cxl_mbox_cmd *cmd);
816816
int cxl_dev_state_identify(struct cxl_memdev_state *mds);
817817
int cxl_await_media_ready(struct cxl_dev_state *cxlds);

drivers/cxl/pci.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -655,14 +655,15 @@ static int cxl_event_req_irq(struct cxl_dev_state *cxlds, u8 setting)
655655
static int cxl_event_get_int_policy(struct cxl_memdev_state *mds,
656656
struct cxl_event_interrupt_policy *policy)
657657
{
658+
struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
658659
struct cxl_mbox_cmd mbox_cmd = {
659660
.opcode = CXL_MBOX_OP_GET_EVT_INT_POLICY,
660661
.payload_out = policy,
661662
.size_out = sizeof(*policy),
662663
};
663664
int rc;
664665

665-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
666+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
666667
if (rc < 0)
667668
dev_err(mds->cxlds.dev,
668669
"Failed to get event interrupt policy : %d", rc);
@@ -673,6 +674,7 @@ static int cxl_event_get_int_policy(struct cxl_memdev_state *mds,
673674
static int cxl_event_config_msgnums(struct cxl_memdev_state *mds,
674675
struct cxl_event_interrupt_policy *policy)
675676
{
677+
struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
676678
struct cxl_mbox_cmd mbox_cmd;
677679
int rc;
678680

@@ -689,7 +691,7 @@ static int cxl_event_config_msgnums(struct cxl_memdev_state *mds,
689691
.size_in = sizeof(*policy),
690692
};
691693

692-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
694+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
693695
if (rc < 0) {
694696
dev_err(mds->cxlds.dev, "Failed to set event interrupt policy : %d",
695697
rc);

drivers/cxl/pmem.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ static int cxl_pmem_get_config_data(struct cxl_memdev_state *mds,
120120
struct nd_cmd_get_config_data_hdr *cmd,
121121
unsigned int buf_len)
122122
{
123+
struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
123124
struct cxl_mbox_get_lsa get_lsa;
124125
struct cxl_mbox_cmd mbox_cmd;
125126
int rc;
@@ -141,7 +142,7 @@ static int cxl_pmem_get_config_data(struct cxl_memdev_state *mds,
141142
.payload_out = cmd->out_buf,
142143
};
143144

144-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
145+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
145146
cmd->status = 0;
146147

147148
return rc;
@@ -151,6 +152,7 @@ static int cxl_pmem_set_config_data(struct cxl_memdev_state *mds,
151152
struct nd_cmd_set_config_hdr *cmd,
152153
unsigned int buf_len)
153154
{
155+
struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
154156
struct cxl_mbox_set_lsa *set_lsa;
155157
struct cxl_mbox_cmd mbox_cmd;
156158
int rc;
@@ -177,7 +179,7 @@ static int cxl_pmem_set_config_data(struct cxl_memdev_state *mds,
177179
.size_in = struct_size(set_lsa, data, cmd->in_length),
178180
};
179181

180-
rc = cxl_internal_send_cmd(mds, &mbox_cmd);
182+
rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
181183

182184
/*
183185
* Set "firmware" status (4-packed bytes at the end of the input

0 commit comments

Comments
 (0)