* [PATCH] usb: Constify struct configfs_attribute pointers
@ 2026-11-07 4:23 Thomas Weißschuh
2026-11-07 4:27 ` sashiko-bot
0 siblings, 1 reply; 2+ messages in thread
From: Thomas Weißschuh @ 2026-11-07 4:23 UTC (permalink / raw)
To: Neill Kapron, Greg Kroah-Hartman
Cc: linux-usb, linux-kernel, Thomas Weißschuh
In preparation for the constification of configfs attributes, make the
pointers to struct configfs_attribute in drivers/usb/ const
and use the new ct_attrs_const field of struct config_item_type.
Skip f_tcm.c as its attributes are registered through the
scsi target subsystem and will constified as part of that.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
---
drivers/usb/gadget/configfs.c | 34 +++++++--------
drivers/usb/gadget/function/f_acm.c | 4 +-
drivers/usb/gadget/function/f_ecm.c | 4 +-
drivers/usb/gadget/function/f_eem.c | 4 +-
drivers/usb/gadget/function/f_fs.c | 4 +-
drivers/usb/gadget/function/f_hid.c | 4 +-
drivers/usb/gadget/function/f_loopback.c | 4 +-
drivers/usb/gadget/function/f_mass_storage.c | 8 ++--
drivers/usb/gadget/function/f_midi.c | 4 +-
drivers/usb/gadget/function/f_midi2.c | 12 +++---
drivers/usb/gadget/function/f_ncm.c | 4 +-
drivers/usb/gadget/function/f_obex.c | 4 +-
drivers/usb/gadget/function/f_phonet.c | 4 +-
drivers/usb/gadget/function/f_printer.c | 4 +-
drivers/usb/gadget/function/f_rndis.c | 4 +-
drivers/usb/gadget/function/f_serial.c | 4 +-
drivers/usb/gadget/function/f_sourcesink.c | 4 +-
drivers/usb/gadget/function/f_subset.c | 4 +-
drivers/usb/gadget/function/f_uac1.c | 4 +-
drivers/usb/gadget/function/f_uac1_legacy.c | 4 +-
drivers/usb/gadget/function/f_uac2.c | 4 +-
drivers/usb/gadget/function/uvc_configfs.c | 64 ++++++++++++++--------------
include/linux/usb/gadget_configfs.h | 2 +-
23 files changed, 96 insertions(+), 96 deletions(-)
diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
index 51df6d1d1487..6b684c2ffe1f 100644
--- a/drivers/usb/gadget/configfs.c
+++ b/drivers/usb/gadget/configfs.c
@@ -363,7 +363,7 @@ CONFIGFS_ATTR(gadget_dev_desc_, bcdUSB);
CONFIGFS_ATTR(gadget_dev_desc_, UDC);
CONFIGFS_ATTR(gadget_dev_desc_, max_speed);
-static struct configfs_attribute *gadget_root_attrs[] = {
+static const struct configfs_attribute *const gadget_root_attrs[] = {
&gadget_dev_desc_attr_bDeviceClass,
&gadget_dev_desc_attr_bDeviceSubClass,
&gadget_dev_desc_attr_bDeviceProtocol,
@@ -573,7 +573,7 @@ static ssize_t gadget_config_desc_bmAttributes_store(struct config_item *item,
CONFIGFS_ATTR(gadget_config_desc_, MaxPower);
CONFIGFS_ATTR(gadget_config_desc_, bmAttributes);
-static struct configfs_attribute *gadget_config_attrs[] = {
+static const struct configfs_attribute *const gadget_config_attrs[] = {
&gadget_config_desc_attr_MaxPower,
&gadget_config_desc_attr_bmAttributes,
NULL,
@@ -581,13 +581,13 @@ static struct configfs_attribute *gadget_config_attrs[] = {
static const struct config_item_type gadget_config_type = {
.ct_item_ops = &gadget_config_item_ops,
- .ct_attrs = gadget_config_attrs,
+ .ct_attrs_const = gadget_config_attrs,
.ct_owner = THIS_MODULE,
};
static const struct config_item_type gadget_root_type = {
.ct_item_ops = &gadget_root_item_ops,
- .ct_attrs = gadget_root_attrs,
+ .ct_attrs_const = gadget_root_attrs,
.ct_owner = THIS_MODULE,
};
@@ -675,7 +675,7 @@ static const struct config_item_type functions_type = {
GS_STRINGS_RW(gadget_config_name, configuration);
-static struct configfs_attribute *gadget_config_name_langid_attrs[] = {
+static const struct configfs_attribute *const gadget_config_name_langid_attrs[] = {
&gadget_config_name_attr_configuration,
NULL,
};
@@ -780,7 +780,7 @@ GS_STRINGS_RW(gadget_language, manufacturer);
GS_STRINGS_RW(gadget_language, product);
GS_STRINGS_RW(gadget_language, serialnumber);
-static struct configfs_attribute *gadget_language_langid_attrs[] = {
+static const struct configfs_attribute *const gadget_language_langid_attrs[] = {
&gadget_language_attr_manufacturer,
&gadget_language_attr_product,
&gadget_language_attr_serialnumber,
@@ -839,7 +839,7 @@ static ssize_t gadget_string_s_store(struct config_item *item, const char *page,
}
CONFIGFS_ATTR(gadget_string_, s);
-static struct configfs_attribute *gadget_string_attrs[] = {
+static const struct configfs_attribute *const gadget_string_attrs[] = {
&gadget_string_attr_id,
&gadget_string_attr_s,
NULL,
@@ -858,7 +858,7 @@ static const struct configfs_item_operations gadget_string_item_ops = {
static const struct config_item_type gadget_string_type = {
.ct_item_ops = &gadget_string_item_ops,
- .ct_attrs = gadget_string_attrs,
+ .ct_attrs_const = gadget_string_attrs,
.ct_owner = THIS_MODULE,
};
@@ -909,7 +909,7 @@ static const struct configfs_group_operations gadget_language_langid_group_ops =
static const struct config_item_type gadget_language_type = {
.ct_item_ops = &gadget_language_langid_item_ops,
.ct_group_ops = &gadget_language_langid_group_ops,
- .ct_attrs = gadget_language_langid_attrs,
+ .ct_attrs_const = gadget_language_langid_attrs,
.ct_owner = THIS_MODULE,
};
@@ -1104,7 +1104,7 @@ CONFIGFS_ATTR(webusb_, bVendorCode);
CONFIGFS_ATTR(webusb_, bcdVersion);
CONFIGFS_ATTR(webusb_, landingPage);
-static struct configfs_attribute *webusb_attrs[] = {
+static const struct configfs_attribute *const webusb_attrs[] = {
&webusb_attr_use,
&webusb_attr_bcdVersion,
&webusb_attr_bVendorCode,
@@ -1113,7 +1113,7 @@ static struct configfs_attribute *webusb_attrs[] = {
};
static const struct config_item_type webusb_type = {
- .ct_attrs = webusb_attrs,
+ .ct_attrs_const = webusb_attrs,
.ct_owner = THIS_MODULE,
};
@@ -1211,7 +1211,7 @@ CONFIGFS_ATTR(os_desc_, use);
CONFIGFS_ATTR(os_desc_, b_vendor_code);
CONFIGFS_ATTR(os_desc_, qw_sign);
-static struct configfs_attribute *os_desc_attrs[] = {
+static const struct configfs_attribute *const os_desc_attrs[] = {
&os_desc_attr_use,
&os_desc_attr_b_vendor_code,
&os_desc_attr_qw_sign,
@@ -1273,7 +1273,7 @@ static const struct configfs_item_operations os_desc_ops = {
static const struct config_item_type os_desc_type = {
.ct_item_ops = &os_desc_ops,
- .ct_attrs = os_desc_attrs,
+ .ct_attrs_const = os_desc_attrs,
.ct_owner = THIS_MODULE,
};
@@ -1378,7 +1378,7 @@ static ssize_t ext_prop_data_store(struct config_item *item,
CONFIGFS_ATTR(ext_prop_, type);
CONFIGFS_ATTR(ext_prop_, data);
-static struct configfs_attribute *ext_prop_attrs[] = {
+static const struct configfs_attribute *const ext_prop_attrs[] = {
&ext_prop_attr_type,
&ext_prop_attr_data,
NULL,
@@ -1417,7 +1417,7 @@ static struct config_item *ext_prop_make(
desc = container_of(group, struct usb_os_desc, group);
ext_prop_type->ct_item_ops = &ext_prop_ops;
- ext_prop_type->ct_attrs = ext_prop_attrs;
+ ext_prop_type->ct_attrs_const = ext_prop_attrs;
ext_prop_type->ct_owner = desc->owner;
config_item_init_type_name(&ext_prop->item, name, ext_prop_type);
@@ -1516,7 +1516,7 @@ static ssize_t interf_grp_sub_compatible_id_store(struct config_item *item,
CONFIGFS_ATTR(interf_grp_, compatible_id);
CONFIGFS_ATTR(interf_grp_, sub_compatible_id);
-static struct configfs_attribute *interf_grp_attrs[] = {
+static const struct configfs_attribute *const interf_grp_attrs[] = {
&interf_grp_attr_compatible_id,
&interf_grp_attr_sub_compatible_id,
NULL
@@ -1550,7 +1550,7 @@ struct config_group *usb_os_desc_prepare_interf_dir(
configfs_add_default_group(os_desc_group, parent);
interface_type->ct_group_ops = &interf_grp_ops;
- interface_type->ct_attrs = interf_grp_attrs;
+ interface_type->ct_attrs_const = interf_grp_attrs;
interface_type->ct_owner = owner;
while (n_interf--) {
diff --git a/drivers/usb/gadget/function/f_acm.c b/drivers/usb/gadget/function/f_acm.c
index c628d02bfb1d..8dce1928df5c 100644
--- a/drivers/usb/gadget/function/f_acm.c
+++ b/drivers/usb/gadget/function/f_acm.c
@@ -852,7 +852,7 @@ static ssize_t f_acm_protocol_store(struct config_item *item,
CONFIGFS_ATTR(f_acm_, protocol);
-static struct configfs_attribute *acm_attrs[] = {
+static const struct configfs_attribute *const acm_attrs[] = {
#ifdef CONFIG_U_SERIAL_CONSOLE
&f_acm_attr_console,
#endif
@@ -863,7 +863,7 @@ static struct configfs_attribute *acm_attrs[] = {
static const struct config_item_type acm_func_type = {
.ct_item_ops = &acm_item_ops,
- .ct_attrs = acm_attrs,
+ .ct_attrs_const = acm_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_ecm.c b/drivers/usb/gadget/function/f_ecm.c
index e495bac4efeb..b49e409f3ee7 100644
--- a/drivers/usb/gadget/function/f_ecm.c
+++ b/drivers/usb/gadget/function/f_ecm.c
@@ -821,7 +821,7 @@ USB_ETHERNET_CONFIGFS_ITEM_ATTR_QMULT(ecm);
/* f_ecm_opts_ifname */
USB_ETHERNET_CONFIGFS_ITEM_ATTR_IFNAME(ecm);
-static struct configfs_attribute *ecm_attrs[] = {
+static const struct configfs_attribute *const ecm_attrs[] = {
&ecm_opts_attr_dev_addr,
&ecm_opts_attr_host_addr,
&ecm_opts_attr_qmult,
@@ -831,7 +831,7 @@ static struct configfs_attribute *ecm_attrs[] = {
static const struct config_item_type ecm_func_type = {
.ct_item_ops = &ecm_item_ops,
- .ct_attrs = ecm_attrs,
+ .ct_attrs_const = ecm_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_eem.c b/drivers/usb/gadget/function/f_eem.c
index ac37d7c1d168..aec8c89fb122 100644
--- a/drivers/usb/gadget/function/f_eem.c
+++ b/drivers/usb/gadget/function/f_eem.c
@@ -573,7 +573,7 @@ USB_ETHERNET_CONFIGFS_ITEM_ATTR_QMULT(eem);
/* f_eem_opts_ifname */
USB_ETHERNET_CONFIGFS_ITEM_ATTR_IFNAME(eem);
-static struct configfs_attribute *eem_attrs[] = {
+static const struct configfs_attribute *const eem_attrs[] = {
&eem_opts_attr_dev_addr,
&eem_opts_attr_host_addr,
&eem_opts_attr_qmult,
@@ -583,7 +583,7 @@ static struct configfs_attribute *eem_attrs[] = {
static const struct config_item_type eem_func_type = {
.ct_item_ops = &eem_item_ops,
- .ct_attrs = eem_attrs,
+ .ct_attrs_const = eem_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
index c64a268e98a4..cccd19bee51b 100644
--- a/drivers/usb/gadget/function/f_fs.c
+++ b/drivers/usb/gadget/function/f_fs.c
@@ -4117,7 +4117,7 @@ static ssize_t f_fs_opts_ready_show(struct config_item *item, char *page)
CONFIGFS_ATTR_RO(f_fs_opts_, ready);
-static struct configfs_attribute *ffs_attrs[] = {
+static const struct configfs_attribute *const ffs_attrs[] = {
&f_fs_opts_attr_ready,
NULL,
};
@@ -4135,7 +4135,7 @@ static const struct configfs_item_operations ffs_item_ops = {
static const struct config_item_type ffs_func_type = {
.ct_item_ops = &ffs_item_ops,
- .ct_attrs = ffs_attrs,
+ .ct_attrs_const = ffs_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_hid.c b/drivers/usb/gadget/function/f_hid.c
index 3c6b43d06a6d..98b413f67aaf 100644
--- a/drivers/usb/gadget/function/f_hid.c
+++ b/drivers/usb/gadget/function/f_hid.c
@@ -1484,7 +1484,7 @@ static ssize_t f_hid_opts_dev_show(struct config_item *item, char *page)
CONFIGFS_ATTR_RO(f_hid_opts_, dev);
-static struct configfs_attribute *hid_attrs[] = {
+static const struct configfs_attribute *const hid_attrs[] = {
&f_hid_opts_attr_subclass,
&f_hid_opts_attr_protocol,
&f_hid_opts_attr_no_out_endpoint,
@@ -1497,7 +1497,7 @@ static struct configfs_attribute *hid_attrs[] = {
static const struct config_item_type hid_func_type = {
.ct_item_ops = &hidg_item_ops,
- .ct_attrs = hid_attrs,
+ .ct_attrs_const = hid_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_loopback.c b/drivers/usb/gadget/function/f_loopback.c
index d2d07fb49e70..1f9fa2d57b44 100644
--- a/drivers/usb/gadget/function/f_loopback.c
+++ b/drivers/usb/gadget/function/f_loopback.c
@@ -544,7 +544,7 @@ static ssize_t f_lb_opts_bulk_buflen_store(struct config_item *item,
CONFIGFS_ATTR(f_lb_opts_, bulk_buflen);
-static struct configfs_attribute *lb_attrs[] = {
+static const struct configfs_attribute *const lb_attrs[] = {
&f_lb_opts_attr_qlen,
&f_lb_opts_attr_bulk_buflen,
NULL,
@@ -552,7 +552,7 @@ static struct configfs_attribute *lb_attrs[] = {
static const struct config_item_type lb_func_type = {
.ct_item_ops = &lb_item_ops,
- .ct_attrs = lb_attrs,
+ .ct_attrs_const = lb_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c
index 52314a00d8e6..92fd95d24f9e 100644
--- a/drivers/usb/gadget/function/f_mass_storage.c
+++ b/drivers/usb/gadget/function/f_mass_storage.c
@@ -3283,7 +3283,7 @@ static ssize_t fsg_lun_opts_forced_eject_store(struct config_item *item,
CONFIGFS_ATTR_WO(fsg_lun_opts_, forced_eject);
-static struct configfs_attribute *fsg_lun_attrs[] = {
+static const struct configfs_attribute *const fsg_lun_attrs[] = {
&fsg_lun_opts_attr_file,
&fsg_lun_opts_attr_ro,
&fsg_lun_opts_attr_removable,
@@ -3296,7 +3296,7 @@ static struct configfs_attribute *fsg_lun_attrs[] = {
static const struct config_item_type fsg_lun_type = {
.ct_item_ops = &fsg_lun_item_ops,
- .ct_attrs = fsg_lun_attrs,
+ .ct_attrs_const = fsg_lun_attrs,
.ct_owner = THIS_MODULE,
};
@@ -3475,7 +3475,7 @@ static ssize_t fsg_opts_num_buffers_store(struct config_item *item,
CONFIGFS_ATTR(fsg_opts_, num_buffers);
#endif
-static struct configfs_attribute *fsg_attrs[] = {
+static const struct configfs_attribute *const fsg_attrs[] = {
&fsg_opts_attr_stall,
#ifdef CONFIG_USB_GADGET_DEBUG_FILES
&fsg_opts_attr_num_buffers,
@@ -3491,7 +3491,7 @@ static const struct configfs_group_operations fsg_group_ops = {
static const struct config_item_type fsg_func_type = {
.ct_item_ops = &fsg_item_ops,
.ct_group_ops = &fsg_group_ops,
- .ct_attrs = fsg_attrs,
+ .ct_attrs_const = fsg_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c
index 48cda34399e8..dc3e3e2fd4f3 100644
--- a/drivers/usb/gadget/function/f_midi.c
+++ b/drivers/usb/gadget/function/f_midi.c
@@ -1240,7 +1240,7 @@ F_MIDI_OPT(out_ports, true, MAX_PORTS);
F_MIDI_OPT_STRING(id);
F_MIDI_OPT_STRING(interface_string);
-static struct configfs_attribute *midi_attrs[] = {
+static const struct configfs_attribute *const midi_attrs[] = {
&f_midi_opts_attr_index,
&f_midi_opts_attr_buflen,
&f_midi_opts_attr_qlen,
@@ -1253,7 +1253,7 @@ static struct configfs_attribute *midi_attrs[] = {
static const struct config_item_type midi_func_type = {
.ct_item_ops = &midi_item_ops,
- .ct_attrs = midi_attrs,
+ .ct_attrs_const = midi_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_midi2.c b/drivers/usb/gadget/function/f_midi2.c
index d693de427641..a92012ce8964 100644
--- a/drivers/usb/gadget/function/f_midi2.c
+++ b/drivers/usb/gadget/function/f_midi2.c
@@ -2291,7 +2291,7 @@ static ssize_t f_midi2_block_opts_name_store(struct config_item *item,
CONFIGFS_ATTR(f_midi2_block_opts_, name);
-static struct configfs_attribute *f_midi2_block_attrs[] = {
+static const struct configfs_attribute *const f_midi2_block_attrs[] = {
&f_midi2_block_opts_attr_direction,
&f_midi2_block_opts_attr_first_group,
&f_midi2_block_opts_attr_num_groups,
@@ -2320,7 +2320,7 @@ static const struct configfs_item_operations f_midi2_block_item_ops = {
static const struct config_item_type f_midi2_block_type = {
.ct_item_ops = &f_midi2_block_item_ops,
- .ct_attrs = f_midi2_block_attrs,
+ .ct_attrs_const = f_midi2_block_attrs,
.ct_owner = THIS_MODULE,
};
@@ -2456,7 +2456,7 @@ F_MIDI2_EP_OPT(sw_revision, "0x%x", 0, 0xffffffff);
F_MIDI2_EP_STR_OPT(ep_name, 128);
F_MIDI2_EP_STR_OPT(product_id, 128);
-static struct configfs_attribute *f_midi2_ep_attrs[] = {
+static const struct configfs_attribute *const f_midi2_ep_attrs[] = {
&f_midi2_ep_opts_attr_protocol,
&f_midi2_ep_opts_attr_protocol_caps,
&f_midi2_ep_opts_attr_ep_name,
@@ -2490,7 +2490,7 @@ static const struct configfs_group_operations f_midi2_ep_group_ops = {
static const struct config_item_type f_midi2_ep_type = {
.ct_item_ops = &f_midi2_ep_item_ops,
.ct_group_ops = &f_midi2_ep_group_ops,
- .ct_attrs = f_midi2_ep_attrs,
+ .ct_attrs_const = f_midi2_ep_attrs,
.ct_owner = THIS_MODULE,
};
@@ -2603,7 +2603,7 @@ static ssize_t f_midi2_opts_iface_name_store(struct config_item *item,
CONFIGFS_ATTR(f_midi2_opts_, iface_name);
-static struct configfs_attribute *f_midi2_attrs[] = {
+static const struct configfs_attribute *const f_midi2_attrs[] = {
&f_midi2_opts_attr_process_ump,
&f_midi2_opts_attr_static_block,
&f_midi2_opts_attr_iface_name,
@@ -2629,7 +2629,7 @@ static const struct configfs_group_operations f_midi2_group_ops = {
static const struct config_item_type f_midi2_func_type = {
.ct_item_ops = &f_midi2_item_ops,
.ct_group_ops = &f_midi2_group_ops,
- .ct_attrs = f_midi2_attrs,
+ .ct_attrs_const = f_midi2_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_ncm.c b/drivers/usb/gadget/function/f_ncm.c
index ab6da3ef8783..e178cb700653 100644
--- a/drivers/usb/gadget/function/f_ncm.c
+++ b/drivers/usb/gadget/function/f_ncm.c
@@ -1654,7 +1654,7 @@ static ssize_t ncm_opts_max_segment_size_store(struct config_item *item,
CONFIGFS_ATTR(ncm_opts_, max_segment_size);
-static struct configfs_attribute *ncm_attrs[] = {
+static const struct configfs_attribute *const ncm_attrs[] = {
&ncm_opts_attr_dev_addr,
&ncm_opts_attr_host_addr,
&ncm_opts_attr_qmult,
@@ -1665,7 +1665,7 @@ static struct configfs_attribute *ncm_attrs[] = {
static const struct config_item_type ncm_func_type = {
.ct_item_ops = &ncm_item_ops,
- .ct_attrs = ncm_attrs,
+ .ct_attrs_const = ncm_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_obex.c b/drivers/usb/gadget/function/f_obex.c
index 715bb0decd3b..fb2186d1ca6e 100644
--- a/drivers/usb/gadget/function/f_obex.c
+++ b/drivers/usb/gadget/function/f_obex.c
@@ -401,14 +401,14 @@ static ssize_t f_obex_port_num_show(struct config_item *item, char *page)
CONFIGFS_ATTR_RO(f_obex_, port_num);
-static struct configfs_attribute *acm_attrs[] = {
+static const struct configfs_attribute *const acm_attrs[] = {
&f_obex_attr_port_num,
NULL,
};
static const struct config_item_type obex_func_type = {
.ct_item_ops = &obex_item_ops,
- .ct_attrs = acm_attrs,
+ .ct_attrs_const = acm_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_phonet.c b/drivers/usb/gadget/function/f_phonet.c
index b1ee9a7c2e94..736630151db2 100644
--- a/drivers/usb/gadget/function/f_phonet.c
+++ b/drivers/usb/gadget/function/f_phonet.c
@@ -605,14 +605,14 @@ static ssize_t f_phonet_ifname_show(struct config_item *item, char *page)
CONFIGFS_ATTR_RO(f_phonet_, ifname);
-static struct configfs_attribute *phonet_attrs[] = {
+static const struct configfs_attribute *const phonet_attrs[] = {
&f_phonet_attr_ifname,
NULL,
};
static const struct config_item_type phonet_func_type = {
.ct_item_ops = &phonet_item_ops,
- .ct_attrs = phonet_attrs,
+ .ct_attrs_const = phonet_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_printer.c b/drivers/usb/gadget/function/f_printer.c
index 1857d786110b..47098c347150 100644
--- a/drivers/usb/gadget/function/f_printer.c
+++ b/drivers/usb/gadget/function/f_printer.c
@@ -1328,7 +1328,7 @@ static ssize_t f_printer_opts_q_len_store(struct config_item *item,
CONFIGFS_ATTR(f_printer_opts_, q_len);
-static struct configfs_attribute *printer_attrs[] = {
+static const struct configfs_attribute *const printer_attrs[] = {
&f_printer_opts_attr_pnp_string,
&f_printer_opts_attr_q_len,
NULL,
@@ -1336,7 +1336,7 @@ static struct configfs_attribute *printer_attrs[] = {
static const struct config_item_type printer_func_type = {
.ct_item_ops = &printer_item_ops,
- .ct_attrs = printer_attrs,
+ .ct_attrs_const = printer_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_rndis.c b/drivers/usb/gadget/function/f_rndis.c
index 7de1c5f8e326..69d2780c1aae 100644
--- a/drivers/usb/gadget/function/f_rndis.c
+++ b/drivers/usb/gadget/function/f_rndis.c
@@ -852,7 +852,7 @@ USB_ETHER_CONFIGFS_ITEM_ATTR_U8_RW(rndis, subclass);
/* f_rndis_opts_protocol */
USB_ETHER_CONFIGFS_ITEM_ATTR_U8_RW(rndis, protocol);
-static struct configfs_attribute *rndis_attrs[] = {
+static const struct configfs_attribute *const rndis_attrs[] = {
&rndis_opts_attr_dev_addr,
&rndis_opts_attr_host_addr,
&rndis_opts_attr_qmult,
@@ -865,7 +865,7 @@ static struct configfs_attribute *rndis_attrs[] = {
static const struct config_item_type rndis_func_type = {
.ct_item_ops = &rndis_item_ops,
- .ct_attrs = rndis_attrs,
+ .ct_attrs_const = rndis_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_serial.c b/drivers/usb/gadget/function/f_serial.c
index ae8813c67bc7..34fc0069b97b 100644
--- a/drivers/usb/gadget/function/f_serial.c
+++ b/drivers/usb/gadget/function/f_serial.c
@@ -289,7 +289,7 @@ static ssize_t f_serial_port_num_show(struct config_item *item, char *page)
CONFIGFS_ATTR_RO(f_serial_, port_num);
-static struct configfs_attribute *acm_attrs[] = {
+static const struct configfs_attribute *const acm_attrs[] = {
#ifdef CONFIG_U_SERIAL_CONSOLE
&f_serial_attr_console,
#endif
@@ -299,7 +299,7 @@ static struct configfs_attribute *acm_attrs[] = {
static const struct config_item_type serial_func_type = {
.ct_item_ops = &serial_item_ops,
- .ct_attrs = acm_attrs,
+ .ct_attrs_const = acm_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_sourcesink.c b/drivers/usb/gadget/function/f_sourcesink.c
index d2b707e41669..e9aa553f2525 100644
--- a/drivers/usb/gadget/function/f_sourcesink.c
+++ b/drivers/usb/gadget/function/f_sourcesink.c
@@ -1266,7 +1266,7 @@ static ssize_t f_ss_opts_iso_qlen_store(struct config_item *item,
CONFIGFS_ATTR(f_ss_opts_, iso_qlen);
-static struct configfs_attribute *ss_attrs[] = {
+static const struct configfs_attribute *const ss_attrs[] = {
&f_ss_opts_attr_pattern,
&f_ss_opts_attr_isoc_interval,
&f_ss_opts_attr_isoc_maxpacket,
@@ -1281,7 +1281,7 @@ static struct configfs_attribute *ss_attrs[] = {
static const struct config_item_type ss_func_type = {
.ct_item_ops = &ss_item_ops,
- .ct_attrs = ss_attrs,
+ .ct_attrs_const = ss_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_subset.c b/drivers/usb/gadget/function/f_subset.c
index 6e3265b8a3a0..468e477b47f1 100644
--- a/drivers/usb/gadget/function/f_subset.c
+++ b/drivers/usb/gadget/function/f_subset.c
@@ -392,7 +392,7 @@ USB_ETHERNET_CONFIGFS_ITEM_ATTR_QMULT(gether);
/* f_gether_opts_ifname */
USB_ETHERNET_CONFIGFS_ITEM_ATTR_IFNAME(gether);
-static struct configfs_attribute *gether_attrs[] = {
+static const struct configfs_attribute *const gether_attrs[] = {
&gether_opts_attr_dev_addr,
&gether_opts_attr_host_addr,
&gether_opts_attr_qmult,
@@ -402,7 +402,7 @@ static struct configfs_attribute *gether_attrs[] = {
static const struct config_item_type gether_func_type = {
.ct_item_ops = &gether_item_ops,
- .ct_attrs = gether_attrs,
+ .ct_attrs_const = gether_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_uac1.c b/drivers/usb/gadget/function/f_uac1.c
index 7a81cd176abd..11fad7d0552b 100644
--- a/drivers/usb/gadget/function/f_uac1.c
+++ b/drivers/usb/gadget/function/f_uac1.c
@@ -1699,7 +1699,7 @@ UAC1_ATTRIBUTE_STRING(c_it_ch_name);
UAC1_ATTRIBUTE_STRING(c_ot_name);
UAC1_ATTRIBUTE_STRING(c_fu_vol_name);
-static struct configfs_attribute *f_uac1_attrs[] = {
+static const struct configfs_attribute *const f_uac1_attrs[] = {
&f_uac1_opts_attr_c_chmask,
&f_uac1_opts_attr_c_srate,
&f_uac1_opts_attr_c_ssize,
@@ -1737,7 +1737,7 @@ static struct configfs_attribute *f_uac1_attrs[] = {
static const struct config_item_type f_uac1_func_type = {
.ct_item_ops = &f_uac1_item_ops,
- .ct_attrs = f_uac1_attrs,
+ .ct_attrs_const = f_uac1_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_uac1_legacy.c b/drivers/usb/gadget/function/f_uac1_legacy.c
index 7c8d60c7e87d..c3bd1b3ba134 100644
--- a/drivers/usb/gadget/function/f_uac1_legacy.c
+++ b/drivers/usb/gadget/function/f_uac1_legacy.c
@@ -894,7 +894,7 @@ UAC1_INT_ATTRIBUTE(req_buf_size);
UAC1_INT_ATTRIBUTE(req_count);
UAC1_INT_ATTRIBUTE(audio_buf_size);
-static struct configfs_attribute *f_uac1_attrs[] = {
+static const struct configfs_attribute *const f_uac1_attrs[] = {
&f_uac1_opts_attr_req_buf_size,
&f_uac1_opts_attr_req_count,
&f_uac1_opts_attr_audio_buf_size,
@@ -903,7 +903,7 @@ static struct configfs_attribute *f_uac1_attrs[] = {
static const struct config_item_type f_uac1_func_type = {
.ct_item_ops = &f_uac1_item_ops,
- .ct_attrs = f_uac1_attrs,
+ .ct_attrs_const = f_uac1_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/f_uac2.c b/drivers/usb/gadget/function/f_uac2.c
index d8cf710085a0..74733ebf9c94 100644
--- a/drivers/usb/gadget/function/f_uac2.c
+++ b/drivers/usb/gadget/function/f_uac2.c
@@ -2130,7 +2130,7 @@ UAC2_ATTRIBUTE(s16, p_terminal_type);
UAC2_ATTRIBUTE(s16, c_terminal_type);
-static struct configfs_attribute *f_uac2_attrs[] = {
+static const struct configfs_attribute *const f_uac2_attrs[] = {
&f_uac2_opts_attr_p_chmask,
&f_uac2_opts_attr_p_srate,
&f_uac2_opts_attr_p_ssize,
@@ -2178,7 +2178,7 @@ static struct configfs_attribute *f_uac2_attrs[] = {
static const struct config_item_type f_uac2_func_type = {
.ct_item_ops = &f_uac2_item_ops,
- .ct_attrs = f_uac2_attrs,
+ .ct_attrs_const = f_uac2_attrs,
.ct_owner = THIS_MODULE,
};
diff --git a/drivers/usb/gadget/function/uvc_configfs.c b/drivers/usb/gadget/function/uvc_configfs.c
index 70a1415ea401..a0702d09b61f 100644
--- a/drivers/usb/gadget/function/uvc_configfs.c
+++ b/drivers/usb/gadget/function/uvc_configfs.c
@@ -22,7 +22,7 @@
*/
#define UVC_ATTR(prefix, cname, aname) \
-static struct configfs_attribute prefix##attr_##cname = { \
+static const struct configfs_attribute prefix##attr_##cname = { \
.ca_name = __stringify(aname), \
.ca_mode = S_IRUGO | S_IWUGO, \
.ca_owner = THIS_MODULE, \
@@ -31,7 +31,7 @@ static struct configfs_attribute prefix##attr_##cname = { \
}
#define UVC_ATTR_RO(prefix, cname, aname) \
-static struct configfs_attribute prefix##attr_##cname = { \
+static const struct configfs_attribute prefix##attr_##cname = { \
.ca_name = __stringify(aname), \
.ca_mode = S_IRUGO, \
.ca_owner = THIS_MODULE, \
@@ -253,7 +253,7 @@ UVCG_CTRL_HDR_ATTR(dw_clock_frequency, dwClockFrequency, 32, 0x7fffffff);
#undef UVCG_CTRL_HDR_ATTR
-static struct configfs_attribute *uvcg_control_header_attrs[] = {
+static const struct configfs_attribute *const uvcg_control_header_attrs[] = {
&uvcg_control_header_attr_bcd_uvc,
&uvcg_control_header_attr_dw_clock_frequency,
NULL,
@@ -261,7 +261,7 @@ static struct configfs_attribute *uvcg_control_header_attrs[] = {
static const struct config_item_type uvcg_control_header_type = {
.ct_item_ops = &uvcg_config_item_ops,
- .ct_attrs = uvcg_control_header_attrs,
+ .ct_attrs_const = uvcg_control_header_attrs,
.ct_owner = THIS_MODULE,
};
@@ -425,7 +425,7 @@ static ssize_t uvcg_default_processing_bm_controls_show(
UVC_ATTR(uvcg_default_processing_, bm_controls, bmControls);
-static struct configfs_attribute *uvcg_default_processing_attrs[] = {
+static const struct configfs_attribute *const uvcg_default_processing_attrs[] = {
&uvcg_default_processing_attr_b_unit_id,
&uvcg_default_processing_attr_b_source_id,
&uvcg_default_processing_attr_w_max_multiplier,
@@ -437,7 +437,7 @@ static struct configfs_attribute *uvcg_default_processing_attrs[] = {
static const struct uvcg_config_group_type uvcg_default_processing_type = {
.type = {
.ct_item_ops = &uvcg_config_item_ops,
- .ct_attrs = uvcg_default_processing_attrs,
+ .ct_attrs_const = uvcg_default_processing_attrs,
.ct_owner = THIS_MODULE,
},
.name = "default",
@@ -595,7 +595,7 @@ static ssize_t uvcg_default_camera_bm_controls_show(
UVC_ATTR(uvcg_default_camera_, bm_controls, bmControls);
-static struct configfs_attribute *uvcg_default_camera_attrs[] = {
+static const struct configfs_attribute *const uvcg_default_camera_attrs[] = {
&uvcg_default_camera_attr_b_terminal_id,
&uvcg_default_camera_attr_w_terminal_type,
&uvcg_default_camera_attr_b_assoc_terminal,
@@ -610,7 +610,7 @@ static struct configfs_attribute *uvcg_default_camera_attrs[] = {
static const struct uvcg_config_group_type uvcg_default_camera_type = {
.type = {
.ct_item_ops = &uvcg_config_item_ops,
- .ct_attrs = uvcg_default_camera_attrs,
+ .ct_attrs_const = uvcg_default_camera_attrs,
.ct_owner = THIS_MODULE,
},
.name = "default",
@@ -730,7 +730,7 @@ static ssize_t uvcg_default_output_b_source_id_store(struct config_item *item,
}
UVC_ATTR(uvcg_default_output_, b_source_id, bSourceID);
-static struct configfs_attribute *uvcg_default_output_attrs[] = {
+static const struct configfs_attribute *const uvcg_default_output_attrs[] = {
&uvcg_default_output_attr_b_terminal_id,
&uvcg_default_output_attr_w_terminal_type,
&uvcg_default_output_attr_b_assoc_terminal,
@@ -742,7 +742,7 @@ static struct configfs_attribute *uvcg_default_output_attrs[] = {
static const struct uvcg_config_group_type uvcg_default_output_type = {
.type = {
.ct_item_ops = &uvcg_config_item_ops,
- .ct_attrs = uvcg_default_output_attrs,
+ .ct_attrs_const = uvcg_default_output_attrs,
.ct_owner = THIS_MODULE,
},
.name = "default",
@@ -1163,7 +1163,7 @@ static ssize_t uvcg_extension_bm_controls_store(struct config_item *item,
UVC_ATTR(uvcg_extension_, bm_controls, bmControls);
-static struct configfs_attribute *uvcg_extension_attrs[] = {
+static const struct configfs_attribute *const uvcg_extension_attrs[] = {
&uvcg_extension_attr_b_length,
&uvcg_extension_attr_b_unit_id,
&uvcg_extension_attr_b_num_controls,
@@ -1241,7 +1241,7 @@ static const struct configfs_item_operations uvcg_extension_item_ops = {
static const struct config_item_type uvcg_extension_type = {
.ct_item_ops = &uvcg_extension_item_ops,
- .ct_attrs = uvcg_extension_attrs,
+ .ct_attrs_const = uvcg_extension_attrs,
.ct_owner = THIS_MODULE,
};
@@ -1541,7 +1541,7 @@ static ssize_t uvcg_default_control_enable_interrupt_ep_store(
}
UVC_ATTR(uvcg_default_control_, enable_interrupt_ep, enable_interrupt_ep);
-static struct configfs_attribute *uvcg_default_control_attrs[] = {
+static const struct configfs_attribute *const uvcg_default_control_attrs[] = {
&uvcg_default_control_attr_b_interface_number,
&uvcg_default_control_attr_enable_interrupt_ep,
NULL,
@@ -1550,7 +1550,7 @@ static struct configfs_attribute *uvcg_default_control_attrs[] = {
static const struct uvcg_config_group_type uvcg_control_grp_type = {
.type = {
.ct_item_ops = &uvcg_config_item_ops,
- .ct_attrs = uvcg_default_control_attrs,
+ .ct_attrs_const = uvcg_default_control_attrs,
.ct_owner = THIS_MODULE,
},
.name = "control",
@@ -1879,7 +1879,7 @@ UVCG_STREAMING_HEADER_ATTR(b_trigger_usage, bTriggerUsage, 8);
#undef UVCG_STREAMING_HEADER_ATTR
-static struct configfs_attribute *uvcg_streaming_header_attrs[] = {
+static const struct configfs_attribute *const uvcg_streaming_header_attrs[] = {
&uvcg_streaming_header_attr_bm_info,
&uvcg_streaming_header_attr_b_terminal_link,
&uvcg_streaming_header_attr_b_still_capture_method,
@@ -1890,7 +1890,7 @@ static struct configfs_attribute *uvcg_streaming_header_attrs[] = {
static const struct config_item_type uvcg_streaming_header_type = {
.ct_item_ops = &uvcg_streaming_header_item_ops,
- .ct_attrs = uvcg_streaming_header_attrs,
+ .ct_attrs_const = uvcg_streaming_header_attrs,
.ct_owner = THIS_MODULE,
};
@@ -2116,7 +2116,7 @@ static ssize_t uvcg_frame_dw_frame_interval_store(struct config_item *item,
UVC_ATTR(uvcg_frame_, dw_frame_interval, dwFrameInterval);
-static struct configfs_attribute *uvcg_frame_attrs1[] = {
+static const struct configfs_attribute *const uvcg_frame_attrs1[] = {
&uvcg_frame_attr_b_frame_index,
&uvcg_frame_attr_bm_capabilities,
&uvcg_frame_attr_w_width,
@@ -2129,7 +2129,7 @@ static struct configfs_attribute *uvcg_frame_attrs1[] = {
NULL,
};
-static struct configfs_attribute *uvcg_frame_attrs2[] = {
+static const struct configfs_attribute *const uvcg_frame_attrs2[] = {
&uvcg_frame_attr_b_frame_index,
&uvcg_frame_attr_bm_capabilities,
&uvcg_frame_attr_w_width,
@@ -2144,13 +2144,13 @@ static struct configfs_attribute *uvcg_frame_attrs2[] = {
static const struct config_item_type uvcg_frame_type1 = {
.ct_item_ops = &uvcg_config_item_ops,
- .ct_attrs = uvcg_frame_attrs1,
+ .ct_attrs_const = uvcg_frame_attrs1,
.ct_owner = THIS_MODULE,
};
static const struct config_item_type uvcg_frame_type2 = {
.ct_item_ops = &uvcg_config_item_ops,
- .ct_attrs = uvcg_frame_attrs2,
+ .ct_attrs_const = uvcg_frame_attrs2,
.ct_owner = THIS_MODULE,
};
@@ -2448,7 +2448,7 @@ uvcg_uncompressed_bma_controls_store(struct config_item *item,
UVC_ATTR(uvcg_uncompressed_, bma_controls, bmaControls);
-static struct configfs_attribute *uvcg_uncompressed_attrs[] = {
+static const struct configfs_attribute *const uvcg_uncompressed_attrs[] = {
&uvcg_uncompressed_attr_b_format_index,
&uvcg_uncompressed_attr_guid_format,
&uvcg_uncompressed_attr_b_bits_per_pixel,
@@ -2463,7 +2463,7 @@ static struct configfs_attribute *uvcg_uncompressed_attrs[] = {
static const struct config_item_type uvcg_uncompressed_type = {
.ct_item_ops = &uvcg_format_item_operations,
.ct_group_ops = &uvcg_uncompressed_group_ops,
- .ct_attrs = uvcg_uncompressed_attrs,
+ .ct_attrs_const = uvcg_uncompressed_attrs,
.ct_owner = THIS_MODULE,
};
@@ -2645,7 +2645,7 @@ uvcg_mjpeg_bma_controls_store(struct config_item *item,
UVC_ATTR(uvcg_mjpeg_, bma_controls, bmaControls);
-static struct configfs_attribute *uvcg_mjpeg_attrs[] = {
+static const struct configfs_attribute *const uvcg_mjpeg_attrs[] = {
&uvcg_mjpeg_attr_b_format_index,
&uvcg_mjpeg_attr_b_default_frame_index,
&uvcg_mjpeg_attr_bm_flags,
@@ -2659,7 +2659,7 @@ static struct configfs_attribute *uvcg_mjpeg_attrs[] = {
static const struct config_item_type uvcg_mjpeg_type = {
.ct_item_ops = &uvcg_format_item_operations,
.ct_group_ops = &uvcg_mjpeg_group_ops,
- .ct_attrs = uvcg_mjpeg_attrs,
+ .ct_attrs_const = uvcg_mjpeg_attrs,
.ct_owner = THIS_MODULE,
};
@@ -2891,7 +2891,7 @@ uvcg_framebased_bma_controls_store(struct config_item *item,
UVC_ATTR(uvcg_framebased_, bma_controls, bmaControls);
-static struct configfs_attribute *uvcg_framebased_attrs[] = {
+static const struct configfs_attribute *const uvcg_framebased_attrs[] = {
&uvcg_framebased_attr_b_format_index,
&uvcg_framebased_attr_b_default_frame_index,
&uvcg_framebased_attr_b_bits_per_pixel,
@@ -2906,7 +2906,7 @@ static struct configfs_attribute *uvcg_framebased_attrs[] = {
static const struct config_item_type uvcg_framebased_type = {
.ct_item_ops = &uvcg_config_item_ops,
.ct_group_ops = &uvcg_framebased_group_ops,
- .ct_attrs = uvcg_framebased_attrs,
+ .ct_attrs_const = uvcg_framebased_attrs,
.ct_owner = THIS_MODULE,
};
@@ -3041,7 +3041,7 @@ UVCG_COLOR_MATCHING_ATTR(b_matrix_coefficients, bMatrixCoefficients, 8);
#undef UVCG_COLOR_MATCHING_ATTR
-static struct configfs_attribute *uvcg_color_matching_attrs[] = {
+static const struct configfs_attribute *const uvcg_color_matching_attrs[] = {
&uvcg_color_matching_attr_b_color_primaries,
&uvcg_color_matching_attr_b_transfer_characteristics,
&uvcg_color_matching_attr_b_matrix_coefficients,
@@ -3062,7 +3062,7 @@ static const struct configfs_item_operations uvcg_color_matching_item_ops = {
static const struct config_item_type uvcg_color_matching_type = {
.ct_item_ops = &uvcg_color_matching_item_ops,
- .ct_attrs = uvcg_color_matching_attrs,
+ .ct_attrs_const = uvcg_color_matching_attrs,
.ct_owner = THIS_MODULE,
};
@@ -3605,7 +3605,7 @@ static ssize_t uvcg_default_streaming_b_interface_number_show(
UVC_ATTR_RO(uvcg_default_streaming_, b_interface_number, bInterfaceNumber);
-static struct configfs_attribute *uvcg_default_streaming_attrs[] = {
+static const struct configfs_attribute *const uvcg_default_streaming_attrs[] = {
&uvcg_default_streaming_attr_b_interface_number,
NULL,
};
@@ -3613,7 +3613,7 @@ static struct configfs_attribute *uvcg_default_streaming_attrs[] = {
static const struct uvcg_config_group_type uvcg_streaming_grp_type = {
.type = {
.ct_item_ops = &uvcg_config_item_ops,
- .ct_attrs = uvcg_default_streaming_attrs,
+ .ct_attrs_const = uvcg_default_streaming_attrs,
.ct_owner = THIS_MODULE,
},
.name = "streaming",
@@ -3797,7 +3797,7 @@ UVCG_OPTS_STRING_ATTR(function_name, function_name);
#undef UVCG_OPTS_STRING_ATTR
-static struct configfs_attribute *uvc_attrs[] = {
+static const struct configfs_attribute *const uvc_attrs[] = {
&f_uvc_opts_attr_streaming_interval,
&f_uvc_opts_attr_streaming_maxpacket,
&f_uvc_opts_attr_streaming_maxburst,
@@ -3808,7 +3808,7 @@ static struct configfs_attribute *uvc_attrs[] = {
static const struct uvcg_config_group_type uvc_func_type = {
.type = {
.ct_item_ops = &uvc_func_item_ops,
- .ct_attrs = uvc_attrs,
+ .ct_attrs_const = uvc_attrs,
.ct_owner = THIS_MODULE,
},
.name = "",
diff --git a/include/linux/usb/gadget_configfs.h b/include/linux/usb/gadget_configfs.h
index 23c1091e88c0..c1eb4cbc3629 100644
--- a/include/linux/usb/gadget_configfs.h
+++ b/include/linux/usb/gadget_configfs.h
@@ -36,7 +36,7 @@ static const struct configfs_item_operations struct_in##_langid_item_ops = { \
\
static const struct config_item_type struct_in##_langid_type = { \
.ct_item_ops = &struct_in##_langid_item_ops, \
- .ct_attrs = struct_in##_langid_attrs, \
+ .ct_attrs_const = struct_in##_langid_attrs, \
.ct_owner = THIS_MODULE, \
}
---
base-commit: ddfe51b0a0f5dc9e415cc2c8ad8db17532dd426b
change-id: 20261107-b4-configfs-const-usb-46257db77479
Best regards,
--
Thomas Weißschuh <linux@weissschuh.net>
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-11-07 4:27 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-07 4:23 [PATCH] usb: Constify struct configfs_attribute pointers Thomas Weißschuh
2026-11-07 4:27 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox