Hi Piotr, Thank you for the patch! Yet something to improve: [auto build test ERROR on pci/next] [also build test ERROR on mkp-scsi/for-next scsi/for-next linus/master v5.7 next-20200603] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Piotr-Stankiewicz/Forward-MSI-X-vector-enable-error-code-in-pci_alloc_irq_vectors_affinity/20200603-195246 base: https://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git next config: sh-allmodconfig (attached as .config) compiler: sh4-linux-gcc (GCC) 9.3.0 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 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=sh If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All errors (new ones prefixed by >>, old ones prefixed by <<): drivers/crypto/inside-secure/safexcel.c:649:11: note: in expansion of macro 'GENMASK' 649 | GENMASK(priv->config.rings - 1, 0), | ^~~~~~~ include/linux/bits.h:26:28: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits] 26 | __builtin_constant_p((l) > (h)), (l) > (h), 0))) | ^ arch/sh/include/asm/io.h:32:77: note: in definition of macro '__raw_writel' 32 | #define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile u32 __force *)(a) = (v)) | ^ arch/sh/include/asm/io.h:47:62: note: in expansion of macro 'ioswabl' 47 | #define writel_relaxed(v,c) ((void)__raw_writel((__force u32)ioswabl(v),c)) | ^~~~~~~ arch/sh/include/asm/io.h:57:32: note: in expansion of macro 'writel_relaxed' 57 | #define writel(v,a) ({ wmb(); writel_relaxed((v),(a)); }) | ^~~~~~~~~~~~~~ drivers/crypto/inside-secure/safexcel.c:757:3: note: in expansion of macro 'writel' 757 | writel(EIP197_DxE_THR_CTRL_EN | GENMASK(priv->config.rings - 1, 0), | ^~~~~~ include/linux/bits.h:25:3: note: in expansion of macro 'BUILD_BUG_ON_ZERO' 25 | (BUILD_BUG_ON_ZERO(__builtin_choose_expr( | ^~~~~~~~~~~~~~~~~ include/linux/bits.h:39:3: note: in expansion of macro 'GENMASK_INPUT_CHECK' 39 | (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l)) | ^~~~~~~~~~~~~~~~~~~ drivers/crypto/inside-secure/safexcel.c:757:35: note: in expansion of macro 'GENMASK' 757 | writel(EIP197_DxE_THR_CTRL_EN | GENMASK(priv->config.rings - 1, 0), | ^~~~~~~ include/linux/bits.h:26:40: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits] 26 | __builtin_constant_p((l) > (h)), (l) > (h), 0))) | ^ arch/sh/include/asm/io.h:32:77: note: in definition of macro '__raw_writel' 32 | #define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile u32 __force *)(a) = (v)) | ^ arch/sh/include/asm/io.h:47:62: note: in expansion of macro 'ioswabl' 47 | #define writel_relaxed(v,c) ((void)__raw_writel((__force u32)ioswabl(v),c)) | ^~~~~~~ arch/sh/include/asm/io.h:57:32: note: in expansion of macro 'writel_relaxed' 57 | #define writel(v,a) ({ wmb(); writel_relaxed((v),(a)); }) | ^~~~~~~~~~~~~~ drivers/crypto/inside-secure/safexcel.c:757:3: note: in expansion of macro 'writel' 757 | writel(EIP197_DxE_THR_CTRL_EN | GENMASK(priv->config.rings - 1, 0), | ^~~~~~ include/linux/bits.h:25:3: note: in expansion of macro 'BUILD_BUG_ON_ZERO' 25 | (BUILD_BUG_ON_ZERO(__builtin_choose_expr( | ^~~~~~~~~~~~~~~~~ include/linux/bits.h:39:3: note: in expansion of macro 'GENMASK_INPUT_CHECK' 39 | (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l)) | ^~~~~~~~~~~~~~~~~~~ drivers/crypto/inside-secure/safexcel.c:757:35: note: in expansion of macro 'GENMASK' 757 | writel(EIP197_DxE_THR_CTRL_EN | GENMASK(priv->config.rings - 1, 0), | ^~~~~~~ include/linux/bits.h:26:28: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits] 26 | __builtin_constant_p((l) > (h)), (l) > (h), 0))) | ^ arch/sh/include/asm/io.h:32:77: note: in definition of macro '__raw_writel' 32 | #define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile u32 __force *)(a) = (v)) | ^ arch/sh/include/asm/io.h:47:62: note: in expansion of macro 'ioswabl' 47 | #define writel_relaxed(v,c) ((void)__raw_writel((__force u32)ioswabl(v),c)) | ^~~~~~~ arch/sh/include/asm/io.h:57:32: note: in expansion of macro 'writel_relaxed' 57 | #define writel(v,a) ({ wmb(); writel_relaxed((v),(a)); }) | ^~~~~~~~~~~~~~ drivers/crypto/inside-secure/safexcel.c:761:3: note: in expansion of macro 'writel' 761 | writel(EIP197_DxE_THR_CTRL_EN | GENMASK(priv->config.rings - 1, 0), | ^~~~~~ include/linux/bits.h:25:3: note: in expansion of macro 'BUILD_BUG_ON_ZERO' 25 | (BUILD_BUG_ON_ZERO(__builtin_choose_expr( | ^~~~~~~~~~~~~~~~~ include/linux/bits.h:39:3: note: in expansion of macro 'GENMASK_INPUT_CHECK' 39 | (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l)) | ^~~~~~~~~~~~~~~~~~~ drivers/crypto/inside-secure/safexcel.c:761:35: note: in expansion of macro 'GENMASK' 761 | writel(EIP197_DxE_THR_CTRL_EN | GENMASK(priv->config.rings - 1, 0), | ^~~~~~~ include/linux/bits.h:26:40: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits] 26 | __builtin_constant_p((l) > (h)), (l) > (h), 0))) | ^ arch/sh/include/asm/io.h:32:77: note: in definition of macro '__raw_writel' 32 | #define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile u32 __force *)(a) = (v)) | ^ arch/sh/include/asm/io.h:47:62: note: in expansion of macro 'ioswabl' 47 | #define writel_relaxed(v,c) ((void)__raw_writel((__force u32)ioswabl(v),c)) | ^~~~~~~ arch/sh/include/asm/io.h:57:32: note: in expansion of macro 'writel_relaxed' 57 | #define writel(v,a) ({ wmb(); writel_relaxed((v),(a)); }) | ^~~~~~~~~~~~~~ drivers/crypto/inside-secure/safexcel.c:761:3: note: in expansion of macro 'writel' 761 | writel(EIP197_DxE_THR_CTRL_EN | GENMASK(priv->config.rings - 1, 0), | ^~~~~~ include/linux/bits.h:25:3: note: in expansion of macro 'BUILD_BUG_ON_ZERO' 25 | (BUILD_BUG_ON_ZERO(__builtin_choose_expr( | ^~~~~~~~~~~~~~~~~ include/linux/bits.h:39:3: note: in expansion of macro 'GENMASK_INPUT_CHECK' 39 | (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l)) | ^~~~~~~~~~~~~~~~~~~ drivers/crypto/inside-secure/safexcel.c:761:35: note: in expansion of macro 'GENMASK' 761 | writel(EIP197_DxE_THR_CTRL_EN | GENMASK(priv->config.rings - 1, 0), | ^~~~~~~ drivers/crypto/inside-secure/safexcel.c: In function 'safexcel_probe_generic': << from drivers/crypto/inside-secure/safexcel.c:10: >> drivers/crypto/inside-secure/safexcel.c:1570:10: error: 'PCI_IRQ_MSI_TYPES' undeclared (first use in this function); did you mean 'PCI_IRQ_MSIX'? 1570 | PCI_IRQ_MSI_TYPES); | ^~~~~~~~~~~~~~~~~ | PCI_IRQ_MSIX drivers/crypto/inside-secure/safexcel.c:1570:10: note: each undeclared identifier is reported only once for each function it appears in vim +1570 drivers/crypto/inside-secure/safexcel.c 1382 1383 /* 1384 * Generic part of probe routine, shared by platform and PCI driver 1385 * 1386 * Assumes IO resources have been mapped, private data mem has been allocated, 1387 * clocks have been enabled, device pointer has been assigned etc. 1388 * 1389 */ 1390 static int safexcel_probe_generic(void *pdev, 1391 struct safexcel_crypto_priv *priv, 1392 int is_pci_dev) 1393 { 1394 struct device *dev = priv->dev; 1395 u32 peid, version, mask, val, hiaopt, hwopt, peopt; 1396 int i, ret, hwctg; 1397 1398 priv->context_pool = dmam_pool_create("safexcel-context", dev, 1399 sizeof(struct safexcel_context_record), 1400 1, 0); 1401 if (!priv->context_pool) 1402 return -ENOMEM; 1403 1404 /* 1405 * First try the EIP97 HIA version regs 1406 * For the EIP197, this is guaranteed to NOT return any of the test 1407 * values 1408 */ 1409 version = readl(priv->base + EIP97_HIA_AIC_BASE + EIP197_HIA_VERSION); 1410 1411 mask = 0; /* do not swap */ 1412 if (EIP197_REG_LO16(version) == EIP197_HIA_VERSION_LE) { 1413 priv->hwconfig.hiaver = EIP197_VERSION_MASK(version); 1414 } else if (EIP197_REG_HI16(version) == EIP197_HIA_VERSION_BE) { 1415 /* read back byte-swapped, so complement byte swap bits */ 1416 mask = EIP197_MST_CTRL_BYTE_SWAP_BITS; 1417 priv->hwconfig.hiaver = EIP197_VERSION_SWAP(version); 1418 } else { 1419 /* So it wasn't an EIP97 ... maybe it's an EIP197? */ 1420 version = readl(priv->base + EIP197_HIA_AIC_BASE + 1421 EIP197_HIA_VERSION); 1422 if (EIP197_REG_LO16(version) == EIP197_HIA_VERSION_LE) { 1423 priv->hwconfig.hiaver = EIP197_VERSION_MASK(version); 1424 priv->flags |= SAFEXCEL_HW_EIP197; 1425 } else if (EIP197_REG_HI16(version) == 1426 EIP197_HIA_VERSION_BE) { 1427 /* read back byte-swapped, so complement swap bits */ 1428 mask = EIP197_MST_CTRL_BYTE_SWAP_BITS; 1429 priv->hwconfig.hiaver = EIP197_VERSION_SWAP(version); 1430 priv->flags |= SAFEXCEL_HW_EIP197; 1431 } else { 1432 return -ENODEV; 1433 } 1434 } 1435 1436 /* Now initialize the reg offsets based on the probing info so far */ 1437 safexcel_init_register_offsets(priv); 1438 1439 /* 1440 * If the version was read byte-swapped, we need to flip the device 1441 * swapping Keep in mind here, though, that what we write will also be 1442 * byte-swapped ... 1443 */ 1444 if (mask) { 1445 val = readl(EIP197_HIA_AIC(priv) + EIP197_HIA_MST_CTRL); 1446 val = val ^ (mask >> 24); /* toggle byte swap bits */ 1447 writel(val, EIP197_HIA_AIC(priv) + EIP197_HIA_MST_CTRL); 1448 } 1449 1450 /* 1451 * We're not done probing yet! We may fall through to here if no HIA 1452 * was found at all. So, with the endianness presumably correct now and 1453 * the offsets setup, *really* probe for the EIP97/EIP197. 1454 */ 1455 version = readl(EIP197_GLOBAL(priv) + EIP197_VERSION); 1456 if (((priv->flags & SAFEXCEL_HW_EIP197) && 1457 (EIP197_REG_LO16(version) != EIP197_VERSION_LE) && 1458 (EIP197_REG_LO16(version) != EIP196_VERSION_LE)) || 1459 ((!(priv->flags & SAFEXCEL_HW_EIP197) && 1460 (EIP197_REG_LO16(version) != EIP97_VERSION_LE)))) { 1461 /* 1462 * We did not find the device that matched our initial probing 1463 * (or our initial probing failed) Report appropriate error. 1464 */ 1465 dev_err(priv->dev, "Probing for EIP97/EIP19x failed - no such device (read %08x)\n", 1466 version); 1467 return -ENODEV; 1468 } 1469 1470 priv->hwconfig.hwver = EIP197_VERSION_MASK(version); 1471 hwctg = version >> 28; 1472 peid = version & 255; 1473 1474 /* Detect EIP206 processing pipe */ 1475 version = readl(EIP197_PE(priv) + + EIP197_PE_VERSION(0)); 1476 if (EIP197_REG_LO16(version) != EIP206_VERSION_LE) { 1477 dev_err(priv->dev, "EIP%d: EIP206 not detected\n", peid); 1478 return -ENODEV; 1479 } 1480 priv->hwconfig.ppver = EIP197_VERSION_MASK(version); 1481 1482 /* Detect EIP96 packet engine and version */ 1483 version = readl(EIP197_PE(priv) + EIP197_PE_EIP96_VERSION(0)); 1484 if (EIP197_REG_LO16(version) != EIP96_VERSION_LE) { 1485 dev_err(dev, "EIP%d: EIP96 not detected.\n", peid); 1486 return -ENODEV; 1487 } 1488 priv->hwconfig.pever = EIP197_VERSION_MASK(version); 1489 1490 hwopt = readl(EIP197_GLOBAL(priv) + EIP197_OPTIONS); 1491 hiaopt = readl(EIP197_HIA_AIC(priv) + EIP197_HIA_OPTIONS); 1492 1493 if (priv->flags & SAFEXCEL_HW_EIP197) { 1494 /* EIP197 */ 1495 peopt = readl(EIP197_PE(priv) + EIP197_PE_OPTIONS(0)); 1496 1497 priv->hwconfig.hwdataw = (hiaopt >> EIP197_HWDATAW_OFFSET) & 1498 EIP197_HWDATAW_MASK; 1499 priv->hwconfig.hwcfsize = ((hiaopt >> EIP197_CFSIZE_OFFSET) & 1500 EIP197_CFSIZE_MASK) + 1501 EIP197_CFSIZE_ADJUST; 1502 priv->hwconfig.hwrfsize = ((hiaopt >> EIP197_RFSIZE_OFFSET) & 1503 EIP197_RFSIZE_MASK) + 1504 EIP197_RFSIZE_ADJUST; 1505 priv->hwconfig.hwnumpes = (hiaopt >> EIP197_N_PES_OFFSET) & 1506 EIP197_N_PES_MASK; 1507 priv->hwconfig.hwnumrings = (hiaopt >> EIP197_N_RINGS_OFFSET) & 1508 EIP197_N_RINGS_MASK; 1509 if (hiaopt & EIP197_HIA_OPT_HAS_PE_ARB) 1510 priv->flags |= EIP197_PE_ARB; 1511 if (EIP206_OPT_ICE_TYPE(peopt) == 1) 1512 priv->flags |= EIP197_ICE; 1513 /* If not a full TRC, then assume simple TRC */ 1514 if (!(hwopt & EIP197_OPT_HAS_TRC)) 1515 priv->flags |= EIP197_SIMPLE_TRC; 1516 /* EIP197 always has SOME form of TRC */ 1517 priv->flags |= EIP197_TRC_CACHE; 1518 } else { 1519 /* EIP97 */ 1520 priv->hwconfig.hwdataw = (hiaopt >> EIP197_HWDATAW_OFFSET) & 1521 EIP97_HWDATAW_MASK; 1522 priv->hwconfig.hwcfsize = (hiaopt >> EIP97_CFSIZE_OFFSET) & 1523 EIP97_CFSIZE_MASK; 1524 priv->hwconfig.hwrfsize = (hiaopt >> EIP97_RFSIZE_OFFSET) & 1525 EIP97_RFSIZE_MASK; 1526 priv->hwconfig.hwnumpes = 1; /* by definition */ 1527 priv->hwconfig.hwnumrings = (hiaopt >> EIP197_N_RINGS_OFFSET) & 1528 EIP197_N_RINGS_MASK; 1529 } 1530 1531 /* Scan for ring AIC's */ 1532 for (i = 0; i < EIP197_MAX_RING_AIC; i++) { 1533 version = readl(EIP197_HIA_AIC_R(priv) + 1534 EIP197_HIA_AIC_R_VERSION(i)); 1535 if (EIP197_REG_LO16(version) != EIP201_VERSION_LE) 1536 break; 1537 } 1538 priv->hwconfig.hwnumraic = i; 1539 /* Low-end EIP196 may not have any ring AIC's ... */ 1540 if (!priv->hwconfig.hwnumraic) { 1541 dev_err(priv->dev, "No ring interrupt controller present!\n"); 1542 return -ENODEV; 1543 } 1544 1545 /* Get supported algorithms from EIP96 transform engine */ 1546 priv->hwconfig.algo_flags = readl(EIP197_PE(priv) + 1547 EIP197_PE_EIP96_OPTIONS(0)); 1548 1549 /* Print single info line describing what we just detected */ 1550 dev_info(priv->dev, "EIP%d:%x(%d,%d,%d,%d)-HIA:%x(%d,%d,%d),PE:%x/%x,alg:%08x\n", 1551 peid, priv->hwconfig.hwver, hwctg, priv->hwconfig.hwnumpes, 1552 priv->hwconfig.hwnumrings, priv->hwconfig.hwnumraic, 1553 priv->hwconfig.hiaver, priv->hwconfig.hwdataw, 1554 priv->hwconfig.hwcfsize, priv->hwconfig.hwrfsize, 1555 priv->hwconfig.ppver, priv->hwconfig.pever, 1556 priv->hwconfig.algo_flags); 1557 1558 safexcel_configure(priv); 1559 1560 if (IS_ENABLED(CONFIG_PCI) && priv->version == EIP197_DEVBRD) { 1561 /* 1562 * Request MSI vectors for global + 1 per ring - 1563 * or just 1 for older dev images 1564 */ 1565 struct pci_dev *pci_pdev = pdev; 1566 1567 ret = pci_alloc_irq_vectors(pci_pdev, 1568 priv->config.rings + 1, 1569 priv->config.rings + 1, > 1570 PCI_IRQ_MSI_TYPES); 1571 if (ret < 0) { 1572 dev_err(dev, "Failed to allocate PCI MSI interrupts\n"); 1573 return ret; 1574 } 1575 } 1576 1577 /* Register the ring IRQ handlers and configure the rings */ 1578 priv->ring = devm_kcalloc(dev, priv->config.rings, 1579 sizeof(*priv->ring), 1580 GFP_KERNEL); 1581 if (!priv->ring) 1582 return -ENOMEM; 1583 1584 for (i = 0; i < priv->config.rings; i++) { 1585 char wq_name[9] = {0}; 1586 int irq; 1587 struct safexcel_ring_irq_data *ring_irq; 1588 1589 ret = safexcel_init_ring_descriptors(priv, 1590 &priv->ring[i].cdr, 1591 &priv->ring[i].rdr); 1592 if (ret) { 1593 dev_err(dev, "Failed to initialize rings\n"); 1594 return ret; 1595 } 1596 1597 priv->ring[i].rdr_req = devm_kcalloc(dev, 1598 EIP197_DEFAULT_RING_SIZE, 1599 sizeof(priv->ring[i].rdr_req), 1600 GFP_KERNEL); 1601 if (!priv->ring[i].rdr_req) 1602 return -ENOMEM; 1603 1604 ring_irq = devm_kzalloc(dev, sizeof(*ring_irq), GFP_KERNEL); 1605 if (!ring_irq) 1606 return -ENOMEM; 1607 1608 ring_irq->priv = priv; 1609 ring_irq->ring = i; 1610 1611 irq = safexcel_request_ring_irq(pdev, 1612 EIP197_IRQ_NUMBER(i, is_pci_dev), 1613 is_pci_dev, 1614 safexcel_irq_ring, 1615 safexcel_irq_ring_thread, 1616 ring_irq); 1617 if (irq < 0) { 1618 dev_err(dev, "Failed to get IRQ ID for ring %d\n", i); 1619 return irq; 1620 } 1621 1622 priv->ring[i].work_data.priv = priv; 1623 priv->ring[i].work_data.ring = i; 1624 INIT_WORK(&priv->ring[i].work_data.work, 1625 safexcel_dequeue_work); 1626 1627 snprintf(wq_name, 9, "wq_ring%d", i); 1628 priv->ring[i].workqueue = 1629 create_singlethread_workqueue(wq_name); 1630 if (!priv->ring[i].workqueue) 1631 return -ENOMEM; 1632 1633 priv->ring[i].requests = 0; 1634 priv->ring[i].busy = false; 1635 1636 crypto_init_queue(&priv->ring[i].queue, 1637 EIP197_DEFAULT_RING_SIZE); 1638 1639 spin_lock_init(&priv->ring[i].lock); 1640 spin_lock_init(&priv->ring[i].queue_lock); 1641 } 1642 1643 atomic_set(&priv->ring_used, 0); 1644 1645 ret = safexcel_hw_init(priv); 1646 if (ret) { 1647 dev_err(dev, "HW init failed (%d)\n", ret); 1648 return ret; 1649 } 1650 1651 ret = safexcel_register_algorithms(priv); 1652 if (ret) { 1653 dev_err(dev, "Failed to register algorithms (%d)\n", ret); 1654 return ret; 1655 } 1656 1657 return 0; 1658 } 1659 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org