* [thomas-weissschuh:b4/sysfs-const-bin_attr-s390 6/7] drivers/s390/cio/chp.c:221:22: error: initialization of 'struct bin_attribute **' from incompatible pointer type 'const struct bin_attribute * const*'
@ 2024-12-12 23:23 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2024-12-12 23:23 UTC (permalink / raw)
To: Thomas Weißschuh; +Cc: oe-kbuild-all
tree: https://git.kernel.org/pub/scm/linux/kernel/git/thomas.weissschuh/linux.git b4/sysfs-const-bin_attr-s390
head: 8ae8d30bac9709d7b1824ebe3a28cc6f3017cd79
commit: 269b60415552dd90b391ef9ca088b2ee00497c03 [6/7] s390/cio/chp: Constify 'struct bin_attribute'
config: s390-allyesconfig (https://download.01.org/0day-ci/archive/20241213/202412130735.ErgIPfC0-lkp@intel.com/config)
compiler: s390-linux-gcc (GCC) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241213/202412130735.ErgIPfC0-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202412130735.ErgIPfC0-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from include/linux/kobject.h:20,
from include/linux/energy_model.h:7,
from include/linux/device.h:16,
from drivers/s390/cio/cio.h:6,
from drivers/s390/cio/chp.c:24:
>> drivers/s390/cio/chp.c:221:22: error: initialization of 'struct bin_attribute **' from incompatible pointer type 'const struct bin_attribute * const*' [-Wincompatible-pointer-types]
221 | BIN_ATTRIBUTE_GROUPS(measurement);
| ^~~~~~~~~~~
include/linux/sysfs.h:296:22: note: in definition of macro 'BIN_ATTRIBUTE_GROUPS'
296 | .bin_attrs = _name##_attrs, \
| ^~~~~
drivers/s390/cio/chp.c:221:22: note: (near initialization for 'measurement_group.<anonymous>.bin_attrs')
221 | BIN_ATTRIBUTE_GROUPS(measurement);
| ^~~~~~~~~~~
include/linux/sysfs.h:296:22: note: in definition of macro 'BIN_ATTRIBUTE_GROUPS'
296 | .bin_attrs = _name##_attrs, \
| ^~~~~
vim +221 drivers/s390/cio/chp.c
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 23
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 @24 #include "cio.h"
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 25 #include "css.h"
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 26 #include "ioasm.h"
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 27 #include "cio_debug.h"
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 28 #include "chp.h"
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 29
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 30 #define to_channelpath(device) container_of(device, struct channel_path, dev)
e5854a5839fa426 Peter Oberparleiter 2007-04-27 31 #define CHP_INFO_UPDATE_INTERVAL 1*HZ
e5854a5839fa426 Peter Oberparleiter 2007-04-27 32
e5854a5839fa426 Peter Oberparleiter 2007-04-27 33 enum cfg_task_t {
e5854a5839fa426 Peter Oberparleiter 2007-04-27 34 cfg_none,
e5854a5839fa426 Peter Oberparleiter 2007-04-27 35 cfg_configure,
e5854a5839fa426 Peter Oberparleiter 2007-04-27 36 cfg_deconfigure
e5854a5839fa426 Peter Oberparleiter 2007-04-27 37 };
e5854a5839fa426 Peter Oberparleiter 2007-04-27 38
e5854a5839fa426 Peter Oberparleiter 2007-04-27 39 /* Map for pending configure tasks. */
e5854a5839fa426 Peter Oberparleiter 2007-04-27 40 static enum cfg_task_t chp_cfg_task[__MAX_CSSID + 1][__MAX_CHPID + 1];
837c5220557270e Sebastian Ott 2016-07-19 41 static DEFINE_SPINLOCK(cfg_lock);
e5854a5839fa426 Peter Oberparleiter 2007-04-27 42
e5854a5839fa426 Peter Oberparleiter 2007-04-27 43 /* Map for channel-path status. */
e5854a5839fa426 Peter Oberparleiter 2007-04-27 44 static struct sclp_chp_info chp_info;
e5854a5839fa426 Peter Oberparleiter 2007-04-27 45 static DEFINE_MUTEX(info_lock);
e5854a5839fa426 Peter Oberparleiter 2007-04-27 46
e5854a5839fa426 Peter Oberparleiter 2007-04-27 47 /* Time after which channel-path status may be outdated. */
e5854a5839fa426 Peter Oberparleiter 2007-04-27 48 static unsigned long chp_info_expires;
e5854a5839fa426 Peter Oberparleiter 2007-04-27 49
e5854a5839fa426 Peter Oberparleiter 2007-04-27 50 static struct work_struct cfg_work;
e5854a5839fa426 Peter Oberparleiter 2007-04-27 51
e5854a5839fa426 Peter Oberparleiter 2007-04-27 52 /* Wait queue for configure completion events. */
3081e6160565078 Vineeth Vijayan 2021-03-29 53 static DECLARE_WAIT_QUEUE_HEAD(cfg_wait_queue);
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 54
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 55 /* Set vary state for given chpid. */
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 56 static void set_chp_logically_online(struct chp_id chpid, int onoff)
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 57 {
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 58 chpid_to_chp(chpid)->state = onoff;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 59 }
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 60
af901ca181d92aa André Goddard Rosa 2009-11-14 61 /* On success return 0 if channel-path is varied offline, 1 if it is varied
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 62 * online. Return -ENODEV if channel-path is not registered. */
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 63 int chp_get_status(struct chp_id chpid)
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 64 {
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 65 return (chpid_to_chp(chpid) ? chpid_to_chp(chpid)->state : -ENODEV);
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 66 }
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 67
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 68 /**
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 69 * chp_get_sch_opm - return opm for subchannel
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 70 * @sch: subchannel
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 71 *
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 72 * Calculate and return the operational path mask (opm) based on the chpids
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 73 * used by the subchannel and the status of the associated channel-paths.
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 74 */
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 75 u8 chp_get_sch_opm(struct subchannel *sch)
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 76 {
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 77 struct chp_id chpid;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 78 int opm;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 79 int i;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 80
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 81 opm = 0;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 82 chp_id_init(&chpid);
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 83 for (i = 0; i < 8; i++) {
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 84 opm <<= 1;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 85 chpid.id = sch->schib.pmcw.chpid[i];
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 86 if (chp_get_status(chpid) != 0)
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 87 opm |= 1;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 88 }
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 89 return opm;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 90 }
44a1c19e3b47a7a Cornelia Huck 2008-07-14 91 EXPORT_SYMBOL_GPL(chp_get_sch_opm);
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 92
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 93 /**
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 94 * chp_is_registered - check if a channel-path is registered
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 95 * @chpid: channel-path ID
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 96 *
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 97 * Return non-zero if a channel-path with the given chpid is registered,
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 98 * zero otherwise.
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 99 */
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 100 int chp_is_registered(struct chp_id chpid)
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 101 {
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 102 return chpid_to_chp(chpid) != NULL;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 103 }
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 104
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 105 /*
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 106 * Function: s390_vary_chpid
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 107 * Varies the specified chpid online or offline
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 108 */
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 109 static int s390_vary_chpid(struct chp_id chpid, int on)
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 110 {
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 111 char dbf_text[15];
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 112 int status;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 113
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 114 sprintf(dbf_text, on?"varyon%x.%02x":"varyoff%x.%02x", chpid.cssid,
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 115 chpid.id);
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 116 CIO_TRACE_EVENT(2, dbf_text);
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 117
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 118 status = chp_get_status(chpid);
c78aa6cbace4600 Michael Ernst 2008-07-14 119 if (!on && !status)
c78aa6cbace4600 Michael Ernst 2008-07-14 120 return 0;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 121
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 122 set_chp_logically_online(chpid, on);
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 123 chsc_chp_vary(chpid, on);
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 124 return 0;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 125 }
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 126
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 127 /*
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 128 * Channel measurement related functions
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 129 */
b4691baaeef07bd Peter Oberparleiter 2024-03-26 130 static ssize_t measurement_chars_read(struct file *filp, struct kobject *kobj,
269b60415552dd9 Thomas Weißschuh 2024-12-11 131 const struct bin_attribute *bin_attr,
91a6902958f0523 Zhang Rui 2007-06-09 132 char *buf, loff_t off, size_t count)
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 133 {
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 134 struct channel_path *chp;
364c85584e030f7 Heiko Carstens 2007-10-12 135 struct device *device;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 136
0d730b57b95f7e7 chenqiwu 2020-02-14 137 device = kobj_to_dev(kobj);
364c85584e030f7 Heiko Carstens 2007-10-12 138 chp = to_channelpath(device);
0d9bfe9123cfde5 Sebastian Ott 2016-01-25 139 if (chp->cmg == -1)
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 140 return 0;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 141
0d9bfe9123cfde5 Sebastian Ott 2016-01-25 142 return memory_read_from_buffer(buf, count, &off, &chp->cmg_chars,
0d9bfe9123cfde5 Sebastian Ott 2016-01-25 143 sizeof(chp->cmg_chars));
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 144 }
269b60415552dd9 Thomas Weißschuh 2024-12-11 145 static const BIN_ATTR_ADMIN_RO(measurement_chars, sizeof(struct cmg_chars));
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 146
2f4b3b83b8c6e79 Peter Oberparleiter 2024-11-07 147 static ssize_t measurement_chars_full_read(struct file *filp,
2f4b3b83b8c6e79 Peter Oberparleiter 2024-11-07 148 struct kobject *kobj,
2f4b3b83b8c6e79 Peter Oberparleiter 2024-11-07 149 struct bin_attribute *bin_attr,
2f4b3b83b8c6e79 Peter Oberparleiter 2024-11-07 150 char *buf, loff_t off, size_t count)
2f4b3b83b8c6e79 Peter Oberparleiter 2024-11-07 151 {
2f4b3b83b8c6e79 Peter Oberparleiter 2024-11-07 152 struct channel_path *chp = to_channelpath(kobj_to_dev(kobj));
2f4b3b83b8c6e79 Peter Oberparleiter 2024-11-07 153
2f4b3b83b8c6e79 Peter Oberparleiter 2024-11-07 154 return memory_read_from_buffer(buf, count, &off, &chp->cmcb,
2f4b3b83b8c6e79 Peter Oberparleiter 2024-11-07 155 sizeof(chp->cmcb));
2f4b3b83b8c6e79 Peter Oberparleiter 2024-11-07 156 }
2f4b3b83b8c6e79 Peter Oberparleiter 2024-11-07 157 static BIN_ATTR_ADMIN_RO(measurement_chars_full, sizeof(struct cmg_cmcb));
2f4b3b83b8c6e79 Peter Oberparleiter 2024-11-07 158
2dc8903af775ecd Peter Oberparleiter 2024-03-26 159 static ssize_t chp_measurement_copy_block(void *buf, loff_t off, size_t count,
2dc8903af775ecd Peter Oberparleiter 2024-03-26 160 struct kobject *kobj, bool extended)
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 161 {
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 162 struct channel_path *chp;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 163 struct channel_subsystem *css;
364c85584e030f7 Heiko Carstens 2007-10-12 164 struct device *device;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 165 unsigned int size;
2dc8903af775ecd Peter Oberparleiter 2024-03-26 166 void *area, *entry;
2dc8903af775ecd Peter Oberparleiter 2024-03-26 167 int id, idx;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 168
0d730b57b95f7e7 chenqiwu 2020-02-14 169 device = kobj_to_dev(kobj);
364c85584e030f7 Heiko Carstens 2007-10-12 170 chp = to_channelpath(device);
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 171 css = to_css(chp->dev.parent);
2dc8903af775ecd Peter Oberparleiter 2024-03-26 172 id = chp->chpid.id;
2dc8903af775ecd Peter Oberparleiter 2024-03-26 173
2dc8903af775ecd Peter Oberparleiter 2024-03-26 174 if (extended) {
2dc8903af775ecd Peter Oberparleiter 2024-03-26 175 /* Check if extended measurement data is available. */
2dc8903af775ecd Peter Oberparleiter 2024-03-26 176 if (!chp->extended)
2dc8903af775ecd Peter Oberparleiter 2024-03-26 177 return 0;
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 178
2dc8903af775ecd Peter Oberparleiter 2024-03-26 179 size = sizeof(struct cmg_ext_entry);
2dc8903af775ecd Peter Oberparleiter 2024-03-26 180 area = css->ecub[id / CSS_ECUES_PER_PAGE];
2dc8903af775ecd Peter Oberparleiter 2024-03-26 181 idx = id % CSS_ECUES_PER_PAGE;
2dc8903af775ecd Peter Oberparleiter 2024-03-26 182 } else {
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 183 size = sizeof(struct cmg_entry);
2dc8903af775ecd Peter Oberparleiter 2024-03-26 184 area = css->cub[id / CSS_CUES_PER_PAGE];
2dc8903af775ecd Peter Oberparleiter 2024-03-26 185 idx = id % CSS_CUES_PER_PAGE;
2dc8903af775ecd Peter Oberparleiter 2024-03-26 186 }
2dc8903af775ecd Peter Oberparleiter 2024-03-26 187 entry = area + (idx * size);
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 188
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 189 /* Only allow single reads. */
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 190 if (off || count < size)
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 191 return 0;
2dc8903af775ecd Peter Oberparleiter 2024-03-26 192
2dc8903af775ecd Peter Oberparleiter 2024-03-26 193 memcpy(buf, entry, size);
2dc8903af775ecd Peter Oberparleiter 2024-03-26 194
2dc8903af775ecd Peter Oberparleiter 2024-03-26 195 return size;
2dc8903af775ecd Peter Oberparleiter 2024-03-26 196 }
2dc8903af775ecd Peter Oberparleiter 2024-03-26 197
2dc8903af775ecd Peter Oberparleiter 2024-03-26 198 static ssize_t measurement_read(struct file *filp, struct kobject *kobj,
269b60415552dd9 Thomas Weißschuh 2024-12-11 199 const struct bin_attribute *bin_attr,
2dc8903af775ecd Peter Oberparleiter 2024-03-26 200 char *buf, loff_t off, size_t count)
2dc8903af775ecd Peter Oberparleiter 2024-03-26 201 {
2dc8903af775ecd Peter Oberparleiter 2024-03-26 202 return chp_measurement_copy_block(buf, off, count, kobj, false);
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 203 }
269b60415552dd9 Thomas Weißschuh 2024-12-11 204 static const BIN_ATTR_ADMIN_RO(measurement, sizeof(struct cmg_entry));
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 205
2dc8903af775ecd Peter Oberparleiter 2024-03-26 206 static ssize_t ext_measurement_read(struct file *filp, struct kobject *kobj,
269b60415552dd9 Thomas Weißschuh 2024-12-11 207 const struct bin_attribute *bin_attr,
2dc8903af775ecd Peter Oberparleiter 2024-03-26 208 char *buf, loff_t off, size_t count)
2dc8903af775ecd Peter Oberparleiter 2024-03-26 209 {
2dc8903af775ecd Peter Oberparleiter 2024-03-26 210 return chp_measurement_copy_block(buf, off, count, kobj, true);
2dc8903af775ecd Peter Oberparleiter 2024-03-26 211 }
269b60415552dd9 Thomas Weißschuh 2024-12-11 212 static const BIN_ATTR_ADMIN_RO(ext_measurement, sizeof(struct cmg_ext_entry));
2dc8903af775ecd Peter Oberparleiter 2024-03-26 213
269b60415552dd9 Thomas Weißschuh 2024-12-11 214 static const struct bin_attribute *const measurement_attrs[] = {
b4691baaeef07bd Peter Oberparleiter 2024-03-26 215 &bin_attr_measurement_chars,
2f4b3b83b8c6e79 Peter Oberparleiter 2024-11-07 216 &bin_attr_measurement_chars_full,
b4691baaeef07bd Peter Oberparleiter 2024-03-26 217 &bin_attr_measurement,
2dc8903af775ecd Peter Oberparleiter 2024-03-26 218 &bin_attr_ext_measurement,
b4691baaeef07bd Peter Oberparleiter 2024-03-26 219 NULL,
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 220 };
b4691baaeef07bd Peter Oberparleiter 2024-03-26 @221 BIN_ATTRIBUTE_GROUPS(measurement);
e6b6e10ac1de116 Peter Oberparleiter 2007-04-27 222
:::::: The code at line 221 was first introduced by commit
:::::: b4691baaeef07bdc4c3524a0702d7dd6899610b4 s390/cio: simplify measurement attribute registration
:::::: TO: Peter Oberparleiter <oberpar@linux.ibm.com>
:::::: CC: Alexander Gordeev <agordeev@linux.ibm.com>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-12-12 23:24 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-12 23:23 [thomas-weissschuh:b4/sysfs-const-bin_attr-s390 6/7] drivers/s390/cio/chp.c:221:22: error: initialization of 'struct bin_attribute **' from incompatible pointer type 'const struct bin_attribute * const*' kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.