CC: [email protected] CC: [email protected] BCC: [email protected] CC: [email protected] TO: Saurabh Sengar <[email protected]> CC: Michal Simek <[email protected]> CC: Appana Durga Kedareswara Rao <[email protected]> CC: Radhey Shyam Pandey <[email protected]> CC: Sarath Babu Naidu Gaddam <[email protected]> CC: Swati Agarwal <[email protected]>
tree: https://github.com/Xilinx/linux-xlnx xlnx_rebase_v5.15_LTS head: 3076249fc30bf463f8390f89009de928ad3e95ff commit: ee94241b2118ddd38a456b2b805fc584b57de58f [225/1129] net: axienet: added multichannel DMA support :::::: branch date: 4 days ago :::::: commit date: 3 months ago config: x86_64-randconfig-c007 (https://download.01.org/0day-ci/archive/20220509/[email protected]/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project a385645b470e2d3a1534aae618ea56b31177639f) 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 # https://github.com/Xilinx/linux-xlnx/commit/ee94241b2118ddd38a456b2b805fc584b57de58f git remote add xilinx-xlnx https://github.com/Xilinx/linux-xlnx git fetch --no-tags xilinx-xlnx xlnx_rebase_v5.15_LTS git checkout ee94241b2118ddd38a456b2b805fc584b57de58f # save the config file COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) ^~~~~~ net/ipv4/devinet.c:1496:4: note: Call to function 'strcat' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcat'. CWE-119 strcat(ifa->ifa_label, dot); ^~~~~~ net/ipv4/devinet.c:1498:4: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(ifa->ifa_label + (IFNAMSIZ - strlen(dot) - 1), dot); ^~~~~~ net/ipv4/devinet.c:1498:4: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(ifa->ifa_label + (IFNAMSIZ - strlen(dot) - 1), dot); ^~~~~~ net/ipv4/devinet.c:1540:5: warning: Value stored to 'in_dev' is never read [clang-analyzer-deadcode.DeadStores] in_dev = inetdev_init(dev); ^ ~~~~~~~~~~~~~~~~~ net/ipv4/devinet.c:1540:5: note: Value stored to 'in_dev' is never read in_dev = inetdev_init(dev); ^ ~~~~~~~~~~~~~~~~~ Suppressed 12 warnings (12 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 12 warnings generated. Suppressed 12 warnings (12 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 18 warnings generated. drivers/net/ethernet/broadcom/bcmsysport.c:903:21: warning: Value stored to 'ndev' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct net_device *ndev = priv->netdev; ^~~~ ~~~~~~~~~~~~ drivers/net/ethernet/broadcom/bcmsysport.c:903:21: note: Value stored to 'ndev' during its initialization is never read struct net_device *ndev = priv->netdev; ^~~~ ~~~~~~~~~~~~ Suppressed 17 warnings (13 in non-user code, 4 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 12 warnings generated. drivers/net/ethernet/fujitsu/fmvj18x_cs.c:580:5: warning: Value stored to 'j' is never read [clang-analyzer-deadcode.DeadStores] j = pcmcia_release_window(link, link->resource[2]); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/fujitsu/fmvj18x_cs.c:580:5: note: Value stored to 'j' is never read j = pcmcia_release_window(link, link->resource[2]); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 11 warnings (11 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 11 warnings generated. Suppressed 11 warnings (11 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 18 warnings generated. drivers/net/ethernet/xilinx/xilinx_axienet_main.c:204:2: warning: Undefined or garbage value returned to caller [clang-analyzer-core.uninitialized.UndefReturn] return ret; ^ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:1401:2: note: Taking false branch dev_dbg(&ndev->dev, "axienet_open()\n"); ^ include/linux/dev_printk.h:162:2: note: expanded from macro 'dev_dbg' if (0) \ ^ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:1408:6: note: Assuming field 'mactype' is equal to XAXIENET_10G_25G if (lp->axienet_config->mactype == XAXIENET_10G_25G) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:1408:2: note: Taking true branch if (lp->axienet_config->mactype == XAXIENET_10G_25G) ^ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:1409:9: note: Calling 'axienet_device_reset' ret = axienet_device_reset(ndev); ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:426:2: note: Assuming 'i' is >= field 'num_rx_queues' for_each_rx_dma_queue(lp, i) { ^ drivers/net/ethernet/xilinx/xilinx_axienet.h:40:18: note: expanded from macro 'for_each_rx_dma_queue' for ((var) = 0; (var) < (lp)->num_rx_queues; (var)++) ^~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:426:2: note: Loop condition is false. Execution continues on line 434 for_each_rx_dma_queue(lp, i) { ^ drivers/net/ethernet/xilinx/xilinx_axienet.h:40:2: note: expanded from macro 'for_each_rx_dma_queue' for ((var) = 0; (var) < (lp)->num_rx_queues; (var)++) ^ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:435:26: note: Field 'mactype' is equal to XAXIENET_10G_25G if (lp->axienet_config->mactype != XAXIENET_10G_25G) { ^ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:435:2: note: Taking false branch if (lp->axienet_config->mactype != XAXIENET_10G_25G) { ^ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:440:6: note: Assuming field 'mtu' is <= XAE_MTU if (ndev->mtu > XAE_MTU && ndev->mtu <= XAE_JUMBO_MTU) { ^~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:440:26: note: Left side of '&&' is false if (ndev->mtu > XAE_MTU && ndev->mtu <= XAE_JUMBO_MTU) { ^ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:448:8: note: Calling 'axienet_dma_bd_init' ret = axienet_dma_bd_init(ndev); ^~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:182:9: note: 'ret' declared without an initial value int i, ret; ^~~ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:192:2: note: Loop condition is false. Execution continues on line 204 for_each_rx_dma_queue(lp, i) { ^ drivers/net/ethernet/xilinx/xilinx_axienet.h:40:2: note: expanded from macro 'for_each_rx_dma_queue' for ((var) = 0; (var) < (lp)->num_rx_queues; (var)++) ^ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:204:2: note: Undefined or garbage value returned to caller return ret; ^ ~~~ >> drivers/net/ethernet/xilinx/xilinx_axienet_main.c:1044:2: warning: Value >> stored to 'tail_p' is never read [clang-analyzer-deadcode.DeadStores] tail_p = q->tx_bd_p + sizeof(*q->tx_bd_v) * q->tx_bd_tail; ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:1044:2: note: Value stored to 'tail_p' is never read tail_p = q->tx_bd_p + sizeof(*q->tx_bd_v) * q->tx_bd_tail; ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:1373:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = axienet_mdio_enable(lp); ^ ~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:1373:2: note: Value stored to 'ret' is never read ret = axienet_mdio_enable(lp); ^ ~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:1409:3: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = axienet_device_reset(ndev); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:1409:3: note: Value stored to 'ret' is never read ret = axienet_device_reset(ndev); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:1411:3: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = axienet_mii_init(ndev); ^ ~~~~~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:1411:3: note: Value stored to 'ret' is never read ret = axienet_mii_init(ndev); ^ ~~~~~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:2785:2: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign] int (*axienet_clk_init)(struct platform_device *pdev, ^ drivers/net/ethernet/xilinx/xilinx_axienet_main.c:2785:2: note: Assigned value is garbage or undefined int (*axienet_clk_init)(struct platform_device *pdev, ^ Suppressed 12 warnings (12 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 9 warnings generated. drivers/extcon/extcon-max14577.c:40:8: warning: Excessive padding in 'struct max14577_muic_irq' (8 padding bytes, where 0 is optimal). Optimal fields order: name, irq, virq, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding] struct max14577_muic_irq { ~~~~~~~^~~~~~~~~~~~~~~~~~~ drivers/extcon/extcon-max14577.c:40:8: note: Excessive padding in 'struct max14577_muic_irq' (8 padding bytes, where 0 is optimal). Optimal fields order: name, irq, virq, consider reordering the fields or adding explicit padding members struct max14577_muic_irq { ~~~~~~~^~~~~~~~~~~~~~~~~~~ Suppressed 8 warnings (8 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 10 warnings generated. drivers/extcon/extcon-ptn5150.c:173:2: warning: Value stored to 'vendor_id' is never read [clang-analyzer-deadcode.DeadStores] vendor_id = FIELD_GET(PTN5150_REG_DEVICE_ID_VENDOR, reg_data); ^ drivers/extcon/extcon-ptn5150.c:173:2: note: Value stored to 'vendor_id' is never read drivers/extcon/extcon-ptn5150.c:174:2: warning: Value stored to 'version_id' is never read [clang-analyzer-deadcode.DeadStores] version_id = FIELD_GET(PTN5150_REG_DEVICE_ID_VERSION, reg_data); ^ drivers/extcon/extcon-ptn5150.c:174:2: note: Value stored to 'version_id' is never read Suppressed 8 warnings (8 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 9 warnings generated. drivers/extcon/extcon-rt8973a.c:25:8: warning: Excessive padding in 'struct muic_irq' (8 padding bytes, where 0 is optimal). Optimal fields order: name, irq, virq, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding] struct muic_irq { ~~~~~~~^~~~~~~~~~ drivers/extcon/extcon-rt8973a.c:25:8: note: Excessive padding in 'struct muic_irq' (8 padding bytes, where 0 is optimal). Optimal fields order: name, irq, virq, consider reordering the fields or adding explicit padding members struct muic_irq { ~~~~~~~^~~~~~~~~~ Suppressed 8 warnings (8 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 9 warnings generated. drivers/extcon/extcon-sm5502.c:24:8: warning: Excessive padding in 'struct muic_irq' (8 padding bytes, where 0 is optimal). Optimal fields order: name, irq, virq, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding] struct muic_irq { ~~~~~~~^~~~~~~~~~ drivers/extcon/extcon-sm5502.c:24:8: note: Excessive padding in 'struct muic_irq' (8 padding bytes, where 0 is optimal). Optimal fields order: name, irq, virq, consider reordering the fields or adding explicit padding members struct muic_irq { ~~~~~~~^~~~~~~~~~ Suppressed 8 warnings (8 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 8 warnings generated. Suppressed 8 warnings (8 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 14 warnings generated. fs/cifs/connect.c:3715:3: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(bcc_ptr, tree); ^~~~~~ fs/cifs/connect.c:3715:3: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(bcc_ptr, tree); ^~~~~~ vim +/tail_p +1044 drivers/net/ethernet/xilinx/xilinx_axienet_main.c ee94241b2118dd Saurabh Sengar 2021-01-22 998 ee94241b2118dd Saurabh Sengar 2021-01-22 999 if (!q->eth_hasdre && ce8edb4cf93f17 Appana Durga Kedareswara Rao 2021-01-22 1000 (((phys_addr_t)skb->data & 0x3) || num_frag > 0)) { ee94241b2118dd Saurabh Sengar 2021-01-22 1001 skb_copy_and_csum_dev(skb, q->tx_buf[q->tx_bd_tail]); ce8edb4cf93f17 Appana Durga Kedareswara Rao 2021-01-22 1002 ee94241b2118dd Saurabh Sengar 2021-01-22 1003 cur_p->phys = q->tx_bufs_dma + ee94241b2118dd Saurabh Sengar 2021-01-22 1004 (q->tx_buf[q->tx_bd_tail] - q->tx_bufs); ce8edb4cf93f17 Appana Durga Kedareswara Rao 2021-01-22 1005 ee94241b2118dd Saurabh Sengar 2021-01-22 1006 #ifdef CONFIG_AXIENET_HAS_MCDMA ee94241b2118dd Saurabh Sengar 2021-01-22 1007 cur_p->cntrl = skb_pagelen(skb) | XMCDMA_BD_CTRL_TXSOF_MASK; ee94241b2118dd Saurabh Sengar 2021-01-22 1008 #else ee94241b2118dd Saurabh Sengar 2021-01-22 1009 cur_p->cntrl = skb_pagelen(skb) | XAXIDMA_BD_CTRL_TXSOF_MASK; ee94241b2118dd Saurabh Sengar 2021-01-22 1010 #endif ce8edb4cf93f17 Appana Durga Kedareswara Rao 2021-01-22 1011 goto out; ce8edb4cf93f17 Appana Durga Kedareswara Rao 2021-01-22 1012 } else { 9dce88e232cf19 Appana Durga Kedareswara Rao 2020-01-24 1013 cur_p->phys = dma_map_single(ndev->dev.parent, skb->data, 9dce88e232cf19 Appana Durga Kedareswara Rao 2020-01-24 1014 skb_headlen(skb), DMA_TO_DEVICE); ce8edb4cf93f17 Appana Durga Kedareswara Rao 2021-01-22 1015 } 396a9512783188 Appana Durga Kedareswara Rao 2021-01-22 1016 cur_p->tx_desc_mapping = DESC_DMA_MAP_SINGLE; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 1017 8a3b7a252dca9f Daniel Borkmann 2012-01-19 1018 for (ii = 0; ii < num_frag; ii++) { 396a9512783188 Appana Durga Kedareswara Rao 2021-01-22 1019 u32 len; 396a9512783188 Appana Durga Kedareswara Rao 2021-01-22 1020 skb_frag_t *frag; 396a9512783188 Appana Durga Kedareswara Rao 2021-01-22 1021 ee94241b2118dd Saurabh Sengar 2021-01-22 1022 if (++q->tx_bd_tail >= lp->tx_bd_num) ee94241b2118dd Saurabh Sengar 2021-01-22 1023 q->tx_bd_tail = 0; 396a9512783188 Appana Durga Kedareswara Rao 2021-01-22 1024 ee94241b2118dd Saurabh Sengar 2021-01-22 1025 #ifdef CONFIG_AXIENET_HAS_MCDMA ee94241b2118dd Saurabh Sengar 2021-01-22 1026 cur_p = &q->txq_bd_v[q->tx_bd_tail]; ee94241b2118dd Saurabh Sengar 2021-01-22 1027 #else ee94241b2118dd Saurabh Sengar 2021-01-22 1028 cur_p = &q->tx_bd_v[q->tx_bd_tail]; ee94241b2118dd Saurabh Sengar 2021-01-22 1029 #endif 8a3b7a252dca9f Daniel Borkmann 2012-01-19 1030 frag = &skb_shinfo(skb)->frags[ii]; 396a9512783188 Appana Durga Kedareswara Rao 2021-01-22 1031 len = skb_frag_size(frag); 396a9512783188 Appana Durga Kedareswara Rao 2021-01-22 1032 cur_p->phys = skb_frag_dma_map(ndev->dev.parent, frag, 0, len, 8a3b7a252dca9f Daniel Borkmann 2012-01-19 1033 DMA_TO_DEVICE); ee94241b2118dd Saurabh Sengar 2021-01-22 1034 cur_p->cntrl = len; 396a9512783188 Appana Durga Kedareswara Rao 2021-01-22 1035 cur_p->tx_desc_mapping = DESC_DMA_MAP_PAGE; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 1036 } 8a3b7a252dca9f Daniel Borkmann 2012-01-19 1037 ce8edb4cf93f17 Appana Durga Kedareswara Rao 2021-01-22 1038 out: ee94241b2118dd Saurabh Sengar 2021-01-22 1039 #ifdef CONFIG_AXIENET_HAS_MCDMA ee94241b2118dd Saurabh Sengar 2021-01-22 1040 cur_p->cntrl |= XMCDMA_BD_CTRL_TXEOF_MASK; ee94241b2118dd Saurabh Sengar 2021-01-22 1041 tail_p = q->tx_bd_p + sizeof(*q->txq_bd_v) * q->tx_bd_tail; ee94241b2118dd Saurabh Sengar 2021-01-22 1042 #else 8a3b7a252dca9f Daniel Borkmann 2012-01-19 1043 cur_p->cntrl |= XAXIDMA_BD_CTRL_TXEOF_MASK; ee94241b2118dd Saurabh Sengar 2021-01-22 @1044 tail_p = q->tx_bd_p + sizeof(*q->tx_bd_v) * q->tx_bd_tail; ee94241b2118dd Saurabh Sengar 2021-01-22 1045 #endif ee94241b2118dd Saurabh Sengar 2021-01-22 1046 cur_p->tx_skb = (phys_addr_t)skb; bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 1047 cur_p->tx_skb = (phys_addr_t)skb; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 1048 ee94241b2118dd Saurabh Sengar 2021-01-22 1049 tail_p = q->tx_bd_p + sizeof(*q->tx_bd_v) * q->tx_bd_tail; 244a92b6cc6f9a Appana Durga Kedareswara Rao 2020-01-24 1050 /* Ensure BD write before starting transfer */ 244a92b6cc6f9a Appana Durga Kedareswara Rao 2020-01-24 1051 wmb(); 244a92b6cc6f9a Appana Durga Kedareswara Rao 2020-01-24 1052 8a3b7a252dca9f Daniel Borkmann 2012-01-19 1053 /* Start the transfer */ ee94241b2118dd Saurabh Sengar 2021-01-22 1054 #ifdef CONFIG_AXIENET_HAS_MCDMA ee94241b2118dd Saurabh Sengar 2021-01-22 1055 axienet_dma_bdout(q, XMCDMA_CHAN_TAILDESC_OFFSET(q->chan_id), ee94241b2118dd Saurabh Sengar 2021-01-22 1056 tail_p); ee94241b2118dd Saurabh Sengar 2021-01-22 1057 #else ee94241b2118dd Saurabh Sengar 2021-01-22 1058 axienet_dma_bdout(q, XAXIDMA_TX_TDESC_OFFSET, tail_p); ee94241b2118dd Saurabh Sengar 2021-01-22 1059 #endif ee94241b2118dd Saurabh Sengar 2021-01-22 1060 if (++q->tx_bd_tail >= lp->tx_bd_num) ee94241b2118dd Saurabh Sengar 2021-01-22 1061 q->tx_bd_tail = 0; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 1062 ee94241b2118dd Saurabh Sengar 2021-01-22 1063 spin_unlock_irqrestore(&q->tx_lock, flags); dcbca0a74b25f9 Appana Durga Kedareswara Rao 2020-01-24 1064 8a3b7a252dca9f Daniel Borkmann 2012-01-19 1065 return NETDEV_TX_OK; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 1066 } 8a3b7a252dca9f Daniel Borkmann 2012-01-19 1067 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
