Message ID | 20240812122312.1567046-1-jani.nikula@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [RESEND,1/3] drm/mst: switch to guid_t type for GUID | expand |
On Mon, Aug 12, 2024 at 03:23:10PM +0300, Jani Nikula wrote: > The kernel has a guid_t type for GUIDs. Switch to using it, but avoid > any functional changes here. > > Signed-off-by: Jani Nikula <jani.nikula@intel.com> I didn't cross-check everything, I'll trust the compiler on this. But functionally lgtm Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Reading code a bit I did wonder whether we could have send/receive macros that just work for compile-time statically sized types ... but not even kmalloc is there yet I think, at least haven't seen anything. -Sima > --- > .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +- > drivers/gpu/drm/display/drm_dp_mst_topology.c | 67 +++++++++++-------- > include/drm/display/drm_dp_mst_helper.h | 12 ++-- > 3 files changed, 45 insertions(+), 36 deletions(-) > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > index 7e7929f24ae4..72c10fc2c890 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > @@ -2610,7 +2610,7 @@ static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr) > } > } > > - memcpy(mgr->mst_primary->guid, guid, 16); > + import_guid(&mgr->mst_primary->guid, guid); > > out_fail: > mutex_unlock(&mgr->lock); > diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c > index 379a449a28a2..39f1dc45004e 100644 > --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c > +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c > @@ -89,7 +89,7 @@ static int drm_dp_send_enum_path_resources(struct drm_dp_mst_topology_mgr *mgr, > struct drm_dp_mst_branch *mstb, > struct drm_dp_mst_port *port); > static bool drm_dp_validate_guid(struct drm_dp_mst_topology_mgr *mgr, > - u8 *guid); > + guid_t *guid); > > static int drm_dp_mst_register_i2c_bus(struct drm_dp_mst_port *port); > static void drm_dp_mst_unregister_i2c_bus(struct drm_dp_mst_port *port); > @@ -801,7 +801,7 @@ static bool drm_dp_sideband_parse_link_address(const struct drm_dp_mst_topology_ > int idx = 1; > int i; > > - memcpy(repmsg->u.link_addr.guid, &raw->msg[idx], 16); > + import_guid(&repmsg->u.link_addr.guid, &raw->msg[idx]); > idx += 16; > repmsg->u.link_addr.nports = raw->msg[idx] & 0xf; > idx++; > @@ -829,7 +829,7 @@ static bool drm_dp_sideband_parse_link_address(const struct drm_dp_mst_topology_ > idx++; > if (idx > raw->curlen) > goto fail_len; > - memcpy(repmsg->u.link_addr.ports[i].peer_guid, &raw->msg[idx], 16); > + import_guid(&repmsg->u.link_addr.ports[i].peer_guid, &raw->msg[idx]); > idx += 16; > if (idx > raw->curlen) > goto fail_len; > @@ -1029,7 +1029,7 @@ static bool drm_dp_sideband_parse_reply(const struct drm_dp_mst_topology_mgr *mg > msg->req_type = (raw->msg[0] & 0x7f); > > if (msg->reply_type == DP_SIDEBAND_REPLY_NAK) { > - memcpy(msg->u.nak.guid, &raw->msg[1], 16); > + import_guid(&msg->u.nak.guid, &raw->msg[1]); > msg->u.nak.reason = raw->msg[17]; > msg->u.nak.nak_data = raw->msg[18]; > return false; > @@ -1078,7 +1078,7 @@ drm_dp_sideband_parse_connection_status_notify(const struct drm_dp_mst_topology_ > if (idx > raw->curlen) > goto fail_len; > > - memcpy(msg->u.conn_stat.guid, &raw->msg[idx], 16); > + import_guid(&msg->u.conn_stat.guid, &raw->msg[idx]); > idx += 16; > if (idx > raw->curlen) > goto fail_len; > @@ -1107,7 +1107,7 @@ static bool drm_dp_sideband_parse_resource_status_notify(const struct drm_dp_mst > if (idx > raw->curlen) > goto fail_len; > > - memcpy(msg->u.resource_stat.guid, &raw->msg[idx], 16); > + import_guid(&msg->u.resource_stat.guid, &raw->msg[idx]); > idx += 16; > if (idx > raw->curlen) > goto fail_len; > @@ -2174,20 +2174,24 @@ ssize_t drm_dp_mst_dpcd_write(struct drm_dp_aux *aux, > offset, size, buffer); > } > > -static int drm_dp_check_mstb_guid(struct drm_dp_mst_branch *mstb, u8 *guid) > +static int drm_dp_check_mstb_guid(struct drm_dp_mst_branch *mstb, guid_t *guid) > { > int ret = 0; > > - memcpy(mstb->guid, guid, 16); > + guid_copy(&mstb->guid, guid); > + > + if (!drm_dp_validate_guid(mstb->mgr, &mstb->guid)) { > + u8 buf[UUID_SIZE]; > + > + export_guid(buf, &mstb->guid); > > - if (!drm_dp_validate_guid(mstb->mgr, mstb->guid)) { > if (mstb->port_parent) { > ret = drm_dp_send_dpcd_write(mstb->mgr, > mstb->port_parent, > - DP_GUID, 16, mstb->guid); > + DP_GUID, sizeof(buf), buf); > } else { > ret = drm_dp_dpcd_write(mstb->mgr->aux, > - DP_GUID, mstb->guid, 16); > + DP_GUID, buf, sizeof(buf)); > } > } > > @@ -2567,9 +2571,9 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_ > return mstb; > } > > -static struct drm_dp_mst_branch *get_mst_branch_device_by_guid_helper( > - struct drm_dp_mst_branch *mstb, > - const uint8_t *guid) > +static struct drm_dp_mst_branch * > +get_mst_branch_device_by_guid_helper(struct drm_dp_mst_branch *mstb, > + const guid_t *guid) > { > struct drm_dp_mst_branch *found_mstb; > struct drm_dp_mst_port *port; > @@ -2577,10 +2581,9 @@ static struct drm_dp_mst_branch *get_mst_branch_device_by_guid_helper( > if (!mstb) > return NULL; > > - if (memcmp(mstb->guid, guid, 16) == 0) > + if (guid_equal(&mstb->guid, guid)) > return mstb; > > - > list_for_each_entry(port, &mstb->ports, next) { > found_mstb = get_mst_branch_device_by_guid_helper(port->mstb, guid); > > @@ -2593,7 +2596,7 @@ static struct drm_dp_mst_branch *get_mst_branch_device_by_guid_helper( > > static struct drm_dp_mst_branch * > drm_dp_get_mst_branch_device_by_guid(struct drm_dp_mst_topology_mgr *mgr, > - const uint8_t *guid) > + const guid_t *guid) > { > struct drm_dp_mst_branch *mstb; > int ret; > @@ -2695,17 +2698,20 @@ static void drm_dp_mst_queue_probe_work(struct drm_dp_mst_topology_mgr *mgr) > } > > static bool drm_dp_validate_guid(struct drm_dp_mst_topology_mgr *mgr, > - u8 *guid) > + guid_t *guid) > { > u64 salt; > + u8 buf[UUID_SIZE]; > > - if (memchr_inv(guid, 0, 16)) > + if (!guid_is_null(guid)) > return true; > > salt = get_jiffies_64(); > > - memcpy(&guid[0], &salt, sizeof(u64)); > - memcpy(&guid[8], &salt, sizeof(u64)); > + memcpy(&buf[0], &salt, sizeof(u64)); > + memcpy(&buf[8], &salt, sizeof(u64)); > + > + import_guid(guid, buf); > > return false; > } > @@ -2945,7 +2951,7 @@ static int drm_dp_send_link_address(struct drm_dp_mst_topology_mgr *mgr, > drm_dbg_kms(mgr->dev, "link address reply: %d\n", reply->nports); > drm_dp_dump_link_address(mgr, reply); > > - ret = drm_dp_check_mstb_guid(mstb, reply->guid); > + ret = drm_dp_check_mstb_guid(mstb, &reply->guid); > if (ret) { > char buf[64]; > > @@ -3799,8 +3805,9 @@ EXPORT_SYMBOL(drm_dp_mst_topology_mgr_suspend); > int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr, > bool sync) > { > + u8 buf[UUID_SIZE]; > + guid_t guid; > int ret; > - u8 guid[16]; > > mutex_lock(&mgr->lock); > if (!mgr->mst_primary) > @@ -3821,13 +3828,15 @@ int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr, > } > > /* Some hubs forget their guids after they resume */ > - ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, guid, 16); > - if (ret != 16) { > + ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, buf, sizeof(buf)); > + if (ret != sizeof(buf)) { > drm_dbg_kms(mgr->dev, "dpcd read failed - undocked during suspend?\n"); > goto out_fail; > } > > - ret = drm_dp_check_mstb_guid(mgr->mst_primary, guid); > + import_guid(&guid, buf); > + > + ret = drm_dp_check_mstb_guid(mgr->mst_primary, &guid); > if (ret) { > drm_dbg_kms(mgr->dev, "check mstb failed - undocked during suspend?\n"); > goto out_fail; > @@ -4005,12 +4014,12 @@ drm_dp_mst_process_up_req(struct drm_dp_mst_topology_mgr *mgr, > bool hotplug = false, dowork = false; > > if (hdr->broadcast) { > - const u8 *guid = NULL; > + const guid_t *guid = NULL; > > if (msg->req_type == DP_CONNECTION_STATUS_NOTIFY) > - guid = msg->u.conn_stat.guid; > + guid = &msg->u.conn_stat.guid; > else if (msg->req_type == DP_RESOURCE_STATUS_NOTIFY) > - guid = msg->u.resource_stat.guid; > + guid = &msg->u.resource_stat.guid; > > if (guid) > mstb = drm_dp_get_mst_branch_device_by_guid(mgr, guid); > diff --git a/include/drm/display/drm_dp_mst_helper.h b/include/drm/display/drm_dp_mst_helper.h > index 02b037d3a93f..f6a1cbb0f600 100644 > --- a/include/drm/display/drm_dp_mst_helper.h > +++ b/include/drm/display/drm_dp_mst_helper.h > @@ -244,18 +244,18 @@ struct drm_dp_mst_branch { > bool link_address_sent; > > /* global unique identifier to identify branch devices */ > - u8 guid[16]; > + guid_t guid; > }; > > > struct drm_dp_nak_reply { > - u8 guid[16]; > + guid_t guid; > u8 reason; > u8 nak_data; > }; > > struct drm_dp_link_address_ack_reply { > - u8 guid[16]; > + guid_t guid; > u8 nports; > struct drm_dp_link_addr_reply_port { > bool input_port; > @@ -265,7 +265,7 @@ struct drm_dp_link_address_ack_reply { > bool ddps; > bool legacy_device_plug_status; > u8 dpcd_revision; > - u8 peer_guid[16]; > + guid_t peer_guid; > u8 num_sdp_streams; > u8 num_sdp_stream_sinks; > } ports[16]; > @@ -348,7 +348,7 @@ struct drm_dp_allocate_payload_ack_reply { > }; > > struct drm_dp_connection_status_notify { > - u8 guid[16]; > + guid_t guid; > u8 port_number; > bool legacy_device_plug_status; > bool displayport_device_plug_status; > @@ -425,7 +425,7 @@ struct drm_dp_query_payload { > > struct drm_dp_resource_status_notify { > u8 port_number; > - u8 guid[16]; > + guid_t guid; > u16 available_pbn; > }; > > -- > 2.39.2 >
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 7e7929f24ae4..72c10fc2c890 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -2610,7 +2610,7 @@ static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr) } } - memcpy(mgr->mst_primary->guid, guid, 16); + import_guid(&mgr->mst_primary->guid, guid); out_fail: mutex_unlock(&mgr->lock); diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c index 379a449a28a2..39f1dc45004e 100644 --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c @@ -89,7 +89,7 @@ static int drm_dp_send_enum_path_resources(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_branch *mstb, struct drm_dp_mst_port *port); static bool drm_dp_validate_guid(struct drm_dp_mst_topology_mgr *mgr, - u8 *guid); + guid_t *guid); static int drm_dp_mst_register_i2c_bus(struct drm_dp_mst_port *port); static void drm_dp_mst_unregister_i2c_bus(struct drm_dp_mst_port *port); @@ -801,7 +801,7 @@ static bool drm_dp_sideband_parse_link_address(const struct drm_dp_mst_topology_ int idx = 1; int i; - memcpy(repmsg->u.link_addr.guid, &raw->msg[idx], 16); + import_guid(&repmsg->u.link_addr.guid, &raw->msg[idx]); idx += 16; repmsg->u.link_addr.nports = raw->msg[idx] & 0xf; idx++; @@ -829,7 +829,7 @@ static bool drm_dp_sideband_parse_link_address(const struct drm_dp_mst_topology_ idx++; if (idx > raw->curlen) goto fail_len; - memcpy(repmsg->u.link_addr.ports[i].peer_guid, &raw->msg[idx], 16); + import_guid(&repmsg->u.link_addr.ports[i].peer_guid, &raw->msg[idx]); idx += 16; if (idx > raw->curlen) goto fail_len; @@ -1029,7 +1029,7 @@ static bool drm_dp_sideband_parse_reply(const struct drm_dp_mst_topology_mgr *mg msg->req_type = (raw->msg[0] & 0x7f); if (msg->reply_type == DP_SIDEBAND_REPLY_NAK) { - memcpy(msg->u.nak.guid, &raw->msg[1], 16); + import_guid(&msg->u.nak.guid, &raw->msg[1]); msg->u.nak.reason = raw->msg[17]; msg->u.nak.nak_data = raw->msg[18]; return false; @@ -1078,7 +1078,7 @@ drm_dp_sideband_parse_connection_status_notify(const struct drm_dp_mst_topology_ if (idx > raw->curlen) goto fail_len; - memcpy(msg->u.conn_stat.guid, &raw->msg[idx], 16); + import_guid(&msg->u.conn_stat.guid, &raw->msg[idx]); idx += 16; if (idx > raw->curlen) goto fail_len; @@ -1107,7 +1107,7 @@ static bool drm_dp_sideband_parse_resource_status_notify(const struct drm_dp_mst if (idx > raw->curlen) goto fail_len; - memcpy(msg->u.resource_stat.guid, &raw->msg[idx], 16); + import_guid(&msg->u.resource_stat.guid, &raw->msg[idx]); idx += 16; if (idx > raw->curlen) goto fail_len; @@ -2174,20 +2174,24 @@ ssize_t drm_dp_mst_dpcd_write(struct drm_dp_aux *aux, offset, size, buffer); } -static int drm_dp_check_mstb_guid(struct drm_dp_mst_branch *mstb, u8 *guid) +static int drm_dp_check_mstb_guid(struct drm_dp_mst_branch *mstb, guid_t *guid) { int ret = 0; - memcpy(mstb->guid, guid, 16); + guid_copy(&mstb->guid, guid); + + if (!drm_dp_validate_guid(mstb->mgr, &mstb->guid)) { + u8 buf[UUID_SIZE]; + + export_guid(buf, &mstb->guid); - if (!drm_dp_validate_guid(mstb->mgr, mstb->guid)) { if (mstb->port_parent) { ret = drm_dp_send_dpcd_write(mstb->mgr, mstb->port_parent, - DP_GUID, 16, mstb->guid); + DP_GUID, sizeof(buf), buf); } else { ret = drm_dp_dpcd_write(mstb->mgr->aux, - DP_GUID, mstb->guid, 16); + DP_GUID, buf, sizeof(buf)); } } @@ -2567,9 +2571,9 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_ return mstb; } -static struct drm_dp_mst_branch *get_mst_branch_device_by_guid_helper( - struct drm_dp_mst_branch *mstb, - const uint8_t *guid) +static struct drm_dp_mst_branch * +get_mst_branch_device_by_guid_helper(struct drm_dp_mst_branch *mstb, + const guid_t *guid) { struct drm_dp_mst_branch *found_mstb; struct drm_dp_mst_port *port; @@ -2577,10 +2581,9 @@ static struct drm_dp_mst_branch *get_mst_branch_device_by_guid_helper( if (!mstb) return NULL; - if (memcmp(mstb->guid, guid, 16) == 0) + if (guid_equal(&mstb->guid, guid)) return mstb; - list_for_each_entry(port, &mstb->ports, next) { found_mstb = get_mst_branch_device_by_guid_helper(port->mstb, guid); @@ -2593,7 +2596,7 @@ static struct drm_dp_mst_branch *get_mst_branch_device_by_guid_helper( static struct drm_dp_mst_branch * drm_dp_get_mst_branch_device_by_guid(struct drm_dp_mst_topology_mgr *mgr, - const uint8_t *guid) + const guid_t *guid) { struct drm_dp_mst_branch *mstb; int ret; @@ -2695,17 +2698,20 @@ static void drm_dp_mst_queue_probe_work(struct drm_dp_mst_topology_mgr *mgr) } static bool drm_dp_validate_guid(struct drm_dp_mst_topology_mgr *mgr, - u8 *guid) + guid_t *guid) { u64 salt; + u8 buf[UUID_SIZE]; - if (memchr_inv(guid, 0, 16)) + if (!guid_is_null(guid)) return true; salt = get_jiffies_64(); - memcpy(&guid[0], &salt, sizeof(u64)); - memcpy(&guid[8], &salt, sizeof(u64)); + memcpy(&buf[0], &salt, sizeof(u64)); + memcpy(&buf[8], &salt, sizeof(u64)); + + import_guid(guid, buf); return false; } @@ -2945,7 +2951,7 @@ static int drm_dp_send_link_address(struct drm_dp_mst_topology_mgr *mgr, drm_dbg_kms(mgr->dev, "link address reply: %d\n", reply->nports); drm_dp_dump_link_address(mgr, reply); - ret = drm_dp_check_mstb_guid(mstb, reply->guid); + ret = drm_dp_check_mstb_guid(mstb, &reply->guid); if (ret) { char buf[64]; @@ -3799,8 +3805,9 @@ EXPORT_SYMBOL(drm_dp_mst_topology_mgr_suspend); int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr, bool sync) { + u8 buf[UUID_SIZE]; + guid_t guid; int ret; - u8 guid[16]; mutex_lock(&mgr->lock); if (!mgr->mst_primary) @@ -3821,13 +3828,15 @@ int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr, } /* Some hubs forget their guids after they resume */ - ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, guid, 16); - if (ret != 16) { + ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, buf, sizeof(buf)); + if (ret != sizeof(buf)) { drm_dbg_kms(mgr->dev, "dpcd read failed - undocked during suspend?\n"); goto out_fail; } - ret = drm_dp_check_mstb_guid(mgr->mst_primary, guid); + import_guid(&guid, buf); + + ret = drm_dp_check_mstb_guid(mgr->mst_primary, &guid); if (ret) { drm_dbg_kms(mgr->dev, "check mstb failed - undocked during suspend?\n"); goto out_fail; @@ -4005,12 +4014,12 @@ drm_dp_mst_process_up_req(struct drm_dp_mst_topology_mgr *mgr, bool hotplug = false, dowork = false; if (hdr->broadcast) { - const u8 *guid = NULL; + const guid_t *guid = NULL; if (msg->req_type == DP_CONNECTION_STATUS_NOTIFY) - guid = msg->u.conn_stat.guid; + guid = &msg->u.conn_stat.guid; else if (msg->req_type == DP_RESOURCE_STATUS_NOTIFY) - guid = msg->u.resource_stat.guid; + guid = &msg->u.resource_stat.guid; if (guid) mstb = drm_dp_get_mst_branch_device_by_guid(mgr, guid); diff --git a/include/drm/display/drm_dp_mst_helper.h b/include/drm/display/drm_dp_mst_helper.h index 02b037d3a93f..f6a1cbb0f600 100644 --- a/include/drm/display/drm_dp_mst_helper.h +++ b/include/drm/display/drm_dp_mst_helper.h @@ -244,18 +244,18 @@ struct drm_dp_mst_branch { bool link_address_sent; /* global unique identifier to identify branch devices */ - u8 guid[16]; + guid_t guid; }; struct drm_dp_nak_reply { - u8 guid[16]; + guid_t guid; u8 reason; u8 nak_data; }; struct drm_dp_link_address_ack_reply { - u8 guid[16]; + guid_t guid; u8 nports; struct drm_dp_link_addr_reply_port { bool input_port; @@ -265,7 +265,7 @@ struct drm_dp_link_address_ack_reply { bool ddps; bool legacy_device_plug_status; u8 dpcd_revision; - u8 peer_guid[16]; + guid_t peer_guid; u8 num_sdp_streams; u8 num_sdp_stream_sinks; } ports[16]; @@ -348,7 +348,7 @@ struct drm_dp_allocate_payload_ack_reply { }; struct drm_dp_connection_status_notify { - u8 guid[16]; + guid_t guid; u8 port_number; bool legacy_device_plug_status; bool displayport_device_plug_status; @@ -425,7 +425,7 @@ struct drm_dp_query_payload { struct drm_dp_resource_status_notify { u8 port_number; - u8 guid[16]; + guid_t guid; u16 available_pbn; };
The kernel has a guid_t type for GUIDs. Switch to using it, but avoid any functional changes here. Signed-off-by: Jani Nikula <jani.nikula@intel.com> --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +- drivers/gpu/drm/display/drm_dp_mst_topology.c | 67 +++++++++++-------- include/drm/display/drm_dp_mst_helper.h | 12 ++-- 3 files changed, 45 insertions(+), 36 deletions(-)