Re: [PATCH] Bluetooth: Add support for reading AOSP vendor capabilities

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxx>

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@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux