Hi Mark, Thank you for the patch! Yet something to improve: [auto build test ERROR on sound/for-next] [also build test ERROR on v5.8-rc3 next-20200701] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Mark-Hills/echoaudio-Race-conditions-around-opencount/20200701-203413 base: https://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git for-next config: arm-allyesconfig (attached as .config) compiler: arm-linux-gnueabi-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 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arm If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All error/warnings (new ones prefixed by >>): In file included from include/linux/kernel.h:11, from include/linux/delay.h:22, from sound/pci/echoaudio/mona.c:35: sound/pci/echoaudio/mona_dsp.c: In function 'set_input_clock': >> arch/arm/include/asm/atomic.h:27:37: error: request for member 'counter' in something not a structure or union 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~ include/linux/compiler.h:372:9: note: in definition of macro '__compiletime_assert' 372 | if (!(condition)) \ | ^~~~~~~~~ include/linux/compiler.h:392:2: note: in expansion of macro '_compiletime_assert' 392 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ include/linux/compiler.h:405:2: note: in expansion of macro 'compiletime_assert' 405 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~~~~~~ include/linux/compiler.h:405:21: note: in expansion of macro '__native_word' 405 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~ include/linux/compiler.h:291:2: note: in expansion of macro 'compiletime_assert_rwonce_type' 291 | compiletime_assert_rwonce_type(x); \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> arch/arm/include/asm/atomic.h:27:24: note: in expansion of macro 'READ_ONCE' 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~~~~~~~~ >> sound/pci/echoaudio/mona_dsp.c:305:6: note: in expansion of macro 'atomic_read' 305 | if (atomic_read(&chip->opencount)) | ^~~~~~~~~~~ >> arch/arm/include/asm/atomic.h:27:37: error: request for member 'counter' in something not a structure or union 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~ include/linux/compiler.h:372:9: note: in definition of macro '__compiletime_assert' 372 | if (!(condition)) \ | ^~~~~~~~~ include/linux/compiler.h:392:2: note: in expansion of macro '_compiletime_assert' 392 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ include/linux/compiler.h:405:2: note: in expansion of macro 'compiletime_assert' 405 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~~~~~~ include/linux/compiler.h:405:21: note: in expansion of macro '__native_word' 405 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~ include/linux/compiler.h:291:2: note: in expansion of macro 'compiletime_assert_rwonce_type' 291 | compiletime_assert_rwonce_type(x); \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> arch/arm/include/asm/atomic.h:27:24: note: in expansion of macro 'READ_ONCE' 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~~~~~~~~ >> sound/pci/echoaudio/mona_dsp.c:305:6: note: in expansion of macro 'atomic_read' 305 | if (atomic_read(&chip->opencount)) | ^~~~~~~~~~~ >> arch/arm/include/asm/atomic.h:27:37: error: request for member 'counter' in something not a structure or union 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~ include/linux/compiler.h:372:9: note: in definition of macro '__compiletime_assert' 372 | if (!(condition)) \ | ^~~~~~~~~ include/linux/compiler.h:392:2: note: in expansion of macro '_compiletime_assert' 392 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ include/linux/compiler.h:405:2: note: in expansion of macro 'compiletime_assert' 405 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~~~~~~ include/linux/compiler.h:405:21: note: in expansion of macro '__native_word' 405 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~ include/linux/compiler.h:291:2: note: in expansion of macro 'compiletime_assert_rwonce_type' 291 | compiletime_assert_rwonce_type(x); \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> arch/arm/include/asm/atomic.h:27:24: note: in expansion of macro 'READ_ONCE' 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~~~~~~~~ >> sound/pci/echoaudio/mona_dsp.c:305:6: note: in expansion of macro 'atomic_read' 305 | if (atomic_read(&chip->opencount)) | ^~~~~~~~~~~ >> arch/arm/include/asm/atomic.h:27:37: error: request for member 'counter' in something not a structure or union 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~ include/linux/compiler.h:372:9: note: in definition of macro '__compiletime_assert' 372 | if (!(condition)) \ | ^~~~~~~~~ include/linux/compiler.h:392:2: note: in expansion of macro '_compiletime_assert' 392 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ include/linux/compiler.h:405:2: note: in expansion of macro 'compiletime_assert' 405 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~~~~~~ include/linux/compiler.h:405:21: note: in expansion of macro '__native_word' 405 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~ include/linux/compiler.h:291:2: note: in expansion of macro 'compiletime_assert_rwonce_type' 291 | compiletime_assert_rwonce_type(x); \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> arch/arm/include/asm/atomic.h:27:24: note: in expansion of macro 'READ_ONCE' 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~~~~~~~~ >> sound/pci/echoaudio/mona_dsp.c:305:6: note: in expansion of macro 'atomic_read' 305 | if (atomic_read(&chip->opencount)) | ^~~~~~~~~~~ >> arch/arm/include/asm/atomic.h:27:37: error: request for member 'counter' in something not a structure or union 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~ include/linux/compiler.h:372:9: note: in definition of macro '__compiletime_assert' 372 | if (!(condition)) \ | ^~~~~~~~~ include/linux/compiler.h:392:2: note: in expansion of macro '_compiletime_assert' 392 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ include/linux/compiler.h:405:2: note: in expansion of macro 'compiletime_assert' 405 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~~~~~~ include/linux/compiler.h:291:2: note: in expansion of macro 'compiletime_assert_rwonce_type' 291 | compiletime_assert_rwonce_type(x); \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> arch/arm/include/asm/atomic.h:27:24: note: in expansion of macro 'READ_ONCE' 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~~~~~~~~ >> sound/pci/echoaudio/mona_dsp.c:305:6: note: in expansion of macro 'atomic_read' 305 | if (atomic_read(&chip->opencount)) | ^~~~~~~~~~~ In file included from : >> arch/arm/include/asm/atomic.h:27:37: error: request for member 'counter' in something not a structure or union 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~ include/linux/compiler_types.h:290:13: note: in definition of macro '__unqual_scalar_typeof' 290 | _Generic((x), \ | ^ include/linux/compiler.h:292:2: note: in expansion of macro '__READ_ONCE_SCALAR' 292 | __READ_ONCE_SCALAR(x); \ | ^~~~~~~~~~~~~~~~~~ >> arch/arm/include/asm/atomic.h:27:24: note: in expansion of macro 'READ_ONCE' 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~~~~~~~~ >> sound/pci/echoaudio/mona_dsp.c:305:6: note: in expansion of macro 'atomic_read' 305 | if (atomic_read(&chip->opencount)) | ^~~~~~~~~~~ >> arch/arm/include/asm/atomic.h:27:37: error: request for member 'counter' in something not a structure or union 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~ include/linux/compiler_types.h:290:13: note: in definition of macro '__unqual_scalar_typeof' 290 | _Generic((x), \ | ^ include/linux/compiler.h:284:34: note: in expansion of macro '__READ_ONCE' 284 | __unqual_scalar_typeof(x) __x = __READ_ONCE(x); \ | ^~~~~~~~~~~ include/linux/compiler.h:292:2: note: in expansion of macro '__READ_ONCE_SCALAR' 292 | __READ_ONCE_SCALAR(x); \ | ^~~~~~~~~~~~~~~~~~ >> arch/arm/include/asm/atomic.h:27:24: note: in expansion of macro 'READ_ONCE' 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~~~~~~~~ sound/pci/echoaudio/mona_dsp.c:305:6: note: in expansion of macro 'atomic_read' 305 | if (atomic_read(&chip->opencount)) | ^~~~~~~~~~~ In file included from include/linux/kernel.h:11, from include/linux/delay.h:22, from sound/pci/echoaudio/mona.c:35: arch/arm/include/asm/atomic.h:27:37: error: request for member 'counter' in something not a structure or union 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~ include/linux/compiler.h:280:72: note: in definition of macro '__READ_ONCE' 280 | #define __READ_ONCE(x) (*(const volatile __unqual_scalar_typeof(x) *)&(x)) | ^ include/linux/compiler.h:292:2: note: in expansion of macro '__READ_ONCE_SCALAR' 292 | __READ_ONCE_SCALAR(x); \ | ^~~~~~~~~~~~~~~~~~ arch/arm/include/asm/atomic.h:27:24: note: in expansion of macro 'READ_ONCE' 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~~~~~~~~ sound/pci/echoaudio/mona_dsp.c:305:6: note: in expansion of macro 'atomic_read' 305 | if (atomic_read(&chip->opencount)) | ^~~~~~~~~~~ arch/arm/include/asm/atomic.h:27:37: error: request for member 'counter' in something not a structure or union 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~ include/linux/compiler.h:286:10: note: in definition of macro '__READ_ONCE_SCALAR' 286 | (typeof(x))__x; \ | ^ arch/arm/include/asm/atomic.h:27:24: note: in expansion of macro 'READ_ONCE' 27 | #define atomic_read(v) READ_ONCE((v)->counter) | ^~~~~~~~~ sound/pci/echoaudio/mona_dsp.c:305:6: note: in expansion of macro 'atomic_read' 305 | if (atomic_read(&chip->opencount)) | ^~~~~~~~~~~ vim +/atomic_read +305 sound/pci/echoaudio/mona_dsp.c dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 295 dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 296 dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 297 dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 298 static int set_input_clock(struct echoaudio *chip, u16 clock) dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 299 { dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 300 u32 control_reg, clocks_from_dsp; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 301 int err; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 302 dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 303 dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 304 /* Prevent two simultaneous calls to switch_asic() */ dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 @305 if (atomic_read(&chip->opencount)) dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 306 return -EAGAIN; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 307 dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 308 /* Mask off the clock select bits */ dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 309 control_reg = le32_to_cpu(chip->comm_page->control_register) & dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 310 GML_CLOCK_CLEAR_MASK; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 311 clocks_from_dsp = le32_to_cpu(chip->comm_page->status_clocks); dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 312 dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 313 switch (clock) { dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 314 case ECHO_CLOCK_INTERNAL: dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 315 chip->input_clock = ECHO_CLOCK_INTERNAL; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 316 return set_sample_rate(chip, chip->sample_rate); dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 317 case ECHO_CLOCK_SPDIF: dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 318 if (chip->digital_mode == DIGITAL_MODE_ADAT) dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 319 return -EAGAIN; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 320 spin_unlock_irq(&chip->lock); dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 321 err = switch_asic(chip, clocks_from_dsp & dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 322 GML_CLOCK_DETECT_BIT_SPDIF96); dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 323 spin_lock_irq(&chip->lock); dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 324 if (err < 0) dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 325 return err; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 326 control_reg |= GML_SPDIF_CLOCK; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 327 if (clocks_from_dsp & GML_CLOCK_DETECT_BIT_SPDIF96) dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 328 control_reg |= GML_DOUBLE_SPEED_MODE; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 329 else dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 330 control_reg &= ~GML_DOUBLE_SPEED_MODE; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 331 break; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 332 case ECHO_CLOCK_WORD: dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 333 spin_unlock_irq(&chip->lock); dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 334 err = switch_asic(chip, clocks_from_dsp & dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 335 GML_CLOCK_DETECT_BIT_WORD96); dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 336 spin_lock_irq(&chip->lock); dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 337 if (err < 0) dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 338 return err; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 339 control_reg |= GML_WORD_CLOCK; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 340 if (clocks_from_dsp & GML_CLOCK_DETECT_BIT_WORD96) dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 341 control_reg |= GML_DOUBLE_SPEED_MODE; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 342 else dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 343 control_reg &= ~GML_DOUBLE_SPEED_MODE; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 344 break; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 345 case ECHO_CLOCK_ADAT: b5b4a41b392960 Sudip Mukherjee 2014-11-03 346 dev_dbg(chip->card->dev, "Set Mona clock to ADAT\n"); dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 347 if (chip->digital_mode != DIGITAL_MODE_ADAT) dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 348 return -EAGAIN; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 349 control_reg |= GML_ADAT_CLOCK; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 350 control_reg &= ~GML_DOUBLE_SPEED_MODE; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 351 break; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 352 default: b5b4a41b392960 Sudip Mukherjee 2014-11-03 353 dev_err(chip->card->dev, b5b4a41b392960 Sudip Mukherjee 2014-11-03 354 "Input clock 0x%x not supported for Mona\n", clock); dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 355 return -EINVAL; dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 356 } dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 357 dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 358 chip->input_clock = clock; 3f6175ece94735 Mark Brown 2015-08-10 359 return write_control_reg(chip, control_reg, true); dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 360 } dd7b254d8dd3a9 Giuliano Pochini 2006-06-28 361 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org