lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <202207020450.cvFsdSzR-lkp@intel.com>
Date:   Sat, 2 Jul 2022 04:59:38 +0800
From:   kernel test robot <lkp@...el.com>
To:     Sven Peter <sven@...npeter.dev>
Cc:     kbuild-all@...ts.01.org, linux-kernel@...r.kernel.org
Subject: [asahilinux:bluetooth-wip 3/3]
 drivers/bluetooth/hci_bcm43xx.c:1187:29: error: passing argument 3 of
 'dmam_alloc_coherent' from incompatible pointer type

tree:   https://github.com/AsahiLinux/linux bluetooth-wip
head:   ae58697c8114c393cfdf5da0a1331a61b3766321
commit: ae58697c8114c393cfdf5da0a1331a61b3766321 [3/3] WIP:/DO-NOT-MERGE: bluetooth
config: i386-allyesconfig (https://download.01.org/0day-ci/archive/20220702/202207020450.cvFsdSzR-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-3) 11.3.0
reproduce (this is a W=1 build):
        # https://github.com/AsahiLinux/linux/commit/ae58697c8114c393cfdf5da0a1331a61b3766321
        git remote add asahilinux https://github.com/AsahiLinux/linux
        git fetch --no-tags asahilinux bluetooth-wip
        git checkout ae58697c8114c393cfdf5da0a1331a61b3766321
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        make W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@...el.com>

All errors (new ones prefixed by >>):

   drivers/bluetooth/hci_bcm43xx.c: In function 'bcm43xx_init_context':
>> drivers/bluetooth/hci_bcm43xx.c:1187:29: error: passing argument 3 of 'dmam_alloc_coherent' from incompatible pointer type [-Werror=incompatible-pointer-types]
    1187 |                             &bcm43xx->ctx->per_info_addr, GFP_KERNEL);
         |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                             |
         |                             __le64 * {aka long long unsigned int *}
   In file included from include/linux/pci.h:2484,
                    from drivers/bluetooth/hci_bcm43xx.c:28:
   include/linux/dma-mapping.h:550:29: note: expected 'dma_addr_t *' {aka 'unsigned int *'} but argument is of type '__le64 *' {aka 'long long unsigned int *'}
     550 |                 dma_addr_t *dma_handle, gfp_t gfp)
         |                 ~~~~~~~~~~~~^~~~~~~~~~
   drivers/bluetooth/hci_bcm43xx.c: In function 'bcm43xx_setup_msi':
>> drivers/bluetooth/hci_bcm43xx.c:1373:15: error: implicit declaration of function 'irq_chip_compose_msi_msg' [-Werror=implicit-function-declaration]
    1373 |         ret = irq_chip_compose_msi_msg(irq_get_irq_data(bcm43xx->irq),
         |               ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/bluetooth/hci_bcm43xx.c:1373:40: error: implicit declaration of function 'irq_get_irq_data'; did you mean 'irq_set_irq_wake'? [-Werror=implicit-function-declaration]
    1373 |         ret = irq_chip_compose_msi_msg(irq_get_irq_data(bcm43xx->irq),
         |                                        ^~~~~~~~~~~~~~~~
         |                                        irq_set_irq_wake
   cc1: some warnings being treated as errors


vim +/dmam_alloc_coherent +1187 drivers/bluetooth/hci_bcm43xx.c

  1163	
  1164	static int bcm43xx_init_context(struct bcm43xx_data *bcm43xx)
  1165	{
  1166		struct device *dev = &bcm43xx->pdev->dev;
  1167	
  1168		bcm43xx->ctx = dmam_alloc_coherent(dev, sizeof(*bcm43xx->ctx),
  1169						   &bcm43xx->ctx_dma, GFP_KERNEL);
  1170		if (!bcm43xx->ctx)
  1171			return -ENOMEM;
  1172		memset(bcm43xx->ctx, 0, sizeof(*bcm43xx->ctx));
  1173	
  1174		bcm43xx->ring_state =
  1175			dmam_alloc_coherent(dev, sizeof(*bcm43xx->ring_state),
  1176					    &bcm43xx->ring_state_dma, GFP_KERNEL);
  1177		if (!bcm43xx->ring_state)
  1178			return -ENOMEM;
  1179		memset(bcm43xx->ring_state, 0, sizeof(*bcm43xx->ring_state));
  1180	
  1181		bcm43xx->ctx->version = cpu_to_le16(1);
  1182		bcm43xx->ctx->size = cpu_to_le16(sizeof(*bcm43xx->ctx));
  1183		bcm43xx->ctx->enabled_caps = cpu_to_le16(2);
  1184	
  1185		// TODO: do we actually care about the contents here?
  1186		dmam_alloc_coherent(&bcm43xx->pdev->dev, PAGE_SIZE,
> 1187				    &bcm43xx->ctx->per_info_addr, GFP_KERNEL);
  1188	
  1189		bcm43xx->ctx->xfer_ring_heads_addr =
  1190			bcm43xx->ring_state_dma +
  1191			offsetof(struct bcm43xx_ring_state, xfer_ring_head);
  1192		bcm43xx->ctx->xfer_ring_tails_addr =
  1193			bcm43xx->ring_state_dma +
  1194			offsetof(struct bcm43xx_ring_state, xfer_ring_tail);
  1195		bcm43xx->ctx->completion_ring_heads_addr =
  1196			bcm43xx->ring_state_dma +
  1197			offsetof(struct bcm43xx_ring_state, completion_ring_head);
  1198		bcm43xx->ctx->completion_ring_tails_addr =
  1199			bcm43xx->ring_state_dma +
  1200			offsetof(struct bcm43xx_ring_state, completion_ring_tail);
  1201	
  1202		bcm43xx->ctx->n_completion_rings =
  1203			cpu_to_le16(BCM43XX_N_COMPLETION_RINGS);
  1204		bcm43xx->ctx->n_xfer_rings = cpu_to_le16(BCM43XX_N_TRANSFER_RINGS);
  1205	
  1206		bcm43xx->ctx->control_completion_ring_addr =
  1207			cpu_to_le64(bcm43xx->control_ack_ring.ring_dma);
  1208		bcm43xx->ctx->control_completion_ring_n_entries =
  1209			cpu_to_le16(bcm43xx->control_ack_ring.n_entries);
  1210		bcm43xx->ctx->control_completion_ring_doorbell = cpu_to_le16(0xffff);
  1211		bcm43xx->ctx->control_completion_ring_msi = 0;
  1212		bcm43xx->ctx->control_completion_ring_header_size = 0;
  1213		bcm43xx->ctx->control_completion_ring_footer_size = 0;
  1214	
  1215		bcm43xx->ctx->control_xfer_ring_addr =
  1216			cpu_to_le64(bcm43xx->control_h2d_ring.ring_dma);
  1217		bcm43xx->ctx->control_xfer_ring_n_entries =
  1218			cpu_to_le16(bcm43xx->control_h2d_ring.n_entries);
  1219		bcm43xx->ctx->control_xfer_ring_doorbell =
  1220			cpu_to_le16(bcm43xx->control_h2d_ring.doorbell);
  1221		bcm43xx->ctx->control_xfer_ring_msi = 0;
  1222		bcm43xx->ctx->control_xfer_ring_header_size = 0;
  1223		bcm43xx->ctx->control_xfer_ring_footer_size =
  1224			bcm43xx->control_h2d_ring.payload_size / 4;
  1225	
  1226		return 0;
  1227	}
  1228	
  1229	static int bcm43xx_prepare_rings(struct bcm43xx_data *bcm43xx)
  1230	{
  1231		int ret;
  1232	
  1233		/*
  1234		 * Even though many of these settings appear to be configurable
  1235		 * when sending the "create ring" messages most of these are
  1236		 * actually hardcoded in some (and quite possibly all) firmware versions
  1237		 * and changing them on the host has no effect.
  1238		 * Specifically, this applies to at least the doorbells, the transfer
  1239		 * and completion ring ids and their mapping (e.g. both HCI and ACL
  1240		 * entries will always be queued in completion rings 1 and 2 no matter
  1241		 * what we configure here).
  1242		 */
  1243		bcm43xx->control_ack_ring.ring_id = BCM43XX_ACK_RING_CONTROL;
  1244		bcm43xx->control_ack_ring.n_entries = 128;
  1245		bcm43xx->control_ack_ring.transfer_rings =
  1246			BIT(BCM43XX_XFER_RING_CONTROL);
  1247	
  1248		bcm43xx->hci_acl_ack_ring.ring_id = BCM43XX_ACK_RING_HCI_ACL;
  1249		bcm43xx->hci_acl_ack_ring.n_entries = 256;
  1250		bcm43xx->hci_acl_ack_ring.transfer_rings =
  1251			BIT(BCM43XX_XFER_RING_HCI_H2D) | BIT(BCM43XX_XFER_RING_ACL_H2D);
  1252		bcm43xx->hci_acl_ack_ring.delay = 1000;
  1253	
  1254		bcm43xx->hci_acl_event_ring.ring_id = BCM43XX_EVENT_RING_HCI_ACL;
  1255		// TODO: this is just a max-sized HCI frame, but small for ACL?
  1256		bcm43xx->hci_acl_event_ring.payload_size = 4 * 66;
  1257		bcm43xx->hci_acl_event_ring.n_entries = 256;
  1258		bcm43xx->hci_acl_event_ring.transfer_rings =
  1259			BIT(BCM43XX_XFER_RING_HCI_D2H) | BIT(BCM43XX_XFER_RING_ACL_D2H);
  1260		bcm43xx->hci_acl_event_ring.delay = 1000;
  1261	
  1262		bcm43xx->sco_ack_ring.ring_id = BCM43XX_ACK_RING_SCO;
  1263		bcm43xx->sco_ack_ring.n_entries = 128;
  1264		bcm43xx->sco_ack_ring.transfer_rings = BIT(BCM43XX_XFER_RING_SCO_H2D);
  1265	
  1266		bcm43xx->sco_event_ring.ring_id = BCM43XX_EVENT_RING_SCO;
  1267		// TODO: this is just a max-sized SCO frame
  1268		bcm43xx->sco_event_ring.payload_size = 4 * 66;
  1269		bcm43xx->sco_event_ring.n_entries = 128;
  1270		bcm43xx->sco_event_ring.transfer_rings = BIT(BCM43XX_XFER_RING_SCO_D2H);
  1271	
  1272		bcm43xx->control_h2d_ring.ring_id = BCM43XX_XFER_RING_CONTROL;
  1273		bcm43xx->control_h2d_ring.doorbell = BCM43XX_DOORBELL_CONTROL;
  1274		bcm43xx->control_h2d_ring.payload_size = BCM43XX_CIPC_CONTROL_MSG_SIZE;
  1275		bcm43xx->control_h2d_ring.completion_ring = BCM43XX_ACK_RING_CONTROL;
  1276		bcm43xx->control_h2d_ring.allow_wait = true;
  1277		bcm43xx->control_h2d_ring.n_entries = 128;
  1278	
  1279		bcm43xx->hci_h2d_ring.ring_id = BCM43XX_XFER_RING_HCI_H2D;
  1280		bcm43xx->hci_h2d_ring.doorbell = BCM43XX_DOORBELL_HCI_H2D;
  1281		// TODO: this is just a max-sized HCI frame, what about ACL though?
  1282		bcm43xx->hci_h2d_ring.payload_size = 4 * 66;
  1283		bcm43xx->hci_h2d_ring.completion_ring = BCM43XX_ACK_RING_HCI_ACL;
  1284		bcm43xx->hci_h2d_ring.n_entries = 128;
  1285	
  1286		bcm43xx->hci_d2h_ring.ring_id = BCM43XX_XFER_RING_HCI_D2H;
  1287		bcm43xx->hci_d2h_ring.doorbell = BCM43XX_DOORBELL_HCI_D2H;
  1288		bcm43xx->hci_d2h_ring.completion_ring = BCM43XX_EVENT_RING_HCI_ACL;
  1289		bcm43xx->hci_d2h_ring.virtual = true;
  1290		bcm43xx->hci_d2h_ring.n_entries = 128;
  1291	
  1292		bcm43xx->sco_h2d_ring.ring_id = BCM43XX_XFER_RING_SCO_H2D;
  1293		bcm43xx->sco_h2d_ring.doorbell = BCM43XX_DOORBELL_SCO;
  1294		// TODO: this is just a max-sized SCO frame
  1295		bcm43xx->sco_h2d_ring.payload_size = 4 * 66;
  1296		bcm43xx->sco_h2d_ring.completion_ring = BCM43XX_ACK_RING_SCO;
  1297		bcm43xx->sco_h2d_ring.sync = true;
  1298		bcm43xx->sco_h2d_ring.n_entries = 128;
  1299	
  1300		bcm43xx->sco_d2h_ring.ring_id = BCM43XX_XFER_RING_SCO_D2H;
  1301		bcm43xx->sco_d2h_ring.doorbell = BCM43XX_DOORBELL_SCO;
  1302		bcm43xx->sco_d2h_ring.completion_ring = BCM43XX_EVENT_RING_SCO;
  1303		bcm43xx->sco_d2h_ring.virtual = true;
  1304		bcm43xx->sco_d2h_ring.sync = true;
  1305		bcm43xx->sco_d2h_ring.n_entries = 128;
  1306	
  1307		bcm43xx->acl_h2d_ring.ring_id = BCM43XX_XFER_RING_ACL_H2D;
  1308		bcm43xx->acl_h2d_ring.doorbell = BCM43XX_DOORBELL_ACL_H2D;
  1309		// TODO: this almost fits a max-size ACL frame
  1310		bcm43xx->acl_h2d_ring.payload_size = 4 * 252;
  1311		bcm43xx->acl_h2d_ring.completion_ring = BCM43XX_ACK_RING_HCI_ACL;
  1312		bcm43xx->acl_h2d_ring.n_entries = 128;
  1313	
  1314		bcm43xx->acl_d2h_ring.ring_id = BCM43XX_XFER_RING_ACL_D2H;
  1315		bcm43xx->acl_d2h_ring.doorbell = BCM43XX_DOORBELL_ACL_D2H;
  1316		bcm43xx->acl_d2h_ring.completion_ring = BCM43XX_EVENT_RING_HCI_ACL;
  1317		bcm43xx->acl_d2h_ring.virtual = true;
  1318		bcm43xx->acl_d2h_ring.n_entries = 128;
  1319	
  1320		/*
  1321		 * no need for any cleanup since this is only called from _probe
  1322		 * and only devres-managed allocations are used
  1323		 */
  1324		ret = bcm43xx_alloc_transfer_ring(bcm43xx, &bcm43xx->control_h2d_ring);
  1325		if (ret)
  1326			return ret;
  1327		ret = bcm43xx_alloc_transfer_ring(bcm43xx, &bcm43xx->hci_h2d_ring);
  1328		if (ret)
  1329			return ret;
  1330		ret = bcm43xx_alloc_transfer_ring(bcm43xx, &bcm43xx->hci_d2h_ring);
  1331		if (ret)
  1332			return ret;
  1333		ret = bcm43xx_alloc_transfer_ring(bcm43xx, &bcm43xx->sco_h2d_ring);
  1334		if (ret)
  1335			return ret;
  1336		ret = bcm43xx_alloc_transfer_ring(bcm43xx, &bcm43xx->sco_d2h_ring);
  1337		if (ret)
  1338			return ret;
  1339		ret = bcm43xx_alloc_transfer_ring(bcm43xx, &bcm43xx->acl_h2d_ring);
  1340		if (ret)
  1341			return ret;
  1342		ret = bcm43xx_alloc_transfer_ring(bcm43xx, &bcm43xx->acl_d2h_ring);
  1343		if (ret)
  1344			return ret;
  1345	
  1346		ret = bcm43xx_alloc_completion_ring(bcm43xx,
  1347						    &bcm43xx->control_ack_ring);
  1348		if (ret)
  1349			return ret;
  1350		ret = bcm43xx_alloc_completion_ring(bcm43xx,
  1351						    &bcm43xx->hci_acl_ack_ring);
  1352		if (ret)
  1353			return ret;
  1354		ret = bcm43xx_alloc_completion_ring(bcm43xx,
  1355						    &bcm43xx->hci_acl_event_ring);
  1356		if (ret)
  1357			return ret;
  1358		ret = bcm43xx_alloc_completion_ring(bcm43xx, &bcm43xx->sco_ack_ring);
  1359		if (ret)
  1360			return ret;
  1361		ret = bcm43xx_alloc_completion_ring(bcm43xx, &bcm43xx->sco_event_ring);
  1362		if (ret)
  1363			return ret;
  1364	
  1365		return 0;
  1366	}
  1367	
  1368	static int bcm43xx_setup_msi(struct bcm43xx_data *bcm43xx)
  1369	{
  1370		struct msi_msg msi_msg;
  1371		int ret;
  1372	
> 1373		ret = irq_chip_compose_msi_msg(irq_get_irq_data(bcm43xx->irq),
  1374					       &msi_msg);
  1375		if (ret)
  1376			return ret;
  1377	
  1378		iowrite32(msi_msg.address_lo, bcm43xx->bar0 + BCM43XX_BAR0_MSI_ADDR_LO);
  1379		iowrite32(msi_msg.address_hi, bcm43xx->bar0 + BCM43XX_BAR0_MSI_ADDR_HI);
  1380	
  1381		return 0;
  1382	}
  1383	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ