From: kernel test robot <lkp@intel.com>
To: Marcel Holtmann <marcel@holtmann.org>, linux-bluetooth@vger.kernel.org
Cc: kbuild-all@lists.01.org, clang-built-linux@googlegroups.com
Subject: Re: [PATCH] Bluetooth: Add support for reading AOSP vendor capabilities
Date: Wed, 7 Apr 2021 01:41:38 +0800 [thread overview]
Message-ID: <202104070105.D3aQ8W32-lkp@intel.com> (raw)
In-Reply-To: <20210406133632.241599-1-marcel@holtmann.org>
[-- Attachment #1: Type: text/plain, Size: 22381 bytes --]
Hi Marcel,
I love your patch! Yet something to improve:
[auto build test ERROR on bluetooth-next/master]
[also build test ERROR on v5.12-rc6 next-20210406]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Marcel-Holtmann/Bluetooth-Add-support-for-reading-AOSP-vendor-capabilities/20210406-213836
base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git master
config: powerpc-randconfig-r012-20210406 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project a46f59a747a7273cc439efaf3b4f98d8b63d2f20)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install powerpc cross compiling tool for clang build
# apt-get install binutils-powerpc-linux-gnu
# https://github.com/0day-ci/linux/commit/71e8a18c61c482db0f170ec897450ba76c18b7ec
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Marcel-Holtmann/Bluetooth-Add-support-for-reading-AOSP-vendor-capabilities/20210406-213836
git checkout 71e8a18c61c482db0f170ec897450ba76c18b7ec
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
In file included from include/linux/io.h:13:
In file included from arch/powerpc/include/asm/io.h:619:
arch/powerpc/include/asm/io-defs.h:47:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
DEF_PCI_AC_NORET(insl, (unsigned long p, void *b, unsigned long c),
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/powerpc/include/asm/io.h:616:3: note: expanded from macro 'DEF_PCI_AC_NORET'
__do_##name al; \
^~~~~~~~~~~~~~
<scratch space>:42:1: note: expanded from here
__do_insl
^
arch/powerpc/include/asm/io.h:558:56: note: expanded from macro '__do_insl'
#define __do_insl(p, b, n) readsl((PCI_IO_ADDR)_IO_BASE+(p), (b), (n))
~~~~~~~~~~~~~~~~~~~~~^
In file included from net/bluetooth/hci_core.c:33:
In file included from include/linux/suspend.h:5:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:26:
In file included from include/linux/kernel_stat.h:9:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:10:
In file included from arch/powerpc/include/asm/hardirq.h:6:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/powerpc/include/asm/io.h:619:
arch/powerpc/include/asm/io-defs.h:49:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
DEF_PCI_AC_NORET(outsb, (unsigned long p, const void *b, unsigned long c),
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/powerpc/include/asm/io.h:616:3: note: expanded from macro 'DEF_PCI_AC_NORET'
__do_##name al; \
^~~~~~~~~~~~~~
<scratch space>:44:1: note: expanded from here
__do_outsb
^
arch/powerpc/include/asm/io.h:559:58: note: expanded from macro '__do_outsb'
#define __do_outsb(p, b, n) writesb((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
~~~~~~~~~~~~~~~~~~~~~^
In file included from net/bluetooth/hci_core.c:33:
In file included from include/linux/suspend.h:5:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:26:
In file included from include/linux/kernel_stat.h:9:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:10:
In file included from arch/powerpc/include/asm/hardirq.h:6:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/powerpc/include/asm/io.h:619:
arch/powerpc/include/asm/io-defs.h:51:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
DEF_PCI_AC_NORET(outsw, (unsigned long p, const void *b, unsigned long c),
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/powerpc/include/asm/io.h:616:3: note: expanded from macro 'DEF_PCI_AC_NORET'
__do_##name al; \
^~~~~~~~~~~~~~
<scratch space>:46:1: note: expanded from here
__do_outsw
^
arch/powerpc/include/asm/io.h:560:58: note: expanded from macro '__do_outsw'
#define __do_outsw(p, b, n) writesw((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
~~~~~~~~~~~~~~~~~~~~~^
In file included from net/bluetooth/hci_core.c:33:
In file included from include/linux/suspend.h:5:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:26:
In file included from include/linux/kernel_stat.h:9:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:10:
In file included from arch/powerpc/include/asm/hardirq.h:6:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/powerpc/include/asm/io.h:619:
arch/powerpc/include/asm/io-defs.h:53:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
DEF_PCI_AC_NORET(outsl, (unsigned long p, const void *b, unsigned long c),
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/powerpc/include/asm/io.h:616:3: note: expanded from macro 'DEF_PCI_AC_NORET'
__do_##name al; \
^~~~~~~~~~~~~~
<scratch space>:48:1: note: expanded from here
__do_outsl
^
arch/powerpc/include/asm/io.h:561:58: note: expanded from macro '__do_outsl'
#define __do_outsl(p, b, n) writesl((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
~~~~~~~~~~~~~~~~~~~~~^
In file included from net/bluetooth/hci_core.c:47:
net/bluetooth/aosp.h:13:20: error: redefinition of 'msft_do_open'
static inline void msft_do_open(struct hci_dev *hdev) {}
^
net/bluetooth/msft.h:33:20: note: previous definition is here
static inline void msft_do_open(struct hci_dev *hdev) {}
^
In file included from net/bluetooth/hci_core.c:47:
net/bluetooth/aosp.h:14:20: error: redefinition of 'msft_do_close'
static inline void msft_do_close(struct hci_dev *hdev) {}
^
net/bluetooth/msft.h:34:20: note: previous definition is here
static inline void msft_do_close(struct hci_dev *hdev) {}
^
>> net/bluetooth/hci_core.c:1590:2: error: implicit declaration of function 'aosp_do_open' [-Werror,-Wimplicit-function-declaration]
aosp_do_open(hdev);
^
net/bluetooth/hci_core.c:1590:2: note: did you mean 'msft_do_open'?
net/bluetooth/aosp.h:13:20: note: 'msft_do_open' declared here
static inline void msft_do_open(struct hci_dev *hdev) {}
^
>> net/bluetooth/hci_core.c:1787:2: error: implicit declaration of function 'aosp_do_close' [-Werror,-Wimplicit-function-declaration]
aosp_do_close(hdev);
^
net/bluetooth/hci_core.c:1787:2: note: did you mean 'msft_do_close'?
net/bluetooth/aosp.h:14:20: note: 'msft_do_close' declared here
static inline void msft_do_close(struct hci_dev *hdev) {}
^
12 warnings and 4 errors generated.
vim +/aosp_do_open +1590 net/bluetooth/hci_core.c
1432
1433 static int hci_dev_do_open(struct hci_dev *hdev)
1434 {
1435 int ret = 0;
1436
1437 BT_DBG("%s %p", hdev->name, hdev);
1438
1439 hci_req_sync_lock(hdev);
1440
1441 if (hci_dev_test_flag(hdev, HCI_UNREGISTER)) {
1442 ret = -ENODEV;
1443 goto done;
1444 }
1445
1446 if (!hci_dev_test_flag(hdev, HCI_SETUP) &&
1447 !hci_dev_test_flag(hdev, HCI_CONFIG)) {
1448 /* Check for rfkill but allow the HCI setup stage to
1449 * proceed (which in itself doesn't cause any RF activity).
1450 */
1451 if (hci_dev_test_flag(hdev, HCI_RFKILLED)) {
1452 ret = -ERFKILL;
1453 goto done;
1454 }
1455
1456 /* Check for valid public address or a configured static
1457 * random adddress, but let the HCI setup proceed to
1458 * be able to determine if there is a public address
1459 * or not.
1460 *
1461 * In case of user channel usage, it is not important
1462 * if a public address or static random address is
1463 * available.
1464 *
1465 * This check is only valid for BR/EDR controllers
1466 * since AMP controllers do not have an address.
1467 */
1468 if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
1469 hdev->dev_type == HCI_PRIMARY &&
1470 !bacmp(&hdev->bdaddr, BDADDR_ANY) &&
1471 !bacmp(&hdev->static_addr, BDADDR_ANY)) {
1472 ret = -EADDRNOTAVAIL;
1473 goto done;
1474 }
1475 }
1476
1477 if (test_bit(HCI_UP, &hdev->flags)) {
1478 ret = -EALREADY;
1479 goto done;
1480 }
1481
1482 if (hdev->open(hdev)) {
1483 ret = -EIO;
1484 goto done;
1485 }
1486
1487 set_bit(HCI_RUNNING, &hdev->flags);
1488 hci_sock_dev_event(hdev, HCI_DEV_OPEN);
1489
1490 atomic_set(&hdev->cmd_cnt, 1);
1491 set_bit(HCI_INIT, &hdev->flags);
1492
1493 if (hci_dev_test_flag(hdev, HCI_SETUP) ||
1494 test_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks)) {
1495 bool invalid_bdaddr;
1496
1497 hci_sock_dev_event(hdev, HCI_DEV_SETUP);
1498
1499 if (hdev->setup)
1500 ret = hdev->setup(hdev);
1501
1502 /* The transport driver can set the quirk to mark the
1503 * BD_ADDR invalid before creating the HCI device or in
1504 * its setup callback.
1505 */
1506 invalid_bdaddr = test_bit(HCI_QUIRK_INVALID_BDADDR,
1507 &hdev->quirks);
1508
1509 if (ret)
1510 goto setup_failed;
1511
1512 if (test_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks)) {
1513 if (!bacmp(&hdev->public_addr, BDADDR_ANY))
1514 hci_dev_get_bd_addr_from_property(hdev);
1515
1516 if (bacmp(&hdev->public_addr, BDADDR_ANY) &&
1517 hdev->set_bdaddr) {
1518 ret = hdev->set_bdaddr(hdev,
1519 &hdev->public_addr);
1520
1521 /* If setting of the BD_ADDR from the device
1522 * property succeeds, then treat the address
1523 * as valid even if the invalid BD_ADDR
1524 * quirk indicates otherwise.
1525 */
1526 if (!ret)
1527 invalid_bdaddr = false;
1528 }
1529 }
1530
1531 setup_failed:
1532 /* The transport driver can set these quirks before
1533 * creating the HCI device or in its setup callback.
1534 *
1535 * For the invalid BD_ADDR quirk it is possible that
1536 * it becomes a valid address if the bootloader does
1537 * provide it (see above).
1538 *
1539 * In case any of them is set, the controller has to
1540 * start up as unconfigured.
1541 */
1542 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) ||
1543 invalid_bdaddr)
1544 hci_dev_set_flag(hdev, HCI_UNCONFIGURED);
1545
1546 /* For an unconfigured controller it is required to
1547 * read at least the version information provided by
1548 * the Read Local Version Information command.
1549 *
1550 * If the set_bdaddr driver callback is provided, then
1551 * also the original Bluetooth public device address
1552 * will be read using the Read BD Address command.
1553 */
1554 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
1555 ret = __hci_unconf_init(hdev);
1556 }
1557
1558 if (hci_dev_test_flag(hdev, HCI_CONFIG)) {
1559 /* If public address change is configured, ensure that
1560 * the address gets programmed. If the driver does not
1561 * support changing the public address, fail the power
1562 * on procedure.
1563 */
1564 if (bacmp(&hdev->public_addr, BDADDR_ANY) &&
1565 hdev->set_bdaddr)
1566 ret = hdev->set_bdaddr(hdev, &hdev->public_addr);
1567 else
1568 ret = -EADDRNOTAVAIL;
1569 }
1570
1571 if (!ret) {
1572 if (!hci_dev_test_flag(hdev, HCI_UNCONFIGURED) &&
1573 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
1574 ret = __hci_init(hdev);
1575 if (!ret && hdev->post_init)
1576 ret = hdev->post_init(hdev);
1577 }
1578 }
1579
1580 /* If the HCI Reset command is clearing all diagnostic settings,
1581 * then they need to be reprogrammed after the init procedure
1582 * completed.
1583 */
1584 if (test_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks) &&
1585 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
1586 hci_dev_test_flag(hdev, HCI_VENDOR_DIAG) && hdev->set_diag)
1587 ret = hdev->set_diag(hdev, true);
1588
1589 msft_do_open(hdev);
> 1590 aosp_do_open(hdev);
1591
1592 clear_bit(HCI_INIT, &hdev->flags);
1593
1594 if (!ret) {
1595 hci_dev_hold(hdev);
1596 hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
1597 hci_adv_instances_set_rpa_expired(hdev, true);
1598 set_bit(HCI_UP, &hdev->flags);
1599 hci_sock_dev_event(hdev, HCI_DEV_UP);
1600 hci_leds_update_powered(hdev, true);
1601 if (!hci_dev_test_flag(hdev, HCI_SETUP) &&
1602 !hci_dev_test_flag(hdev, HCI_CONFIG) &&
1603 !hci_dev_test_flag(hdev, HCI_UNCONFIGURED) &&
1604 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
1605 hci_dev_test_flag(hdev, HCI_MGMT) &&
1606 hdev->dev_type == HCI_PRIMARY) {
1607 ret = __hci_req_hci_power_on(hdev);
1608 mgmt_power_on(hdev, ret);
1609 }
1610 } else {
1611 /* Init failed, cleanup */
1612 flush_work(&hdev->tx_work);
1613 flush_work(&hdev->cmd_work);
1614 flush_work(&hdev->rx_work);
1615
1616 skb_queue_purge(&hdev->cmd_q);
1617 skb_queue_purge(&hdev->rx_q);
1618
1619 if (hdev->flush)
1620 hdev->flush(hdev);
1621
1622 if (hdev->sent_cmd) {
1623 kfree_skb(hdev->sent_cmd);
1624 hdev->sent_cmd = NULL;
1625 }
1626
1627 clear_bit(HCI_RUNNING, &hdev->flags);
1628 hci_sock_dev_event(hdev, HCI_DEV_CLOSE);
1629
1630 hdev->close(hdev);
1631 hdev->flags &= BIT(HCI_RAW);
1632 }
1633
1634 done:
1635 hci_req_sync_unlock(hdev);
1636 return ret;
1637 }
1638
1639 /* ---- HCI ioctl helpers ---- */
1640
1641 int hci_dev_open(__u16 dev)
1642 {
1643 struct hci_dev *hdev;
1644 int err;
1645
1646 hdev = hci_dev_get(dev);
1647 if (!hdev)
1648 return -ENODEV;
1649
1650 /* Devices that are marked as unconfigured can only be powered
1651 * up as user channel. Trying to bring them up as normal devices
1652 * will result into a failure. Only user channel operation is
1653 * possible.
1654 *
1655 * When this function is called for a user channel, the flag
1656 * HCI_USER_CHANNEL will be set first before attempting to
1657 * open the device.
1658 */
1659 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED) &&
1660 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
1661 err = -EOPNOTSUPP;
1662 goto done;
1663 }
1664
1665 /* We need to ensure that no other power on/off work is pending
1666 * before proceeding to call hci_dev_do_open. This is
1667 * particularly important if the setup procedure has not yet
1668 * completed.
1669 */
1670 if (hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF))
1671 cancel_delayed_work(&hdev->power_off);
1672
1673 /* After this call it is guaranteed that the setup procedure
1674 * has finished. This means that error conditions like RFKILL
1675 * or no valid public or static random address apply.
1676 */
1677 flush_workqueue(hdev->req_workqueue);
1678
1679 /* For controllers not using the management interface and that
1680 * are brought up using legacy ioctl, set the HCI_BONDABLE bit
1681 * so that pairing works for them. Once the management interface
1682 * is in use this bit will be cleared again and userspace has
1683 * to explicitly enable it.
1684 */
1685 if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
1686 !hci_dev_test_flag(hdev, HCI_MGMT))
1687 hci_dev_set_flag(hdev, HCI_BONDABLE);
1688
1689 err = hci_dev_do_open(hdev);
1690
1691 done:
1692 hci_dev_put(hdev);
1693 return err;
1694 }
1695
1696 /* This function requires the caller holds hdev->lock */
1697 static void hci_pend_le_actions_clear(struct hci_dev *hdev)
1698 {
1699 struct hci_conn_params *p;
1700
1701 list_for_each_entry(p, &hdev->le_conn_params, list) {
1702 if (p->conn) {
1703 hci_conn_drop(p->conn);
1704 hci_conn_put(p->conn);
1705 p->conn = NULL;
1706 }
1707 list_del_init(&p->action);
1708 }
1709
1710 BT_DBG("All LE pending actions cleared");
1711 }
1712
1713 int hci_dev_do_close(struct hci_dev *hdev)
1714 {
1715 bool auto_off;
1716
1717 BT_DBG("%s %p", hdev->name, hdev);
1718
1719 if (!hci_dev_test_flag(hdev, HCI_UNREGISTER) &&
1720 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
1721 test_bit(HCI_UP, &hdev->flags)) {
1722 /* Execute vendor specific shutdown routine */
1723 if (hdev->shutdown)
1724 hdev->shutdown(hdev);
1725 }
1726
1727 cancel_delayed_work(&hdev->power_off);
1728
1729 hci_request_cancel_all(hdev);
1730 hci_req_sync_lock(hdev);
1731
1732 if (!test_and_clear_bit(HCI_UP, &hdev->flags)) {
1733 cancel_delayed_work_sync(&hdev->cmd_timer);
1734 hci_req_sync_unlock(hdev);
1735 return 0;
1736 }
1737
1738 hci_leds_update_powered(hdev, false);
1739
1740 /* Flush RX and TX works */
1741 flush_work(&hdev->tx_work);
1742 flush_work(&hdev->rx_work);
1743
1744 if (hdev->discov_timeout > 0) {
1745 hdev->discov_timeout = 0;
1746 hci_dev_clear_flag(hdev, HCI_DISCOVERABLE);
1747 hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE);
1748 }
1749
1750 if (hci_dev_test_and_clear_flag(hdev, HCI_SERVICE_CACHE))
1751 cancel_delayed_work(&hdev->service_cache);
1752
1753 if (hci_dev_test_flag(hdev, HCI_MGMT)) {
1754 struct adv_info *adv_instance;
1755
1756 cancel_delayed_work_sync(&hdev->rpa_expired);
1757
1758 list_for_each_entry(adv_instance, &hdev->adv_instances, list)
1759 cancel_delayed_work_sync(&adv_instance->rpa_expired_cb);
1760 }
1761
1762 /* Avoid potential lockdep warnings from the *_flush() calls by
1763 * ensuring the workqueue is empty up front.
1764 */
1765 drain_workqueue(hdev->workqueue);
1766
1767 hci_dev_lock(hdev);
1768
1769 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1770
1771 auto_off = hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF);
1772
1773 if (!auto_off && hdev->dev_type == HCI_PRIMARY &&
1774 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
1775 hci_dev_test_flag(hdev, HCI_MGMT))
1776 __mgmt_power_off(hdev);
1777
1778 hci_inquiry_cache_flush(hdev);
1779 hci_pend_le_actions_clear(hdev);
1780 hci_conn_hash_flush(hdev);
1781 hci_dev_unlock(hdev);
1782
1783 smp_unregister(hdev);
1784
1785 hci_sock_dev_event(hdev, HCI_DEV_DOWN);
1786
> 1787 aosp_do_close(hdev);
1788 msft_do_close(hdev);
1789
1790 if (hdev->flush)
1791 hdev->flush(hdev);
1792
1793 /* Reset device */
1794 skb_queue_purge(&hdev->cmd_q);
1795 atomic_set(&hdev->cmd_cnt, 1);
1796 if (test_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks) &&
1797 !auto_off && !hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
1798 set_bit(HCI_INIT, &hdev->flags);
1799 __hci_req_sync(hdev, hci_reset_req, 0, HCI_CMD_TIMEOUT, NULL);
1800 clear_bit(HCI_INIT, &hdev->flags);
1801 }
1802
1803 /* flush cmd work */
1804 flush_work(&hdev->cmd_work);
1805
1806 /* Drop queues */
1807 skb_queue_purge(&hdev->rx_q);
1808 skb_queue_purge(&hdev->cmd_q);
1809 skb_queue_purge(&hdev->raw_q);
1810
1811 /* Drop last sent command */
1812 if (hdev->sent_cmd) {
1813 cancel_delayed_work_sync(&hdev->cmd_timer);
1814 kfree_skb(hdev->sent_cmd);
1815 hdev->sent_cmd = NULL;
1816 }
1817
1818 clear_bit(HCI_RUNNING, &hdev->flags);
1819 hci_sock_dev_event(hdev, HCI_DEV_CLOSE);
1820
1821 if (test_and_clear_bit(SUSPEND_POWERING_DOWN, hdev->suspend_tasks))
1822 wake_up(&hdev->suspend_wait_q);
1823
1824 /* After this point our queues are empty
1825 * and no tasks are scheduled. */
1826 hdev->close(hdev);
1827
1828 /* Clear flags */
1829 hdev->flags &= BIT(HCI_RAW);
1830 hci_dev_clear_volatile_flags(hdev);
1831
1832 /* Controller radio is available but is currently powered down */
1833 hdev->amp_status = AMP_STATUS_POWERED_DOWN;
1834
1835 memset(hdev->eir, 0, sizeof(hdev->eir));
1836 memset(hdev->dev_class, 0, sizeof(hdev->dev_class));
1837 bacpy(&hdev->random_addr, BDADDR_ANY);
1838
1839 hci_req_sync_unlock(hdev);
1840
1841 hci_dev_put(hdev);
1842 return 0;
1843 }
1844
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 37872 bytes --]
next prev parent reply other threads:[~2021-04-06 17:42 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-06 13:36 [PATCH] Bluetooth: Add support for reading AOSP vendor capabilities Marcel Holtmann
2021-04-06 17:41 ` kernel test robot [this message]
2021-04-06 18:41 ` kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202104070105.D3aQ8W32-lkp@intel.com \
--to=lkp@intel.com \
--cc=clang-built-linux@googlegroups.com \
--cc=kbuild-all@lists.01.org \
--cc=linux-bluetooth@vger.kernel.org \
--cc=marcel@holtmann.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox