Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【6.9】飞腾 SPI 驱动无法构建 #2

Open
Tracked by #11 ...
MingcongBai opened this issue Jun 27, 2024 · 0 comments
Open
Tracked by #11 ...

【6.9】飞腾 SPI 驱动无法构建 #2

MingcongBai opened this issue Jun 27, 2024 · 0 comments

Comments

@MingcongBai
Copy link

MingcongBai commented Jun 27, 2024

详见日志(需要进行移植适配):

  CC [M]  drivers/spi/spi-phytium.o
  CC [M]  drivers/spi/spi-phytium-pci.o
  CC [M]  drivers/spi/spi-phytium-dma.o
In file included from ./include/linux/bits.h:6,
                 from ./include/linux/bitops.h:6,
                 from ./include/linux/kernel.h:23,
                 from ./include/linux/clk.h:13,
                 from drivers/spi/spi-phytium.c:11:
drivers/spi/spi-phytium.c: In functionphytium_spi_set_cs’:
./include/vdso/bits.h:7:40: error: invalid operands to binary << (have ‘long unsigned intandu8 *’ {aka ‘unsigned char *’})
    7 | #define BIT(nr)                 (UL(1) << (nr))
      |                                        ^~
      |                                        |
      |                                        u8 * {aka unsigned char *}
drivers/spi/spi-phytium.c:56:42: note: in expansion of macroBIT56 |                 phytium_writel(fts, SER, BIT(spi->chip_select));
      |                                          ^~~
drivers/spi/spi-phytium.c:59:63: error: invalid operands to binary << (haveintandu8 *’ {aka ‘unsigned char *’})
   59 |                         phytium_writel(fts, GCSR, origin | (1 << spi->chip_select));
      |                                                               ^~
      |                                                               |
      |                                                               u8 * {aka unsigned char *}
drivers/spi/spi-phytium.c:64:64: error: invalid operands to binary << (haveintandu8 *’ {aka ‘unsigned char *’})
   64 |                         phytium_writel(fts, GCSR, origin & ~(1 << spi->chip_select));
      |                                                                ^~
      |                                                                |
      |                                                                u8 * {aka unsigned char *}
In file included from ./include/linux/device.h:15,
                 from ./include/linux/platform_device.h:13,
                 from drivers/spi/spi-phytium.c:17:
drivers/spi/spi-phytium.c: In functionphytium_spi_check_status’:
drivers/spi/spi-phytium.c:133:37: error: invalid use of undefined typestruct spi_master133 |                 dev_err(&fts->master->dev, "RX FIFO overflow detected\n");
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:133:17: note: in expansion of macrodev_err133 |                 dev_err(&fts->master->dev, "RX FIFO overflow detected\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium.c:138:37: error: invalid use of undefined typestruct spi_master138 |                 dev_err(&fts->master->dev, "RX FIFO underflow detected\n");
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:138:17: note: in expansion of macrodev_err138 |                 dev_err(&fts->master->dev, "RX FIFO underflow detected\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium.c:143:37: error: invalid use of undefined typestruct spi_master143 |                 dev_err(&fts->master->dev, "TX FIFO overflow detected\n");
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:143:17: note: in expansion of macrodev_err143 |                 dev_err(&fts->master->dev, "TX FIFO overflow detected\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium.c:150:32: error: invalid use of undefined typestruct spi_master150 |                 if (fts->master->cur_msg)
      |                                ^~
drivers/spi/spi-phytium.c:151:36: error: invalid use of undefined typestruct spi_master151 |                         fts->master->cur_msg->status = ret;
      |                                    ^~
drivers/spi/spi-phytium.c: In functionint_error_stop’:
drivers/spi/spi-phytium.c:161:29: error: invalid use of undefined typestruct spi_master161 |         dev_err(&fts->master->dev, "%s\n", msg);
      |                             ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:161:9: note: in expansion of macrodev_err161 |         dev_err(&fts->master->dev, "%s\n", msg);
      |         ^~~~~~~
drivers/spi/spi-phytium.c:162:20: error: invalid use of undefined typestruct spi_master162 |         fts->master->cur_msg->status = -EIO;
      |                    ^~
drivers/spi/spi-phytium.c:163:42: error: passing argument 1 ofspi_finalize_current_transferfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  163 |         spi_finalize_current_transfer(fts->master);
      |                                       ~~~^~~~~~~~
      |                                          |
      |                                          struct spi_master *
In file included from drivers/spi/spi-phytium.c:19:
./include/linux/spi/spi.h:821:66: note: expectedstruct spi_controller *but argument is of typestruct spi_master *821 | extern void spi_finalize_current_transfer(struct spi_controller *ctlr);
      |                                           ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functioninterrupt_transfer’:
drivers/spi/spi-phytium.c:179:50: error: passing argument 1 ofspi_finalize_current_transferfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  179 |                 spi_finalize_current_transfer(fts->master);
      |                                               ~~~^~~~~~~~
      |                                                  |
      |                                                  struct spi_master *
./include/linux/spi/spi.h:821:66: note: expectedstruct spi_controller *but argument is of typestruct spi_master *821 | extern void spi_finalize_current_transfer(struct spi_controller *ctlr);
      |                                           ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_irq’:
drivers/spi/spi-phytium.c:194:62: error: ‘controllerundeclared (first use in this function); did you meanspi_controller’?
  194 |         struct phytium_spi *fts = spi_controller_get_devdata(controller);
      |                                                              ^~~~~~~~~~
      |                                                              spi_controller
drivers/spi/spi-phytium.c:194:62: note: each undeclared identifier is reported only once for each function it appears in
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_init’:
drivers/spi/spi-phytium-dma.c:79:20: error: invalid use of undefined typestruct spi_master79 |         fts->master->dma_rx = fts->rxchan;
      |                    ^~
drivers/spi/spi-phytium.c:200:20: error: invalid use of undefined typestruct spi_master200 |         if (!master->cur_msg) {
      |                    ^~
drivers/spi/spi-phytium-dma.c:80:20: error: invalid use of undefined typestruct spi_master80 |         fts->master->dma_tx = fts->txchan;
      |                    ^~
drivers/spi/spi-phytium.c: In functionphytium_spi_transfer_one’:
drivers/spi/spi-phytium.c:225:62: error: passing argument 1 ofspi_controller_get_devdatafrom incompatible pointer type [-Werror=incompatible-pointer-types]
  225 |         struct phytium_spi *fts = spi_controller_get_devdata(master);
      |                                                              ^~~~~~
      |                                                              |
      |                                                              struct spi_master *
./include/linux/spi/spi.h:780:71: note: expectedstruct spi_controller *but argument is of typestruct spi_master *780 | static inline void *spi_controller_get_devdata(struct spi_controller *ctlr)
      |                                                ~~~~~~~~~~~~~~~~~~~~~~~^~~~
In file included from ./include/linux/device.h:15,
                 from ./include/linux/dma-mapping.h:8,
                 from drivers/spi/spi-phytium-dma.c:8:
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_wait’:
drivers/spi/spi-phytium-dma.c:146:37: error: invalid use of undefined typestruct spi_master146 |                 dev_err(&fts->master->cur_msg->spi->dev,
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium-dma.c:146:17: note: in expansion of macrodev_err146 |                 dev_err(&fts->master->cur_msg->spi->dev,
      |                 ^~~~~~~
drivers/spi/spi-phytium.c:281:19: error: invalid use of undefined typestruct spi_master281 |         if (master->can_dma && master->can_dma(master, spi, transfer))
      |                   ^~
drivers/spi/spi-phytium.c:281:38: error: invalid use of undefined typestruct spi_master281 |         if (master->can_dma && master->can_dma(master, spi, transfer))
      |                                      ^~
drivers/spi/spi-phytium.c:282:41: error: invalid use of undefined typestruct spi_master282 |                 fts->dma_mapped = master->cur_msg_mapped;
      |                                         ^~
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_wait_tx_done’:
drivers/spi/spi-phytium-dma.c:190:37: error: invalid use of undefined typestruct spi_master190 |                 dev_err(&fts->master->dev, "Tx hanged up\n");
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium-dma.c:190:17: note: in expansion of macrodev_err190 |                 dev_err(&fts->master->dev, "Tx hanged up\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_wait_rx_done’:
drivers/spi/spi-phytium.c: In functionphytium_spi_handle_err’:
drivers/spi/spi-phytium.c:318:62: error: passing argument 1 ofspi_controller_get_devdatafrom incompatible pointer type [-Werror=incompatible-pointer-types]
  318 |         struct phytium_spi *fts = spi_controller_get_devdata(master);
      |                                                              ^~~~~~
      |                                                              |
      |                                                              struct spi_master *
./include/linux/spi/spi.h:780:71: note: expectedstruct spi_controller *but argument is of typestruct spi_master *780 | static inline void *spi_controller_get_devdata(struct spi_controller *ctlr)
      |                                                ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium-dma.c:283:37: error: invalid use of undefined typestruct spi_master283 |                 dev_err(&fts->master->dev, "Rx hanged up, nents = %d\n", nents);
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium-dma.c:283:17: note: in expansion of macrodev_err283 |                 dev_err(&fts->master->dev, "Rx hanged up, nents = %d\n", nents);
      |                 ^~~~~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_setup’:
drivers/spi/spi-phytium.c:330:40: error: ‘struct spi_devicehas no member namedmaster330 |         struct spi_master *master = spi->master;
      |                                        ^~
drivers/spi/spi-phytium.c:331:62: error: passing argument 1 ofspi_controller_get_devdatafrom incompatible pointer type [-Werror=incompatible-pointer-types]
  331 |         struct phytium_spi *fts = spi_controller_get_devdata(master);
      |                                                              ^~~~~~
      |                                                              |
      |                                                              struct spi_master *
./include/linux/spi/spi.h:780:71: note: expectedstruct spi_controller *but argument is of typestruct spi_master *780 | static inline void *spi_controller_get_devdata(struct spi_controller *ctlr)
      |                                                ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_add_host’:
drivers/spi/spi-phytium.c:400:16: error: assignment tostruct spi_master *from incompatible pointer typestruct spi_controller *’ [-Werror=incompatible-pointer-types]
  400 |         master = spi_alloc_master(dev, 0);
      |                ^
drivers/spi/spi-phytium.c:415:15: error: invalid use of undefined typestruct spi_master415 |         master->use_gpio_descriptors = true;
      |               ^~
drivers/spi/spi-phytium.c:416:15: error: invalid use of undefined typestruct spi_master416 |         master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LOOP;
      |               ^~
drivers/spi/spi-phytium.c:417:15: error: invalid use of undefined typestruct spi_master417 |         master->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(16);
      |               ^~
drivers/spi/spi-phytium.c:418:15: error: invalid use of undefined typestruct spi_master418 |         master->bus_num = fts->bus_num;
      |               ^~
drivers/spi/spi-phytium.c:419:15: error: invalid use of undefined typestruct spi_master419 |         master->num_chipselect = fts->num_cs;
      |               ^~
drivers/spi/spi-phytium.c:420:15: error: invalid use of undefined typestruct spi_master420 |         master->setup = phytium_spi_setup;
      |               ^~
drivers/spi/spi-phytium.c:421:15: error: invalid use of undefined typestruct spi_master421 |         master->cleanup = phytium_spi_cleanup;
      |               ^~
drivers/spi/spi-phytium.c:422:15: error: invalid use of undefined typestruct spi_master422 |         master->set_cs = phytium_spi_set_cs;
      |               ^~
drivers/spi/spi-phytium.c:423:15: error: invalid use of undefined typestruct spi_master423 |         master->transfer_one = phytium_spi_transfer_one;
      |               ^~
drivers/spi/spi-phytium.c:424:15: error: invalid use of undefined typestruct spi_master424 |         master->handle_err = phytium_spi_handle_err;
      |               ^~
drivers/spi/spi-phytium.c:425:15: error: invalid use of undefined typestruct spi_master425 |         master->max_speed_hz = fts->max_freq;
      |               ^~
drivers/spi/spi-phytium.c:426:15: error: invalid use of undefined typestruct spi_master426 |         master->dev.of_node = dev->of_node;
      |               ^~
drivers/spi/spi-phytium.c:427:15: error: invalid use of undefined typestruct spi_master427 |         master->dev.fwnode = dev->fwnode;
      |               ^~
drivers/spi/spi-phytium.c:428:15: error: invalid use of undefined typestruct spi_master428 |         master->flags = SPI_CONTROLLER_GPIO_SS;
      |               ^~
drivers/spi/spi-phytium.c:437:31: error: invalid use of undefined typestruct spi_master437 |                         master->can_dma = fts->dma_ops->can_dma;
      |                               ^~
drivers/spi/spi-phytium.c:438:31: error: invalid use of undefined typestruct spi_master438 |                         master->flags |= SPI_CONTROLLER_MUST_TX;
      |                               ^~
drivers/spi/spi-phytium.c:442:36: error: passing argument 1 ofspi_controller_set_devdatafrom incompatible pointer type [-Werror=incompatible-pointer-types]
  442 |         spi_controller_set_devdata(master, fts);
      |                                    ^~~~~~
      |                                    |
      |                                    struct spi_master *
./include/linux/spi/spi.h:785:70: note: expectedstruct spi_controller *but argument is of typestruct spi_master *785 | static inline void spi_controller_set_devdata(struct spi_controller *ctlr,
      |                                               ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c:443:39: error: passing argument 1 ofspi_register_controllerfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  443 |         ret = spi_register_controller(master);
      |                                       ^~~~~~
      |                                       |
      |                                       struct spi_master *
./include/linux/spi/spi.h:899:59: note: expectedstruct spi_controller *but argument is of typestruct spi_master *899 | extern int spi_register_controller(struct spi_controller *ctlr);
      |                                    ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c:445:32: error: invalid use of undefined typestruct spi_master445 |                 dev_err(&master->dev, "problem registering spi master\n");
      |                                ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:445:17: note: in expansion of macrodev_err445 |                 dev_err(&master->dev, "problem registering spi master\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_transfer’:
drivers/spi/spi-phytium-dma.c:514:24: error: invalid use of undefined typestruct spi_master514 |         if (fts->master->cur_msg->status == -EINPROGRESS) {
      |                        ^~
drivers/spi/spi-phytium-dma.c:520:40: error: invalid use of undefined typestruct spi_master520 |         if (xfer->rx_buf && fts->master->cur_msg->status == -EINPROGRESS)
      |                                        ^~
drivers/spi/spi-phytium-pci.c: In functionspi_suspend’:
drivers/spi/spi-phytium-pci.c:92:62: error: ‘controllerundeclared (first use in this function); did you meanspi_controller’?
   92 |         struct phytium_spi *fts = spi_controller_get_devdata(controller);
      |                                                              ^~~~~~~~~~
      |                                                              spi_controller
drivers/spi/spi-phytium-pci.c:92:62: note: each undeclared identifier is reported only once for each function it appears in
drivers/spi/spi-phytium-pci.c:91:28: error: unused variablemaster’ [-Werror=unused-variable]
   91 |         struct spi_master *master = dev_get_drvdata(dev);
      |                            ^~~~~~
drivers/spi/spi-phytium-pci.c: In functionspi_resume’:
drivers/spi/spi-phytium-pci.c:100:62: error: ‘spi_controllerundeclared (first use in this function)
  100 |         struct phytium_spi *fts = spi_controller_get_devdata(spi_controller);
      |                                                              ^~~~~~~~~~~~~~
drivers/spi/spi-phytium-pci.c:99:28: error: unused variablemaster’ [-Werror=unused-variable]
   99 |         struct spi_master *master = dev_get_drvdata(dev);
      |                            ^~~~~~
drivers/spi/spi-phytium.c:457:9: error: implicit declaration of functionspi_master_put’; did you meanspi_dev_put’? [-Werror=implicit-function-declaration]
  457 |         spi_master_put(master);
      |         ^~~~~~~~~~~~~~
      |         spi_dev_put
drivers/spi/spi-phytium.c: In functionphytium_spi_remove_host’:
drivers/spi/spi-phytium.c:468:38: error: passing argument 1 ofspi_unregister_controllerfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  468 |         spi_unregister_controller(fts->master);
      |                                   ~~~^~~~~~~~
      |                                      |
      |                                      struct spi_master *
./include/linux/spi/spi.h:902:62: note: expectedstruct spi_controller *but argument is of typestruct spi_master *902 | extern void spi_unregister_controller(struct spi_controller *ctlr);
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_suspend_host’:
drivers/spi/spi-phytium.c:478:41: error: passing argument 1 ofspi_controller_suspendfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  478 |         ret = spi_controller_suspend(fts->master);
      |                                      ~~~^~~~~~~~
      |                                         |
      |                                         struct spi_master *
./include/linux/spi/spi.h:815:58: note: expectedstruct spi_controller *but argument is of typestruct spi_master *815 | extern int spi_controller_suspend(struct spi_controller *ctlr);
      |                                   ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_resume_host’:
drivers/spi/spi-phytium.c:491:33: error: invalid use of undefined typestruct spi_master491 |         spi_hw_init(&fts->master->dev, fts);
      |                                 ^~
drivers/spi/spi-phytium.c:492:40: error: passing argument 1 ofspi_controller_resumefrom incompatible pointer type [-Werror=incompatible-pointer-types]
  492 |         ret = spi_controller_resume(fts->master);
      |                                     ~~~^~~~~~~~
      |                                        |
      |                                        struct spi_master *
./include/linux/spi/spi.h:816:57: note: expectedstruct spi_controller *but argument is of typestruct spi_master *816 | extern int spi_controller_resume(struct spi_controller *ctlr);
      |                                  ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c:494:37: error: invalid use of undefined typestruct spi_master494 |                 dev_err(&fts->master->dev, "fail to start queue (%d)\n", ret);
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:494:17: note: in expansion of macrodev_err494 |                 dev_err(&fts->master->dev, "fail to start queue (%d)\n", ret);
      |                 ^~~~~~~
cc1: all warnings being treated as errors
make[7]: *** [scripts/Makefile.build:244drivers/spi/spi-phytium-dma.o] 错误 1
make[7]: *** 正在等待未完成的任务....
cc1: all warnings being treated as errors
make[7]: *** [scripts/Makefile.build:244drivers/spi/spi-phytium-pci.o] 错误 1
make[7]: *** [scripts/Makefile.build:244drivers/spi/spi-phytium.o] 错误 1
make[6]: *** [scripts/Makefile.build:485drivers/spi] 错误 2
make[6]: *** 正在等待未完成的任务....
  CHK     kernel/kheaders_data.tar.xz
^Cmake[7]: *** [scripts/Makefile.build:485: sound/soc/codecs] 中断
make[8]: *** [scripts/Makefile.build:485: drivers/gpu/drm/nouveau] 中断
make[8]: *** [scripts/Makefile.build:485: drivers/gpu/drm/amd/amdgpu] 中断
make[6]: *** [scripts/Makefile.build:485: sound/soc] 中断
make[8]: *** [scripts/Makefile.build:485: drivers/gpu/drm/i915] 中断
make[5]: *** [scripts/Makefile.build:485: sound] 中断
make[7]: *** [scripts/Makefile.build:485: drivers/gpu/drm] 中断
make[6]: *** [scripts/Makefile.build:485: drivers/gpu] 中断
make[5]: *** [scripts/Makefile.build:485: drivers] 中断
make[4]: *** [Makefile:1915: .] 中断
make[3]: *** [debian/rules:74: build-arch] 中断
dpkg-buildpackage: error: make -f debian/rules binary subprocess was killed by signal 2
make[2]: *** [scripts/Makefile.package:121: bindeb-pkg] 中断
make[1]: *** [/root/linux/Makefile:1537: bindeb-pkg] 中断
make: *** [Makefile:240: __sub-make] 中断

root@deepinci-amd7:~/linux# ^C
root@deepinci-amd7:~/linux# nano +492 drivers/spi/spi-phytium.c
root@deepinci-amd7:~/linux# make bindeb-pkg -j$(nproc)
  GEN     debian
dpkg-buildpackage --build=binary --no-pre-clean --unsigned-changes -R'make -f debian/rules' -j1 -a$(cat debian/arch)
dpkg-buildpackage: info: source package linux-upstream
dpkg-buildpackage: info: source version 23.01.01.01
dpkg-buildpackage: info: source distribution beige
dpkg-buildpackage: info: source changed by root <root@deepinci-amd7>
dpkg-buildpackage: info: host architecture amd64
 dpkg-source --before-build .
 make -f debian/rules binary                                                                
#                                                                                           
# No change to .config
#
mkdir -p /root/linux/tools/objtool && make O=/root/linux subdir=tools/objtool --no-print-directory -C objtool 
mkdir -p /root/linux/tools/bpf/resolve_btfids && make O=/root/linux subdir=tools/bpf/resolve_btfids --no-print-directory -C bpf/resolve_btfids 
  INSTALL libsubcmd_headers
  INSTALL libsubcmd_headers
  CALL    scripts/checksyscalls.sh
  CC [M]  drivers/spi/spi-phytium.o
  CC [M]  drivers/spi/spi-phytium-pci.o
  CC [M]  drivers/spi/spi-phytium-dma.o
In file included from ./include/linux/bits.h:6,
                 from ./include/linux/bitops.h:6,
                 from ./include/linux/kernel.h:23,
                 from ./include/linux/clk.h:13,
                 from drivers/spi/spi-phytium.c:11:
drivers/spi/spi-phytium.c: In functionphytium_spi_set_cs’:
./include/vdso/bits.h:7:40: error: invalid operands to binary << (have ‘long unsigned intandu8 *’ {aka ‘unsigned char *’})
    7 | #define BIT(nr)                 (UL(1) << (nr))
      |                                        ^~
      |                                        |
      |                                        u8 * {aka unsigned char *}
drivers/spi/spi-phytium.c:56:42: note: in expansion of macroBIT56 |                 phytium_writel(fts, SER, BIT(spi->chip_select));
      |                                          ^~~
drivers/spi/spi-phytium.c:59:63: error: invalid operands to binary << (haveintandu8 *’ {aka ‘unsigned char *’})
   59 |                         phytium_writel(fts, GCSR, origin | (1 << spi->chip_select));
      |                                                               ^~
      |                                                               |
      |                                                               u8 * {aka unsigned char *}
drivers/spi/spi-phytium.c:64:64: error: invalid operands to binary << (haveintandu8 *’ {aka ‘unsigned char *’})
   64 |                         phytium_writel(fts, GCSR, origin & ~(1 << spi->chip_select));
      |                                                                ^~
      |                                                                |
      |                                                                u8 * {aka unsigned char *}
In file included from ./include/linux/device.h:15,
                 from ./include/linux/platform_device.h:13,
                 from drivers/spi/spi-phytium.c:17:
drivers/spi/spi-phytium.c: In functionphytium_spi_check_status’:
drivers/spi/spi-phytium.c:133:37: error: invalid use of undefined typestruct spi_master133 |                 dev_err(&fts->master->dev, "RX FIFO overflow detected\n");
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:133:17: note: in expansion of macrodev_err133 |                 dev_err(&fts->master->dev, "RX FIFO overflow detected\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium.c:138:37: error: invalid use of undefined typestruct spi_master138 |                 dev_err(&fts->master->dev, "RX FIFO underflow detected\n");
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:138:17: note: in expansion of macrodev_err138 |                 dev_err(&fts->master->dev, "RX FIFO underflow detected\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium.c:143:37: error: invalid use of undefined typestruct spi_master143 |                 dev_err(&fts->master->dev, "TX FIFO overflow detected\n");
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:143:17: note: in expansion of macrodev_err143 |                 dev_err(&fts->master->dev, "TX FIFO overflow detected\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium.c:150:32: error: invalid use of undefined typestruct spi_master150 |                 if (fts->master->cur_msg)
      |                                ^~
drivers/spi/spi-phytium.c:151:36: error: invalid use of undefined typestruct spi_master151 |                         fts->master->cur_msg->status = ret;
      |                                    ^~
drivers/spi/spi-phytium.c: In functionint_error_stop’:
drivers/spi/spi-phytium.c:161:29: error: invalid use of undefined typestruct spi_master161 |         dev_err(&fts->master->dev, "%s\n", msg);
      |                             ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:161:9: note: in expansion of macrodev_err161 |         dev_err(&fts->master->dev, "%s\n", msg);
      |         ^~~~~~~
drivers/spi/spi-phytium.c:162:20: error: invalid use of undefined typestruct spi_master162 |         fts->master->cur_msg->status = -EIO;
      |                    ^~
drivers/spi/spi-phytium.c:163:42: error: passing argument 1 ofspi_finalize_current_transferfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  163 |         spi_finalize_current_transfer(fts->master);
      |                                       ~~~^~~~~~~~
      |                                          |
      |                                          struct spi_master *
In file included from drivers/spi/spi-phytium.c:19:
./include/linux/spi/spi.h:821:66: note: expectedstruct spi_controller *but argument is of typestruct spi_master *821 | extern void spi_finalize_current_transfer(struct spi_controller *ctlr);
      |                                           ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functioninterrupt_transfer’:
drivers/spi/spi-phytium.c:179:50: error: passing argument 1 ofspi_finalize_current_transferfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  179 |                 spi_finalize_current_transfer(fts->master);
      |                                               ~~~^~~~~~~~
      |                                                  |
      |                                                  struct spi_master *
./include/linux/spi/spi.h:821:66: note: expectedstruct spi_controller *but argument is of typestruct spi_master *821 | extern void spi_finalize_current_transfer(struct spi_controller *ctlr);
      |                                           ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_irq’:
drivers/spi/spi-phytium.c:194:62: error: ‘controllerundeclared (first use in this function); did you meanspi_controller’?
  194 |         struct phytium_spi *fts = spi_controller_get_devdata(controller);
      |                                                              ^~~~~~~~~~
      |                                                              spi_controller
drivers/spi/spi-phytium.c:194:62: note: each undeclared identifier is reported only once for each function it appears in
drivers/spi/spi-phytium.c:200:20: error: invalid use of undefined typestruct spi_master200 |         if (!master->cur_msg) {
      |                    ^~
drivers/spi/spi-phytium.c: In functionphytium_spi_transfer_one’:
drivers/spi/spi-phytium.c:225:62: error: passing argument 1 ofspi_controller_get_devdatafrom incompatible pointer type [-Werror=incompatible-pointer-types]
  225 |         struct phytium_spi *fts = spi_controller_get_devdata(master);
      |                                                              ^~~~~~
      |                                                              |
      |                                                              struct spi_master *
./include/linux/spi/spi.h:780:71: note: expectedstruct spi_controller *but argument is of typestruct spi_master *780 | static inline void *spi_controller_get_devdata(struct spi_controller *ctlr)
      |                                                ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c:281:19: error: invalid use of undefined typestruct spi_master281 |         if (master->can_dma && master->can_dma(master, spi, transfer))
      |                   ^~
drivers/spi/spi-phytium.c:281:38: error: invalid use of undefined typestruct spi_master281 |         if (master->can_dma && master->can_dma(master, spi, transfer))
      |                                      ^~
drivers/spi/spi-phytium.c:282:41: error: invalid use of undefined typestruct spi_master282 |                 fts->dma_mapped = master->cur_msg_mapped;
      |                                         ^~
drivers/spi/spi-phytium.c: In functionphytium_spi_handle_err’:
drivers/spi/spi-phytium.c:318:62: error: passing argument 1 ofspi_controller_get_devdatafrom incompatible pointer type [-Werror=incompatible-pointer-types]
  318 |         struct phytium_spi *fts = spi_controller_get_devdata(master);
      |                                                              ^~~~~~
      |                                                              |
      |                                                              struct spi_master *
./include/linux/spi/spi.h:780:71: note: expectedstruct spi_controller *but argument is of typestruct spi_master *780 | static inline void *spi_controller_get_devdata(struct spi_controller *ctlr)
      |                                                ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_setup’:
drivers/spi/spi-phytium.c:330:40: error: ‘struct spi_devicehas no member namedmaster330 |         struct spi_master *master = spi->master;
      |                                        ^~
drivers/spi/spi-phytium.c:331:62: error: passing argument 1 ofspi_controller_get_devdatafrom incompatible pointer type [-Werror=incompatible-pointer-types]
  331 |         struct phytium_spi *fts = spi_controller_get_devdata(master);
      |                                                              ^~~~~~
      |                                                              |
      |                                                              struct spi_master *
./include/linux/spi/spi.h:780:71: note: expectedstruct spi_controller *but argument is of typestruct spi_master *780 | static inline void *spi_controller_get_devdata(struct spi_controller *ctlr)
      |                                                ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_add_host’:
drivers/spi/spi-phytium.c:400:16: error: assignment tostruct spi_master *from incompatible pointer typestruct spi_controller *’ [-Werror=incompatible-pointer-types]
  400 |         master = spi_alloc_master(dev, 0);
      |                ^
drivers/spi/spi-phytium.c:415:15: error: invalid use of undefined typestruct spi_master415 |         master->use_gpio_descriptors = true;
      |               ^~
drivers/spi/spi-phytium.c:416:15: error: invalid use of undefined typestruct spi_master416 |         master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LOOP;
      |               ^~
drivers/spi/spi-phytium.c:417:15: error: invalid use of undefined typestruct spi_master417 |         master->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(16);
      |               ^~
drivers/spi/spi-phytium.c:418:15: error: invalid use of undefined typestruct spi_master418 |         master->bus_num = fts->bus_num;
      |               ^~
drivers/spi/spi-phytium.c:419:15: error: invalid use of undefined typestruct spi_master419 |         master->num_chipselect = fts->num_cs;
      |               ^~
drivers/spi/spi-phytium.c:420:15: error: invalid use of undefined typestruct spi_master420 |         master->setup = phytium_spi_setup;
      |               ^~
drivers/spi/spi-phytium.c:421:15: error: invalid use of undefined typestruct spi_master421 |         master->cleanup = phytium_spi_cleanup;
      |               ^~
drivers/spi/spi-phytium.c:422:15: error: invalid use of undefined typestruct spi_master422 |         master->set_cs = phytium_spi_set_cs;
      |               ^~
drivers/spi/spi-phytium.c:423:15: error: invalid use of undefined typestruct spi_master423 |         master->transfer_one = phytium_spi_transfer_one;
      |               ^~
drivers/spi/spi-phytium.c:424:15: error: invalid use of undefined typestruct spi_master424 |         master->handle_err = phytium_spi_handle_err;
      |               ^~
drivers/spi/spi-phytium.c:425:15: error: invalid use of undefined typestruct spi_master425 |         master->max_speed_hz = fts->max_freq;
      |               ^~
drivers/spi/spi-phytium.c:426:15: error: invalid use of undefined typestruct spi_master426 |         master->dev.of_node = dev->of_node;
      |               ^~
drivers/spi/spi-phytium.c:427:15: error: invalid use of undefined typestruct spi_master427 |         master->dev.fwnode = dev->fwnode;
      |               ^~
drivers/spi/spi-phytium.c:428:15: error: invalid use of undefined typestruct spi_master428 |         master->flags = SPI_CONTROLLER_GPIO_SS;
      |               ^~
drivers/spi/spi-phytium.c:437:31: error: invalid use of undefined typestruct spi_master437 |                         master->can_dma = fts->dma_ops->can_dma;
      |                               ^~
drivers/spi/spi-phytium.c:438:31: error: invalid use of undefined typestruct spi_master438 |                         master->flags |= SPI_CONTROLLER_MUST_TX;
      |                               ^~
drivers/spi/spi-phytium.c:442:36: error: passing argument 1 ofspi_controller_set_devdatafrom incompatible pointer type [-Werror=incompatible-pointer-types]
  442 |         spi_controller_set_devdata(master, fts);
      |                                    ^~~~~~
      |                                    |
      |                                    struct spi_master *
./include/linux/spi/spi.h:785:70: note: expectedstruct spi_controller *but argument is of typestruct spi_master *785 | static inline void spi_controller_set_devdata(struct spi_controller *ctlr,
      |                                               ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c:443:39: error: passing argument 1 ofspi_register_controllerfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  443 |         ret = spi_register_controller(master);
      |                                       ^~~~~~
      |                                       |
      |                                       struct spi_master *
./include/linux/spi/spi.h:899:59: note: expectedstruct spi_controller *but argument is of typestruct spi_master *899 | extern int spi_register_controller(struct spi_controller *ctlr);
      |                                    ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c:445:32: error: invalid use of undefined typestruct spi_master445 |                 dev_err(&master->dev, "problem registering spi master\n");
      |                                ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:445:17: note: in expansion of macrodev_err445 |                 dev_err(&master->dev, "problem registering spi master\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium-pci.c: In functionspi_suspend’:
drivers/spi/spi-phytium-pci.c:92:62: error: ‘controllerundeclared (first use in this function); did you meanspi_controller’?
   92 |         struct phytium_spi *fts = spi_controller_get_devdata(controller);
      |                                                              ^~~~~~~~~~
      |                                                              spi_controller
drivers/spi/spi-phytium-pci.c:92:62: note: each undeclared identifier is reported only once for each function it appears in
drivers/spi/spi-phytium-pci.c:91:28: error: unused variablemaster’ [-Werror=unused-variable]
   91 |         struct spi_master *master = dev_get_drvdata(dev);
      |                            ^~~~~~
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_init’:
drivers/spi/spi-phytium-dma.c:79:20: error: invalid use of undefined typestruct spi_master79 |         fts->master->dma_rx = fts->rxchan;
      |                    ^~
drivers/spi/spi-phytium-dma.c:80:20: error: invalid use of undefined typestruct spi_master80 |         fts->master->dma_tx = fts->txchan;
      |                    ^~
In file included from ./include/linux/device.h:15,
                 from ./include/linux/dma-mapping.h:8,
                 from drivers/spi/spi-phytium-dma.c:8:
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_wait’:
drivers/spi/spi-phytium-dma.c:146:37: error: invalid use of undefined typestruct spi_master146 |                 dev_err(&fts->master->cur_msg->spi->dev,
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium-dma.c:146:17: note: in expansion of macrodev_err146 |                 dev_err(&fts->master->cur_msg->spi->dev,
      |                 ^~~~~~~
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_wait_tx_done’:
drivers/spi/spi-phytium-dma.c:190:37: error: invalid use of undefined typestruct spi_master190 |                 dev_err(&fts->master->dev, "Tx hanged up\n");
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium-dma.c:190:17: note: in expansion of macrodev_err190 |                 dev_err(&fts->master->dev, "Tx hanged up\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_wait_rx_done’:
drivers/spi/spi-phytium-dma.c:283:37: error: invalid use of undefined typestruct spi_master283 |                 dev_err(&fts->master->dev, "Rx hanged up, nents = %d\n", nents);
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium-dma.c:283:17: note: in expansion of macrodev_err283 |                 dev_err(&fts->master->dev, "Rx hanged up, nents = %d\n", nents);
      |                 ^~~~~~~
drivers/spi/spi-phytium.c:457:9: error: implicit declaration of functionspi_master_put’; did you meanspi_dev_put’? [-Werror=implicit-function-declaration]
  457 |         spi_master_put(master);
      |         ^~~~~~~~~~~~~~
      |         spi_dev_put
drivers/spi/spi-phytium.c: In functionphytium_spi_remove_host’:
drivers/spi/spi-phytium-pci.c: In functionspi_resume’:
drivers/spi/spi-phytium-pci.c:100:62: error: ‘spi_controllerundeclared (first use in this function)
  100 |         struct phytium_spi *fts = spi_controller_get_devdata(spi_controller);
      |                                                              ^~~~~~~~~~~~~~
drivers/spi/spi-phytium-pci.c:99:28: error: unused variablemaster’ [-Werror=unused-variable]
   99 |         struct spi_master *master = dev_get_drvdata(dev);
      |                            ^~~~~~
drivers/spi/spi-phytium.c:468:38: error: passing argument 1 ofspi_unregister_controllerfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  468 |         spi_unregister_controller(fts->master);
      |                                   ~~~^~~~~~~~
      |                                      |
      |                                      struct spi_master *
./include/linux/spi/spi.h:902:62: note: expectedstruct spi_controller *but argument is of typestruct spi_master *902 | extern void spi_unregister_controller(struct spi_controller *ctlr);
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_suspend_host’:
drivers/spi/spi-phytium.c:478:41: error: passing argument 1 ofspi_controller_suspendfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  478 |         ret = spi_controller_suspend(fts->master);
      |                                      ~~~^~~~~~~~
      |                                         |
      |                                         struct spi_master *
./include/linux/spi/spi.h:815:58: note: expectedstruct spi_controller *but argument is of typestruct spi_master *815 | extern int spi_controller_suspend(struct spi_controller *ctlr);
      |                                   ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_resume_host’:
drivers/spi/spi-phytium.c:491:33: error: invalid use of undefined typestruct spi_master491 |         spi_hw_init(&fts->master->dev, fts);
      |                                 ^~
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_transfer’:
drivers/spi/spi-phytium-dma.c:514:24: error: invalid use of undefined typestruct spi_master514 |         if (fts->master->cur_msg->status == -EINPROGRESS) {
      |                        ^~
drivers/spi/spi-phytium-dma.c:520:40: error: invalid use of undefined typestruct spi_master520 |         if (xfer->rx_buf && fts->master->cur_msg->status == -EINPROGRESS)
      |                                        ^~
cc1: all warnings being treated as errors
drivers/spi/spi-phytium.c:492:37: error: ‘controllerundeclared (first use in this function); did you meanspi_controller’?
  492 |         ret = spi_controller_resume(controller);
      |                                     ^~~~~~~~~~
      |                                     spi_controller
drivers/spi/spi-phytium.c:494:37: error: invalid use of undefined typestruct spi_master494 |                 dev_err(&fts->master->dev, "fail to start queue (%d)\n", ret);
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:494:17: note: in expansion of macrodev_err494 |                 dev_err(&fts->master->dev, "fail to start queue (%d)\n", ret);
      |                 ^~~~~~~
cc1: all warnings being treated as errors
make[7]: *** [scripts/Makefile.build:244drivers/spi/spi-phytium-pci.o] 错误 1
make[7]: *** 正在等待未完成的任务....
make[7]: *** [scripts/Makefile.build:244drivers/spi/spi-phytium-dma.o] 错误 1
make[7]: *** [scripts/Makefile.build:244drivers/spi/spi-phytium.o] 错误 1
make[6]: *** [scripts/Makefile.build:485drivers/spi] 错误 2
make[6]: *** 正在等待未完成的任务....
  CHK     kernel/kheaders_data.tar.xz
^Cmake[6]: *** [scripts/Makefile.build:485: fs/xfs] 中断
make[8]: *** [scripts/Makefile.build:485: drivers/gpu/drm/i915] 中断
make[9]: *** [scripts/Makefile.build:485: drivers/net/ethernet/mellanox/mlx5/core] 中断
make[8]: *** [scripts/Makefile.build:485: drivers/gpu/drm/nouveau] 中断
make[8]: *** [scripts/Makefile.build:485: drivers/gpu/drm/amd/amdgpu] 中断
make[8]: *** [scripts/Makefile.build:485: drivers/net/ethernet/mellanox] 中断
make[5]: *** [scripts/Makefile.build:485: fs] 中断
make[7]: *** [scripts/Makefile.build:485: drivers/net/ethernet] 中断
make[7]: *** [scripts/Makefile.build:485: sound/soc/codecs] 中断
make[7]: *** [scripts/Makefile.build:485: drivers/gpu/drm] 中断
make[6]: *** [scripts/Makefile.build:485: drivers/net] 中断
make[6]: *** [scripts/Makefile.build:485: drivers/gpu] 中断
make[6]: *** [scripts/Makefile.build:485: sound/soc] 中断
make[5]: *** [scripts/Makefile.build:485: drivers] 中断
make[5]: *** [scripts/Makefile.build:485: sound] 中断
make[4]: *** [Makefile:1915: .] 中断
make[3]: *** [debian/rules:74: build-arch] 中断
dpkg-buildpackage: error: make -f debian/rules binary subprocess was killed by signal 2
make[2]: *** [scripts/Makefile.package:121: bindeb-pkg] 中断
make[1]: *** [/root/linux/Makefile:1537: bindeb-pkg] 中断
make: *** [Makefile:240: __sub-make] 中断

root@deepinci-amd7:~/linux# ^C
root@deepinci-amd7:~/linux# make bindeb-pkg -j$(nproc)
  GEN     debian
dpkg-buildpackage --build=binary --no-pre-clean --unsigned-changes -R'make -f debian/rules' -j1 -a$(cat debian/arch)
^Cmake[2]: *** [scripts/Makefile.package:121: bindeb-pkg] 中断
make[1]: *** [/root/linux/Makefile:1537: bindeb-pkg] 中断
make: *** [Makefile:240: __sub-make] 中断

root@deepinci-amd7:~/linux# nano +492 drivers/spi/spi-phytium.c
root@deepinci-amd7:~/linux# nano +492 drivers/spi/spi-phytium.c
root@deepinci-amd7:~/linux# make bindeb-pkg -j$(nproc)
  GEN     debian
dpkg-buildpackage --build=binary --no-pre-clean --unsigned-changes -R'make -f debian/rules' -j1 -a$(cat debian/arch)
dpkg-buildpackage: info: source package linux-upstream
dpkg-buildpackage: info: source version 23.01.01.01
dpkg-buildpackage: info: source distribution beige
dpkg-buildpackage: info: source changed by root <root@deepinci-amd7>
dpkg-buildpackage: info: host architecture amd64
 dpkg-source --before-build .
 make -f debian/rules binary                                                                
#                                                                                           
# No change to .config
#
mkdir -p /root/linux/tools/objtool && make O=/root/linux subdir=tools/objtool --no-print-directory -C objtool 
mkdir -p /root/linux/tools/bpf/resolve_btfids && make O=/root/linux subdir=tools/bpf/resolve_btfids --no-print-directory -C bpf/resolve_btfids 
  INSTALL libsubcmd_headers
  INSTALL libsubcmd_headers
  CALL    scripts/checksyscalls.sh
  CC [M]  drivers/spi/spi-phytium.o
  CC [M]  drivers/spi/spi-phytium-pci.o
  CC [M]  drivers/spi/spi-phytium-dma.o
In file included from ./include/linux/bits.h:6,
                 from ./include/linux/bitops.h:6,
                 from ./include/linux/kernel.h:23,
                 from ./include/linux/clk.h:13,
                 from drivers/spi/spi-phytium.c:11:
drivers/spi/spi-phytium.c: In functionphytium_spi_set_cs’:
./include/vdso/bits.h:7:40: error: invalid operands to binary << (have ‘long unsigned intandu8 *’ {aka ‘unsigned char *’})
    7 | #define BIT(nr)                 (UL(1) << (nr))
      |                                        ^~
      |                                        |
      |                                        u8 * {aka unsigned char *}
drivers/spi/spi-phytium.c:56:42: note: in expansion of macroBIT56 |                 phytium_writel(fts, SER, BIT(spi->chip_select));
      |                                          ^~~
drivers/spi/spi-phytium.c:59:63: error: invalid operands to binary << (haveintandu8 *’ {aka ‘unsigned char *’})
   59 |                         phytium_writel(fts, GCSR, origin | (1 << spi->chip_select));
      |                                                               ^~
      |                                                               |
      |                                                               u8 * {aka unsigned char *}
drivers/spi/spi-phytium.c:64:64: error: invalid operands to binary << (haveintandu8 *’ {aka ‘unsigned char *’})
   64 |                         phytium_writel(fts, GCSR, origin & ~(1 << spi->chip_select));
      |                                                                ^~
      |                                                                |
      |                                                                u8 * {aka unsigned char *}
In file included from ./include/linux/device.h:15,
                 from ./include/linux/platform_device.h:13,
                 from drivers/spi/spi-phytium.c:17:
drivers/spi/spi-phytium.c: In functionphytium_spi_check_status’:
drivers/spi/spi-phytium.c:133:37: error: invalid use of undefined typestruct spi_master133 |                 dev_err(&fts->master->dev, "RX FIFO overflow detected\n");
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:133:17: note: in expansion of macrodev_err133 |                 dev_err(&fts->master->dev, "RX FIFO overflow detected\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium.c:138:37: error: invalid use of undefined typestruct spi_master138 |                 dev_err(&fts->master->dev, "RX FIFO underflow detected\n");
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:138:17: note: in expansion of macrodev_err138 |                 dev_err(&fts->master->dev, "RX FIFO underflow detected\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium.c:143:37: error: invalid use of undefined typestruct spi_master143 |                 dev_err(&fts->master->dev, "TX FIFO overflow detected\n");
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:143:17: note: in expansion of macrodev_err143 |                 dev_err(&fts->master->dev, "TX FIFO overflow detected\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium.c:150:32: error: invalid use of undefined typestruct spi_master150 |                 if (fts->master->cur_msg)
      |                                ^~
drivers/spi/spi-phytium.c:151:36: error: invalid use of undefined typestruct spi_master151 |                         fts->master->cur_msg->status = ret;
      |                                    ^~
drivers/spi/spi-phytium.c: In functionint_error_stop’:
drivers/spi/spi-phytium.c:161:29: error: invalid use of undefined typestruct spi_master161 |         dev_err(&fts->master->dev, "%s\n", msg);
      |                             ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:161:9: note: in expansion of macrodev_err161 |         dev_err(&fts->master->dev, "%s\n", msg);
      |         ^~~~~~~
drivers/spi/spi-phytium.c:162:20: error: invalid use of undefined typestruct spi_master162 |         fts->master->cur_msg->status = -EIO;
      |                    ^~
drivers/spi/spi-phytium.c:163:42: error: passing argument 1 ofspi_finalize_current_transferfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  163 |         spi_finalize_current_transfer(fts->master);
      |                                       ~~~^~~~~~~~
      |                                          |
      |                                          struct spi_master *
In file included from drivers/spi/spi-phytium.c:19:
./include/linux/spi/spi.h:821:66: note: expectedstruct spi_controller *but argument is of typestruct spi_master *821 | extern void spi_finalize_current_transfer(struct spi_controller *ctlr);
      |                                           ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functioninterrupt_transfer’:
drivers/spi/spi-phytium.c:179:50: error: passing argument 1 ofspi_finalize_current_transferfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  179 |                 spi_finalize_current_transfer(fts->master);
      |                                               ~~~^~~~~~~~
      |                                                  |
      |                                                  struct spi_master *
./include/linux/spi/spi.h:821:66: note: expectedstruct spi_controller *but argument is of typestruct spi_master *821 | extern void spi_finalize_current_transfer(struct spi_controller *ctlr);
      |                                           ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_init’:
drivers/spi/spi-phytium-dma.c:79:20: error: invalid use of undefined typestruct spi_master79 |         fts->master->dma_rx = fts->rxchan;
      |                    ^~
drivers/spi/spi-phytium-dma.c:80:20: error: invalid use of undefined typestruct spi_master80 |         fts->master->dma_tx = fts->txchan;
      |                    ^~
drivers/spi/spi-phytium.c: In functionphytium_spi_irq’:
drivers/spi/spi-phytium.c:194:62: error: ‘controllerundeclared (first use in this function); did you meanspi_controller’?
  194 |         struct phytium_spi *fts = spi_controller_get_devdata(controller);
      |                                                              ^~~~~~~~~~
      |                                                              spi_controller
drivers/spi/spi-phytium.c:194:62: note: each undeclared identifier is reported only once for each function it appears in
In file included from ./include/linux/device.h:15,
                 from ./include/linux/dma-mapping.h:8,
                 from drivers/spi/spi-phytium-dma.c:8:
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_wait’:
drivers/spi/spi-phytium.c:200:20: error: invalid use of undefined typestruct spi_master200 |         if (!master->cur_msg) {
      |                    ^~
drivers/spi/spi-phytium-dma.c:146:37: error: invalid use of undefined typestruct spi_master146 |                 dev_err(&fts->master->cur_msg->spi->dev,
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium-dma.c:146:17: note: in expansion of macrodev_err146 |                 dev_err(&fts->master->cur_msg->spi->dev,
      |                 ^~~~~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_transfer_one’:
drivers/spi/spi-phytium.c:225:62: error: passing argument 1 ofspi_controller_get_devdatafrom incompatible pointer type [-Werror=incompatible-pointer-types]
  225 |         struct phytium_spi *fts = spi_controller_get_devdata(master);
      |                                                              ^~~~~~
      |                                                              |
      |                                                              struct spi_master *
./include/linux/spi/spi.h:780:71: note: expectedstruct spi_controller *but argument is of typestruct spi_master *780 | static inline void *spi_controller_get_devdata(struct spi_controller *ctlr)
      |                                                ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_wait_tx_done’:
drivers/spi/spi-phytium-dma.c:190:37: error: invalid use of undefined typestruct spi_master190 |                 dev_err(&fts->master->dev, "Tx hanged up\n");
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium-dma.c:190:17: note: in expansion of macrodev_err190 |                 dev_err(&fts->master->dev, "Tx hanged up\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium.c:281:19: error: invalid use of undefined typestruct spi_master281 |         if (master->can_dma && master->can_dma(master, spi, transfer))
      |                   ^~
drivers/spi/spi-phytium.c:281:38: error: invalid use of undefined typestruct spi_master281 |         if (master->can_dma && master->can_dma(master, spi, transfer))
      |                                      ^~
drivers/spi/spi-phytium.c:282:41: error: invalid use of undefined typestruct spi_master282 |                 fts->dma_mapped = master->cur_msg_mapped;
      |                                         ^~
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_wait_rx_done’:
drivers/spi/spi-phytium-dma.c:283:37: error: invalid use of undefined typestruct spi_master283 |                 dev_err(&fts->master->dev, "Rx hanged up, nents = %d\n", nents);
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium-dma.c:283:17: note: in expansion of macrodev_err283 |                 dev_err(&fts->master->dev, "Rx hanged up, nents = %d\n", nents);
      |                 ^~~~~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_handle_err’:
drivers/spi/spi-phytium.c:318:62: error: passing argument 1 ofspi_controller_get_devdatafrom incompatible pointer type [-Werror=incompatible-pointer-types]
  318 |         struct phytium_spi *fts = spi_controller_get_devdata(master);
      |                                                              ^~~~~~
      |                                                              |
      |                                                              struct spi_master *
./include/linux/spi/spi.h:780:71: note: expectedstruct spi_controller *but argument is of typestruct spi_master *780 | static inline void *spi_controller_get_devdata(struct spi_controller *ctlr)
      |                                                ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_setup’:
drivers/spi/spi-phytium.c:330:40: error: ‘struct spi_devicehas no member namedmaster330 |         struct spi_master *master = spi->master;
      |                                        ^~
drivers/spi/spi-phytium.c:331:62: error: passing argument 1 ofspi_controller_get_devdatafrom incompatible pointer type [-Werror=incompatible-pointer-types]
  331 |         struct phytium_spi *fts = spi_controller_get_devdata(master);
      |                                                              ^~~~~~
      |                                                              |
      |                                                              struct spi_master *
./include/linux/spi/spi.h:780:71: note: expectedstruct spi_controller *but argument is of typestruct spi_master *780 | static inline void *spi_controller_get_devdata(struct spi_controller *ctlr)
      |                                                ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_add_host’:
drivers/spi/spi-phytium.c:400:16: error: assignment tostruct spi_master *from incompatible pointer typestruct spi_controller *’ [-Werror=incompatible-pointer-types]
  400 |         master = spi_alloc_master(dev, 0);
      |                ^
drivers/spi/spi-phytium.c:415:15: error: invalid use of undefined typestruct spi_master415 |         master->use_gpio_descriptors = true;
      |               ^~
drivers/spi/spi-phytium.c:416:15: error: invalid use of undefined typestruct spi_master416 |         master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LOOP;
      |               ^~
drivers/spi/spi-phytium.c:417:15: error: invalid use of undefined typestruct spi_master417 |         master->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(16);
      |               ^~
drivers/spi/spi-phytium.c:418:15: error: invalid use of undefined typestruct spi_master418 |         master->bus_num = fts->bus_num;
      |               ^~
drivers/spi/spi-phytium.c:419:15: error: invalid use of undefined typestruct spi_master419 |         master->num_chipselect = fts->num_cs;
      |               ^~
drivers/spi/spi-phytium-pci.c: In functionspi_suspend’:
drivers/spi/spi-phytium.c:420:15: error: invalid use of undefined typestruct spi_master420 |         master->setup = phytium_spi_setup;
      |               ^~
drivers/spi/spi-phytium-pci.c:92:62: error: ‘controllerundeclared (first use in this function); did you meanspi_controller’?
   92 |         struct phytium_spi *fts = spi_controller_get_devdata(controller);
      |                                                              ^~~~~~~~~~
      |                                                              spi_controller
drivers/spi/spi-phytium.c:421:15: error: invalid use of undefined typestruct spi_master421 |         master->cleanup = phytium_spi_cleanup;
      |               ^~
drivers/spi/spi-phytium-pci.c:92:62: note: each undeclared identifier is reported only once for each function it appears in
drivers/spi/spi-phytium.c:422:15: error: invalid use of undefined typestruct spi_master422 |         master->set_cs = phytium_spi_set_cs;
      |               ^~
drivers/spi/spi-phytium-pci.c:91:28: error: unused variablemaster’ [-Werror=unused-variable]
   91 |         struct spi_master *master = dev_get_drvdata(dev);
      |                            ^~~~~~
drivers/spi/spi-phytium.c:423:15: error: invalid use of undefined typestruct spi_master423 |         master->transfer_one = phytium_spi_transfer_one;
      |               ^~
drivers/spi/spi-phytium.c:424:15: error: invalid use of undefined typestruct spi_master424 |         master->handle_err = phytium_spi_handle_err;
      |               ^~
drivers/spi/spi-phytium.c:425:15: error: invalid use of undefined typestruct spi_master425 |         master->max_speed_hz = fts->max_freq;
      |               ^~
drivers/spi/spi-phytium.c:426:15: error: invalid use of undefined typestruct spi_master426 |         master->dev.of_node = dev->of_node;
      |               ^~
drivers/spi/spi-phytium.c:427:15: error: invalid use of undefined typestruct spi_master427 |         master->dev.fwnode = dev->fwnode;
      |               ^~
drivers/spi/spi-phytium.c:428:15: error: invalid use of undefined typestruct spi_master428 |         master->flags = SPI_CONTROLLER_GPIO_SS;
      |               ^~
drivers/spi/spi-phytium.c:437:31: error: invalid use of undefined typestruct spi_master437 |                         master->can_dma = fts->dma_ops->can_dma;
      |                               ^~
drivers/spi/spi-phytium.c:438:31: error: invalid use of undefined typestruct spi_master438 |                         master->flags |= SPI_CONTROLLER_MUST_TX;
      |                               ^~
drivers/spi/spi-phytium.c:442:36: error: passing argument 1 ofspi_controller_set_devdatafrom incompatible pointer type [-Werror=incompatible-pointer-types]
  442 |         spi_controller_set_devdata(master, fts);
      |                                    ^~~~~~
      |                                    |
      |                                    struct spi_master *
./include/linux/spi/spi.h:785:70: note: expectedstruct spi_controller *but argument is of typestruct spi_master *785 | static inline void spi_controller_set_devdata(struct spi_controller *ctlr,
      |                                               ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c:443:39: error: passing argument 1 ofspi_register_controllerfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  443 |         ret = spi_register_controller(master);
      |                                       ^~~~~~
      |                                       |
      |                                       struct spi_master *
./include/linux/spi/spi.h:899:59: note: expectedstruct spi_controller *but argument is of typestruct spi_master *899 | extern int spi_register_controller(struct spi_controller *ctlr);
      |                                    ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c:445:32: error: invalid use of undefined typestruct spi_master445 |                 dev_err(&master->dev, "problem registering spi master\n");
      |                                ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:445:17: note: in expansion of macrodev_err445 |                 dev_err(&master->dev, "problem registering spi master\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_transfer’:
drivers/spi/spi-phytium-dma.c:514:24: error: invalid use of undefined typestruct spi_master514 |         if (fts->master->cur_msg->status == -EINPROGRESS) {
      |                        ^~
drivers/spi/spi-phytium-dma.c:520:40: error: invalid use of undefined typestruct spi_master520 |         if (xfer->rx_buf && fts->master->cur_msg->status == -EINPROGRESS)
      |                                        ^~
drivers/spi/spi-phytium-pci.c: In functionspi_resume’:
drivers/spi/spi-phytium-pci.c:100:62: error: ‘spi_controllerundeclared (first use in this function)
  100 |         struct phytium_spi *fts = spi_controller_get_devdata(spi_controller);
      |                                                              ^~~~~~~~~~~~~~
drivers/spi/spi-phytium-pci.c:99:28: error: unused variablemaster’ [-Werror=unused-variable]
   99 |         struct spi_master *master = dev_get_drvdata(dev);
      |                            ^~~~~~
cc1: all warnings being treated as errors
drivers/spi/spi-phytium.c:457:9: error: implicit declaration of functionspi_master_put’; did you meanspi_dev_put’? [-Werror=implicit-function-declaration]
  457 |         spi_master_put(master);
      |         ^~~~~~~~~~~~~~
      |         spi_dev_put
drivers/spi/spi-phytium.c: In functionphytium_spi_remove_host’:
drivers/spi/spi-phytium.c:468:38: error: passing argument 1 ofspi_unregister_controllerfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  468 |         spi_unregister_controller(fts->master);
      |                                   ~~~^~~~~~~~
      |                                      |
      |                                      struct spi_master *
./include/linux/spi/spi.h:902:62: note: expectedstruct spi_controller *but argument is of typestruct spi_master *902 | extern void spi_unregister_controller(struct spi_controller *ctlr);
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_suspend_host’:
drivers/spi/spi-phytium.c:478:41: error: passing argument 1 ofspi_controller_suspendfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  478 |         ret = spi_controller_suspend(fts->master);
      |                                      ~~~^~~~~~~~
      |                                         |
      |                                         struct spi_master *
./include/linux/spi/spi.h:815:58: note: expectedstruct spi_controller *but argument is of typestruct spi_master *815 | extern int spi_controller_suspend(struct spi_controller *ctlr);
      |                                   ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_resume_host’:
drivers/spi/spi-phytium.c:491:33: error: invalid use of undefined typestruct spi_master491 |         spi_hw_init(&fts->master->dev, fts);
      |                                 ^~
make[7]: *** [scripts/Makefile.build:244drivers/spi/spi-phytium-dma.o] 错误 1
make[7]: *** 正在等待未完成的任务....
drivers/spi/spi-phytium.c:492:37: error: ‘spi_controllerundeclared (first use in this function)
  492 |         ret = spi_controller_resume(spi_controller);
      |                                     ^~~~~~~~~~~~~~
drivers/spi/spi-phytium.c:494:37: error: invalid use of undefined typestruct spi_master494 |                 dev_err(&fts->master->dev, "fail to start queue (%d)\n", ret);
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:494:17: note: in expansion of macrodev_err494 |                 dev_err(&fts->master->dev, "fail to start queue (%d)\n", ret);
      |                 ^~~~~~~
make[7]: *** [scripts/Makefile.build:244drivers/spi/spi-phytium-pci.o] 错误 1
cc1: all warnings being treated as errors
make[7]: *** [scripts/Makefile.build:244drivers/spi/spi-phytium.o] 错误 1
make[6]: *** [scripts/Makefile.build:485drivers/spi] 错误 2
make[6]: *** 正在等待未完成的任务....
  CHK     kernel/kheaders_data.tar.xz
make[5]: *** [scripts/Makefile.build:485drivers] 错误 2
make[4]: *** [Makefile:1915:.] 错误 2
make[3]: *** [debian/rules:74build-arch] 错误 2
dpkg-buildpackage: error: make -f debian/rules binary subprocess returned exit status 2
make[2]: *** [scripts/Makefile.package:121bindeb-pkg] 错误 2
make[1]: *** [/root/linux/Makefile:1537bindeb-pkg] 错误 2
make: *** [Makefile:240__sub-make] 错误 2
root@deepinci-amd7:~/linux# ^C
root@deepinci-amd7:~/linux# git checkout -- drivers
root@deepinci-amd7:~/linux# make bindeb-pkg -j$(nproc)
  GEN     debian
dpkg-buildpackage --build=binary --no-pre-clean --unsigned-changes -R'make -f debian/rules' -j1 -a$(cat debian/arch)
dpkg-buildpackage: info: source package linux-upstream
dpkg-buildpackage: info: source version 23.01.01.01
dpkg-buildpackage: info: source distribution beige
dpkg-buildpackage: info: source changed by root <root@deepinci-amd7>
dpkg-buildpackage: info: host architecture amd64
 dpkg-source --before-build .
 make -f debian/rules binary                                                                
#                                                                                           
# No change to .config
#
mkdir -p /root/linux/tools/objtool && make O=/root/linux subdir=tools/objtool --no-print-directory -C objtool 
mkdir -p /root/linux/tools/bpf/resolve_btfids && make O=/root/linux subdir=tools/bpf/resolve_btfids --no-print-directory -C bpf/resolve_btfids 
  INSTALL libsubcmd_headers
  INSTALL libsubcmd_headers
  CALL    scripts/checksyscalls.sh
  CC [M]  drivers/spi/spi-phytium.o
  CC [M]  drivers/spi/spi-phytium-pci.o
  CC [M]  drivers/spi/spi-phytium-dma.o
  CHK     kernel/kheaders_data.tar.xz
drivers/spi/spi-phytium.c: In functionphytium_spi_set_cs’:
drivers/spi/spi-phytium.c:48:35: error: implicit declaration of functionspi_master_get_devdata’; did you meanspi_controller_get_devdata’? [-Werror=implicit-function-declaration]
   48 |         struct phytium_spi *fts = spi_master_get_devdata(spi->master);
      |                                   ^~~~~~~~~~~~~~~~~~~~~~
      |                                   spi_controller_get_devdata
drivers/spi/spi-phytium.c:48:61: error: ‘struct spi_devicehas no member namedmaster48 |         struct phytium_spi *fts = spi_master_get_devdata(spi->master);
      |                                                             ^~
In file included from ./include/linux/bits.h:6,
                 from ./include/linux/bitops.h:6,
                 from ./include/linux/kernel.h:23,
                 from ./include/linux/clk.h:13,
                 from drivers/spi/spi-phytium.c:11:
./include/vdso/bits.h:7:40: error: invalid operands to binary << (have ‘long unsigned intandu8 *’ {aka ‘unsigned char *’})
    7 | #define BIT(nr)                 (UL(1) << (nr))
      |                                        ^~
      |                                        |
      |                                        u8 * {aka unsigned char *}
drivers/spi/spi-phytium.c:56:42: note: in expansion of macroBIT56 |                 phytium_writel(fts, SER, BIT(spi->chip_select));
      |                                          ^~~
drivers/spi/spi-phytium.c:59:63: error: invalid operands to binary << (haveintandu8 *’ {aka ‘unsigned char *’})
   59 |                         phytium_writel(fts, GCSR, origin | (1 << spi->chip_select));
      |                                                               ^~
      |                                                               |
      |                                                               u8 * {aka unsigned char *}
drivers/spi/spi-phytium.c:64:64: error: invalid operands to binary << (haveintandu8 *’ {aka ‘unsigned char *’})
   64 |                         phytium_writel(fts, GCSR, origin & ~(1 << spi->chip_select));
      |                                                                ^~
      |                                                                |
      |                                                                u8 * {aka unsigned char *}
In file included from ./include/linux/device.h:15,
                 from ./include/linux/platform_device.h:13,
                 from drivers/spi/spi-phytium.c:17:
drivers/spi/spi-phytium.c: In functionphytium_spi_check_status’:
drivers/spi/spi-phytium.c:133:37: error: invalid use of undefined typestruct spi_master133 |                 dev_err(&fts->master->dev, "RX FIFO overflow detected\n");
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:133:17: note: in expansion of macrodev_err133 |                 dev_err(&fts->master->dev, "RX FIFO overflow detected\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium.c:138:37: error: invalid use of undefined typestruct spi_master138 |                 dev_err(&fts->master->dev, "RX FIFO underflow detected\n");
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:138:17: note: in expansion of macrodev_err138 |                 dev_err(&fts->master->dev, "RX FIFO underflow detected\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium.c:143:37: error: invalid use of undefined typestruct spi_master143 |                 dev_err(&fts->master->dev, "TX FIFO overflow detected\n");
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:143:17: note: in expansion of macrodev_err143 |                 dev_err(&fts->master->dev, "TX FIFO overflow detected\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium.c:150:32: error: invalid use of undefined typestruct spi_master150 |                 if (fts->master->cur_msg)
      |                                ^~
drivers/spi/spi-phytium.c:151:36: error: invalid use of undefined typestruct spi_master151 |                         fts->master->cur_msg->status = ret;
      |                                    ^~
drivers/spi/spi-phytium.c: In functionint_error_stop’:
drivers/spi/spi-phytium.c:161:29: error: invalid use of undefined typestruct spi_master161 |         dev_err(&fts->master->dev, "%s\n", msg);
      |                             ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:161:9: note: in expansion of macrodev_err161 |         dev_err(&fts->master->dev, "%s\n", msg);
      |         ^~~~~~~
drivers/spi/spi-phytium.c:162:20: error: invalid use of undefined typestruct spi_master162 |         fts->master->cur_msg->status = -EIO;
      |                    ^~
drivers/spi/spi-phytium.c:163:42: error: passing argument 1 ofspi_finalize_current_transferfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  163 |         spi_finalize_current_transfer(fts->master);
      |                                       ~~~^~~~~~~~
      |                                          |
      |                                          struct spi_master *
In file included from drivers/spi/spi-phytium.c:19:
./include/linux/spi/spi.h:821:66: note: expectedstruct spi_controller *but argument is of typestruct spi_master *821 | extern void spi_finalize_current_transfer(struct spi_controller *ctlr);
      |                                           ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functioninterrupt_transfer’:
drivers/spi/spi-phytium.c:179:50: error: passing argument 1 ofspi_finalize_current_transferfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  179 |                 spi_finalize_current_transfer(fts->master);
      |                                               ~~~^~~~~~~~
      |                                                  |
      |                                                  struct spi_master *
./include/linux/spi/spi.h:821:66: note: expectedstruct spi_controller *but argument is of typestruct spi_master *821 | extern void spi_finalize_current_transfer(struct spi_controller *ctlr);
      |                                           ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_irq’:
drivers/spi/spi-phytium.c:194:35: error: initialization ofstruct phytium_spi *fromintmakes pointer from integer without a cast [-Werror=int-conversion]
  194 |         struct phytium_spi *fts = spi_master_get_devdata(master);
      |                                   ^~~~~~~~~~~~~~~~~~~~~~
drivers/spi/spi-phytium.c:200:20: error: invalid use of undefined typestruct spi_master200 |         if (!master->cur_msg) {
      |                    ^~
drivers/spi/spi-phytium.c: In functionphytium_spi_transfer_one’:
drivers/spi/spi-phytium.c:225:35: error: initialization ofstruct phytium_spi *fromintmakes pointer from integer without a cast [-Werror=int-conversion]
  225 |         struct phytium_spi *fts = spi_master_get_devdata(master);
      |                                   ^~~~~~~~~~~~~~~~~~~~~~
drivers/spi/spi-phytium.c:281:19: error: invalid use of undefined typestruct spi_master281 |         if (master->can_dma && master->can_dma(master, spi, transfer))
      |                   ^~
drivers/spi/spi-phytium.c:281:38: error: invalid use of undefined typestruct spi_master281 |         if (master->can_dma && master->can_dma(master, spi, transfer))
      |                                      ^~
drivers/spi/spi-phytium.c:282:41: error: invalid use of undefined typestruct spi_master282 |                 fts->dma_mapped = master->cur_msg_mapped;
      |                                         ^~
drivers/spi/spi-phytium.c: In functionphytium_spi_handle_err’:
drivers/spi/spi-phytium.c:318:35: error: initialization ofstruct phytium_spi *fromintmakes pointer from integer without a cast [-Werror=int-conversion]
  318 |         struct phytium_spi *fts = spi_master_get_devdata(master);
      |                                   ^~~~~~~~~~~~~~~~~~~~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_setup’:
drivers/spi/spi-phytium.c:330:40: error: ‘struct spi_devicehas no member namedmaster330 |         struct spi_master *master = spi->master;
      |                                        ^~
drivers/spi/spi-phytium.c:331:35: error: initialization ofstruct phytium_spi *fromintmakes pointer from integer without a cast [-Werror=int-conversion]
  331 |         struct phytium_spi *fts = spi_master_get_devdata(master);
      |                                   ^~~~~~~~~~~~~~~~~~~~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_add_host’:
drivers/spi/spi-phytium.c:400:16: error: assignment tostruct spi_master *from incompatible pointer typestruct spi_controller *’ [-Werror=incompatible-pointer-types]
  400 |         master = spi_alloc_master(dev, 0);
      |                ^
drivers/spi/spi-phytium.c:415:15: error: invalid use of undefined typestruct spi_master415 |         master->use_gpio_descriptors = true;
      |               ^~
drivers/spi/spi-phytium.c:416:15: error: invalid use of undefined typestruct spi_master416 |         master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LOOP;
      |               ^~
drivers/spi/spi-phytium.c:417:15: error: invalid use of undefined typestruct spi_master417 |         master->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(16);
      |               ^~
drivers/spi/spi-phytium.c:418:15: error: invalid use of undefined typestruct spi_master418 |         master->bus_num = fts->bus_num;
      |               ^~
drivers/spi/spi-phytium.c:419:15: error: invalid use of undefined typestruct spi_master419 |         master->num_chipselect = fts->num_cs;
      |               ^~
drivers/spi/spi-phytium.c:420:15: error: invalid use of undefined typestruct spi_master420 |         master->setup = phytium_spi_setup;
      |               ^~
drivers/spi/spi-phytium.c:421:15: error: invalid use of undefined typestruct spi_master421 |         master->cleanup = phytium_spi_cleanup;
      |               ^~
drivers/spi/spi-phytium.c:422:15: error: invalid use of undefined typestruct spi_master422 |         master->set_cs = phytium_spi_set_cs;
      |               ^~
drivers/spi/spi-phytium.c:423:15: error: invalid use of undefined typestruct spi_master423 |         master->transfer_one = phytium_spi_transfer_one;
      |               ^~
drivers/spi/spi-phytium.c:424:15: error: invalid use of undefined typestruct spi_master424 |         master->handle_err = phytium_spi_handle_err;
      |               ^~
drivers/spi/spi-phytium.c:425:15: error: invalid use of undefined typestruct spi_master425 |         master->max_speed_hz = fts->max_freq;
      |               ^~
drivers/spi/spi-phytium.c:426:15: error: invalid use of undefined typestruct spi_master426 |         master->dev.of_node = dev->of_node;
      |               ^~
drivers/spi/spi-phytium.c:427:15: error: invalid use of undefined typestruct spi_master427 |         master->dev.fwnode = dev->fwnode;
      |               ^~
drivers/spi/spi-phytium.c:428:15: error: invalid use of undefined typestruct spi_master428 |         master->flags = SPI_CONTROLLER_GPIO_SS;
      |               ^~
drivers/spi/spi-phytium.c:437:31: error: invalid use of undefined typestruct spi_master437 |                         master->can_dma = fts->dma_ops->can_dma;
      |                               ^~
drivers/spi/spi-phytium.c:438:31: error: invalid use of undefined typestruct spi_master438 |                         master->flags |= SPI_CONTROLLER_MUST_TX;
      |                               ^~
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_init’:
drivers/spi/spi-phytium-dma.c:79:20: error: invalid use of undefined typestruct spi_master79 |         fts->master->dma_rx = fts->rxchan;
      |                    ^~
drivers/spi/spi-phytium-dma.c:80:20: error: invalid use of undefined typestruct spi_master80 |         fts->master->dma_tx = fts->txchan;
      |                    ^~
In file included from ./include/linux/device.h:15,
                 from ./include/linux/dma-mapping.h:8,
                 from drivers/spi/spi-phytium-dma.c:8:
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_wait’:
drivers/spi/spi-phytium-dma.c:146:37: error: invalid use of undefined typestruct spi_master146 |                 dev_err(&fts->master->cur_msg->spi->dev,
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium-dma.c:146:17: note: in expansion of macrodev_err146 |                 dev_err(&fts->master->cur_msg->spi->dev,
      |                 ^~~~~~~
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_wait_tx_done’:
drivers/spi/spi-phytium-dma.c:190:37: error: invalid use of undefined typestruct spi_master190 |                 dev_err(&fts->master->dev, "Tx hanged up\n");
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium-dma.c:190:17: note: in expansion of macrodev_err190 |                 dev_err(&fts->master->dev, "Tx hanged up\n");
      |                 ^~~~~~~
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_wait_rx_done’:
drivers/spi/spi-phytium-dma.c:283:37: error: invalid use of undefined typestruct spi_master283 |                 dev_err(&fts->master->dev, "Rx hanged up, nents = %d\n", nents);
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium-dma.c:283:17: note: in expansion of macrodev_err283 |                 dev_err(&fts->master->dev, "Rx hanged up, nents = %d\n", nents);
      |                 ^~~~~~~
drivers/spi/spi-phytium-dma.c: In functionphytium_spi_dma_transfer’:
drivers/spi/spi-phytium-dma.c:514:24: error: invalid use of undefined typestruct spi_master514 |         if (fts->master->cur_msg->status == -EINPROGRESS) {
      |                        ^~
drivers/spi/spi-phytium-pci.c: In functionspi_suspend’:
drivers/spi/spi-phytium-pci.c:92:35: error: implicit declaration of functionspi_master_get_devdata’; did you meanspi_controller_get_devdata’? [-Werror=implicit-function-declaration]
   92 |         struct phytium_spi *fts = spi_master_get_devdata(master);
      |                                   ^~~~~~~~~~~~~~~~~~~~~~
      |                                   spi_controller_get_devdata
drivers/spi/spi-phytium-pci.c:92:35: error: initialization ofstruct phytium_spi *fromintmakes pointer from integer without a cast [-Werror=int-conversion]
drivers/spi/spi-phytium-dma.c:520:40: error: invalid use of undefined typestruct spi_master520 |         if (xfer->rx_buf && fts->master->cur_msg->status == -EINPROGRESS)
      |                                        ^~
drivers/spi/spi-phytium-pci.c: In functionspi_resume’:
drivers/spi/spi-phytium-pci.c:100:35: error: initialization ofstruct phytium_spi *fromintmakes pointer from integer without a cast [-Werror=int-conversion]
  100 |         struct phytium_spi *fts = spi_master_get_devdata(master);
      |                                   ^~~~~~~~~~~~~~~~~~~~~~
drivers/spi/spi-phytium.c:442:9: error: implicit declaration of functionspi_master_set_devdata’; did you meanspi_controller_set_devdata’? [-Werror=implicit-function-declaration]
  442 |         spi_master_set_devdata(master, fts);
      |         ^~~~~~~~~~~~~~~~~~~~~~
      |         spi_controller_set_devdata
drivers/spi/spi-phytium.c:443:39: error: passing argument 1 ofspi_register_controllerfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  443 |         ret = spi_register_controller(master);
      |                                       ^~~~~~
      |                                       |
      |                                       struct spi_master *
./include/linux/spi/spi.h:899:59: note: expectedstruct spi_controller *but argument is of typestruct spi_master *899 | extern int spi_register_controller(struct spi_controller *ctlr);
      |                                    ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c:445:32: error: invalid use of undefined typestruct spi_master445 |                 dev_err(&master->dev, "problem registering spi master\n");
      |                                ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:445:17: note: in expansion of macrodev_err445 |                 dev_err(&master->dev, "problem registering spi master\n");
      |                 ^~~~~~~
make[7]: *** [scripts/Makefile.build:244drivers/spi/spi-phytium-dma.o] 错误 1
make[7]: *** 正在等待未完成的任务....
drivers/spi/spi-phytium.c:457:9: error: implicit declaration of functionspi_master_put’; did you meanspi_dev_put’? [-Werror=implicit-function-declaration]
  457 |         spi_master_put(master);
      |         ^~~~~~~~~~~~~~
      |         spi_dev_put
drivers/spi/spi-phytium.c: In functionphytium_spi_remove_host’:
drivers/spi/spi-phytium.c:468:38: error: passing argument 1 ofspi_unregister_controllerfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  468 |         spi_unregister_controller(fts->master);
      |                                   ~~~^~~~~~~~
      |                                      |
      |                                      struct spi_master *
./include/linux/spi/spi.h:902:62: note: expectedstruct spi_controller *but argument is of typestruct spi_master *902 | extern void spi_unregister_controller(struct spi_controller *ctlr);
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c: In functionphytium_spi_suspend_host’:
drivers/spi/spi-phytium.c:478:41: error: passing argument 1 ofspi_controller_suspendfrom incompatible pointer type [-Werror=incompatible-pointer-types]
  478 |         ret = spi_controller_suspend(fts->master);
      |                                      ~~~^~~~~~~~
      |                                         |
      |                                         struct spi_master *
./include/linux/spi/spi.h:815:58: note: expectedstruct spi_controller *but argument is of typestruct spi_master *815 | extern int spi_controller_suspend(struct spi_controller *ctlr);
      |                                   ~~~~~~~~~~~~~~~~~~~~~~~^~~~
cc1: all warnings being treated as errors
drivers/spi/spi-phytium.c: In functionphytium_spi_resume_host’:
drivers/spi/spi-phytium.c:491:33: error: invalid use of undefined typestruct spi_master491 |         spi_hw_init(&fts->master->dev, fts);
      |                                 ^~
drivers/spi/spi-phytium.c:492:40: error: passing argument 1 ofspi_controller_resumefrom incompatible pointer type [-Werror=incompatible-pointer-types]
  492 |         ret = spi_controller_resume(fts->master);
      |                                     ~~~^~~~~~~~
      |                                        |
      |                                        struct spi_master *
./include/linux/spi/spi.h:816:57: note: expectedstruct spi_controller *but argument is of typestruct spi_master *816 | extern int spi_controller_resume(struct spi_controller *ctlr);
      |                                  ~~~~~~~~~~~~~~~~~~~~~~~^~~~
drivers/spi/spi-phytium.c:494:37: error: invalid use of undefined typestruct spi_master494 |                 dev_err(&fts->master->dev, "fail to start queue (%d)\n", ret);
      |                                     ^~
./include/linux/dev_printk.h:110:25: note: in definition of macrodev_printk_index_wrap110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                         ^~~
drivers/spi/spi-phytium.c:494:17: note: in expansion of macrodev_err494 |                 dev_err(&fts->master->dev, "fail to start queue (%d)\n", ret);
      |                 ^~~~~~~
cc1: all warnings being treated as errors
make[7]: *** [scripts/Makefile.build:244drivers/spi/spi-phytium-pci.o] 错误 1
make[7]: *** [scripts/Makefile.build:244drivers/spi/spi-phytium.o] 错误 1
make[6]: *** [scripts/Makefile.build:485drivers/spi] 错误 2
make[6]: *** 正在等待未完成的任务....
make[5]: *** [scripts/Makefile.build:485drivers] 错误 2
make[4]: *** [Makefile:1915:.] 错误 2
make[3]: *** [debian/rules:74build-arch] 错误 2
dpkg-buildpackage: error: make -f debian/rules binary subprocess returned exit status 2
make[2]: *** [scripts/Makefile.package:121bindeb-pkg] 错误 2
make[1]: *** [/root/linux/Makefile:1537bindeb-pkg] 错误 2
make: *** [Makefile:240__sub-make] 错误 2
MingcongBai pushed a commit that referenced this issue Jul 1, 2024
[ Upstream commit f1e197a ]

trace_drop_common() is called with preemption disabled, and it acquires
a spin_lock. This is problematic for RT kernels because spin_locks are
sleeping locks in this configuration, which causes the following splat:

BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48
in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 449, name: rcuc/47
preempt_count: 1, expected: 0
RCU nest depth: 2, expected: 2
5 locks held by rcuc/47/449:
 #0: ff1100086ec30a60 ((softirq_ctrl.lock)){+.+.}-{2:2}, at: __local_bh_disable_ip+0x105/0x210
 #1: ffffffffb394a280 (rcu_read_lock){....}-{1:2}, at: rt_spin_lock+0xbf/0x130
 #2: ffffffffb394a280 (rcu_read_lock){....}-{1:2}, at: __local_bh_disable_ip+0x11c/0x210
 #3: ffffffffb394a160 (rcu_callback){....}-{0:0}, at: rcu_do_batch+0x360/0xc70
 #4: ff1100086ee07520 (&data->lock){+.+.}-{2:2}, at: trace_drop_common.constprop.0+0xb5/0x290
irq event stamp: 139909
hardirqs last  enabled at (139908): [<ffffffffb1df2b33>] _raw_spin_unlock_irqrestore+0x63/0x80
hardirqs last disabled at (139909): [<ffffffffb19bd03d>] trace_drop_common.constprop.0+0x26d/0x290
softirqs last  enabled at (139892): [<ffffffffb07a1083>] __local_bh_enable_ip+0x103/0x170
softirqs last disabled at (139898): [<ffffffffb0909b33>] rcu_cpu_kthread+0x93/0x1f0
Preemption disabled at:
[<ffffffffb1de786b>] rt_mutex_slowunlock+0xab/0x2e0
CPU: 47 PID: 449 Comm: rcuc/47 Not tainted 6.9.0-rc2-rt1+ #7
Hardware name: Dell Inc. PowerEdge R650/0Y2G81, BIOS 1.6.5 04/15/2022
Call Trace:
 <TASK>
 dump_stack_lvl+0x8c/0xd0
 dump_stack+0x14/0x20
 __might_resched+0x21e/0x2f0
 rt_spin_lock+0x5e/0x130
 ? trace_drop_common.constprop.0+0xb5/0x290
 ? skb_queue_purge_reason.part.0+0x1bf/0x230
 trace_drop_common.constprop.0+0xb5/0x290
 ? preempt_count_sub+0x1c/0xd0
 ? _raw_spin_unlock_irqrestore+0x4a/0x80
 ? __pfx_trace_drop_common.constprop.0+0x10/0x10
 ? rt_mutex_slowunlock+0x26a/0x2e0
 ? skb_queue_purge_reason.part.0+0x1bf/0x230
 ? __pfx_rt_mutex_slowunlock+0x10/0x10
 ? skb_queue_purge_reason.part.0+0x1bf/0x230
 trace_kfree_skb_hit+0x15/0x20
 trace_kfree_skb+0xe9/0x150
 kfree_skb_reason+0x7b/0x110
 skb_queue_purge_reason.part.0+0x1bf/0x230
 ? __pfx_skb_queue_purge_reason.part.0+0x10/0x10
 ? mark_lock.part.0+0x8a/0x520
...

trace_drop_common() also disables interrupts, but this is a minor issue
because we could easily replace it with a local_lock.

Replace the spin_lock with raw_spin_lock to avoid sleeping in atomic
context.

Signed-off-by: Wander Lairson Costa <[email protected]>
Reported-by: Hu Chunyu <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
MingcongBai pushed a commit that referenced this issue Jul 1, 2024
[ Upstream commit af0cb3f ]

Xiumei and Christoph reported the following lockdep splat, complaining of
the qdisc root lock being taken twice:

 ============================================
 WARNING: possible recursive locking detected
 6.7.0-rc3+ torvalds#598 Not tainted
 --------------------------------------------
 swapper/2/0 is trying to acquire lock:
 ffff888177190110 (&sch->q.lock){+.-.}-{2:2}, at: __dev_queue_xmit+0x1560/0x2e70

 but task is already holding lock:
 ffff88811995a110 (&sch->q.lock){+.-.}-{2:2}, at: __dev_queue_xmit+0x1560/0x2e70

 other info that might help us debug this:
  Possible unsafe locking scenario:

        CPU0
        ----
   lock(&sch->q.lock);
   lock(&sch->q.lock);

  *** DEADLOCK ***

  May be due to missing lock nesting notation

 5 locks held by swapper/2/0:
  #0: ffff888135a09d98 ((&in_dev->mr_ifc_timer)){+.-.}-{0:0}, at: call_timer_fn+0x11a/0x510
  #1: ffffffffaaee5260 (rcu_read_lock){....}-{1:2}, at: ip_finish_output2+0x2c0/0x1ed0
  #2: ffffffffaaee5200 (rcu_read_lock_bh){....}-{1:2}, at: __dev_queue_xmit+0x209/0x2e70
  #3: ffff88811995a110 (&sch->q.lock){+.-.}-{2:2}, at: __dev_queue_xmit+0x1560/0x2e70
  #4: ffffffffaaee5200 (rcu_read_lock_bh){....}-{1:2}, at: __dev_queue_xmit+0x209/0x2e70

 stack backtrace:
 CPU: 2 PID: 0 Comm: swapper/2 Not tainted 6.7.0-rc3+ torvalds#598
 Hardware name: Red Hat KVM, BIOS 1.13.0-2.module+el8.3.0+7353+9de0a3cc 04/01/2014
 Call Trace:
  <IRQ>
  dump_stack_lvl+0x4a/0x80
  __lock_acquire+0xfdd/0x3150
  lock_acquire+0x1ca/0x540
  _raw_spin_lock+0x34/0x80
  __dev_queue_xmit+0x1560/0x2e70
  tcf_mirred_act+0x82e/0x1260 [act_mirred]
  tcf_action_exec+0x161/0x480
  tcf_classify+0x689/0x1170
  prio_enqueue+0x316/0x660 [sch_prio]
  dev_qdisc_enqueue+0x46/0x220
  __dev_queue_xmit+0x1615/0x2e70
  ip_finish_output2+0x1218/0x1ed0
  __ip_finish_output+0x8b3/0x1350
  ip_output+0x163/0x4e0
  igmp_ifc_timer_expire+0x44b/0x930
  call_timer_fn+0x1a2/0x510
  run_timer_softirq+0x54d/0x11a0
  __do_softirq+0x1b3/0x88f
  irq_exit_rcu+0x18f/0x1e0
  sysvec_apic_timer_interrupt+0x6f/0x90
  </IRQ>

This happens when TC does a mirred egress redirect from the root qdisc of
device A to the root qdisc of device B. As long as these two locks aren't
protecting the same qdisc, they can be acquired in chain: add a per-qdisc
lockdep key to silence false warnings.
This dynamic key should safely replace the static key we have in sch_htb:
it was added to allow enqueueing to the device "direct qdisc" while still
holding the qdisc root lock.

v2: don't use static keys anymore in HTB direct qdiscs (thanks Eric Dumazet)

CC: Maxim Mikityanskiy <[email protected]>
CC: Xiumei Mu <[email protected]>
Reported-by: Christoph Paasch <[email protected]>
Closes: multipath-tcp/mptcp_net-next#451
Signed-off-by: Davide Caratti <[email protected]>
Link: https://lore.kernel.org/r/7dc06d6158f72053cf877a82e2a7a5bd23692faa.1713448007.git.dcaratti@redhat.com
Signed-off-by: Paolo Abeni <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
MingcongBai pushed a commit that referenced this issue Jul 1, 2024
[ Upstream commit f6944d4 ]

Lockdep reports the below circular locking dependency issue.  The
mmap_lock acquisition while holding pci_bus_sem is due to the use of
copy_to_user() from within a pci_walk_bus() callback.

Building the devices array directly into the user buffer is only for
convenience.  Instead we can allocate a local buffer for the array,
bounded by the number of devices on the bus/slot, fill the device
information into this local buffer, then copy it into the user buffer
outside the bus walk callback.

======================================================
WARNING: possible circular locking dependency detected
6.9.0-rc5+ torvalds#39 Not tainted
------------------------------------------------------
CPU 0/KVM/4113 is trying to acquire lock:
ffff99a609ee18a8 (&vdev->vma_lock){+.+.}-{4:4}, at: vfio_pci_mmap_fault+0x35/0x1a0 [vfio_pci_core]

but task is already holding lock:
ffff99a243a052a0 (&mm->mmap_lock){++++}-{4:4}, at: vaddr_get_pfns+0x3f/0x170 [vfio_iommu_type1]

which lock already depends on the new lock.

the existing dependency chain (in reverse order) is:

-> #3 (&mm->mmap_lock){++++}-{4:4}:
       __lock_acquire+0x4e4/0xb90
       lock_acquire+0xbc/0x2d0
       __might_fault+0x5c/0x80
       _copy_to_user+0x1e/0x60
       vfio_pci_fill_devs+0x9f/0x130 [vfio_pci_core]
       vfio_pci_walk_wrapper+0x45/0x60 [vfio_pci_core]
       __pci_walk_bus+0x6b/0xb0
       vfio_pci_ioctl_get_pci_hot_reset_info+0x10b/0x1d0 [vfio_pci_core]
       vfio_pci_core_ioctl+0x1cb/0x400 [vfio_pci_core]
       vfio_device_fops_unl_ioctl+0x7e/0x140 [vfio]
       __x64_sys_ioctl+0x8a/0xc0
       do_syscall_64+0x8d/0x170
       entry_SYSCALL_64_after_hwframe+0x76/0x7e

-> #2 (pci_bus_sem){++++}-{4:4}:
       __lock_acquire+0x4e4/0xb90
       lock_acquire+0xbc/0x2d0
       down_read+0x3e/0x160
       pci_bridge_wait_for_secondary_bus.part.0+0x33/0x2d0
       pci_reset_bus+0xdd/0x160
       vfio_pci_dev_set_hot_reset+0x256/0x270 [vfio_pci_core]
       vfio_pci_ioctl_pci_hot_reset_groups+0x1a3/0x280 [vfio_pci_core]
       vfio_pci_core_ioctl+0x3b5/0x400 [vfio_pci_core]
       vfio_device_fops_unl_ioctl+0x7e/0x140 [vfio]
       __x64_sys_ioctl+0x8a/0xc0
       do_syscall_64+0x8d/0x170
       entry_SYSCALL_64_after_hwframe+0x76/0x7e

-> #1 (&vdev->memory_lock){+.+.}-{4:4}:
       __lock_acquire+0x4e4/0xb90
       lock_acquire+0xbc/0x2d0
       down_write+0x3b/0xc0
       vfio_pci_zap_and_down_write_memory_lock+0x1c/0x30 [vfio_pci_core]
       vfio_basic_config_write+0x281/0x340 [vfio_pci_core]
       vfio_config_do_rw+0x1fa/0x300 [vfio_pci_core]
       vfio_pci_config_rw+0x75/0xe50 [vfio_pci_core]
       vfio_pci_rw+0xea/0x1a0 [vfio_pci_core]
       vfs_write+0xea/0x520
       __x64_sys_pwrite64+0x90/0xc0
       do_syscall_64+0x8d/0x170
       entry_SYSCALL_64_after_hwframe+0x76/0x7e

-> #0 (&vdev->vma_lock){+.+.}-{4:4}:
       check_prev_add+0xeb/0xcc0
       validate_chain+0x465/0x530
       __lock_acquire+0x4e4/0xb90
       lock_acquire+0xbc/0x2d0
       __mutex_lock+0x97/0xde0
       vfio_pci_mmap_fault+0x35/0x1a0 [vfio_pci_core]
       __do_fault+0x31/0x160
       do_pte_missing+0x65/0x3b0
       __handle_mm_fault+0x303/0x720
       handle_mm_fault+0x10f/0x460
       fixup_user_fault+0x7f/0x1f0
       follow_fault_pfn+0x66/0x1c0 [vfio_iommu_type1]
       vaddr_get_pfns+0xf2/0x170 [vfio_iommu_type1]
       vfio_pin_pages_remote+0x348/0x4e0 [vfio_iommu_type1]
       vfio_pin_map_dma+0xd2/0x330 [vfio_iommu_type1]
       vfio_dma_do_map+0x2c0/0x440 [vfio_iommu_type1]
       vfio_iommu_type1_ioctl+0xc5/0x1d0 [vfio_iommu_type1]
       __x64_sys_ioctl+0x8a/0xc0
       do_syscall_64+0x8d/0x170
       entry_SYSCALL_64_after_hwframe+0x76/0x7e

other info that might help us debug this:

Chain exists of:
  &vdev->vma_lock --> pci_bus_sem --> &mm->mmap_lock

 Possible unsafe locking scenario:

block dm-0: the capability attribute has been deprecated.
       CPU0                    CPU1
       ----                    ----
  rlock(&mm->mmap_lock);
                               lock(pci_bus_sem);
                               lock(&mm->mmap_lock);
  lock(&vdev->vma_lock);

 *** DEADLOCK ***

2 locks held by CPU 0/KVM/4113:
 #0: ffff99a25f294888 (&iommu->lock#2){+.+.}-{4:4}, at: vfio_dma_do_map+0x60/0x440 [vfio_iommu_type1]
 #1: ffff99a243a052a0 (&mm->mmap_lock){++++}-{4:4}, at: vaddr_get_pfns+0x3f/0x170 [vfio_iommu_type1]

stack backtrace:
CPU: 1 PID: 4113 Comm: CPU 0/KVM Not tainted 6.9.0-rc5+ torvalds#39
Hardware name: Dell Inc. PowerEdge T640/04WYPY, BIOS 2.15.1 06/16/2022
Call Trace:
 <TASK>
 dump_stack_lvl+0x64/0xa0
 check_noncircular+0x131/0x150
 check_prev_add+0xeb/0xcc0
 ? add_chain_cache+0x10a/0x2f0
 ? __lock_acquire+0x4e4/0xb90
 validate_chain+0x465/0x530
 __lock_acquire+0x4e4/0xb90
 lock_acquire+0xbc/0x2d0
 ? vfio_pci_mmap_fault+0x35/0x1a0 [vfio_pci_core]
 ? lock_is_held_type+0x9a/0x110
 __mutex_lock+0x97/0xde0
 ? vfio_pci_mmap_fault+0x35/0x1a0 [vfio_pci_core]
 ? lock_acquire+0xbc/0x2d0
 ? vfio_pci_mmap_fault+0x35/0x1a0 [vfio_pci_core]
 ? find_held_lock+0x2b/0x80
 ? vfio_pci_mmap_fault+0x35/0x1a0 [vfio_pci_core]
 vfio_pci_mmap_fault+0x35/0x1a0 [vfio_pci_core]
 __do_fault+0x31/0x160
 do_pte_missing+0x65/0x3b0
 __handle_mm_fault+0x303/0x720
 handle_mm_fault+0x10f/0x460
 fixup_user_fault+0x7f/0x1f0
 follow_fault_pfn+0x66/0x1c0 [vfio_iommu_type1]
 vaddr_get_pfns+0xf2/0x170 [vfio_iommu_type1]
 vfio_pin_pages_remote+0x348/0x4e0 [vfio_iommu_type1]
 vfio_pin_map_dma+0xd2/0x330 [vfio_iommu_type1]
 vfio_dma_do_map+0x2c0/0x440 [vfio_iommu_type1]
 vfio_iommu_type1_ioctl+0xc5/0x1d0 [vfio_iommu_type1]
 __x64_sys_ioctl+0x8a/0xc0
 do_syscall_64+0x8d/0x170
 ? rcu_core+0x8d/0x250
 ? __lock_release+0x5e/0x160
 ? rcu_core+0x8d/0x250
 ? lock_release+0x5f/0x120
 ? sched_clock+0xc/0x30
 ? sched_clock_cpu+0xb/0x190
 ? irqtime_account_irq+0x40/0xc0
 ? __local_bh_enable+0x54/0x60
 ? __do_softirq+0x315/0x3ca
 ? lockdep_hardirqs_on_prepare.part.0+0x97/0x140
 entry_SYSCALL_64_after_hwframe+0x76/0x7e
RIP: 0033:0x7f8300d0357b
Code: ff ff ff 85 c0 79 9b 49 c7 c4 ff ff ff ff 5b 5d 4c 89 e0 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa b8 10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 75 68 0f 00 f7 d8 64 89 01 48
RSP: 002b:00007f82ef3fb948 EFLAGS: 00000206 ORIG_RAX: 0000000000000010
RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f8300d0357b
RDX: 00007f82ef3fb990 RSI: 0000000000003b71 RDI: 0000000000000023
RBP: 00007f82ef3fb9c0 R08: 0000000000000000 R09: 0000561b7e0bcac2
R10: 0000000000000000 R11: 0000000000000206 R12: 0000000000000000
R13: 0000000200000000 R14: 0000381800000000 R15: 0000000000000000
 </TASK>

Reviewed-by: Jason Gunthorpe <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Alex Williamson <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
MingcongBai pushed a commit that referenced this issue Jul 1, 2024
commit 6cd4a78 upstream.

It is possible to trigger a use-after-free by:
  * attaching an fentry probe to __sock_release() and the probe calling the
    bpf_get_socket_cookie() helper
  * running traceroute -I 1.1.1.1 on a freshly booted VM

A KASAN enabled kernel will log something like below (decoded and stripped):
==================================================================
BUG: KASAN: slab-use-after-free in __sock_gen_cookie (./arch/x86/include/asm/atomic64_64.h:15 ./include/linux/atomic/atomic-arch-fallback.h:2583 ./include/linux/atomic/atomic-instrumented.h:1611 net/core/sock_diag.c:29)
Read of size 8 at addr ffff888007110dd8 by task traceroute/299

CPU: 2 PID: 299 Comm: traceroute Tainted: G            E      6.10.0-rc2+ #2
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
Call Trace:
 <TASK>
dump_stack_lvl (lib/dump_stack.c:117 (discriminator 1))
print_report (mm/kasan/report.c:378 mm/kasan/report.c:488)
? __sock_gen_cookie (./arch/x86/include/asm/atomic64_64.h:15 ./include/linux/atomic/atomic-arch-fallback.h:2583 ./include/linux/atomic/atomic-instrumented.h:1611 net/core/sock_diag.c:29)
kasan_report (mm/kasan/report.c:603)
? __sock_gen_cookie (./arch/x86/include/asm/atomic64_64.h:15 ./include/linux/atomic/atomic-arch-fallback.h:2583 ./include/linux/atomic/atomic-instrumented.h:1611 net/core/sock_diag.c:29)
kasan_check_range (mm/kasan/generic.c:183 mm/kasan/generic.c:189)
__sock_gen_cookie (./arch/x86/include/asm/atomic64_64.h:15 ./include/linux/atomic/atomic-arch-fallback.h:2583 ./include/linux/atomic/atomic-instrumented.h:1611 net/core/sock_diag.c:29)
bpf_get_socket_ptr_cookie (./arch/x86/include/asm/preempt.h:94 ./include/linux/sock_diag.h:42 net/core/filter.c:5094 net/core/filter.c:5092)
bpf_prog_875642cf11f1d139___sock_release+0x6e/0x8e
bpf_trampoline_6442506592+0x47/0xaf
__sock_release (net/socket.c:652)
__sock_create (net/socket.c:1601)
...
Allocated by task 299 on cpu 2 at 78.328492s:
kasan_save_stack (mm/kasan/common.c:48)
kasan_save_track (mm/kasan/common.c:68)
__kasan_slab_alloc (mm/kasan/common.c:312 mm/kasan/common.c:338)
kmem_cache_alloc_noprof (mm/slub.c:3941 mm/slub.c:4000 mm/slub.c:4007)
sk_prot_alloc (net/core/sock.c:2075)
sk_alloc (net/core/sock.c:2134)
inet_create (net/ipv4/af_inet.c:327 net/ipv4/af_inet.c:252)
__sock_create (net/socket.c:1572)
__sys_socket (net/socket.c:1660 net/socket.c:1644 net/socket.c:1706)
__x64_sys_socket (net/socket.c:1718)
do_syscall_64 (arch/x86/entry/common.c:52 arch/x86/entry/common.c:83)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)

Freed by task 299 on cpu 2 at 78.328502s:
kasan_save_stack (mm/kasan/common.c:48)
kasan_save_track (mm/kasan/common.c:68)
kasan_save_free_info (mm/kasan/generic.c:582)
poison_slab_object (mm/kasan/common.c:242)
__kasan_slab_free (mm/kasan/common.c:256)
kmem_cache_free (mm/slub.c:4437 mm/slub.c:4511)
__sk_destruct (net/core/sock.c:2117 net/core/sock.c:2208)
inet_create (net/ipv4/af_inet.c:397 net/ipv4/af_inet.c:252)
__sock_create (net/socket.c:1572)
__sys_socket (net/socket.c:1660 net/socket.c:1644 net/socket.c:1706)
__x64_sys_socket (net/socket.c:1718)
do_syscall_64 (arch/x86/entry/common.c:52 arch/x86/entry/common.c:83)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)

Fix this by clearing the struct socket reference in sk_common_release() to cover
all protocol families create functions, which may already attached the
reference to the sk object with sock_init_data().

Fixes: c5dbb89 ("bpf: Expose bpf_get_socket_cookie to tracing programs")
Suggested-by: Kuniyuki Iwashima <[email protected]>
Signed-off-by: Ignat Korchagin <[email protected]>
Cc: [email protected]
Link: https://lore.kernel.org/netdev/[email protected]/T/
Reviewed-by: Kuniyuki Iwashima <[email protected]>
Reviewed-by: D. Wythe <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Paolo Abeni <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
MingcongBai pushed a commit that referenced this issue Feb 18, 2025
[ Upstream commit 2d2d4f6 ]

We found a timeout problem with the pldm command on our system.  The
reason is that the MCTP-I3C driver has a race condition when receiving
multiple-packet messages in multi-thread, resulting in a wrong packet
order problem.

We identified this problem by adding a debug message to the
mctp_i3c_read function.

According to the MCTP spec, a multiple-packet message must be composed
in sequence, and if there is a wrong sequence, the whole message will be
discarded and wait for the next SOM.
For example, SOM → Pkt Seq #2 → Pkt Seq #1 → Pkt Seq #3 → EOM.

Therefore, we try to solve this problem by adding a mutex to the
mctp_i3c_read function.  Before the modification, when a command
requesting a multiple-packet message response is sent consecutively, an
error usually occurs within 100 loops.  After the mutex, it can go
through 40000 loops without any error, and it seems to run well.

Fixes: c8755b2 ("mctp i3c: MCTP I3C driver")
Signed-off-by: Leo Yang <[email protected]>
Link: https://patch.msgid.link/[email protected]
[[email protected]: dropped already answered question from changelog]
Signed-off-by: Paolo Abeni <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
MingcongBai pushed a commit that referenced this issue Feb 18, 2025
[ Upstream commit 1b10a51 ]

Fix a lockdep warning [1] observed during the write combining test.

The warning indicates a potential nested lock scenario that could lead
to a deadlock.

However, this is a false positive alarm because the SF lock and its
parent lock are distinct ones.

The lockdep confusion arises because the locks belong to the same object
class (i.e., struct mlx5_core_dev).

To resolve this, the code has been refactored to avoid taking both
locks. Instead, only the parent lock is acquired.

[1]
raw_ethernet_bw/2118 is trying to acquire lock:
[  213.619032] ffff88811dd75e08 (&dev->wc_state_lock){+.+.}-{3:3}, at:
               mlx5_wc_support_get+0x18c/0x210 [mlx5_core]
[  213.620270]
[  213.620270] but task is already holding lock:
[  213.620943] ffff88810b585e08 (&dev->wc_state_lock){+.+.}-{3:3}, at:
               mlx5_wc_support_get+0x10c/0x210 [mlx5_core]
[  213.622045]
[  213.622045] other info that might help us debug this:
[  213.622778]  Possible unsafe locking scenario:
[  213.622778]
[  213.623465]        CPU0
[  213.623815]        ----
[  213.624148]   lock(&dev->wc_state_lock);
[  213.624615]   lock(&dev->wc_state_lock);
[  213.625071]
[  213.625071]  *** DEADLOCK ***
[  213.625071]
[  213.625805]  May be due to missing lock nesting notation
[  213.625805]
[  213.626522] 4 locks held by raw_ethernet_bw/2118:
[  213.627019]  #0: ffff88813f80d578 (&uverbs_dev->disassociate_srcu){.+.+}-{0:0},
                at: ib_uverbs_ioctl+0xc4/0x170 [ib_uverbs]
[  213.628088]  #1: ffff88810fb23930 (&file->hw_destroy_rwsem){.+.+}-{3:3},
                at: ib_init_ucontext+0x2d/0xf0 [ib_uverbs]
[  213.629094]  #2: ffff88810fb23878 (&file->ucontext_lock){+.+.}-{3:3},
                at: ib_init_ucontext+0x49/0xf0 [ib_uverbs]
[  213.630106]  #3: ffff88810b585e08 (&dev->wc_state_lock){+.+.}-{3:3},
                at: mlx5_wc_support_get+0x10c/0x210 [mlx5_core]
[  213.631185]
[  213.631185] stack backtrace:
[  213.631718] CPU: 1 UID: 0 PID: 2118 Comm: raw_ethernet_bw Not tainted
               6.12.0-rc7_internal_net_next_mlx5_89a0ad0 #1
[  213.632722] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
               rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
[  213.633785] Call Trace:
[  213.634099]
[  213.634393]  dump_stack_lvl+0x7e/0xc0
[  213.634806]  print_deadlock_bug+0x278/0x3c0
[  213.635265]  __lock_acquire+0x15f4/0x2c40
[  213.635712]  lock_acquire+0xcd/0x2d0
[  213.636120]  ? mlx5_wc_support_get+0x18c/0x210 [mlx5_core]
[  213.636722]  ? mlx5_ib_enable_lb+0x24/0xa0 [mlx5_ib]
[  213.637277]  __mutex_lock+0x81/0xda0
[  213.637697]  ? mlx5_wc_support_get+0x18c/0x210 [mlx5_core]
[  213.638305]  ? mlx5_wc_support_get+0x18c/0x210 [mlx5_core]
[  213.638902]  ? rcu_read_lock_sched_held+0x3f/0x70
[  213.639400]  ? mlx5_wc_support_get+0x18c/0x210 [mlx5_core]
[  213.640016]  mlx5_wc_support_get+0x18c/0x210 [mlx5_core]
[  213.640615]  set_ucontext_resp+0x68/0x2b0 [mlx5_ib]
[  213.641144]  ? debug_mutex_init+0x33/0x40
[  213.641586]  mlx5_ib_alloc_ucontext+0x18e/0x7b0 [mlx5_ib]
[  213.642145]  ib_init_ucontext+0xa0/0xf0 [ib_uverbs]
[  213.642679]  ib_uverbs_handler_UVERBS_METHOD_GET_CONTEXT+0x95/0xc0
                [ib_uverbs]
[  213.643426]  ? _copy_from_user+0x46/0x80
[  213.643878]  ib_uverbs_cmd_verbs+0xa6b/0xc80 [ib_uverbs]
[  213.644426]  ? ib_uverbs_handler_UVERBS_METHOD_INVOKE_WRITE+0x130/0x130
               [ib_uverbs]
[  213.645213]  ? __lock_acquire+0xa99/0x2c40
[  213.645675]  ? lock_acquire+0xcd/0x2d0
[  213.646101]  ? ib_uverbs_ioctl+0xc4/0x170 [ib_uverbs]
[  213.646625]  ? reacquire_held_locks+0xcf/0x1f0
[  213.647102]  ? do_user_addr_fault+0x45d/0x770
[  213.647586]  ib_uverbs_ioctl+0xe0/0x170 [ib_uverbs]
[  213.648102]  ? ib_uverbs_ioctl+0xc4/0x170 [ib_uverbs]
[  213.648632]  __x64_sys_ioctl+0x4d3/0xaa0
[  213.649060]  ? do_user_addr_fault+0x4a8/0x770
[  213.649528]  do_syscall_64+0x6d/0x140
[  213.649947]  entry_SYSCALL_64_after_hwframe+0x4b/0x53
[  213.650478] RIP: 0033:0x7fa179b0737b
[  213.650893] Code: ff ff ff 85 c0 79 9b 49 c7 c4 ff ff ff ff 5b 5d 4c
               89 e0 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa b8
               10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d
               7d 2a 0f 00 f7 d8 64 89 01 48
[  213.652619] RSP: 002b:00007ffd2e6d46e8 EFLAGS: 00000246 ORIG_RAX:
               0000000000000010
[  213.653390] RAX: ffffffffffffffda RBX: 00007ffd2e6d47f8 RCX:
               00007fa179b0737b
[  213.654084] RDX: 00007ffd2e6d47e0 RSI: 00000000c0181b01 RDI:
               0000000000000003
[  213.654767] RBP: 00007ffd2e6d47c0 R08: 00007fa1799be010 R09:
               0000000000000002
[  213.655453] R10: 00007ffd2e6d4960 R11: 0000000000000246 R12:
               00007ffd2e6d487c
[  213.656170] R13: 0000000000000027 R14: 0000000000000001 R15:
               00007ffd2e6d4f70

Fixes: d98995b ("net/mlx5: Reimplement write combining test")
Signed-off-by: Yishai Hadas <[email protected]>
Reviewed-by: Michael Guralnik <[email protected]>
Reviewed-by: Larysa Zaremba <[email protected]>
Signed-off-by: Tariq Toukan <[email protected]>
Signed-off-by: Paolo Abeni <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
MingcongBai pushed a commit that referenced this issue Feb 18, 2025
[ Upstream commit 5641e82 ]

Clear the port select structure on error so no stale values left after
definers are destroyed. That's because the mlx5_lag_destroy_definers()
always try to destroy all lag definers in the tt_map, so in the flow
below lag definers get double-destroyed and cause kernel crash:

  mlx5_lag_port_sel_create()
    mlx5_lag_create_definers()
      mlx5_lag_create_definer()     <- Failed on tt 1
        mlx5_lag_destroy_definers() <- definers[tt=0] gets destroyed
  mlx5_lag_port_sel_create()
    mlx5_lag_create_definers()
      mlx5_lag_create_definer()     <- Failed on tt 0
        mlx5_lag_destroy_definers() <- definers[tt=0] gets double-destroyed

 Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008
 Mem abort info:
   ESR = 0x0000000096000005
   EC = 0x25: DABT (current EL), IL = 32 bits
   SET = 0, FnV = 0
   EA = 0, S1PTW = 0
   FSC = 0x05: level 1 translation fault
 Data abort info:
   ISV = 0, ISS = 0x00000005, ISS2 = 0x00000000
   CM = 0, WnR = 0, TnD = 0, TagAccess = 0
   GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
 user pgtable: 64k pages, 48-bit VAs, pgdp=0000000112ce2e00
 [0000000000000008] pgd=0000000000000000, p4d=0000000000000000, pud=0000000000000000
 Internal error: Oops: 0000000096000005 [#1] PREEMPT SMP
 Modules linked in: iptable_raw bonding ip_gre ip6_gre gre ip6_tunnel tunnel6 geneve ip6_udp_tunnel udp_tunnel ipip tunnel4 ip_tunnel rdma_ucm(OE) rdma_cm(OE) iw_cm(OE) ib_ipoib(OE) ib_cm(OE) ib_umad(OE) mlx5_ib(OE) ib_uverbs(OE) mlx5_fwctl(OE) fwctl(OE) mlx5_core(OE) mlxdevm(OE) ib_core(OE) mlxfw(OE) memtrack(OE) mlx_compat(OE) openvswitch nsh nf_conncount psample xt_conntrack xt_MASQUERADE nf_conntrack_netlink nfnetlink xfrm_user xfrm_algo xt_addrtype iptable_filter iptable_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 br_netfilter bridge stp llc netconsole overlay efi_pstore sch_fq_codel zram ip_tables crct10dif_ce qemu_fw_cfg fuse ipv6 crc_ccitt [last unloaded: mlx_compat(OE)]
  CPU: 3 UID: 0 PID: 217 Comm: kworker/u53:2 Tainted: G           OE      6.11.0+ #2
  Tainted: [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
  Hardware name: QEMU KVM Virtual Machine, BIOS 0.0.0 02/06/2015
  Workqueue: mlx5_lag mlx5_do_bond_work [mlx5_core]
  pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
  pc : mlx5_del_flow_rules+0x24/0x2c0 [mlx5_core]
  lr : mlx5_lag_destroy_definer+0x54/0x100 [mlx5_core]
  sp : ffff800085fafb00
  x29: ffff800085fafb00 x28: ffff0000da0c8000 x27: 0000000000000000
  x26: ffff0000da0c8000 x25: ffff0000da0c8000 x24: ffff0000da0c8000
  x23: ffff0000c31f81a0 x22: 0400000000000000 x21: ffff0000da0c8000
  x20: 0000000000000000 x19: 0000000000000001 x18: 0000000000000000
  x17: 0000000000000000 x16: 0000000000000000 x15: 0000ffff8b0c9350
  x14: 0000000000000000 x13: ffff800081390d18 x12: ffff800081dc3cc0
  x11: 0000000000000001 x10: 0000000000000b10 x9 : ffff80007ab7304c
  x8 : ffff0000d00711f0 x7 : 0000000000000004 x6 : 0000000000000190
  x5 : ffff00027edb3010 x4 : 0000000000000000 x3 : 0000000000000000
  x2 : ffff0000d39b8000 x1 : ffff0000d39b8000 x0 : 0400000000000000
  Call trace:
   mlx5_del_flow_rules+0x24/0x2c0 [mlx5_core]
   mlx5_lag_destroy_definer+0x54/0x100 [mlx5_core]
   mlx5_lag_destroy_definers+0xa0/0x108 [mlx5_core]
   mlx5_lag_port_sel_create+0x2d4/0x6f8 [mlx5_core]
   mlx5_activate_lag+0x60c/0x6f8 [mlx5_core]
   mlx5_do_bond_work+0x284/0x5c8 [mlx5_core]
   process_one_work+0x170/0x3e0
   worker_thread+0x2d8/0x3e0
   kthread+0x11c/0x128
   ret_from_fork+0x10/0x20
  Code: a9025bf5 aa0003f6 a90363f7 f90023f9 (f9400400)
  ---[ end trace 0000000000000000 ]---

Fixes: dc48516 ("net/mlx5: Lag, add support to create definers for LAG")
Signed-off-by: Mark Zhang <[email protected]>
Reviewed-by: Leon Romanovsky <[email protected]>
Reviewed-by: Mark Bloch <[email protected]>
Reviewed-by: Jacob Keller <[email protected]>
Signed-off-by: Tariq Toukan <[email protected]>
Signed-off-by: Paolo Abeni <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
MingcongBai pushed a commit that referenced this issue Feb 18, 2025
commit 9860370 upstream.

irq_chip functions may be called in raw spinlock context. Therefore, we
must also use a raw spinlock for our own internal locking.

This fixes the following lockdep splat:

[    5.349336] =============================
[    5.353349] [ BUG: Invalid wait context ]
[    5.357361] 6.13.0-rc5+ torvalds#69 Tainted: G        W
[    5.363031] -----------------------------
[    5.367045] kworker/u17:1/44 is trying to lock:
[    5.371587] ffffff88018b02c0 (&chip->gpio_lock){....}-{3:3}, at: xgpio_irq_unmask (drivers/gpio/gpio-xilinx.c:433 (discriminator 8))
[    5.380079] other info that might help us debug this:
[    5.385138] context-{5:5}
[    5.387762] 5 locks held by kworker/u17:1/44:
[    5.392123] #0: ffffff8800014958 ((wq_completion)events_unbound){+.+.}-{0:0}, at: process_one_work (kernel/workqueue.c:3204)
[    5.402260] #1: ffffffc082fcbdd8 (deferred_probe_work){+.+.}-{0:0}, at: process_one_work (kernel/workqueue.c:3205)
[    5.411528] #2: ffffff880172c900 (&dev->mutex){....}-{4:4}, at: __device_attach (drivers/base/dd.c:1006)
[    5.419929] #3: ffffff88039c8268 (request_class#2){+.+.}-{4:4}, at: __setup_irq (kernel/irq/internals.h:156 kernel/irq/manage.c:1596)
[    5.428331] #4: ffffff88039c80c8 (lock_class#2){....}-{2:2}, at: __setup_irq (kernel/irq/manage.c:1614)
[    5.436472] stack backtrace:
[    5.439359] CPU: 2 UID: 0 PID: 44 Comm: kworker/u17:1 Tainted: G        W          6.13.0-rc5+ torvalds#69
[    5.448690] Tainted: [W]=WARN
[    5.451656] Hardware name: xlnx,zynqmp (DT)
[    5.455845] Workqueue: events_unbound deferred_probe_work_func
[    5.461699] Call trace:
[    5.464147] show_stack+0x18/0x24 C
[    5.467821] dump_stack_lvl (lib/dump_stack.c:123)
[    5.471501] dump_stack (lib/dump_stack.c:130)
[    5.474824] __lock_acquire (kernel/locking/lockdep.c:4828 kernel/locking/lockdep.c:4898 kernel/locking/lockdep.c:5176)
[    5.478758] lock_acquire (arch/arm64/include/asm/percpu.h:40 kernel/locking/lockdep.c:467 kernel/locking/lockdep.c:5851 kernel/locking/lockdep.c:5814)
[    5.482429] _raw_spin_lock_irqsave (include/linux/spinlock_api_smp.h:111 kernel/locking/spinlock.c:162)
[    5.486797] xgpio_irq_unmask (drivers/gpio/gpio-xilinx.c:433 (discriminator 8))
[    5.490737] irq_enable (kernel/irq/internals.h:236 kernel/irq/chip.c:170 kernel/irq/chip.c:439 kernel/irq/chip.c:432 kernel/irq/chip.c:345)
[    5.494060] __irq_startup (kernel/irq/internals.h:241 kernel/irq/chip.c:180 kernel/irq/chip.c:250)
[    5.497645] irq_startup (kernel/irq/chip.c:270)
[    5.501143] __setup_irq (kernel/irq/manage.c:1807)
[    5.504728] request_threaded_irq (kernel/irq/manage.c:2208)

Fixes: a32c7ca ("gpio: gpio-xilinx: Add interrupt support")
Signed-off-by: Sean Anderson <[email protected]>
Cc: [email protected]
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Bartosz Golaszewski <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
MingcongBai pushed a commit that referenced this issue Feb 18, 2025
[ Upstream commit be7a6a7 ]

It isn't guaranteed that NETWORK_INTERFACE_INFO::LinkSpeed will always
be set by the server, so the client must handle any values and then
prevent oopses like below from happening:

Oops: divide error: 0000 [#1] PREEMPT SMP KASAN NOPTI
CPU: 0 UID: 0 PID: 1323 Comm: cat Not tainted 6.13.0-rc7 #2
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-3.fc41
04/01/2014
RIP: 0010:cifs_debug_data_proc_show+0xa45/0x1460 [cifs] Code: 00 00 48
89 df e8 3b cd 1b c1 41 f6 44 24 2c 04 0f 84 50 01 00 00 48 89 ef e8
e7 d0 1b c1 49 8b 44 24 18 31 d2 49 8d 7c 24 28 <48> f7 74 24 18 48 89
c3 e8 6e cf 1b c1 41 8b 6c 24 28 49 8d 7c 24
RSP: 0018:ffffc90001817be0 EFLAGS: 00010246
RAX: 0000000000000000 RBX: ffff88811230022c RCX: ffffffffc041bd99
RDX: 0000000000000000 RSI: 0000000000000567 RDI: ffff888112300228
RBP: ffff888112300218 R08: fffff52000302f5f R09: ffffed1022fa58ac
R10: ffff888117d2c566 R11: 00000000fffffffe R12: ffff888112300200
R13: 000000012a15343f R14: 0000000000000001 R15: ffff888113f2db58
FS: 00007fe27119e740(0000) GS:ffff888148600000(0000)
knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fe2633c5000 CR3: 0000000124da0000 CR4: 0000000000750ef0
PKRU: 55555554
Call Trace:
 <TASK>
 ? __die_body.cold+0x19/0x27
 ? die+0x2e/0x50
 ? do_trap+0x159/0x1b0
 ? cifs_debug_data_proc_show+0xa45/0x1460 [cifs]
 ? do_error_trap+0x90/0x130
 ? cifs_debug_data_proc_show+0xa45/0x1460 [cifs]
 ? exc_divide_error+0x39/0x50
 ? cifs_debug_data_proc_show+0xa45/0x1460 [cifs]
 ? asm_exc_divide_error+0x1a/0x20
 ? cifs_debug_data_proc_show+0xa39/0x1460 [cifs]
 ? cifs_debug_data_proc_show+0xa45/0x1460 [cifs]
 ? seq_read_iter+0x42e/0x790
 seq_read_iter+0x19a/0x790
 proc_reg_read_iter+0xbe/0x110
 ? __pfx_proc_reg_read_iter+0x10/0x10
 vfs_read+0x469/0x570
 ? do_user_addr_fault+0x398/0x760
 ? __pfx_vfs_read+0x10/0x10
 ? find_held_lock+0x8a/0xa0
 ? __pfx_lock_release+0x10/0x10
 ksys_read+0xd3/0x170
 ? __pfx_ksys_read+0x10/0x10
 ? __rcu_read_unlock+0x50/0x270
 ? mark_held_locks+0x1a/0x90
 do_syscall_64+0xbb/0x1d0
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fe271288911
Code: 00 48 8b 15 01 25 10 00 f7 d8 64 89 02 b8 ff ff ff ff eb bd e8
20 ad 01 00 f3 0f 1e fa 80 3d b5 a7 10 00 00 74 13 31 c0 0f 05 <48> 3d
00 f0 ff ff 77 4f c3 66 0f 1f 44 00 00 55 48 89 e5 48 83 ec
RSP: 002b:00007ffe87c079d8 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
RAX: ffffffffffffffda RBX: 0000000000040000 RCX: 00007fe271288911
RDX: 0000000000040000 RSI: 00007fe2633c6000 RDI: 0000000000000003
RBP: 00007ffe87c07a00 R08: 0000000000000000 R09: 00007fe2713e6380
R10: 0000000000000022 R11: 0000000000000246 R12: 0000000000040000
R13: 00007fe2633c6000 R14: 0000000000000003 R15: 0000000000000000
 </TASK>

Fix this by setting cifs_server_iface::speed to a sane value (1Gbps)
by default when link speed is unset.

Cc: Shyam Prasad N <[email protected]>
Cc: Tom Talpey <[email protected]>
Fixes: a6d8fb5 ("cifs: distribute channels across interfaces based on speed")
Reported-by: Frank Sorenson <[email protected]>
Reported-by: Jay Shin <[email protected]>
Signed-off-by: Paulo Alcantara (Red Hat) <[email protected]>
Signed-off-by: Steve French <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
MingcongBai pushed a commit that referenced this issue Feb 18, 2025
[ Upstream commit 58f038e ]

During the update procedure, when overwrite element in a pre-allocated
htab, the freeing of old_element is protected by the bucket lock. The
reason why the bucket lock is necessary is that the old_element has
already been stashed in htab->extra_elems after alloc_htab_elem()
returns. If freeing the old_element after the bucket lock is unlocked,
the stashed element may be reused by concurrent update procedure and the
freeing of old_element will run concurrently with the reuse of the
old_element. However, the invocation of check_and_free_fields() may
acquire a spin-lock which violates the lockdep rule because its caller
has already held a raw-spin-lock (bucket lock). The following warning
will be reported when such race happens:

  BUG: scheduling while atomic: test_progs/676/0x00000003
  3 locks held by test_progs/676:
  #0: ffffffff864b0240 (rcu_read_lock_trace){....}-{0:0}, at: bpf_prog_test_run_syscall+0x2c0/0x830
  #1: ffff88810e961188 (&htab->lockdep_key){....}-{2:2}, at: htab_map_update_elem+0x306/0x1500
  #2: ffff8881f4eac1b8 (&base->softirq_expiry_lock){....}-{2:2}, at: hrtimer_cancel_wait_running+0xe9/0x1b0
  Modules linked in: bpf_testmod(O)
  Preemption disabled at:
  [<ffffffff817837a3>] htab_map_update_elem+0x293/0x1500
  CPU: 0 UID: 0 PID: 676 Comm: test_progs Tainted: G ... 6.12.0+ #11
  Tainted: [W]=WARN, [O]=OOT_MODULE
  Hardware name: QEMU Standard PC (i440FX + PIIX, 1996)...
  Call Trace:
  <TASK>
  dump_stack_lvl+0x57/0x70
  dump_stack+0x10/0x20
  __schedule_bug+0x120/0x170
  __schedule+0x300c/0x4800
  schedule_rtlock+0x37/0x60
  rtlock_slowlock_locked+0x6d9/0x54c0
  rt_spin_lock+0x168/0x230
  hrtimer_cancel_wait_running+0xe9/0x1b0
  hrtimer_cancel+0x24/0x30
  bpf_timer_delete_work+0x1d/0x40
  bpf_timer_cancel_and_free+0x5e/0x80
  bpf_obj_free_fields+0x262/0x4a0
  check_and_free_fields+0x1d0/0x280
  htab_map_update_elem+0x7fc/0x1500
  bpf_prog_9f90bc20768e0cb9_overwrite_cb+0x3f/0x43
  bpf_prog_ea601c4649694dbd_overwrite_timer+0x5d/0x7e
  bpf_prog_test_run_syscall+0x322/0x830
  __sys_bpf+0x135d/0x3ca0
  __x64_sys_bpf+0x75/0xb0
  x64_sys_call+0x1b5/0xa10
  do_syscall_64+0x3b/0xc0
  entry_SYSCALL_64_after_hwframe+0x4b/0x53
  ...
  </TASK>

It seems feasible to break the reuse and refill of per-cpu extra_elems
into two independent parts: reuse the per-cpu extra_elems with bucket
lock being held and refill the old_element as per-cpu extra_elems after
the bucket lock is unlocked. However, it will make the concurrent
overwrite procedures on the same CPU return unexpected -E2BIG error when
the map is full.

Therefore, the patch fixes the lock problem by breaking the cancelling
of bpf_timer into two steps for PREEMPT_RT:
1) use hrtimer_try_to_cancel() and check its return value
2) if the timer is running, use hrtimer_cancel() through a kworker to
   cancel it again
Considering that the current implementation of hrtimer_cancel() will try
to acquire a being held softirq_expiry_lock when the current timer is
running, these steps above are reasonable. However, it also has
downside. When the timer is running, the cancelling of the timer is
delayed when releasing the last map uref. The delay is also fixable
(e.g., break the cancelling of bpf timer into two parts: one part in
locked scope, another one in unlocked scope), it can be revised later if
necessary.

It is a bit hard to decide the right fix tag. One reason is that the
problem depends on PREEMPT_RT which is enabled in v6.12. Considering the
softirq_expiry_lock lock exists since v5.4 and bpf_timer is introduced
in v5.15, the bpf_timer commit is used in the fixes tag and an extra
depends-on tag is added to state the dependency on PREEMPT_RT.

Fixes: b00628b ("bpf: Introduce bpf timers.")
Depends-on: v6.12+ with PREEMPT_RT enabled
Reported-by: Sebastian Andrzej Siewior <[email protected]>
Closes: https://lore.kernel.org/bpf/[email protected]
Signed-off-by: Hou Tao <[email protected]>
Reviewed-by: Toke Høiland-Jørgensen <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Alexei Starovoitov <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
MingcongBai pushed a commit that referenced this issue Feb 18, 2025
[ Upstream commit 396f016 ]

Add read memory barrier to ensure the order of operations when accessing
control queue descriptors. Specifically, we want to avoid cases where loads
can be reordered:

1. Load #1 is dispatched to read descriptor flags.
2. Load #2 is dispatched to read some other field from the descriptor.
3. Load #2 completes, accessing memory/cache at a point in time when the DD
   flag is zero.
4. NIC DMA overwrites the descriptor, now the DD flag is one.
5. Any fields loaded before step 4 are now inconsistent with the actual
   descriptor state.

Add read memory barrier between steps 1 and 2, so that load #2 is not
executed until load #1 has completed.

Fixes: 8077c72 ("idpf: add controlq init and reset checks")
Reviewed-by: Przemek Kitszel <[email protected]>
Reviewed-by: Sridhar Samudrala <[email protected]>
Suggested-by: Lance Richardson <[email protected]>
Signed-off-by: Emil Tantilov <[email protected]>
Tested-by: Krishneil Singh <[email protected]>
Signed-off-by: Tony Nguyen <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
MingcongBai pushed a commit that referenced this issue Feb 18, 2025
[ Upstream commit c7b87ce ]

libtraceevent parses and returns an array of argument fields, sometimes
larger than RAW_SYSCALL_ARGS_NUM (6) because it includes "__syscall_nr",
idx will traverse to index 6 (7th element) whereas sc->fmt->arg holds 6
elements max, creating an out-of-bounds access. This runtime error is
found by UBsan. The error message:

  $ sudo UBSAN_OPTIONS=print_stacktrace=1 ./perf trace -a --max-events=1
  builtin-trace.c:1966:35: runtime error: index 6 out of bounds for type 'syscall_arg_fmt [6]'
    #0 0x5c04956be5fe in syscall__alloc_arg_fmts /home/howard/hw/linux-perf/tools/perf/builtin-trace.c:1966
    #1 0x5c04956c0510 in trace__read_syscall_info /home/howard/hw/linux-perf/tools/perf/builtin-trace.c:2110
    #2 0x5c04956c372b in trace__syscall_info /home/howard/hw/linux-perf/tools/perf/builtin-trace.c:2436
    #3 0x5c04956d2f39 in trace__init_syscalls_bpf_prog_array_maps /home/howard/hw/linux-perf/tools/perf/builtin-trace.c:3897
    #4 0x5c04956d6d25 in trace__run /home/howard/hw/linux-perf/tools/perf/builtin-trace.c:4335
    #5 0x5c04956e112e in cmd_trace /home/howard/hw/linux-perf/tools/perf/builtin-trace.c:5502
    #6 0x5c04956eda7d in run_builtin /home/howard/hw/linux-perf/tools/perf/perf.c:351
    #7 0x5c04956ee0a8 in handle_internal_command /home/howard/hw/linux-perf/tools/perf/perf.c:404
    #8 0x5c04956ee37f in run_argv /home/howard/hw/linux-perf/tools/perf/perf.c:448
    #9 0x5c04956ee8e9 in main /home/howard/hw/linux-perf/tools/perf/perf.c:556
    #10 0x79eb3622a3b7 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    #11 0x79eb3622a47a in __libc_start_main_impl ../csu/libc-start.c:360
    #12 0x5c04955422d4 in _start (/home/howard/hw/linux-perf/tools/perf/perf+0x4e02d4) (BuildId: 5b6cab2d59e96a4341741765ad6914a4d784dbc6)

     0.000 ( 0.014 ms): Chrome_ChildIO/117244 write(fd: 238, buf: !, count: 1)                                      = 1

Fixes: 5e58fcf ("perf trace: Allow allocating sc->arg_fmt even without the syscall tracepoint")
Signed-off-by: Howard Chu <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Namhyung Kim <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
MingcongBai pushed a commit that referenced this issue Feb 18, 2025
[ Upstream commit b32c369 ]

In "one-shot" mode, turbostat
1. takes a counter snapshot
2. forks and waits for a child
3. takes the end counter snapshot and prints the result.

But turbostat counter snapshots currently use affinity to travel
around the system so that counter reads are "local", and this
affinity must be cleared between #1 and #2 above.

The offending commit removed that reset that allowed the child
to run on cpu_present_set.

Fix that issue, and improve upon the original by using
cpu_possible_set for the child.  This allows the child
to also run on CPUs that hotplug online during its runtime.

Reported-by: Zhang Rui <[email protected]>
Fixes: 7bb3fe2 ("tools/power/turbostat: Obey allowed CPUs during startup")
Signed-off-by: Len Brown <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
MingcongBai pushed a commit that referenced this issue Feb 18, 2025
[ Upstream commit 1e8c193 ]

This commit addresses a circular locking dependency issue within the GFX
isolation mechanism. The problem was identified by a warning indicating
a potential deadlock due to inconsistent lock acquisition order.

- The `amdgpu_gfx_enforce_isolation_ring_begin_use` and
  `amdgpu_gfx_enforce_isolation_ring_end_use` functions previously
  acquired `enforce_isolation_mutex` and called `amdgpu_gfx_kfd_sch_ctrl`,
  leading to potential deadlocks. ie., If `amdgpu_gfx_kfd_sch_ctrl` is
  called while `enforce_isolation_mutex` is held, and
  `amdgpu_gfx_enforce_isolation_handler` is called while `kfd_sch_mutex` is
  held, it can create a circular dependency.

By ensuring consistent lock usage, this fix resolves the issue:

[  606.297333] ======================================================
[  606.297343] WARNING: possible circular locking dependency detected
[  606.297353] 6.10.0-amd-mlkd-610-311224-lof #19 Tainted: G           OE
[  606.297365] ------------------------------------------------------
[  606.297375] kworker/u96:3/3825 is trying to acquire lock:
[  606.297385] ffff9aa64e431cb8 ((work_completion)(&(&adev->gfx.enforce_isolation[i].work)->work)){+.+.}-{0:0}, at: __flush_work+0x232/0x610
[  606.297413]
               but task is already holding lock:
[  606.297423] ffff9aa64e432338 (&adev->gfx.kfd_sch_mutex){+.+.}-{3:3}, at: amdgpu_gfx_kfd_sch_ctrl+0x51/0x4d0 [amdgpu]
[  606.297725]
               which lock already depends on the new lock.

[  606.297738]
               the existing dependency chain (in reverse order) is:
[  606.297749]
               -> #2 (&adev->gfx.kfd_sch_mutex){+.+.}-{3:3}:
[  606.297765]        __mutex_lock+0x85/0x930
[  606.297776]        mutex_lock_nested+0x1b/0x30
[  606.297786]        amdgpu_gfx_kfd_sch_ctrl+0x51/0x4d0 [amdgpu]
[  606.298007]        amdgpu_gfx_enforce_isolation_ring_begin_use+0x2a4/0x5d0 [amdgpu]
[  606.298225]        amdgpu_ring_alloc+0x48/0x70 [amdgpu]
[  606.298412]        amdgpu_ib_schedule+0x176/0x8a0 [amdgpu]
[  606.298603]        amdgpu_job_run+0xac/0x1e0 [amdgpu]
[  606.298866]        drm_sched_run_job_work+0x24f/0x430 [gpu_sched]
[  606.298880]        process_one_work+0x21e/0x680
[  606.298890]        worker_thread+0x190/0x350
[  606.298899]        kthread+0xe7/0x120
[  606.298908]        ret_from_fork+0x3c/0x60
[  606.298919]        ret_from_fork_asm+0x1a/0x30
[  606.298929]
               -> #1 (&adev->enforce_isolation_mutex){+.+.}-{3:3}:
[  606.298947]        __mutex_lock+0x85/0x930
[  606.298956]        mutex_lock_nested+0x1b/0x30
[  606.298966]        amdgpu_gfx_enforce_isolation_handler+0x87/0x370 [amdgpu]
[  606.299190]        process_one_work+0x21e/0x680
[  606.299199]        worker_thread+0x190/0x350
[  606.299208]        kthread+0xe7/0x120
[  606.299217]        ret_from_fork+0x3c/0x60
[  606.299227]        ret_from_fork_asm+0x1a/0x30
[  606.299236]
               -> #0 ((work_completion)(&(&adev->gfx.enforce_isolation[i].work)->work)){+.+.}-{0:0}:
[  606.299257]        __lock_acquire+0x16f9/0x2810
[  606.299267]        lock_acquire+0xd1/0x300
[  606.299276]        __flush_work+0x250/0x610
[  606.299286]        cancel_delayed_work_sync+0x71/0x80
[  606.299296]        amdgpu_gfx_kfd_sch_ctrl+0x287/0x4d0 [amdgpu]
[  606.299509]        amdgpu_gfx_enforce_isolation_ring_begin_use+0x2a4/0x5d0 [amdgpu]
[  606.299723]        amdgpu_ring_alloc+0x48/0x70 [amdgpu]
[  606.299909]        amdgpu_ib_schedule+0x176/0x8a0 [amdgpu]
[  606.300101]        amdgpu_job_run+0xac/0x1e0 [amdgpu]
[  606.300355]        drm_sched_run_job_work+0x24f/0x430 [gpu_sched]
[  606.300369]        process_one_work+0x21e/0x680
[  606.300378]        worker_thread+0x190/0x350
[  606.300387]        kthread+0xe7/0x120
[  606.300396]        ret_from_fork+0x3c/0x60
[  606.300406]        ret_from_fork_asm+0x1a/0x30
[  606.300416]
               other info that might help us debug this:

[  606.300428] Chain exists of:
                 (work_completion)(&(&adev->gfx.enforce_isolation[i].work)->work) --> &adev->enforce_isolation_mutex --> &adev->gfx.kfd_sch_mutex

[  606.300458]  Possible unsafe locking scenario:

[  606.300468]        CPU0                    CPU1
[  606.300476]        ----                    ----
[  606.300484]   lock(&adev->gfx.kfd_sch_mutex);
[  606.300494]                                lock(&adev->enforce_isolation_mutex);
[  606.300508]                                lock(&adev->gfx.kfd_sch_mutex);
[  606.300521]   lock((work_completion)(&(&adev->gfx.enforce_isolation[i].work)->work));
[  606.300536]
                *** DEADLOCK ***

[  606.300546] 5 locks held by kworker/u96:3/3825:
[  606.300555]  #0: ffff9aa5aa1f5d58 ((wq_completion)comp_1.1.0){+.+.}-{0:0}, at: process_one_work+0x3f5/0x680
[  606.300577]  #1: ffffaa53c3c97e40 ((work_completion)(&sched->work_run_job)){+.+.}-{0:0}, at: process_one_work+0x1d6/0x680
[  606.300600]  #2: ffff9aa64e463c98 (&adev->enforce_isolation_mutex){+.+.}-{3:3}, at: amdgpu_gfx_enforce_isolation_ring_begin_use+0x1c3/0x5d0 [amdgpu]
[  606.300837]  #3: ffff9aa64e432338 (&adev->gfx.kfd_sch_mutex){+.+.}-{3:3}, at: amdgpu_gfx_kfd_sch_ctrl+0x51/0x4d0 [amdgpu]
[  606.301062]  #4: ffffffff8c1a5660 (rcu_read_lock){....}-{1:2}, at: __flush_work+0x70/0x610
[  606.301083]
               stack backtrace:
[  606.301092] CPU: 14 PID: 3825 Comm: kworker/u96:3 Tainted: G           OE      6.10.0-amd-mlkd-610-311224-lof #19
[  606.301109] Hardware name: Gigabyte Technology Co., Ltd. X570S GAMING X/X570S GAMING X, BIOS F7 03/22/2024
[  606.301124] Workqueue: comp_1.1.0 drm_sched_run_job_work [gpu_sched]
[  606.301140] Call Trace:
[  606.301146]  <TASK>
[  606.301154]  dump_stack_lvl+0x9b/0xf0
[  606.301166]  dump_stack+0x10/0x20
[  606.301175]  print_circular_bug+0x26c/0x340
[  606.301187]  check_noncircular+0x157/0x170
[  606.301197]  ? register_lock_class+0x48/0x490
[  606.301213]  __lock_acquire+0x16f9/0x2810
[  606.301230]  lock_acquire+0xd1/0x300
[  606.301239]  ? __flush_work+0x232/0x610
[  606.301250]  ? srso_alias_return_thunk+0x5/0xfbef5
[  606.301261]  ? mark_held_locks+0x54/0x90
[  606.301274]  ? __flush_work+0x232/0x610
[  606.301284]  __flush_work+0x250/0x610
[  606.301293]  ? __flush_work+0x232/0x610
[  606.301305]  ? __pfx_wq_barrier_func+0x10/0x10
[  606.301318]  ? mark_held_locks+0x54/0x90
[  606.301331]  ? srso_alias_return_thunk+0x5/0xfbef5
[  606.301345]  cancel_delayed_work_sync+0x71/0x80
[  606.301356]  amdgpu_gfx_kfd_sch_ctrl+0x287/0x4d0 [amdgpu]
[  606.301661]  amdgpu_gfx_enforce_isolation_ring_begin_use+0x2a4/0x5d0 [amdgpu]
[  606.302050]  ? srso_alias_return_thunk+0x5/0xfbef5
[  606.302069]  amdgpu_ring_alloc+0x48/0x70 [amdgpu]
[  606.302452]  amdgpu_ib_schedule+0x176/0x8a0 [amdgpu]
[  606.302862]  ? drm_sched_entity_error+0x82/0x190 [gpu_sched]
[  606.302890]  amdgpu_job_run+0xac/0x1e0 [amdgpu]
[  606.303366]  drm_sched_run_job_work+0x24f/0x430 [gpu_sched]
[  606.303388]  process_one_work+0x21e/0x680
[  606.303409]  worker_thread+0x190/0x350
[  606.303424]  ? __pfx_worker_thread+0x10/0x10
[  606.303437]  kthread+0xe7/0x120
[  606.303449]  ? __pfx_kthread+0x10/0x10
[  606.303463]  ret_from_fork+0x3c/0x60
[  606.303476]  ? __pfx_kthread+0x10/0x10
[  606.303489]  ret_from_fork_asm+0x1a/0x30
[  606.303512]  </TASK>

v2: Refactor lock handling to resolve circular dependency (Alex)

- Introduced a `sched_work` flag to defer the call to
  `amdgpu_gfx_kfd_sch_ctrl` until after releasing
  `enforce_isolation_mutex`.
- This change ensures that `amdgpu_gfx_kfd_sch_ctrl` is called outside
  the critical section, preventing the circular dependency and deadlock.
- The `sched_work` flag is set within the mutex-protected section if
  conditions are met, and the actual function call is made afterward.
- This approach ensures consistent lock acquisition order.

Fixes: afefd6f ("drm/amdgpu: Implement Enforce Isolation Handler for KGD/KFD serialization")
Cc: Christian König <[email protected]>
Cc: Alex Deucher <[email protected]>
Signed-off-by: Srinivasan Shanmugam <[email protected]>
Suggested-by: Alex Deucher <[email protected]>
Reviewed-by: Alex Deucher <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
MingcongBai pushed a commit that referenced this issue Feb 18, 2025
commit 3599bae upstream.

The 32-bit Debian kernel 6.12 fails to boot and crashes like this:

 init (pid 65): Protection id trap (code 7)
 CPU: 0 UID: 0 PID: 65 Comm: init Not tainted 6.12.9 #2
 Hardware name: 9000/778/B160L

      YZrvWESTHLNXBCVMcbcbcbcbOGFRQPDI
 PSW: 00000000000001000000000000001111 Not tainted
 r00-03  0004000f 110d39d0 109a6558 12974400
 r04-07  12a810e0 12a810e0 00000000 12a81144
 r08-11  12a81174 00000007 00000000 00000002
 r12-15  f8c55c08 0000006c 00000001 f8c55c08
 r16-19  00000002 f8c58620 002da3a8 0000004e
 r20-23  00001a46 0000000f 10754f84 00000000
 r24-27  00000000 00000003 12ae6980 1127b9d0
 r28-31  00000000 00000000 12974440 109a6558
 sr00-03  00000000 00000000 00000000 00000010
 sr04-07  00000000 00000000 00000000 00000000

 IASQ: 00000000 00000000 IAOQ: 110d39d0 110d39d4
  IIR: baadf00d    ISR: 00000000  IOR: 110d39d0
  CPU:        0   CR30: 128740c0 CR31: 00000000
  ORIG_R28: 000003f3
  IAOQ[0]: 0x110d39d0
  IAOQ[1]: 0x110d39d4
  RP(r2): security_sk_free+0x70/0x1a4
 Backtrace:
  [<10d8c844>] __sk_destruct+0x2bc/0x378
  [<10d8e33c>] sk_destruct+0x68/0x8c
  [<10d8e3dc>] __sk_free+0x7c/0x148
  [<10d8e560>] sk_free+0xb8/0xf0
  [<10f6420c>] unix_release_sock+0x3ac/0x50c
  [<10f643b8>] unix_release+0x4c/0x7c
  [<10d832f8>] __sock_release+0x5c/0xf8
  [<10d833b4>] sock_close+0x20/0x44
  [<107ba52c>] __fput+0xf8/0x468
  [<107baa08>] __fput_sync+0xb4/0xd4
  [<107b471c>] sys_close+0x44/0x94
  [<10405334>] syscall_exit+0x0/0x10

Bisecting points to this commit which triggers the issue:
	commit  417c564
	Author: KP Singh <[email protected]>
	Date:   Fri Aug 16 17:43:07 2024 +0200
	        lsm: replace indirect LSM hook calls with static calls

After more analysis it seems that we don't fully implement the static calls
and jump tables yet. Additionally the functions which mark kernel memory
read-only or read-write-executable needs to be further enhanced to be able to
fully support static calls.

Enabling CONFIG_SECURITY_YAMA=y was one possibility to trigger the issue,
although YAMA isn't the reason for the fault.

As a temporary solution disable JUMP_LABEL functionality to
avoid the crashes.

Signed-off-by: Helge Deller <[email protected]>
Cc: Guenter Roeck <[email protected]>
Reviewed-by: Guenter Roeck <[email protected]>
Cc: <[email protected]> # v6.12+
Signed-off-by: Greg Kroah-Hartman <[email protected]>
MingcongBai pushed a commit that referenced this issue Feb 18, 2025
commit b0fce54 upstream.

syz reports an out of bounds read:

==================================================================
BUG: KASAN: slab-out-of-bounds in ocfs2_match fs/ocfs2/dir.c:334
[inline]
BUG: KASAN: slab-out-of-bounds in ocfs2_search_dirblock+0x283/0x6e0
fs/ocfs2/dir.c:367
Read of size 1 at addr ffff88804d8b9982 by task syz-executor.2/14802

CPU: 0 UID: 0 PID: 14802 Comm: syz-executor.2 Not tainted 6.13.0-rc4 #2
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1
04/01/2014
Sched_ext: serialise (enabled+all), task: runnable_at=-10ms
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:94 [inline]
dump_stack_lvl+0x229/0x350 lib/dump_stack.c:120
print_address_description mm/kasan/report.c:378 [inline]
print_report+0x164/0x530 mm/kasan/report.c:489
kasan_report+0x147/0x180 mm/kasan/report.c:602
ocfs2_match fs/ocfs2/dir.c:334 [inline]
ocfs2_search_dirblock+0x283/0x6e0 fs/ocfs2/dir.c:367
ocfs2_find_entry_id fs/ocfs2/dir.c:414 [inline]
ocfs2_find_entry+0x1143/0x2db0 fs/ocfs2/dir.c:1078
ocfs2_find_files_on_disk+0x18e/0x530 fs/ocfs2/dir.c:1981
ocfs2_lookup_ino_from_name+0xb6/0x110 fs/ocfs2/dir.c:2003
ocfs2_lookup+0x30a/0xd40 fs/ocfs2/namei.c:122
lookup_open fs/namei.c:3627 [inline]
open_last_lookups fs/namei.c:3748 [inline]
path_openat+0x145a/0x3870 fs/namei.c:3984
do_filp_open+0xe9/0x1c0 fs/namei.c:4014
do_sys_openat2+0x135/0x1d0 fs/open.c:1402
do_sys_open fs/open.c:1417 [inline]
__do_sys_openat fs/open.c:1433 [inline]
__se_sys_openat fs/open.c:1428 [inline]
__x64_sys_openat+0x15d/0x1c0 fs/open.c:1428
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf6/0x210 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f01076903ad
Code: c3 e8 a7 2b 00 00 0f 1f 80 00 00 00 00 f3 0f 1e fa 48 89 f8 48 89
f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01
f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007f01084acfc8 EFLAGS: 00000246 ORIG_RAX: 0000000000000101
RAX: ffffffffffffffda RBX: 00007f01077cbf80 RCX: 00007f01076903ad
RDX: 0000000000105042 RSI: 0000000020000080 RDI: ffffffffffffff9c
RBP: 00007f01077cbf80 R08: 0000000000000000 R09: 0000000000000000
R10: 00000000000001ff R11: 0000000000000246 R12: 0000000000000000
R13: 00007f01077cbf80 R14: 00007f010764fc90 R15: 00007f010848d000
</TASK>
==================================================================

And a general protection fault in ocfs2_prepare_dir_for_insert:

==================================================================
loop0: detected capacity change from 0 to 32768
JBD2: Ignoring recovery information on journal
ocfs2: Mounting device (7,0) on (node local, slot 0) with ordered data
mode.
Oops: general protection fault, probably for non-canonical address
0xdffffc0000000001: 0000 [#1] PREEMPT SMP KASAN NOPTI
KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f]
CPU: 0 UID: 0 PID: 5096 Comm: syz-executor792 Not tainted
6.11.0-rc4-syzkaller-00002-gb0da640826ba #0
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
RIP: 0010:ocfs2_find_dir_space_id fs/ocfs2/dir.c:3406 [inline]
RIP: 0010:ocfs2_prepare_dir_for_insert+0x3309/0x5c70 fs/ocfs2/dir.c:4280
Code: 00 00 e8 2a 25 13 fe e9 ba 06 00 00 e8 20 25 13 fe e9 4f 01 00 00
e8 16 25 13 fe 49 8d 7f 08 49 8d 5f 09 48 89 f8 48 c1 e8 03 <42> 0f b6
04 20 84 c0 0f 85 bd 23 00 00 48 89 d8 48 c1 e8 03 42 0f
RSP: 0018:ffffc9000af9f020 EFLAGS: 00010202
RAX: 0000000000000001 RBX: 0000000000000009 RCX: ffff88801e27a440
RDX: 0000000000000000 RSI: 0000000000000400 RDI: 0000000000000008
RBP: ffffc9000af9f830 R08: ffffffff8380395b R09: ffffffff838090a7
R10: 0000000000000002 R11: ffff88801e27a440 R12: dffffc0000000000
R13: ffff88803c660878 R14: f700000000000088 R15: 0000000000000000
FS:  000055555a677380(0000) GS:ffff888020800000(0000)
knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000560bce569178 CR3: 000000001de5a000 CR4: 0000000000350ef0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
<TASK>
ocfs2_mknod+0xcaf/0x2b40 fs/ocfs2/namei.c:292
vfs_mknod+0x36d/0x3b0 fs/namei.c:4088
do_mknodat+0x3ec/0x5b0
__do_sys_mknodat fs/namei.c:4166 [inline]
__se_sys_mknodat fs/namei.c:4163 [inline]
__x64_sys_mknodat+0xa7/0xc0 fs/namei.c:4163
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f2dafda3a99
Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 f1 17 00 00 90 48 89
f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08
0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8
64 89 01 48
RSP: 002b:00007ffe336a6658 EFLAGS: 00000246 ORIG_RAX:
0000000000000103
RAX: ffffffffffffffda RBX: 0000000000000000 RCX:
00007f2dafda3a99
RDX: 00000000000021c0 RSI: 0000000020000040 RDI:
00000000ffffff9c
RBP: 00007f2dafe1b5f0 R08: 0000000000004480 R09:
000055555a6784c0
R10: 0000000000000103 R11: 0000000000000246 R12:
00007ffe336a6680
R13: 00007ffe336a68a8 R14: 431bde82d7b634db R15:
00007f2dafdec03b
</TASK>
==================================================================

The two reports are all caused invalid negative i_size of dir inode.  For
ocfs2, dir_inode can't be negative or zero.

Here add a check in which is called by ocfs2_check_dir_for_entry().  It
fixes the second report as ocfs2_check_dir_for_entry() must be called
before ocfs2_prepare_dir_for_insert().  Also set a up limit for dir with
OCFS2_INLINE_DATA_FL.  The i_size can't be great than blocksize.

Link: https://lkml.kernel.org/r/[email protected]
Reported-by: Jiacheng Xu <[email protected]>
Link: https://lore.kernel.org/ocfs2-devel/[email protected]/T/#u
Reported-by: [email protected]
Link: https://lore.kernel.org/all/[email protected]/T/
Signed-off-by: Su Yue <[email protected]>
Reviewed-by: Heming Zhao <[email protected]>
Reviewed-by: Joseph Qi <[email protected]>
Cc: Mark Fasheh <[email protected]>
Cc: Joel Becker <[email protected]>
Cc: Junxiao Bi <[email protected]>
Cc: Changwei Ge <[email protected]>
Cc: Jun Piao <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant