Re: [BUG -next] ./usr/include/cxl/features.h:11:10: fatal error: uuid/uuid.h: No such file or directory
From: Dan Williams
Date: Fri Mar 28 2025 - 19:26:50 EST
Paul E. McKenney wrote:
[..]
> > > Making the above change got me this:
> > >
> > > usr/include/cxl/features.h:59:9: error: unknown type name ‘uuid_t’
> > I wasn't able to hit that with allmodconfig on x86 with a Fedora 41 build setup. What is the specific command lines you are using?
>
> make clean
> make allmodconfig
> make -j$N
>
> Though encapsulated as follows:
>
> tools/testing/selftests/rcutorture/bin/torture.sh --do-none --do-allmodconfig
The problem is that uuid_t is not defined for uapi headers to reuse.
Perhaps checkpatch should be checking for uuid_t in uapi headers going
forward.
For now the following builds for me, but it is a quite a mess to undo
the assumption that that the hardware object definitions can not use
uuid_t:
-- 8< --
diff --git a/drivers/cxl/core/features.c b/drivers/cxl/core/features.c
index f4daefe3180e..d626dd7c5fbf 100644
--- a/drivers/cxl/core/features.c
+++ b/drivers/cxl/core/features.c
@@ -33,7 +33,11 @@ static bool is_cxl_feature_exclusive_by_uuid(const uuid_t *uuid)
static bool is_cxl_feature_exclusive(struct cxl_feat_entry *entry)
{
- return is_cxl_feature_exclusive_by_uuid(&entry->uuid);
+ uuid_t uuid;
+
+ import_uuid(&uuid, entry->uuid);
+
+ return is_cxl_feature_exclusive_by_uuid(&uuid);
}
inline struct cxl_features_state *to_cxlfs(struct cxl_dev_state *cxlds)
@@ -228,7 +232,7 @@ size_t cxl_get_feature(struct cxl_mailbox *cxl_mbox, const uuid_t *feat_uuid,
return 0;
size_out = min(feat_out_size, cxl_mbox->payload_size);
- uuid_copy(&pi.uuid, feat_uuid);
+ export_uuid(pi.uuid, feat_uuid);
pi.selection = selection;
do {
data_to_rd_size = min(feat_out_size - data_rcvd_size,
@@ -282,7 +286,7 @@ int cxl_set_feature(struct cxl_mailbox *cxl_mbox,
if (!pi)
return -ENOMEM;
- uuid_copy(&pi->uuid, feat_uuid);
+ export_uuid(pi->uuid, feat_uuid);
pi->version = feat_version;
feat_flag &= ~CXL_SET_FEAT_FLAG_DATA_TRANSFER_MASK;
feat_flag |= CXL_SET_FEAT_FLAG_DATA_SAVED_ACROSS_RESET;
@@ -360,16 +364,19 @@ get_support_feature_info(struct cxl_features_state *cxlfs,
const struct fwctl_rpc_cxl *rpc_in)
{
struct cxl_feat_entry *feat;
- const uuid_t *uuid;
+ uuid_t in_uuid;
- if (rpc_in->op_size < sizeof(uuid))
+ if (rpc_in->op_size < sizeof(in_uuid))
return ERR_PTR(-EINVAL);
- uuid = &rpc_in->set_feat_in.uuid;
+ import_uuid(&in_uuid, rpc_in->set_feat_in.uuid);
for (int i = 0; i < cxlfs->entries->num_features; i++) {
+ uuid_t feat_uuid;
+
feat = &cxlfs->entries->ent[i];
- if (uuid_equal(uuid, &feat->uuid))
+ import_uuid(&feat_uuid, feat->uuid);
+ if (uuid_equal(&in_uuid, &feat_uuid))
return feat;
}
@@ -461,6 +468,7 @@ static void *cxlctl_get_feature(struct cxl_features_state *cxlfs,
const struct cxl_mbox_get_feat_in *feat_in;
u16 offset, count, return_code;
size_t out_size = *out_len;
+ uuid_t uuid;
if (rpc_in->op_size != sizeof(*feat_in))
return ERR_PTR(-EINVAL);
@@ -477,9 +485,10 @@ static void *cxlctl_get_feature(struct cxl_features_state *cxlfs,
if (!rpc_out)
return ERR_PTR(-ENOMEM);
- out_size = cxl_get_feature(cxl_mbox, &feat_in->uuid,
- feat_in->selection, rpc_out->payload,
- count, offset, &return_code);
+ import_uuid(&uuid, feat_in->uuid);
+ out_size = cxl_get_feature(cxl_mbox, &uuid, feat_in->selection,
+ rpc_out->payload, count, offset,
+ &return_code);
*out_len = sizeof(struct fwctl_rpc_cxl_out);
if (!out_size) {
rpc_out->size = 0;
@@ -502,6 +511,7 @@ static void *cxlctl_set_feature(struct cxl_features_state *cxlfs,
const struct cxl_mbox_set_feat_in *feat_in;
size_t out_size, data_size;
u16 offset, return_code;
+ uuid_t uuid;
u32 flags;
int rc;
@@ -510,7 +520,8 @@ static void *cxlctl_set_feature(struct cxl_features_state *cxlfs,
feat_in = &rpc_in->set_feat_in;
- if (is_cxl_feature_exclusive_by_uuid(&feat_in->uuid))
+ import_uuid(&uuid, feat_in->uuid);
+ if (is_cxl_feature_exclusive_by_uuid(&uuid))
return ERR_PTR(-EPERM);
offset = le16_to_cpu(feat_in->offset);
@@ -525,9 +536,9 @@ static void *cxlctl_set_feature(struct cxl_features_state *cxlfs,
rpc_out->size = 0;
data_size = rpc_in->op_size - sizeof(feat_in->hdr);
- rc = cxl_set_feature(cxl_mbox, &feat_in->uuid,
- feat_in->version, feat_in->feat_data,
- data_size, flags, offset, &return_code);
+ rc = cxl_set_feature(cxl_mbox, &uuid, feat_in->version,
+ feat_in->feat_data, data_size, flags, offset,
+ &return_code);
if (rc) {
rpc_out->retval = return_code;
return no_free_ptr(rpc_out);
diff --git a/include/uapi/cxl/features.h b/include/uapi/cxl/features.h
index d6db8984889f..1e3323854994 100644
--- a/include/uapi/cxl/features.h
+++ b/include/uapi/cxl/features.h
@@ -8,11 +8,6 @@
#define _UAPI_CXL_FEATURES_H_
#include <linux/types.h>
-#ifndef __KERNEL__
-#include <uuid/uuid.h>
-#else
-#include <linux/uuid.h>
-#endif
/*
* struct cxl_mbox_get_sup_feats_in - Get Supported Features input
@@ -60,7 +55,7 @@ struct cxl_mbox_get_sup_feats_in {
* Get Supported Features Supported Feature Entry
*/
struct cxl_feat_entry {
- uuid_t uuid;
+ __u8 uuid[16];
__le16 id;
__le16 get_feat_size;
__le16 set_feat_size;
@@ -110,7 +105,7 @@ struct cxl_mbox_get_sup_feats_out {
* CXL spec r3.2 section 8.2.9.6.2 Table 8-99
*/
struct cxl_mbox_get_feat_in {
- uuid_t uuid;
+ __u8 uuid[16];
__le16 offset;
__le16 count;
__u8 selection;
@@ -143,7 +138,7 @@ enum cxl_get_feat_selection {
*/
struct cxl_mbox_set_feat_in {
__struct_group(cxl_mbox_set_feat_hdr, hdr, /* no attrs */,
- uuid_t uuid;
+ __u8 uuid[16];
__le32 flags;
__le16 offset;
__u8 version;
diff --git a/tools/testing/cxl/test/mem.c b/tools/testing/cxl/test/mem.c
index f2957a3e36fe..d0276ab3a92f 100644
--- a/tools/testing/cxl/test/mem.c
+++ b/tools/testing/cxl/test/mem.c
@@ -1397,7 +1397,7 @@ static int mock_activate_fw(struct cxl_mockmem_data *mdata,
static void fill_feature_vendor_test(struct cxl_feat_entry *feat)
{
- feat->uuid = CXL_VENDOR_FEATURE_TEST;
+ export_uuid(feat->uuid, &CXL_VENDOR_FEATURE_TEST);
feat->id = 0;
feat->get_feat_size = cpu_to_le16(0x4);
feat->set_feat_size = cpu_to_le16(0x4);
@@ -1441,8 +1441,10 @@ static int mock_get_feature(struct cxl_mockmem_data *mdata,
struct cxl_mbox_cmd *cmd)
{
struct cxl_mbox_get_feat_in *input = cmd->payload_in;
+ uuid_t in_uuid;
- if (uuid_equal(&input->uuid, &CXL_VENDOR_FEATURE_TEST))
+ import_uuid(&in_uuid, input->uuid);
+ if (uuid_equal(&in_uuid, &CXL_VENDOR_FEATURE_TEST))
return mock_get_test_feature(mdata, cmd);
cmd->return_code = CXL_MBOX_CMD_RC_UNSUPPORTED;
@@ -1485,8 +1487,10 @@ static int mock_set_feature(struct cxl_mockmem_data *mdata,
struct cxl_mbox_cmd *cmd)
{
struct cxl_mbox_set_feat_in *input = cmd->payload_in;
+ uuid_t in_uuid;
- if (uuid_equal(&input->hdr.uuid, &CXL_VENDOR_FEATURE_TEST))
+ import_uuid(&in_uuid, input->hdr.uuid);
+ if (uuid_equal(&in_uuid, &CXL_VENDOR_FEATURE_TEST))
return mock_set_test_feature(mdata, cmd);
cmd->return_code = CXL_MBOX_CMD_RC_UNSUPPORTED;