tree: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git master head: 02925b3b935e2203077ec974b93bf2d5f84ab754 commit: 0e272fc7e17d429b018d4f2d9c5cacab10f5fab5 [83/84] Bluetooth: remove duplicate h4_recv_buf() in header config: nios2-randconfig-002-20250830 (https://download.01.org/0day-ci/archive/20250830/202508300413.OnIedvRh-lkp@xxxxxxxxx/config) compiler: nios2-linux-gcc (GCC) 8.5.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250830/202508300413.OnIedvRh-lkp@xxxxxxxxx/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@xxxxxxxxx> | Closes: https://lore.kernel.org/oe-kbuild-all/202508300413.OnIedvRh-lkp@xxxxxxxxx/ All error/warnings (new ones prefixed by >>): >> drivers/bluetooth/btmtksdio.c:442:33: error: array type has incomplete element type 'struct h4_recv_pkt' static const struct h4_recv_pkt mtk_recv_pkts[] = { ^~~~~~~~~~~~~ >> drivers/bluetooth/btmtksdio.c:443:4: error: 'H4_RECV_ACL' undeclared here (not in a function); did you mean 'IP_RECVTTL'? { H4_RECV_ACL, .recv = btmtksdio_recv_acl }, ^~~~~~~~~~~ IP_RECVTTL >> drivers/bluetooth/btmtksdio.c:443:22: error: field name not in record or union initializer { H4_RECV_ACL, .recv = btmtksdio_recv_acl }, ^ drivers/bluetooth/btmtksdio.c:443:22: note: (near initialization for 'mtk_recv_pkts') >> drivers/bluetooth/btmtksdio.c:444:4: error: 'H4_RECV_SCO' undeclared here (not in a function) { H4_RECV_SCO, .recv = hci_recv_frame }, ^~~~~~~~~~~ drivers/bluetooth/btmtksdio.c:444:22: error: field name not in record or union initializer { H4_RECV_SCO, .recv = hci_recv_frame }, ^ drivers/bluetooth/btmtksdio.c:444:22: note: (near initialization for 'mtk_recv_pkts') >> drivers/bluetooth/btmtksdio.c:445:4: error: 'H4_RECV_EVENT' undeclared here (not in a function); did you mean 'BPF_PERF_EVENT'? { H4_RECV_EVENT, .recv = btmtksdio_recv_event }, ^~~~~~~~~~~~~ BPF_PERF_EVENT drivers/bluetooth/btmtksdio.c:445:22: error: field name not in record or union initializer { H4_RECV_EVENT, .recv = btmtksdio_recv_event }, ^ drivers/bluetooth/btmtksdio.c:445:22: note: (near initialization for 'mtk_recv_pkts') In file included from include/linux/cleanup.h:5, from include/linux/irqflags.h:17, from include/asm-generic/cmpxchg.h:15, from ./arch/nios2/include/generated/asm/cmpxchg.h:1, from include/asm-generic/atomic.h:12, from ./arch/nios2/include/generated/asm/atomic.h:1, from include/linux/atomic.h:7, from drivers/bluetooth/btmtksdio.c:14: drivers/bluetooth/btmtksdio.c: In function 'btmtksdio_rx_packet': include/linux/compiler.h:197:82: error: expression in static assertion is not an integer #define __BUILD_BUG_ON_ZERO_MSG(e, msg, ...) ((int)sizeof(struct {_Static_assert(!(e), msg);})) ^ include/linux/compiler.h:202:28: note: in expansion of macro '__BUILD_BUG_ON_ZERO_MSG' #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ ^~~~~~~~~~~~~~~~~~~~~~~ include/linux/array_size.h:11:59: note: in expansion of macro '__must_be_array' #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) ^~~~~~~~~~~~~~~ drivers/bluetooth/btmtksdio.c:451:19: note: in expansion of macro 'ARRAY_SIZE' int pkts_count = ARRAY_SIZE(mtk_recv_pkts); ^~~~~~~~~~ >> drivers/bluetooth/btmtksdio.c:493:34: error: invalid use of undefined type 'struct h4_recv_pkt' if (sdio_hdr->bt_type == (&pkts[i])->type) ^ >> drivers/bluetooth/btmtksdio.c:493:34: error: dereferencing pointer to incomplete type 'const struct h4_recv_pkt' drivers/bluetooth/btmtksdio.c:504:23: error: invalid use of undefined type 'struct h4_recv_pkt' if (skb->len < (&pkts[i])->hlen) { ^ drivers/bluetooth/btmtksdio.c:509:16: error: invalid use of undefined type 'struct h4_recv_pkt' switch ((&pkts[i])->lsize) { ^ drivers/bluetooth/btmtksdio.c:511:26: error: invalid use of undefined type 'struct h4_recv_pkt' dlen = skb->data[(&pkts[i])->loff]; ^ drivers/bluetooth/btmtksdio.c:515:15: error: invalid use of undefined type 'struct h4_recv_pkt' (&pkts[i])->loff); ^ drivers/bluetooth/btmtksdio.c:521:30: error: invalid use of undefined type 'struct h4_recv_pkt' pad_size = skb->len - (&pkts[i])->hlen - dlen; ^ drivers/bluetooth/btmtksdio.c:533:8: error: invalid use of undefined type 'struct h4_recv_pkt' (&pkts[i])->recv(bdev->hdev, skb); ^ At top level: >> drivers/bluetooth/btmtksdio.c:442:33: warning: 'mtk_recv_pkts' defined but not used [-Wunused-variable] static const struct h4_recv_pkt mtk_recv_pkts[] = { ^~~~~~~~~~~~~ vim +442 drivers/bluetooth/btmtksdio.c db57b625912abc Sean Wang 2021-11-20 441 9aebfd4a2200ab Sean Wang 2019-03-08 @442 static const struct h4_recv_pkt mtk_recv_pkts[] = { db57b625912abc Sean Wang 2021-11-20 @443 { H4_RECV_ACL, .recv = btmtksdio_recv_acl }, 9aebfd4a2200ab Sean Wang 2019-03-08 @444 { H4_RECV_SCO, .recv = hci_recv_frame }, 9aebfd4a2200ab Sean Wang 2019-03-08 @445 { H4_RECV_EVENT, .recv = btmtksdio_recv_event }, 9aebfd4a2200ab Sean Wang 2019-03-08 446 }; 9aebfd4a2200ab Sean Wang 2019-03-08 447 9aebfd4a2200ab Sean Wang 2019-03-08 448 static int btmtksdio_rx_packet(struct btmtksdio_dev *bdev, u16 rx_size) 9aebfd4a2200ab Sean Wang 2019-03-08 449 { 9aebfd4a2200ab Sean Wang 2019-03-08 450 const struct h4_recv_pkt *pkts = mtk_recv_pkts; 9aebfd4a2200ab Sean Wang 2019-03-08 451 int pkts_count = ARRAY_SIZE(mtk_recv_pkts); 9aebfd4a2200ab Sean Wang 2019-03-08 452 struct mtkbtsdio_hdr *sdio_hdr; 9aebfd4a2200ab Sean Wang 2019-03-08 453 int err, i, pad_size; 9aebfd4a2200ab Sean Wang 2019-03-08 454 struct sk_buff *skb; 9aebfd4a2200ab Sean Wang 2019-03-08 455 u16 dlen; 9aebfd4a2200ab Sean Wang 2019-03-08 456 9aebfd4a2200ab Sean Wang 2019-03-08 457 if (rx_size < sizeof(*sdio_hdr)) 9aebfd4a2200ab Sean Wang 2019-03-08 458 return -EILSEQ; 9aebfd4a2200ab Sean Wang 2019-03-08 459 9aebfd4a2200ab Sean Wang 2019-03-08 460 /* A SDIO packet is exactly containing a Bluetooth packet */ 9aebfd4a2200ab Sean Wang 2019-03-08 461 skb = bt_skb_alloc(rx_size, GFP_KERNEL); 9aebfd4a2200ab Sean Wang 2019-03-08 462 if (!skb) 9aebfd4a2200ab Sean Wang 2019-03-08 463 return -ENOMEM; 9aebfd4a2200ab Sean Wang 2019-03-08 464 9aebfd4a2200ab Sean Wang 2019-03-08 465 skb_put(skb, rx_size); 9aebfd4a2200ab Sean Wang 2019-03-08 466 9aebfd4a2200ab Sean Wang 2019-03-08 467 err = sdio_readsb(bdev->func, skb->data, MTK_REG_CRDR, rx_size); 9aebfd4a2200ab Sean Wang 2019-03-08 468 if (err < 0) 9aebfd4a2200ab Sean Wang 2019-03-08 469 goto err_kfree_skb; 9aebfd4a2200ab Sean Wang 2019-03-08 470 9aebfd4a2200ab Sean Wang 2019-03-08 471 sdio_hdr = (void *)skb->data; 9aebfd4a2200ab Sean Wang 2019-03-08 472 9aebfd4a2200ab Sean Wang 2019-03-08 473 /* We assume the default error as -EILSEQ simply to make the error path 9aebfd4a2200ab Sean Wang 2019-03-08 474 * be cleaner. 9aebfd4a2200ab Sean Wang 2019-03-08 475 */ 9aebfd4a2200ab Sean Wang 2019-03-08 476 err = -EILSEQ; 9aebfd4a2200ab Sean Wang 2019-03-08 477 9aebfd4a2200ab Sean Wang 2019-03-08 478 if (rx_size != le16_to_cpu(sdio_hdr->len)) { 9aebfd4a2200ab Sean Wang 2019-03-08 479 bt_dev_err(bdev->hdev, "Rx size in sdio header is mismatched "); 9aebfd4a2200ab Sean Wang 2019-03-08 480 goto err_kfree_skb; 9aebfd4a2200ab Sean Wang 2019-03-08 481 } 9aebfd4a2200ab Sean Wang 2019-03-08 482 9aebfd4a2200ab Sean Wang 2019-03-08 483 hci_skb_pkt_type(skb) = sdio_hdr->bt_type; 9aebfd4a2200ab Sean Wang 2019-03-08 484 9aebfd4a2200ab Sean Wang 2019-03-08 485 /* Remove MediaTek SDIO header */ 9aebfd4a2200ab Sean Wang 2019-03-08 486 skb_pull(skb, sizeof(*sdio_hdr)); 9aebfd4a2200ab Sean Wang 2019-03-08 487 9aebfd4a2200ab Sean Wang 2019-03-08 488 /* We have to dig into the packet to get payload size and then know how 9aebfd4a2200ab Sean Wang 2019-03-08 489 * many padding bytes at the tail, these padding bytes should be removed 9aebfd4a2200ab Sean Wang 2019-03-08 490 * before the packet is indicated to the core layer. 9aebfd4a2200ab Sean Wang 2019-03-08 491 */ 9aebfd4a2200ab Sean Wang 2019-03-08 492 for (i = 0; i < pkts_count; i++) { 9aebfd4a2200ab Sean Wang 2019-03-08 @493 if (sdio_hdr->bt_type == (&pkts[i])->type) 9aebfd4a2200ab Sean Wang 2019-03-08 494 break; 9aebfd4a2200ab Sean Wang 2019-03-08 495 } 9aebfd4a2200ab Sean Wang 2019-03-08 496 9aebfd4a2200ab Sean Wang 2019-03-08 497 if (i >= pkts_count) { 9aebfd4a2200ab Sean Wang 2019-03-08 498 bt_dev_err(bdev->hdev, "Invalid bt type 0x%02x", 9aebfd4a2200ab Sean Wang 2019-03-08 499 sdio_hdr->bt_type); 9aebfd4a2200ab Sean Wang 2019-03-08 500 goto err_kfree_skb; 9aebfd4a2200ab Sean Wang 2019-03-08 501 } 9aebfd4a2200ab Sean Wang 2019-03-08 502 9aebfd4a2200ab Sean Wang 2019-03-08 503 /* Remaining bytes cannot hold a header*/ 9aebfd4a2200ab Sean Wang 2019-03-08 504 if (skb->len < (&pkts[i])->hlen) { 9aebfd4a2200ab Sean Wang 2019-03-08 505 bt_dev_err(bdev->hdev, "The size of bt header is mismatched"); 9aebfd4a2200ab Sean Wang 2019-03-08 506 goto err_kfree_skb; 9aebfd4a2200ab Sean Wang 2019-03-08 507 } 9aebfd4a2200ab Sean Wang 2019-03-08 508 9aebfd4a2200ab Sean Wang 2019-03-08 509 switch ((&pkts[i])->lsize) { 9aebfd4a2200ab Sean Wang 2019-03-08 510 case 1: 9aebfd4a2200ab Sean Wang 2019-03-08 511 dlen = skb->data[(&pkts[i])->loff]; 9aebfd4a2200ab Sean Wang 2019-03-08 512 break; 9aebfd4a2200ab Sean Wang 2019-03-08 513 case 2: 9aebfd4a2200ab Sean Wang 2019-03-08 514 dlen = get_unaligned_le16(skb->data + 9aebfd4a2200ab Sean Wang 2019-03-08 515 (&pkts[i])->loff); 9aebfd4a2200ab Sean Wang 2019-03-08 516 break; 9aebfd4a2200ab Sean Wang 2019-03-08 517 default: 9aebfd4a2200ab Sean Wang 2019-03-08 518 goto err_kfree_skb; 9aebfd4a2200ab Sean Wang 2019-03-08 519 } 9aebfd4a2200ab Sean Wang 2019-03-08 520 9aebfd4a2200ab Sean Wang 2019-03-08 521 pad_size = skb->len - (&pkts[i])->hlen - dlen; 9aebfd4a2200ab Sean Wang 2019-03-08 522 9aebfd4a2200ab Sean Wang 2019-03-08 523 /* Remaining bytes cannot hold a payload */ 9aebfd4a2200ab Sean Wang 2019-03-08 524 if (pad_size < 0) { 9aebfd4a2200ab Sean Wang 2019-03-08 525 bt_dev_err(bdev->hdev, "The size of bt payload is mismatched"); 9aebfd4a2200ab Sean Wang 2019-03-08 526 goto err_kfree_skb; 9aebfd4a2200ab Sean Wang 2019-03-08 527 } 9aebfd4a2200ab Sean Wang 2019-03-08 528 9aebfd4a2200ab Sean Wang 2019-03-08 529 /* Remove padding bytes */ 9aebfd4a2200ab Sean Wang 2019-03-08 530 skb_trim(skb, skb->len - pad_size); 9aebfd4a2200ab Sean Wang 2019-03-08 531 9aebfd4a2200ab Sean Wang 2019-03-08 532 /* Complete frame */ 9aebfd4a2200ab Sean Wang 2019-03-08 533 (&pkts[i])->recv(bdev->hdev, skb); 9aebfd4a2200ab Sean Wang 2019-03-08 534 bcaa7d72dffddf Sean Wang 2019-04-18 535 bdev->hdev->stat.byte_rx += rx_size; bcaa7d72dffddf Sean Wang 2019-04-18 536 9aebfd4a2200ab Sean Wang 2019-03-08 537 return 0; 9aebfd4a2200ab Sean Wang 2019-03-08 538 9aebfd4a2200ab Sean Wang 2019-03-08 539 err_kfree_skb: 9aebfd4a2200ab Sean Wang 2019-03-08 540 kfree_skb(skb); 9aebfd4a2200ab Sean Wang 2019-03-08 541 9aebfd4a2200ab Sean Wang 2019-03-08 542 return err; 9aebfd4a2200ab Sean Wang 2019-03-08 543 } 9aebfd4a2200ab Sean Wang 2019-03-08 544 :::::: The code at line 442 was first introduced by commit :::::: 9aebfd4a2200ab8075e44379c758bccefdc589bb Bluetooth: mediatek: add support for MediaTek MT7663S and MT7668S SDIO devices :::::: TO: Sean Wang <sean.wang@xxxxxxxxxxxx> :::::: CC: Marcel Holtmann <marcel@xxxxxxxxxxxx> -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki