Re: [PATCH] staging: greybus: Fix macro definition

From: kbuild test robot
Date: Sat Dec 03 2016 - 15:17:54 EST


Hi ChinmayVS,

[auto build test ERROR on staging/staging-testing]
[also build test ERROR on v4.9-rc7 next-20161202]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Chinmay-VS/staging-greybus-Fix-macro-definition/20161204-035614
config: i386-randconfig-s0-201649 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=i386

All error/warnings (new ones prefixed by >>):

>> drivers/staging/greybus/loopback.c:180:1: error: expected identifier or '(' before 'do'
do { \
^
>> drivers/staging/greybus/loopback.c:288:1: note: in expansion of macro 'gb_loopback_stats_attrs'
gb_loopback_stats_attrs(latency);
^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:184:3: error: expected identifier or '(' before 'while'
} while (0)
^
>> drivers/staging/greybus/loopback.c:288:1: note: in expansion of macro 'gb_loopback_stats_attrs'
gb_loopback_stats_attrs(latency);
^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:180:1: error: expected identifier or '(' before 'do'
do { \
^
drivers/staging/greybus/loopback.c:290:1: note: in expansion of macro 'gb_loopback_stats_attrs'
gb_loopback_stats_attrs(requests_per_second);
^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:184:3: error: expected identifier or '(' before 'while'
} while (0)
^
drivers/staging/greybus/loopback.c:290:1: note: in expansion of macro 'gb_loopback_stats_attrs'
gb_loopback_stats_attrs(requests_per_second);
^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:180:1: error: expected identifier or '(' before 'do'
do { \
^
drivers/staging/greybus/loopback.c:292:1: note: in expansion of macro 'gb_loopback_stats_attrs'
gb_loopback_stats_attrs(throughput);
^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:184:3: error: expected identifier or '(' before 'while'
} while (0)
^
drivers/staging/greybus/loopback.c:292:1: note: in expansion of macro 'gb_loopback_stats_attrs'
gb_loopback_stats_attrs(throughput);
^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:180:1: error: expected identifier or '(' before 'do'
do { \
^
drivers/staging/greybus/loopback.c:294:1: note: in expansion of macro 'gb_loopback_stats_attrs'
gb_loopback_stats_attrs(apbridge_unipro_latency);
^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:184:3: error: expected identifier or '(' before 'while'
} while (0)
^
drivers/staging/greybus/loopback.c:294:1: note: in expansion of macro 'gb_loopback_stats_attrs'
gb_loopback_stats_attrs(apbridge_unipro_latency);
^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:180:1: error: expected identifier or '(' before 'do'
do { \
^
drivers/staging/greybus/loopback.c:296:1: note: in expansion of macro 'gb_loopback_stats_attrs'
gb_loopback_stats_attrs(gbphy_firmware_latency);
^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:184:3: error: expected identifier or '(' before 'while'
} while (0)
^
drivers/staging/greybus/loopback.c:296:1: note: in expansion of macro 'gb_loopback_stats_attrs'
gb_loopback_stats_attrs(gbphy_firmware_latency);
^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:334:3: error: 'dev_attr_latency_min' undeclared here (not in a function)
&dev_attr_latency_min.attr,
^~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:335:3: error: 'dev_attr_latency_max' undeclared here (not in a function)
&dev_attr_latency_max.attr,
^~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:336:3: error: 'dev_attr_latency_avg' undeclared here (not in a function)
&dev_attr_latency_avg.attr,
^~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:337:3: error: 'dev_attr_requests_per_second_min' undeclared here (not in a function)
&dev_attr_requests_per_second_min.attr,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:338:3: error: 'dev_attr_requests_per_second_max' undeclared here (not in a function)
&dev_attr_requests_per_second_max.attr,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:339:3: error: 'dev_attr_requests_per_second_avg' undeclared here (not in a function)
&dev_attr_requests_per_second_avg.attr,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:340:3: error: 'dev_attr_throughput_min' undeclared here (not in a function)
&dev_attr_throughput_min.attr,
^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/greybus/loopback.c:341:3: error: 'dev_attr_throughput_max' undeclared here (not in a function)
&dev_attr_throughput_max.attr,
^~~~~~~~~~~~~~~~~~~~~~~

vim +180 drivers/staging/greybus/loopback.c

174 do_div(rem, count); \
175 return sprintf(buf, "%llu.%06u\n", avg, (u32)rem); \
176 } \
177 static DEVICE_ATTR_RO(name##_avg)
178
179 #define gb_loopback_stats_attrs(field) \
> 180 do { \
181 gb_loopback_ro_stats_attr(field, min, u); \
182 gb_loopback_ro_stats_attr(field, max, u); \
183 gb_loopback_ro_avg_attr(field) \
> 184 } while (0)
185
186 #define gb_loopback_attr(field, type) \
187 static ssize_t field##_show(struct device *dev, \
188 struct device_attribute *attr, \
189 char *buf) \
190 { \
191 struct gb_loopback *gb = dev_get_drvdata(dev); \
192 return sprintf(buf, "%"#type"\n", gb->field); \
193 } \
194 static ssize_t field##_store(struct device *dev, \
195 struct device_attribute *attr, \
196 const char *buf, \
197 size_t len) \
198 { \
199 int ret; \
200 struct gb_loopback *gb = dev_get_drvdata(dev); \
201 mutex_lock(&gb->mutex); \
202 ret = sscanf(buf, "%"#type, &gb->field); \
203 if (ret != 1) \
204 len = -EINVAL; \
205 else \
206 gb_loopback_check_attr(gb, bundle); \
207 mutex_unlock(&gb->mutex); \
208 return len; \
209 } \
210 static DEVICE_ATTR_RW(field)
211
212 #define gb_dev_loopback_ro_attr(field, conn) \
213 static ssize_t field##_show(struct device *dev, \
214 struct device_attribute *attr, \
215 char *buf) \
216 { \
217 struct gb_loopback *gb = dev_get_drvdata(dev); \
218 return sprintf(buf, "%u\n", gb->field); \
219 } \
220 static DEVICE_ATTR_RO(field)
221
222 #define gb_dev_loopback_rw_attr(field, type) \
223 static ssize_t field##_show(struct device *dev, \
224 struct device_attribute *attr, \
225 char *buf) \
226 { \
227 struct gb_loopback *gb = dev_get_drvdata(dev); \
228 return sprintf(buf, "%"#type"\n", gb->field); \
229 } \
230 static ssize_t field##_store(struct device *dev, \
231 struct device_attribute *attr, \
232 const char *buf, \
233 size_t len) \
234 { \
235 int ret; \
236 struct gb_loopback *gb = dev_get_drvdata(dev); \
237 mutex_lock(&gb->mutex); \
238 ret = sscanf(buf, "%"#type, &gb->field); \
239 if (ret != 1) \
240 len = -EINVAL; \
241 else \
242 gb_loopback_check_attr(gb); \
243 mutex_unlock(&gb->mutex); \
244 return len; \
245 } \
246 static DEVICE_ATTR_RW(field)
247
248 static void gb_loopback_reset_stats(struct gb_loopback *gb);
249 static void gb_loopback_check_attr(struct gb_loopback *gb)
250 {
251 if (gb->us_wait > GB_LOOPBACK_US_WAIT_MAX)
252 gb->us_wait = GB_LOOPBACK_US_WAIT_MAX;
253 if (gb->size > gb_dev.size_max)
254 gb->size = gb_dev.size_max;
255 gb->requests_timedout = 0;
256 gb->requests_completed = 0;
257 gb->iteration_count = 0;
258 gb->send_count = 0;
259 gb->error = 0;
260
261 if (kfifo_depth < gb->iteration_max) {
262 dev_warn(gb->dev,
263 "cannot log bytes %u kfifo_depth %u\n",
264 gb->iteration_max, kfifo_depth);
265 }
266 kfifo_reset_out(&gb->kfifo_lat);
267 kfifo_reset_out(&gb->kfifo_ts);
268
269 switch (gb->type) {
270 case GB_LOOPBACK_TYPE_PING:
271 case GB_LOOPBACK_TYPE_TRANSFER:
272 case GB_LOOPBACK_TYPE_SINK:
273 gb->jiffy_timeout = usecs_to_jiffies(gb->timeout);
274 if (!gb->jiffy_timeout)
275 gb->jiffy_timeout = GB_LOOPBACK_TIMEOUT_MIN;
276 else if (gb->jiffy_timeout > GB_LOOPBACK_TIMEOUT_MAX)
277 gb->jiffy_timeout = GB_LOOPBACK_TIMEOUT_MAX;
278 gb_loopback_reset_stats(gb);
279 wake_up(&gb->wq);
280 break;
281 default:
282 gb->type = 0;
283 break;
284 }
285 }
286
287 /* Time to send and receive one message */
> 288 gb_loopback_stats_attrs(latency);
289 /* Number of requests sent per second on this cport */
290 gb_loopback_stats_attrs(requests_per_second);
291 /* Quantity of data sent and received on this cport */
292 gb_loopback_stats_attrs(throughput);
293 /* Latency across the UniPro link from APBridge's perspective */
294 gb_loopback_stats_attrs(apbridge_unipro_latency);
295 /* Firmware induced overhead in the GPBridge */
> 296 gb_loopback_stats_attrs(gbphy_firmware_latency);
297
298 /* Number of errors encountered during loop */
299 gb_loopback_ro_attr(error);
300 /* Number of requests successfully completed async */
301 gb_loopback_ro_attr(requests_completed);
302 /* Number of requests timed out async */
303 gb_loopback_ro_attr(requests_timedout);
304 /* Timeout minimum in useconds */
305 gb_loopback_ro_attr(timeout_min);
306 /* Timeout minimum in useconds */
307 gb_loopback_ro_attr(timeout_max);
308
309 /*
310 * Type of loopback message to send based on protocol type definitions
311 * 0 => Don't send message
312 * 2 => Send ping message continuously (message without payload)
313 * 3 => Send transfer message continuously (message with payload,
314 * payload returned in response)
315 * 4 => Send a sink message (message with payload, no payload in response)
316 */
317 gb_dev_loopback_rw_attr(type, d);
318 /* Size of transfer message payload: 0-4096 bytes */
319 gb_dev_loopback_rw_attr(size, u);
320 /* Time to wait between two messages: 0-1000 ms */
321 gb_dev_loopback_rw_attr(us_wait, d);
322 /* Maximum iterations for a given operation: 1-(2^32-1), 0 implies infinite */
323 gb_dev_loopback_rw_attr(iteration_max, u);
324 /* The current index of the for (i = 0; i < iteration_max; i++) loop */
325 gb_dev_loopback_ro_attr(iteration_count, false);
326 /* A flag to indicate synchronous or asynchronous operations */
327 gb_dev_loopback_rw_attr(async, u);
328 /* Timeout of an individual asynchronous request */
329 gb_dev_loopback_rw_attr(timeout, u);
330 /* Maximum number of in-flight operations before back-off */
331 gb_dev_loopback_rw_attr(outstanding_operations_max, u);
332
333 static struct attribute *loopback_attrs[] = {
> 334 &dev_attr_latency_min.attr,
> 335 &dev_attr_latency_max.attr,
> 336 &dev_attr_latency_avg.attr,
> 337 &dev_attr_requests_per_second_min.attr,
> 338 &dev_attr_requests_per_second_max.attr,
> 339 &dev_attr_requests_per_second_avg.attr,
> 340 &dev_attr_throughput_min.attr,
> 341 &dev_attr_throughput_max.attr,
> 342 &dev_attr_throughput_avg.attr,
> 343 &dev_attr_apbridge_unipro_latency_min.attr,
> 344 &dev_attr_apbridge_unipro_latency_max.attr,
> 345 &dev_attr_apbridge_unipro_latency_avg.attr,
> 346 &dev_attr_gbphy_firmware_latency_min.attr,
> 347 &dev_attr_gbphy_firmware_latency_max.attr,
> 348 &dev_attr_gbphy_firmware_latency_avg.attr,
349 &dev_attr_type.attr,
350 &dev_attr_size.attr,
351 &dev_attr_us_wait.attr,

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

Attachment: .config.gz
Description: application/gzip