cxl fixes for 5.19-rc6
- Update MAINTAINERS for Ben's email - Fix cleanup of port devices on failure to probe driver - Fix endianness in get/set LSA mailbox command structures - Fix memregion_free() fallback definition - Fix missing variable payload checks in CXL cmd size validation -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQT9vPEBxh63bwxRYEEPzq5USduLdgUCYsiAcQAKCRAPzq5USduL duFHAP9Szd4QqD4hrqjkUeAHqwm6Sa9xgReB+Pbk3VuMbR25YwD9FhLA5fy9UL7Q oG8srdh0SqTB/kdOs2hnHUTEnonBGAw= =fso6 -----END PGP SIGNATURE----- Merge tag 'cxl-fixes-for-5.19-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/cxl/cxl Pull cxl fixes from Vishal Verma: - Update MAINTAINERS for Ben's email - Fix cleanup of port devices on failure to probe driver - Fix endianness in get/set LSA mailbox command structures - Fix memregion_free() fallback definition - Fix missing variable payload checks in CXL cmd size validation * tag 'cxl-fixes-for-5.19-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/cxl/cxl: cxl/mbox: Fix missing variable payload checks in cmd size validation memregion: Fix memregion_free() fallback definition cxl/mbox: Use __le32 in get,set_lsa mailbox structures cxl/core: Use is_endpoint_decoder cxl: Fix cleanup of port devices on failure to probe driver. MAINTAINERS: Update Ben's email address
This commit is contained in:
commit
483e4a1d83
3
.mailmap
3
.mailmap
|
@ -64,6 +64,9 @@ Bart Van Assche <bvanassche@acm.org> <bart.vanassche@sandisk.com>
|
|||
Bart Van Assche <bvanassche@acm.org> <bart.vanassche@wdc.com>
|
||||
Ben Gardner <bgardner@wabtec.com>
|
||||
Ben M Cahill <ben.m.cahill@intel.com>
|
||||
Ben Widawsky <bwidawsk@kernel.org> <ben@bwidawsk.net>
|
||||
Ben Widawsky <bwidawsk@kernel.org> <ben.widawsky@intel.com>
|
||||
Ben Widawsky <bwidawsk@kernel.org> <benjamin.widawsky@intel.com>
|
||||
Björn Steinbrink <B.Steinbrink@gmx.de>
|
||||
Björn Töpel <bjorn@kernel.org> <bjorn.topel@gmail.com>
|
||||
Björn Töpel <bjorn@kernel.org> <bjorn.topel@intel.com>
|
||||
|
|
|
@ -5101,7 +5101,7 @@ COMPUTE EXPRESS LINK (CXL)
|
|||
M: Alison Schofield <alison.schofield@intel.com>
|
||||
M: Vishal Verma <vishal.l.verma@intel.com>
|
||||
M: Ira Weiny <ira.weiny@intel.com>
|
||||
M: Ben Widawsky <ben.widawsky@intel.com>
|
||||
M: Ben Widawsky <bwidawsk@kernel.org>
|
||||
M: Dan Williams <dan.j.williams@intel.com>
|
||||
L: linux-cxl@vger.kernel.org
|
||||
S: Maintained
|
||||
|
|
|
@ -197,7 +197,7 @@ static int init_hdm_decoder(struct cxl_port *port, struct cxl_decoder *cxld,
|
|||
else
|
||||
cxld->target_type = CXL_DECODER_ACCELERATOR;
|
||||
|
||||
if (is_cxl_endpoint(to_cxl_port(cxld->dev.parent)))
|
||||
if (is_endpoint_decoder(&cxld->dev))
|
||||
return 0;
|
||||
|
||||
target_list.value =
|
||||
|
|
|
@ -355,11 +355,13 @@ static int cxl_to_mem_cmd(struct cxl_mem_command *mem_cmd,
|
|||
return -EBUSY;
|
||||
|
||||
/* Check the input buffer is the expected size */
|
||||
if (info->size_in != send_cmd->in.size)
|
||||
if ((info->size_in != CXL_VARIABLE_PAYLOAD) &&
|
||||
(info->size_in != send_cmd->in.size))
|
||||
return -ENOMEM;
|
||||
|
||||
/* Check the output buffer is at least large enough */
|
||||
if (send_cmd->out.size < info->size_out)
|
||||
if ((info->size_out != CXL_VARIABLE_PAYLOAD) &&
|
||||
(send_cmd->out.size < info->size_out))
|
||||
return -ENOMEM;
|
||||
|
||||
*mem_cmd = (struct cxl_mem_command) {
|
||||
|
|
|
@ -272,7 +272,7 @@ static const struct device_type cxl_decoder_root_type = {
|
|||
.groups = cxl_decoder_root_attribute_groups,
|
||||
};
|
||||
|
||||
static bool is_endpoint_decoder(struct device *dev)
|
||||
bool is_endpoint_decoder(struct device *dev)
|
||||
{
|
||||
return dev->type == &cxl_decoder_endpoint_type;
|
||||
}
|
||||
|
|
|
@ -340,6 +340,7 @@ struct cxl_dport *cxl_find_dport_by_dev(struct cxl_port *port,
|
|||
|
||||
struct cxl_decoder *to_cxl_decoder(struct device *dev);
|
||||
bool is_root_decoder(struct device *dev);
|
||||
bool is_endpoint_decoder(struct device *dev);
|
||||
bool is_cxl_decoder(struct device *dev);
|
||||
struct cxl_decoder *cxl_root_decoder_alloc(struct cxl_port *port,
|
||||
unsigned int nr_targets);
|
||||
|
|
|
@ -300,13 +300,13 @@ struct cxl_mbox_identify {
|
|||
} __packed;
|
||||
|
||||
struct cxl_mbox_get_lsa {
|
||||
u32 offset;
|
||||
u32 length;
|
||||
__le32 offset;
|
||||
__le32 length;
|
||||
} __packed;
|
||||
|
||||
struct cxl_mbox_set_lsa {
|
||||
u32 offset;
|
||||
u32 reserved;
|
||||
__le32 offset;
|
||||
__le32 reserved;
|
||||
u8 data[];
|
||||
} __packed;
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ static int create_endpoint(struct cxl_memdev *cxlmd,
|
|||
{
|
||||
struct cxl_dev_state *cxlds = cxlmd->cxlds;
|
||||
struct cxl_port *endpoint;
|
||||
int rc;
|
||||
|
||||
endpoint = devm_cxl_add_port(&parent_port->dev, &cxlmd->dev,
|
||||
cxlds->component_reg_phys, parent_port);
|
||||
|
@ -37,13 +38,17 @@ static int create_endpoint(struct cxl_memdev *cxlmd,
|
|||
|
||||
dev_dbg(&cxlmd->dev, "add: %s\n", dev_name(&endpoint->dev));
|
||||
|
||||
rc = cxl_endpoint_autoremove(cxlmd, endpoint);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
if (!endpoint->dev.driver) {
|
||||
dev_err(&cxlmd->dev, "%s failed probe\n",
|
||||
dev_name(&endpoint->dev));
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
return cxl_endpoint_autoremove(cxlmd, endpoint);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void enable_suspend(void *data)
|
||||
|
|
|
@ -108,8 +108,8 @@ static int cxl_pmem_get_config_data(struct cxl_dev_state *cxlds,
|
|||
return -EINVAL;
|
||||
|
||||
get_lsa = (struct cxl_mbox_get_lsa) {
|
||||
.offset = cmd->in_offset,
|
||||
.length = cmd->in_length,
|
||||
.offset = cpu_to_le32(cmd->in_offset),
|
||||
.length = cpu_to_le32(cmd->in_length),
|
||||
};
|
||||
|
||||
rc = cxl_mbox_send_cmd(cxlds, CXL_MBOX_OP_GET_LSA, &get_lsa,
|
||||
|
@ -139,7 +139,7 @@ static int cxl_pmem_set_config_data(struct cxl_dev_state *cxlds,
|
|||
return -ENOMEM;
|
||||
|
||||
*set_lsa = (struct cxl_mbox_set_lsa) {
|
||||
.offset = cmd->in_offset,
|
||||
.offset = cpu_to_le32(cmd->in_offset),
|
||||
};
|
||||
memcpy(set_lsa->data, cmd->in_buf, cmd->in_length);
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ static inline int memregion_alloc(gfp_t gfp)
|
|||
{
|
||||
return -ENOMEM;
|
||||
}
|
||||
void memregion_free(int id)
|
||||
static inline void memregion_free(int id)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue