This patch add fixes an checkpatch error for "Macros with multiple statements should be enclosed in a do - while loop"
Signed-off-by: Hemansh Agnihotri hemanshagnihotri27@gmail.com --- drivers/staging/greybus/loopback.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/greybus/loopback.c b/drivers/staging/greybus/loopback.c index 2471448ba42a..6dd95d648999 100644 --- a/drivers/staging/greybus/loopback.c +++ b/drivers/staging/greybus/loopback.c @@ -162,10 +162,11 @@ static ssize_t name##_avg_show(struct device *dev, \ } \ static DEVICE_ATTR_RO(name##_avg)
-#define gb_loopback_stats_attrs(field) \ +#define gb_loopback_stats_attrs(field) do { \ gb_loopback_ro_stats_attr(field, min, u); \ gb_loopback_ro_stats_attr(field, max, u); \ - gb_loopback_ro_avg_attr(field) + gb_loopback_ro_avg_attr(field); \ + } while (0)
#define gb_loopback_attr(field, type) \ static ssize_t field##_show(struct device *dev, \
On Thu, Feb 11, 2021 at 03:24:44PM +0530, Hemansh Agnihotri wrote:
This patch add fixes an checkpatch error for "Macros with multiple statements should be enclosed in a do - while loop"
Signed-off-by: Hemansh Agnihotri hemanshagnihotri27@gmail.com
Any reason you didn't test-build your patch before sending it out?
That's a bit rude to reviewers :(
Please always do that.
thanks,
greg k-h
On 11-02-21, 11:00, Greg KH wrote:
On Thu, Feb 11, 2021 at 03:24:44PM +0530, Hemansh Agnihotri wrote:
This patch add fixes an checkpatch error for "Macros with multiple statements should be enclosed in a do - while loop"
Signed-off-by: Hemansh Agnihotri hemanshagnihotri27@gmail.com
Any reason you didn't test-build your patch before sending it out?
That's a bit rude to reviewers :(
I also wonder how two people stumbled upon the exact same thing at the same time. Copy/paste ?
https://lore.kernel.org/lkml/20210210221439.3489-2-yildirim.fatih@gmail.com/
And of course NAK for the patch. The macro is used outside of any other routine, and is actually used to create routines. No do-while required here.
On Thu, Feb 11, 2021 at 03:40:39PM +0530, Viresh Kumar wrote:
On 11-02-21, 11:00, Greg KH wrote:
On Thu, Feb 11, 2021 at 03:24:44PM +0530, Hemansh Agnihotri wrote:
This patch add fixes an checkpatch error for "Macros with multiple statements should be enclosed in a do - while loop"
Signed-off-by: Hemansh Agnihotri hemanshagnihotri27@gmail.com
Any reason you didn't test-build your patch before sending it out?
That's a bit rude to reviewers :(
I also wonder how two people stumbled upon the exact same thing at the same time. Copy/paste ?
Those things are pretty common where people try to fix the first checkpatch warning they find. There was one time some years back when 5 people sent the same patch.
regards, dan carpenter
Hi Hemansh,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on staging/staging-testing]
url: https://github.com/0day-ci/linux/commits/Hemansh-Agnihotri/staging-greybus-A... base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git 6953026f21092199a59f2c641a880b1c4025f932 config: m68k-randconfig-r003-20210211 (attached as .config) compiler: m68k-linux-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/e0f87bc4986d8e909dfda91664ce1700b01a... git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Hemansh-Agnihotri/staging-greybus-Added-do-while-in-multi-statement-macro/20210211-175717 git checkout e0f87bc4986d8e909dfda91664ce1700b01acb85 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=m68k
If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot lkp@intel.com
All errors (new ones prefixed by >>):
drivers/staging/greybus/loopback.c:165:40: error: expected identifier or '(' before 'do'
165 | #define gb_loopback_stats_attrs(field) do { \ | ^~ drivers/staging/greybus/loopback.c:272:1: note: in expansion of macro 'gb_loopback_stats_attrs' 272 | gb_loopback_stats_attrs(latency); | ^~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/greybus/loopback.c:169:4: error: expected identifier or '(' before 'while'
169 | } while (0) | ^~~~~ drivers/staging/greybus/loopback.c:272:1: note: in expansion of macro 'gb_loopback_stats_attrs' 272 | gb_loopback_stats_attrs(latency); | ^~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/greybus/loopback.c:165:40: error: expected identifier or '(' before 'do'
165 | #define gb_loopback_stats_attrs(field) do { \ | ^~ drivers/staging/greybus/loopback.c:274:1: note: in expansion of macro 'gb_loopback_stats_attrs' 274 | gb_loopback_stats_attrs(requests_per_second); | ^~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/greybus/loopback.c:169:4: error: expected identifier or '(' before 'while'
169 | } while (0) | ^~~~~ drivers/staging/greybus/loopback.c:274:1: note: in expansion of macro 'gb_loopback_stats_attrs' 274 | gb_loopback_stats_attrs(requests_per_second); | ^~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/greybus/loopback.c:165:40: error: expected identifier or '(' before 'do'
165 | #define gb_loopback_stats_attrs(field) do { \ | ^~ drivers/staging/greybus/loopback.c:276:1: note: in expansion of macro 'gb_loopback_stats_attrs' 276 | gb_loopback_stats_attrs(throughput); | ^~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/greybus/loopback.c:169:4: error: expected identifier or '(' before 'while'
169 | } while (0) | ^~~~~ drivers/staging/greybus/loopback.c:276:1: note: in expansion of macro 'gb_loopback_stats_attrs' 276 | gb_loopback_stats_attrs(throughput); | ^~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/greybus/loopback.c:165:40: error: expected identifier or '(' before 'do'
165 | #define gb_loopback_stats_attrs(field) do { \ | ^~ drivers/staging/greybus/loopback.c:278:1: note: in expansion of macro 'gb_loopback_stats_attrs' 278 | gb_loopback_stats_attrs(apbridge_unipro_latency); | ^~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/greybus/loopback.c:169:4: error: expected identifier or '(' before 'while'
169 | } while (0) | ^~~~~ drivers/staging/greybus/loopback.c:278:1: note: in expansion of macro 'gb_loopback_stats_attrs' 278 | gb_loopback_stats_attrs(apbridge_unipro_latency); | ^~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/greybus/loopback.c:165:40: error: expected identifier or '(' before 'do'
165 | #define gb_loopback_stats_attrs(field) do { \ | ^~ drivers/staging/greybus/loopback.c:280:1: note: in expansion of macro 'gb_loopback_stats_attrs' 280 | gb_loopback_stats_attrs(gbphy_firmware_latency); | ^~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/greybus/loopback.c:169:4: error: expected identifier or '(' before 'while'
169 | } while (0) | ^~~~~ drivers/staging/greybus/loopback.c:280:1: note: in expansion of macro 'gb_loopback_stats_attrs' 280 | gb_loopback_stats_attrs(gbphy_firmware_latency); | ^~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/greybus/loopback.c:318:3: error: 'dev_attr_latency_min' undeclared here (not in a function); did you mean 'dev_attr_timeout_min'?
318 | &dev_attr_latency_min.attr, | ^~~~~~~~~~~~~~~~~~~~ | dev_attr_timeout_min
drivers/staging/greybus/loopback.c:319:3: error: 'dev_attr_latency_max' undeclared here (not in a function); did you mean 'dev_attr_timeout_max'?
319 | &dev_attr_latency_max.attr, | ^~~~~~~~~~~~~~~~~~~~ | dev_attr_timeout_max
drivers/staging/greybus/loopback.c:320:3: error: 'dev_attr_latency_avg' undeclared here (not in a function)
320 | &dev_attr_latency_avg.attr, | ^~~~~~~~~~~~~~~~~~~~
drivers/staging/greybus/loopback.c:321:3: error: 'dev_attr_requests_per_second_min' undeclared here (not in a function)
321 | &dev_attr_requests_per_second_min.attr, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/greybus/loopback.c:322:3: error: 'dev_attr_requests_per_second_max' undeclared here (not in a function)
322 | &dev_attr_requests_per_second_max.attr, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/greybus/loopback.c:323:3: error: 'dev_attr_requests_per_second_avg' undeclared here (not in a function)
323 | &dev_attr_requests_per_second_avg.attr, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/greybus/loopback.c:324:3: error: 'dev_attr_throughput_min' undeclared here (not in a function); did you mean 'dev_attr_timeout_min'?
324 | &dev_attr_throughput_min.attr, | ^~~~~~~~~~~~~~~~~~~~~~~ | dev_attr_timeout_min
drivers/staging/greybus/loopback.c:325:3: error: 'dev_attr_throughput_max' undeclared here (not in a function); did you mean 'dev_attr_timeout_max'?
325 | &dev_attr_throughput_max.attr, | ^~~~~~~~~~~~~~~~~~~~~~~ | dev_attr_timeout_max
drivers/staging/greybus/loopback.c:326:3: error: 'dev_attr_throughput_avg' undeclared here (not in a function)
326 | &dev_attr_throughput_avg.attr, | ^~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/greybus/loopback.c:327:3: error: 'dev_attr_apbridge_unipro_latency_min' undeclared here (not in a function)
327 | &dev_attr_apbridge_unipro_latency_min.attr, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/staging/greybus/loopback.c:328:3: error: 'dev_attr_apbridge_unipro_latency_max' undeclared here (not in a function) 328 | &dev_attr_apbridge_unipro_latency_max.attr, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/staging/greybus/loopback.c:329:3: error: 'dev_attr_apbridge_unipro_latency_avg' undeclared here (not in a function) 329 | &dev_attr_apbridge_unipro_latency_avg.attr, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/staging/greybus/loopback.c:330:3: error: 'dev_attr_gbphy_firmware_latency_min' undeclared here (not in a function) 330 | &dev_attr_gbphy_firmware_latency_min.attr, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/staging/greybus/loopback.c:331:3: error: 'dev_attr_gbphy_firmware_latency_max' undeclared here (not in a function) 331 | &dev_attr_gbphy_firmware_latency_max.attr, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/staging/greybus/loopback.c:332:3: error: 'dev_attr_gbphy_firmware_latency_avg' undeclared here (not in a function) 332 | &dev_attr_gbphy_firmware_latency_avg.attr, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vim +165 drivers/staging/greybus/loopback.c
164
165 #define gb_loopback_stats_attrs(field) do { \
166 gb_loopback_ro_stats_attr(field, min, u); \ 167 gb_loopback_ro_stats_attr(field, max, u); \ 168 gb_loopback_ro_avg_attr(field); \
169 } while (0)
170 171 #define gb_loopback_attr(field, type) \ 172 static ssize_t field##_show(struct device *dev, \ 173 struct device_attribute *attr, \ 174 char *buf) \ 175 { \ 176 struct gb_loopback *gb = dev_get_drvdata(dev); \ 177 return sprintf(buf, "%" #type "\n", gb->field); \ 178 } \ 179 static ssize_t field##_store(struct device *dev, \ 180 struct device_attribute *attr, \ 181 const char *buf, \ 182 size_t len) \ 183 { \ 184 int ret; \ 185 struct gb_loopback *gb = dev_get_drvdata(dev); \ 186 mutex_lock(&gb->mutex); \ 187 ret = sscanf(buf, "%"#type, &gb->field); \ 188 if (ret != 1) \ 189 len = -EINVAL; \ 190 else \ 191 gb_loopback_check_attr(gb, bundle); \ 192 mutex_unlock(&gb->mutex); \ 193 return len; \ 194 } \ 195 static DEVICE_ATTR_RW(field) 196 197 #define gb_dev_loopback_ro_attr(field, conn) \ 198 static ssize_t field##_show(struct device *dev, \ 199 struct device_attribute *attr, \ 200 char *buf) \ 201 { \ 202 struct gb_loopback *gb = dev_get_drvdata(dev); \ 203 return sprintf(buf, "%u\n", gb->field); \ 204 } \ 205 static DEVICE_ATTR_RO(field) 206 207 #define gb_dev_loopback_rw_attr(field, type) \ 208 static ssize_t field##_show(struct device *dev, \ 209 struct device_attribute *attr, \ 210 char *buf) \ 211 { \ 212 struct gb_loopback *gb = dev_get_drvdata(dev); \ 213 return sprintf(buf, "%" #type "\n", gb->field); \ 214 } \ 215 static ssize_t field##_store(struct device *dev, \ 216 struct device_attribute *attr, \ 217 const char *buf, \ 218 size_t len) \ 219 { \ 220 int ret; \ 221 struct gb_loopback *gb = dev_get_drvdata(dev); \ 222 mutex_lock(&gb->mutex); \ 223 ret = sscanf(buf, "%"#type, &gb->field); \ 224 if (ret != 1) \ 225 len = -EINVAL; \ 226 else \ 227 gb_loopback_check_attr(gb); \ 228 mutex_unlock(&gb->mutex); \ 229 return len; \ 230 } \ 231 static DEVICE_ATTR_RW(field) 232 233 static void gb_loopback_reset_stats(struct gb_loopback *gb); 234 static void gb_loopback_check_attr(struct gb_loopback *gb) 235 { 236 if (gb->us_wait > GB_LOOPBACK_US_WAIT_MAX) 237 gb->us_wait = GB_LOOPBACK_US_WAIT_MAX; 238 if (gb->size > gb_dev.size_max) 239 gb->size = gb_dev.size_max; 240 gb->requests_timedout = 0; 241 gb->requests_completed = 0; 242 gb->iteration_count = 0; 243 gb->send_count = 0; 244 gb->error = 0; 245 246 if (kfifo_depth < gb->iteration_max) { 247 dev_warn(gb->dev, 248 "cannot log bytes %u kfifo_depth %u\n", 249 gb->iteration_max, kfifo_depth); 250 } 251 kfifo_reset_out(&gb->kfifo_lat); 252 253 switch (gb->type) { 254 case GB_LOOPBACK_TYPE_PING: 255 case GB_LOOPBACK_TYPE_TRANSFER: 256 case GB_LOOPBACK_TYPE_SINK: 257 gb->jiffy_timeout = usecs_to_jiffies(gb->timeout); 258 if (!gb->jiffy_timeout) 259 gb->jiffy_timeout = GB_LOOPBACK_TIMEOUT_MIN; 260 else if (gb->jiffy_timeout > GB_LOOPBACK_TIMEOUT_MAX) 261 gb->jiffy_timeout = GB_LOOPBACK_TIMEOUT_MAX; 262 gb_loopback_reset_stats(gb); 263 wake_up(&gb->wq); 264 break; 265 default: 266 gb->type = 0; 267 break; 268 } 269 } 270 271 /* Time to send and receive one message */ 272 gb_loopback_stats_attrs(latency); 273 /* Number of requests sent per second on this cport */ 274 gb_loopback_stats_attrs(requests_per_second); 275 /* Quantity of data sent and received on this cport */ 276 gb_loopback_stats_attrs(throughput); 277 /* Latency across the UniPro link from APBridge's perspective */ 278 gb_loopback_stats_attrs(apbridge_unipro_latency); 279 /* Firmware induced overhead in the GPBridge */ 280 gb_loopback_stats_attrs(gbphy_firmware_latency); 281 282 /* Number of errors encountered during loop */ 283 gb_loopback_ro_attr(error); 284 /* Number of requests successfully completed async */ 285 gb_loopback_ro_attr(requests_completed); 286 /* Number of requests timed out async */ 287 gb_loopback_ro_attr(requests_timedout); 288 /* Timeout minimum in useconds */ 289 gb_loopback_ro_attr(timeout_min); 290 /* Timeout minimum in useconds */ 291 gb_loopback_ro_attr(timeout_max); 292 293 /* 294 * Type of loopback message to send based on protocol type definitions 295 * 0 => Don't send message 296 * 2 => Send ping message continuously (message without payload) 297 * 3 => Send transfer message continuously (message with payload, 298 * payload returned in response) 299 * 4 => Send a sink message (message with payload, no payload in response) 300 */ 301 gb_dev_loopback_rw_attr(type, d); 302 /* Size of transfer message payload: 0-4096 bytes */ 303 gb_dev_loopback_rw_attr(size, u); 304 /* Time to wait between two messages: 0-1000 ms */ 305 gb_dev_loopback_rw_attr(us_wait, d); 306 /* Maximum iterations for a given operation: 1-(2^32-1), 0 implies infinite */ 307 gb_dev_loopback_rw_attr(iteration_max, u); 308 /* The current index of the for (i = 0; i < iteration_max; i++) loop */ 309 gb_dev_loopback_ro_attr(iteration_count, false); 310 /* A flag to indicate synchronous or asynchronous operations */ 311 gb_dev_loopback_rw_attr(async, u); 312 /* Timeout of an individual asynchronous request */ 313 gb_dev_loopback_rw_attr(timeout, u); 314 /* Maximum number of in-flight operations before back-off */ 315 gb_dev_loopback_rw_attr(outstanding_operations_max, u); 316 317 static struct attribute *loopback_attrs[] = {
318 &dev_attr_latency_min.attr, 319 &dev_attr_latency_max.attr, 320 &dev_attr_latency_avg.attr, 321 &dev_attr_requests_per_second_min.attr, 322 &dev_attr_requests_per_second_max.attr, 323 &dev_attr_requests_per_second_avg.attr, 324 &dev_attr_throughput_min.attr, 325 &dev_attr_throughput_max.attr, 326 &dev_attr_throughput_avg.attr, 327 &dev_attr_apbridge_unipro_latency_min.attr, 328 &dev_attr_apbridge_unipro_latency_max.attr, 329 &dev_attr_apbridge_unipro_latency_avg.attr, 330 &dev_attr_gbphy_firmware_latency_min.attr, 331 &dev_attr_gbphy_firmware_latency_max.attr, 332 &dev_attr_gbphy_firmware_latency_avg.attr,
333 &dev_attr_type.attr, 334 &dev_attr_size.attr, 335 &dev_attr_us_wait.attr, 336 &dev_attr_iteration_count.attr, 337 &dev_attr_iteration_max.attr, 338 &dev_attr_async.attr, 339 &dev_attr_error.attr, 340 &dev_attr_requests_completed.attr, 341 &dev_attr_requests_timedout.attr, 342 &dev_attr_timeout.attr, 343 &dev_attr_outstanding_operations_max.attr, 344 &dev_attr_timeout_min.attr, 345 &dev_attr_timeout_max.attr, 346 NULL, 347 }; 348 ATTRIBUTE_GROUPS(loopback); 349
--- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org