[hare-scsi-devel:scsi-private.v2 3/21] drivers/scsi/fnic/fnic_main.c:123:22: error: initialized field overwritten
by kernel test robot
tree: https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git scsi-private.v2
head: 915b986531e666d840f72752c597fb6b4ea69d35
commit: 4c6835d49046d493aa4186e6d357842ef885bd97 [3/21] fnic: use internal commands
config: x86_64-allyesconfig (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
# https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git/commi...
git remote add hare-scsi-devel https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git
git fetch --no-tags hare-scsi-devel scsi-private.v2
git checkout 4c6835d49046d493aa4186e6d357842ef885bd97
# save the attached .config to linux build tree
make W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
drivers/scsi/fnic/fnic_main.c:123:3: error: 'struct scsi_host_template' has no member named 'nr_reserved_cmds'
123 | .nr_reserved_cmds = 1,
| ^~~~~~~~~~~~~~~~
>> drivers/scsi/fnic/fnic_main.c:123:22: error: initialized field overwritten [-Werror=override-init]
123 | .nr_reserved_cmds = 1,
| ^
drivers/scsi/fnic/fnic_main.c:123:22: note: (near initialization for 'fnic_host_template.this_id')
cc1: all warnings being treated as errors
vim +123 drivers/scsi/fnic/fnic_main.c
109
110 static struct scsi_host_template fnic_host_template = {
111 .module = THIS_MODULE,
112 .name = DRV_NAME,
113 .queuecommand = fnic_queuecommand,
114 .eh_timed_out = fc_eh_timed_out,
115 .eh_abort_handler = fnic_abort_cmd,
116 .eh_device_reset_handler = fnic_device_reset,
117 .eh_host_reset_handler = fnic_host_reset,
118 .slave_alloc = fnic_slave_alloc,
119 .change_queue_depth = scsi_change_queue_depth,
120 .this_id = -1,
121 .cmd_per_lun = 3,
122 .can_queue = FNIC_DFLT_IO_REQ - 1,
> 123 .nr_reserved_cmds = 1,
124 .sg_tablesize = FNIC_MAX_SG_DESC_CNT,
125 .max_sectors = 0xffff,
126 .shost_groups = fnic_host_groups,
127 .track_queue_depth = 1,
128 };
129
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
10 months, 1 week
[intel-lts:5.4/yocto 10288/18528] drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5760:5: sparse: sparse: symbol 'stmmac_all_queue_pairs_enable' was not declared. Should it be static?
by kernel test robot
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: f74600f861eeb3536c7443943a3ce78a77c692dc
commit: fabf035bcf07c8de58a4194b9440b566033892bb [10288/18528] net: stmmac: add stmmac_all_queue_pairs_enable|disable() for XDP setup
config: i386-randconfig-s002-20211014 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.4-dirty
# https://github.com/intel/linux-intel-lts/commit/fabf035bcf07c8de58a4194b9...
git remote add intel-lts https://github.com/intel/linux-intel-lts.git
git fetch --no-tags intel-lts 5.4/yocto
git checkout fabf035bcf07c8de58a4194b9440b566033892bb
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash drivers/net/ethernet/stmicro/stmmac/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:1462:6: sparse: sparse: symbol 'stmmac_alloc_rx_buffers' was not declared. Should it be static?
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2820:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] etdes4 @@ got unsigned long @@
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2820:27: sparse: expected restricted __le32 [usertype] etdes4
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2820:27: sparse: got unsigned long
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2821:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] etdes5 @@ got unsigned long @@
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2821:27: sparse: expected restricted __le32 [usertype] etdes5
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2821:27: sparse: got unsigned long
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2822:27: sparse: sparse: invalid assignment: |=
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2822:27: sparse: left side has type restricted __le32
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2822:27: sparse: right side has type unsigned long
>> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5760:5: sparse: sparse: symbol 'stmmac_all_queue_pairs_enable' was not declared. Should it be static?
>> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5814:5: sparse: sparse: symbol 'stmmac_all_queue_pairs_disable' was not declared. Should it be static?
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5837:5: sparse: sparse: symbol 'stmmac_xdp_xmit' was not declared. Should it be static?
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:6552:6: sparse: sparse: symbol 'stmmac_clean_all_tx_rings' was not declared. Should it be static?
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2394:57: sparse: sparse: context imbalance in 'stmmac_tx_clean' - unexpected unlock
vim +/stmmac_all_queue_pairs_enable +5760 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
5759
> 5760 int stmmac_all_queue_pairs_enable(struct stmmac_priv *priv)
5761 {
5762 int i;
5763
5764 mutex_lock(&priv->lock);
5765
5766 if (stmmac_enabled_xdp(priv))
5767 priv->plat->normal_tx_queue_count = priv->plat->num_queue_pairs;
5768 else
5769 priv->plat->normal_tx_queue_count =
5770 priv->plat->tx_queues_to_use;
5771
5772 for (i = 0; i < priv->plat->num_queue_pairs; i++) {
5773 int err = stmmac_queue_pair_enable(priv, i);
5774
5775 if (err)
5776 return err;
5777 }
5778
5779 mutex_unlock(&priv->lock);
5780
5781 return 0;
5782 }
5783
5784 /**
5785 * stmmac_queue_pair_disable - Disables a queue pair
5786 * @priv: driver private structure
5787 * @queue_pair: queue pair
5788 *
5789 * Returns 0 on success, <0 on failure.
5790 **/
5791 int stmmac_queue_pair_disable(struct stmmac_priv *priv, u16 qid)
5792 {
5793 u16 qp_num = priv->plat->num_queue_pairs;
5794 int ret;
5795
5796 if (qid >= qp_num) {
5797 netdev_err(priv->dev,
5798 "%s: qid (%d) > number of queue pairs (%d)\n",
5799 __func__, qid, qp_num);
5800
5801 return -EINVAL;
5802 }
5803
5804 stmmac_napi_control(priv, qid, false);
5805 ret = stmmac_txrx_irq_control(priv, qid, false);
5806 if (ret)
5807 return ret;
5808 stmmac_txrx_dma_control(priv, qid, false);
5809 stmmac_txrx_desc_control(priv, qid, false);
5810
5811 return ret;
5812 }
5813
> 5814 int stmmac_all_queue_pairs_disable(struct stmmac_priv *priv)
5815 {
5816 int i;
5817
5818 mutex_lock(&priv->lock);
5819
5820 for (i = 0; i < priv->plat->num_queue_pairs; i++) {
5821 int err = stmmac_queue_pair_disable(priv, i);
5822
5823 if (err)
5824 return err;
5825 }
5826
5827 mutex_unlock(&priv->lock);
5828
5829 return 0;
5830 }
5831
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
10 months, 1 week
drivers/bluetooth/btintel.c:441:33: sparse: sparse: cast to restricted __le32
by kernel test robot
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: debe436e77c72fcee804fb867f275e6d31aa999c
commit: 66500bbc7d6b4915cae86d64c72591cb70698c9d Bluetooth: btintel: Fix endianness issue for TLV version information
date: 11 months ago
config: riscv-randconfig-s031-20211109 (attached as .config)
compiler: riscv64-linux-gcc (GCC) 11.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit...
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 66500bbc7d6b4915cae86d64c72591cb70698c9d
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=riscv SHELL=/bin/bash block/ drivers/bluetooth/ drivers/hid/ drivers/hwmon/ drivers/i2c/busses/ drivers/message/fusion/ drivers/net/ethernet/ drivers/net/wireless/intel/iwlwifi/ drivers/pci/ drivers/remoteproc/ drivers/rtc/ drivers/staging/rts5208/ drivers/staging/vc04_services/ drivers/tty/serial/ drivers/vdpa/ drivers/video/fbdev/ net/qrtr/ net/sched/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
>> drivers/bluetooth/btintel.c:441:33: sparse: sparse: cast to restricted __le32
drivers/bluetooth/btintel.c:445:33: sparse: sparse: cast to restricted __le32
drivers/bluetooth/btintel.c:449:33: sparse: sparse: cast to restricted __le32
drivers/bluetooth/btintel.c:453:33: sparse: sparse: cast to restricted __le32
>> drivers/bluetooth/btintel.c:457:33: sparse: sparse: cast to restricted __le16
drivers/bluetooth/btintel.c:464:33: sparse: sparse: cast to restricted __le16
drivers/bluetooth/btintel.c:471:33: sparse: sparse: cast to restricted __le32
vim +441 drivers/bluetooth/btintel.c
403
404 int btintel_read_version_tlv(struct hci_dev *hdev, struct intel_version_tlv *version)
405 {
406 struct sk_buff *skb;
407 const u8 param[1] = { 0xFF };
408
409 if (!version)
410 return -EINVAL;
411
412 skb = __hci_cmd_sync(hdev, 0xfc05, 1, param, HCI_CMD_TIMEOUT);
413 if (IS_ERR(skb)) {
414 bt_dev_err(hdev, "Reading Intel version information failed (%ld)",
415 PTR_ERR(skb));
416 return PTR_ERR(skb);
417 }
418
419 if (skb->data[0]) {
420 bt_dev_err(hdev, "Intel Read Version command failed (%02x)",
421 skb->data[0]);
422 kfree_skb(skb);
423 return -EIO;
424 }
425
426 /* Consume Command Complete Status field */
427 skb_pull(skb, 1);
428
429 /* Event parameters contatin multiple TLVs. Read each of them
430 * and only keep the required data. Also, it use existing legacy
431 * version field like hw_platform, hw_variant, and fw_variant
432 * to keep the existing setup flow
433 */
434 while (skb->len) {
435 struct intel_tlv *tlv;
436
437 tlv = (struct intel_tlv *)skb->data;
438 switch (tlv->type) {
439 case INTEL_TLV_CNVI_TOP:
440 version->cnvi_top =
> 441 __le32_to_cpu(get_unaligned_le32(tlv->val));
442 break;
443 case INTEL_TLV_CNVR_TOP:
444 version->cnvr_top =
445 __le32_to_cpu(get_unaligned_le32(tlv->val));
446 break;
447 case INTEL_TLV_CNVI_BT:
448 version->cnvi_bt =
449 __le32_to_cpu(get_unaligned_le32(tlv->val));
450 break;
451 case INTEL_TLV_CNVR_BT:
452 version->cnvr_bt =
453 __le32_to_cpu(get_unaligned_le32(tlv->val));
454 break;
455 case INTEL_TLV_DEV_REV_ID:
456 version->dev_rev_id =
> 457 __le16_to_cpu(get_unaligned_le16(tlv->val));
458 break;
459 case INTEL_TLV_IMAGE_TYPE:
460 version->img_type = tlv->val[0];
461 break;
462 case INTEL_TLV_TIME_STAMP:
463 version->timestamp =
464 __le16_to_cpu(get_unaligned_le16(tlv->val));
465 break;
466 case INTEL_TLV_BUILD_TYPE:
467 version->build_type = tlv->val[0];
468 break;
469 case INTEL_TLV_BUILD_NUM:
470 version->build_num =
471 __le32_to_cpu(get_unaligned_le32(tlv->val));
472 break;
473 case INTEL_TLV_SECURE_BOOT:
474 version->secure_boot = tlv->val[0];
475 break;
476 case INTEL_TLV_OTP_LOCK:
477 version->otp_lock = tlv->val[0];
478 break;
479 case INTEL_TLV_API_LOCK:
480 version->api_lock = tlv->val[0];
481 break;
482 case INTEL_TLV_DEBUG_LOCK:
483 version->debug_lock = tlv->val[0];
484 break;
485 case INTEL_TLV_MIN_FW:
486 version->min_fw_build_nn = tlv->val[0];
487 version->min_fw_build_cw = tlv->val[1];
488 version->min_fw_build_yy = tlv->val[2];
489 break;
490 case INTEL_TLV_LIMITED_CCE:
491 version->limited_cce = tlv->val[0];
492 break;
493 case INTEL_TLV_SBE_TYPE:
494 version->sbe_type = tlv->val[0];
495 break;
496 case INTEL_TLV_OTP_BDADDR:
497 memcpy(&version->otp_bd_addr, tlv->val, tlv->len);
498 break;
499 default:
500 /* Ignore rest of information */
501 break;
502 }
503 /* consume the current tlv and move to next*/
504 skb_pull(skb, tlv->len + sizeof(*tlv));
505 }
506
507 kfree_skb(skb);
508 return 0;
509 }
510 EXPORT_SYMBOL_GPL(btintel_read_version_tlv);
511
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
10 months, 1 week
[dhowells-fs:netfs-folio 3/4] fs/netfs/read_helper.c:435:25: error: implicit declaration of function 'flush_dcache_folio'; did you mean 'flush_dcache_page'?
by kernel test robot
tree: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git netfs-folio
head: 255ed63638da190e2485d32c0f696cd04d34fbc0
commit: 78525c74d9e7d1a6ce69bd4388f045f6e474a20b [3/4] netfs, 9p, afs, ceph: Use folios
config: csky-defconfig (attached as .config)
compiler: csky-linux-gcc (GCC) 11.2.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
# https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/com...
git remote add dhowells-fs https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git
git fetch --no-tags dhowells-fs netfs-folio
git checkout 78525c74d9e7d1a6ce69bd4388f045f6e474a20b
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross ARCH=csky
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
fs/netfs/read_helper.c: In function 'netfs_rreq_unlock':
>> fs/netfs/read_helper.c:435:25: error: implicit declaration of function 'flush_dcache_folio'; did you mean 'flush_dcache_page'? [-Werror=implicit-function-declaration]
435 | flush_dcache_folio(folio);
| ^~~~~~~~~~~~~~~~~~
| flush_dcache_page
cc1: some warnings being treated as errors
vim +435 fs/netfs/read_helper.c
368
369 /*
370 * Unlock the folios in a read operation. We need to set PG_fscache on any
371 * folios we're going to write back before we unlock them.
372 */
373 static void netfs_rreq_unlock(struct netfs_read_request *rreq)
374 {
375 struct netfs_read_subrequest *subreq;
376 struct folio *folio;
377 unsigned int iopos, account = 0;
378 pgoff_t start_page = rreq->start / PAGE_SIZE;
379 pgoff_t last_page = ((rreq->start + rreq->len) / PAGE_SIZE) - 1;
380 bool subreq_failed = false;
381
382 XA_STATE(xas, &rreq->mapping->i_pages, start_page);
383
384 if (test_bit(NETFS_RREQ_FAILED, &rreq->flags)) {
385 __clear_bit(NETFS_RREQ_WRITE_TO_CACHE, &rreq->flags);
386 list_for_each_entry(subreq, &rreq->subrequests, rreq_link) {
387 __clear_bit(NETFS_SREQ_WRITE_TO_CACHE, &subreq->flags);
388 }
389 }
390
391 /* Walk through the pagecache and the I/O request lists simultaneously.
392 * We may have a mixture of cached and uncached sections and we only
393 * really want to write out the uncached sections. This is slightly
394 * complicated by the possibility that we might have huge pages with a
395 * mixture inside.
396 */
397 subreq = list_first_entry(&rreq->subrequests,
398 struct netfs_read_subrequest, rreq_link);
399 iopos = 0;
400 subreq_failed = (subreq->error < 0);
401
402 trace_netfs_rreq(rreq, netfs_rreq_trace_unlock);
403
404 rcu_read_lock();
405 xas_for_each(&xas, folio, last_page) {
406 unsigned int pgpos = (folio_index(folio) - start_page) * PAGE_SIZE;
407 unsigned int pgend = pgpos + folio_size(folio);
408 bool pg_failed = false;
409
410 for (;;) {
411 if (!subreq) {
412 pg_failed = true;
413 break;
414 }
415 if (test_bit(NETFS_SREQ_WRITE_TO_CACHE, &subreq->flags))
416 folio_start_fscache(folio);
417 pg_failed |= subreq_failed;
418 if (pgend < iopos + subreq->len)
419 break;
420
421 account += subreq->transferred;
422 iopos += subreq->len;
423 if (!list_is_last(&subreq->rreq_link, &rreq->subrequests)) {
424 subreq = list_next_entry(subreq, rreq_link);
425 subreq_failed = (subreq->error < 0);
426 } else {
427 subreq = NULL;
428 subreq_failed = false;
429 }
430 if (pgend == iopos)
431 break;
432 }
433
434 if (!pg_failed) {
> 435 flush_dcache_folio(folio);
436 folio_mark_uptodate(folio);
437 }
438
439 if (!test_bit(NETFS_RREQ_DONT_UNLOCK_FOLIOS, &rreq->flags)) {
440 if (folio_index(folio) == rreq->no_unlock_folio &&
441 test_bit(NETFS_RREQ_NO_UNLOCK_FOLIO, &rreq->flags))
442 _debug("no unlock");
443 else
444 folio_unlock(folio);
445 }
446 }
447 rcu_read_unlock();
448
449 task_io_account_read(account);
450 if (rreq->netfs_ops->done)
451 rreq->netfs_ops->done(rreq);
452 }
453
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
10 months, 1 week
lib/atomic64.c:124:1: warning: no previous prototype for function 'generic_atomic64_and_return'
by kernel test robot
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: debe436e77c72fcee804fb867f275e6d31aa999c
commit: 1bdadf46eff6804ace5fa46b6856da4799f12b5c locking/atomic: atomic64: support ARCH_ATOMIC
date: 6 months ago
config: arm-randconfig-c002-20211109 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project f3798ad5fa845771846599f3c088016e3aef800c)
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 arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit...
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 1bdadf46eff6804ace5fa46b6856da4799f12b5c
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All warnings (new ones prefixed by >>):
>> lib/atomic64.c:124:1: warning: no previous prototype for function 'generic_atomic64_and_return' [-Wmissing-prototypes]
ATOMIC64_OPS(and, &=)
^
lib/atomic64.c:121:2: note: expanded from macro 'ATOMIC64_OPS'
ATOMIC64_OP_RETURN(op, c_op) \
^
lib/atomic64.c:82:5: note: expanded from macro 'ATOMIC64_OP_RETURN'
s64 generic_atomic64_##op##_return(s64 a, atomic64_t *v) \
^
<scratch space>:147:1: note: expanded from here
generic_atomic64_and_return
^
lib/atomic64.c:124:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
lib/atomic64.c:121:2: note: expanded from macro 'ATOMIC64_OPS'
ATOMIC64_OP_RETURN(op, c_op) \
^
lib/atomic64.c:81:42: note: expanded from macro 'ATOMIC64_OP_RETURN'
#define ATOMIC64_OP_RETURN(op, c_op) \
^
>> lib/atomic64.c:125:1: warning: no previous prototype for function 'generic_atomic64_or_return' [-Wmissing-prototypes]
ATOMIC64_OPS(or, |=)
^
lib/atomic64.c:121:2: note: expanded from macro 'ATOMIC64_OPS'
ATOMIC64_OP_RETURN(op, c_op) \
^
lib/atomic64.c:82:5: note: expanded from macro 'ATOMIC64_OP_RETURN'
s64 generic_atomic64_##op##_return(s64 a, atomic64_t *v) \
^
<scratch space>:161:1: note: expanded from here
generic_atomic64_or_return
^
lib/atomic64.c:125:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
lib/atomic64.c:121:2: note: expanded from macro 'ATOMIC64_OPS'
ATOMIC64_OP_RETURN(op, c_op) \
^
lib/atomic64.c:81:42: note: expanded from macro 'ATOMIC64_OP_RETURN'
#define ATOMIC64_OP_RETURN(op, c_op) \
^
>> lib/atomic64.c:126:1: warning: no previous prototype for function 'generic_atomic64_xor_return' [-Wmissing-prototypes]
ATOMIC64_OPS(xor, ^=)
^
lib/atomic64.c:121:2: note: expanded from macro 'ATOMIC64_OPS'
ATOMIC64_OP_RETURN(op, c_op) \
^
lib/atomic64.c:82:5: note: expanded from macro 'ATOMIC64_OP_RETURN'
s64 generic_atomic64_##op##_return(s64 a, atomic64_t *v) \
^
<scratch space>:175:1: note: expanded from here
generic_atomic64_xor_return
^
lib/atomic64.c:126:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
lib/atomic64.c:121:2: note: expanded from macro 'ATOMIC64_OPS'
ATOMIC64_OP_RETURN(op, c_op) \
^
lib/atomic64.c:81:42: note: expanded from macro 'ATOMIC64_OP_RETURN'
#define ATOMIC64_OP_RETURN(op, c_op) \
^
3 warnings generated.
vim +/generic_atomic64_and_return +124 lib/atomic64.c
560cb12a4080a4 Peter Zijlstra 2014-04-23 117
560cb12a4080a4 Peter Zijlstra 2014-04-23 118 #undef ATOMIC64_OPS
28aa2bda2211f4 Peter Zijlstra 2016-04-18 119 #define ATOMIC64_OPS(op, c_op) \
28aa2bda2211f4 Peter Zijlstra 2016-04-18 120 ATOMIC64_OP(op, c_op) \
28aa2bda2211f4 Peter Zijlstra 2016-04-18 121 ATOMIC64_OP_RETURN(op, c_op) \
28aa2bda2211f4 Peter Zijlstra 2016-04-18 122 ATOMIC64_FETCH_OP(op, c_op)
28aa2bda2211f4 Peter Zijlstra 2016-04-18 123
28aa2bda2211f4 Peter Zijlstra 2016-04-18 @124 ATOMIC64_OPS(and, &=)
28aa2bda2211f4 Peter Zijlstra 2016-04-18 @125 ATOMIC64_OPS(or, |=)
28aa2bda2211f4 Peter Zijlstra 2016-04-18 @126 ATOMIC64_OPS(xor, ^=)
28aa2bda2211f4 Peter Zijlstra 2016-04-18 127
:::::: The code at line 124 was first introduced by commit
:::::: 28aa2bda2211f4327d83b44a4f917b4a061b1c56 locking/atomic: Implement atomic{,64,_long}_fetch_{add,sub,and,andnot,or,xor}{,_relaxed,_acquire,_release}()
:::::: TO: Peter Zijlstra <peterz(a)infradead.org>
:::::: CC: Ingo Molnar <mingo(a)kernel.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
10 months, 1 week
[freescale-fslc:5.15.x+fslc 2/9] arch/arm/mach-imx/reboot.c:31:6: error: no previous prototype for 'do_switch_recovery'
by kernel test robot
tree: https://github.com/Freescale/linux-fslc 5.15.x+fslc
head: 96ed46289f8136d5ca27af9af21de2064e789dd5
commit: a9a756351b7a22878f92177dd2c79509dfc94e53 [2/9] MA-7633-2 [Android-Reboot]reboot to fastboot\recovery mode
config: arm-allyesconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 11.2.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
# https://github.com/Freescale/linux-fslc/commit/a9a756351b7a22878f92177dd2...
git remote add freescale-fslc https://github.com/Freescale/linux-fslc
git fetch --no-tags freescale-fslc 5.15.x+fslc
git checkout a9a756351b7a22878f92177dd2c79509dfc94e53
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
>> arch/arm/mach-imx/reboot.c:31:6: error: no previous prototype for 'do_switch_recovery' [-Werror=missing-prototypes]
31 | void do_switch_recovery(void)
| ^~~~~~~~~~~~~~~~~~
>> arch/arm/mach-imx/reboot.c:61:6: error: no previous prototype for 'do_switch_fastboot' [-Werror=missing-prototypes]
61 | void do_switch_fastboot(void)
| ^~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
vim +/do_switch_recovery +31 arch/arm/mach-imx/reboot.c
30
> 31 void do_switch_recovery(void)
32 {
33 u32 reg;
34 void *addr;
35 struct clk *snvs_root;
36 if (cpu_is_imx6()) {
37 addr = ioremap(MX6_SNVS_BASE_ADDR, MX6_SNVS_SIZE);
38 if (!addr) {
39 pr_warn("SNVS ioremap failed!\n");
40 return;
41 }
42 reg = __raw_readl(addr + MX6_SNVS_LPGPR);
43 reg |= ANDROID_RECOVERY_BOOT;
44 __raw_writel(reg, (addr + MX6_SNVS_LPGPR));
45 } else {
46 snvs_root = clk_get_sys("imx-snvs.0", "snvs");
47 addr = ioremap(MX7_SNVS_BASE_ADDR, MX7_SNVS_SIZE);
48 if (!addr) {
49 pr_warn("SNVS ioremap failed!\n");
50 return;
51 }
52 clk_enable(snvs_root);
53 reg = __raw_readl(addr + MX7_SNVS_LPGPR);
54 reg |= ANDROID_RECOVERY_BOOT;
55 __raw_writel(reg, (addr + MX7_SNVS_LPGPR));
56 clk_disable(snvs_root);
57 }
58 iounmap(addr);
59 }
60
> 61 void do_switch_fastboot(void)
62 {
63 u32 reg;
64 void *addr;
65 struct clk *snvs_root;
66 if (cpu_is_imx6()) {
67 addr = ioremap(MX6_SNVS_BASE_ADDR, MX6_SNVS_SIZE);
68 if (!addr) {
69 pr_warn("SNVS ioremap failed!\n");
70 return;
71 }
72 reg = __raw_readl(addr + MX6_SNVS_LPGPR);
73 reg |= ANDROID_FASTBOOT_BOOT;
74 __raw_writel(reg, addr + MX6_SNVS_LPGPR);
75 } else {
76 snvs_root = clk_get_sys("imx-snvs.0", "snvs");
77 addr = ioremap(MX7_SNVS_BASE_ADDR, MX7_SNVS_SIZE);
78 if (!addr) {
79 pr_warn("SNVS ioremap failed!\n");
80 return;
81 }
82 clk_enable(snvs_root);
83 reg = __raw_readl(addr + MX7_SNVS_LPGPR);
84 reg |= ANDROID_FASTBOOT_BOOT;
85 __raw_writel(reg, addr + MX7_SNVS_LPGPR);
86 clk_disable(snvs_root);
87 }
88 iounmap(addr);
89 }
90
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
10 months, 1 week
Re: [PATCH v2 1/4] mm/shmem: support deterministic charging of tmpfs
by kernel test robot
Hi Mina,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on hnaz-mm/master]
url: https://github.com/0day-ci/linux/commits/Mina-Almasry/mm-shmem-support-de...
base: https://github.com/hnaz/linux-mm master
config: ia64-defconfig (attached as .config)
compiler: ia64-linux-gcc (GCC) 11.2.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
# https://github.com/0day-ci/linux/commit/aaf0e3e0832977b6eb257e1ed27747cf9...
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Mina-Almasry/mm-shmem-support-deterministic-charging-of-tmpfs/20211111-062122
git checkout aaf0e3e0832977b6eb257e1ed27747cf97c479d4
# save the attached .config to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=ia64 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
mm/shmem.c:118:5: warning: "CONFIG_MEMCG" is not defined, evaluates to 0 [-Wundef]
118 | #if CONFIG_MEMCG
| ^~~~~~~~~~~~
mm/shmem.c: In function 'shmem_add_to_page_cache':
>> mm/shmem.c:721:46: error: invalid use of undefined type 'struct mem_cgroup'
721 | css_put(&remote_memcg->css);
| ^~
mm/shmem.c: In function 'shmem_getpage_gfp':
mm/shmem.c:1863:38: error: invalid use of undefined type 'struct mem_cgroup'
1863 | css_put(&remote_memcg->css);
| ^~
mm/shmem.c: In function 'shmem_parse_one':
mm/shmem.c:3410:28: warning: unused variable 'memcg' [-Wunused-variable]
3410 | struct mem_cgroup *memcg;
| ^~~~~
mm/shmem.c: In function 'shmem_reconfigure':
mm/shmem.c:3616:5: warning: "CONFIG_MEMCG" is not defined, evaluates to 0 [-Wundef]
3616 | #if CONFIG_MEMCG
| ^~~~~~~~~~~~
mm/shmem.c: In function 'shmem_fill_super':
mm/shmem.c:3772:5: warning: "CONFIG_MEMCG" is not defined, evaluates to 0 [-Wundef]
3772 | #if CONFIG_MEMCG
| ^~~~~~~~~~~~
vim +721 mm/shmem.c
691
692 /*
693 * Like add_to_page_cache_locked, but error if expected item has gone.
694 */
695 static int shmem_add_to_page_cache(struct page *page,
696 struct address_space *mapping,
697 pgoff_t index, void *expected, gfp_t gfp,
698 struct mm_struct *charge_mm)
699 {
700 XA_STATE_ORDER(xas, &mapping->i_pages, index, compound_order(page));
701 unsigned long i = 0;
702 unsigned long nr = compound_nr(page);
703 int error;
704 struct mem_cgroup *remote_memcg;
705
706 VM_BUG_ON_PAGE(PageTail(page), page);
707 VM_BUG_ON_PAGE(index != round_down(index, nr), page);
708 VM_BUG_ON_PAGE(!PageLocked(page), page);
709 VM_BUG_ON_PAGE(!PageSwapBacked(page), page);
710 VM_BUG_ON(expected && PageTransHuge(page));
711
712 page_ref_add(page, nr);
713 page->mapping = mapping;
714 page->index = index;
715
716 if (!PageSwapCache(page)) {
717 remote_memcg = mem_cgroup_mapping_get_charge_target(mapping);
718 if (remote_memcg) {
719 error = mem_cgroup_charge_memcg(page_folio(page),
720 remote_memcg, gfp);
> 721 css_put(&remote_memcg->css);
722 } else
723 error = mem_cgroup_charge(page_folio(page), charge_mm,
724 gfp);
725 if (error) {
726 if (PageTransHuge(page)) {
727 count_vm_event(THP_FILE_FALLBACK);
728 count_vm_event(THP_FILE_FALLBACK_CHARGE);
729 }
730 goto error;
731 }
732 }
733 cgroup_throttle_swaprate(page, gfp);
734
735 do {
736 void *entry;
737 xas_lock_irq(&xas);
738 entry = xas_find_conflict(&xas);
739 if (entry != expected)
740 xas_set_err(&xas, -EEXIST);
741 xas_create_range(&xas);
742 if (xas_error(&xas))
743 goto unlock;
744 next:
745 xas_store(&xas, page);
746 if (++i < nr) {
747 xas_next(&xas);
748 goto next;
749 }
750 if (PageTransHuge(page)) {
751 count_vm_event(THP_FILE_ALLOC);
752 __mod_lruvec_page_state(page, NR_SHMEM_THPS, nr);
753 }
754 mapping->nrpages += nr;
755 __mod_lruvec_page_state(page, NR_FILE_PAGES, nr);
756 __mod_lruvec_page_state(page, NR_SHMEM, nr);
757 unlock:
758 xas_unlock_irq(&xas);
759 } while (xas_nomem(&xas, gfp));
760
761 if (xas_error(&xas)) {
762 error = xas_error(&xas);
763 goto error;
764 }
765
766 return 0;
767 error:
768 page->mapping = NULL;
769 page_ref_sub(page, nr);
770 return error;
771 }
772
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
10 months, 1 week
Re: [PATCH v2 2/4] mm/oom: handle remote ooms
by kernel test robot
Hi Mina,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on hnaz-mm/master]
url: https://github.com/0day-ci/linux/commits/Mina-Almasry/mm-shmem-support-de...
base: https://github.com/hnaz/linux-mm master
config: um-i386_defconfig (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
# https://github.com/0day-ci/linux/commit/452a4d110272eb39892e4be30526411c7...
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Mina-Almasry/mm-shmem-support-deterministic-charging-of-tmpfs/20211111-062122
git checkout 452a4d110272eb39892e4be30526411c7a5cb2e3
# save the attached .config to linux build tree
mkdir build_dir
make W=1 O=build_dir ARCH=um SUBARCH=i386 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
mm/oom_kill.c: In function 'out_of_memory':
>> mm/oom_kill.c:1116:15: error: 'struct task_struct' has no member named 'in_user_fault'
1116 | if (current->in_user_fault &&
| ^~
vim +1116 mm/oom_kill.c
1044
1045 /**
1046 * out_of_memory - kill the "best" process when we run out of memory
1047 * @oc: pointer to struct oom_control
1048 *
1049 * If we run out of memory, we have the choice between either
1050 * killing a random task (bad), letting the system crash (worse)
1051 * OR try to be smart about which process to kill. Note that we
1052 * don't have to be perfect here, we just have to be good.
1053 */
1054 bool out_of_memory(struct oom_control *oc)
1055 {
1056 unsigned long freed = 0;
1057
1058 if (oom_killer_disabled)
1059 return false;
1060
1061 if (!is_memcg_oom(oc)) {
1062 blocking_notifier_call_chain(&oom_notify_list, 0, &freed);
1063 if (freed > 0)
1064 /* Got some memory back in the last second. */
1065 return true;
1066 }
1067
1068 /*
1069 * If current has a pending SIGKILL or is exiting, then automatically
1070 * select it. The goal is to allow it to allocate so that it may
1071 * quickly exit and free its memory.
1072 */
1073 if (task_will_free_mem(current)) {
1074 mark_oom_victim(current);
1075 wake_oom_reaper(current);
1076 return true;
1077 }
1078
1079 /*
1080 * The OOM killer does not compensate for IO-less reclaim.
1081 * pagefault_out_of_memory lost its gfp context so we have to
1082 * make sure exclude 0 mask - all other users should have at least
1083 * ___GFP_DIRECT_RECLAIM to get here. But mem_cgroup_oom() has to
1084 * invoke the OOM killer even if it is a GFP_NOFS allocation.
1085 */
1086 if (oc->gfp_mask && !(oc->gfp_mask & __GFP_FS) && !is_memcg_oom(oc))
1087 return true;
1088
1089 /*
1090 * Check if there were limitations on the allocation (only relevant for
1091 * NUMA and memcg) that may require different handling.
1092 */
1093 oc->constraint = constrained_alloc(oc);
1094 if (oc->constraint != CONSTRAINT_MEMORY_POLICY)
1095 oc->nodemask = NULL;
1096 check_panic_on_oom(oc);
1097
1098 if (!is_memcg_oom(oc) && sysctl_oom_kill_allocating_task &&
1099 current->mm && !oom_unkillable_task(current) &&
1100 oom_cpuset_eligible(current, oc) &&
1101 current->signal->oom_score_adj != OOM_SCORE_ADJ_MIN) {
1102 get_task_struct(current);
1103 oc->chosen = current;
1104 oom_kill_process(oc, "Out of memory (oom_kill_allocating_task)");
1105 return true;
1106 }
1107
1108 select_bad_process(oc);
1109 /* Found nothing?!?! */
1110 if (!oc->chosen) {
1111 if (is_remote_oom(oc->memcg)) {
1112 /*
1113 * For remote ooms in userfaults, we have no choice but
1114 * to kill the allocating process.
1115 */
> 1116 if (current->in_user_fault &&
1117 !oom_unkillable_task(current)) {
1118 get_task_struct(current);
1119 oc->chosen = current;
1120 oom_kill_process(
1121 oc,
1122 "Out of memory (Killing remote allocating task)");
1123 return true;
1124 }
1125
1126 /*
1127 * For remote ooms in non-userfaults, simply return
1128 * ENOMEM to the caller.
1129 */
1130 return false;
1131 }
1132
1133 dump_header(oc, NULL);
1134 pr_warn("Out of memory and no killable processes...\n");
1135 /*
1136 * If we got here due to an actual allocation at the
1137 * system level, we cannot survive this and will enter
1138 * an endless loop in the allocator. Bail out now.
1139 */
1140 if (!is_sysrq_oom(oc) && !is_memcg_oom(oc))
1141 panic("System is deadlocked on memory\n");
1142 }
1143 if (oc->chosen && oc->chosen != (void *)-1UL)
1144 oom_kill_process(oc, !is_memcg_oom(oc) ? "Out of memory" :
1145 "Memory cgroup out of memory");
1146 return !!oc->chosen;
1147 }
1148
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
10 months, 1 week
Re: [PATCH v2 1/4] mm/shmem: support deterministic charging of tmpfs
by kernel test robot
Hi Mina,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on hnaz-mm/master]
url: https://github.com/0day-ci/linux/commits/Mina-Almasry/mm-shmem-support-de...
base: https://github.com/hnaz/linux-mm master
config: um-i386_defconfig (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
# https://github.com/0day-ci/linux/commit/aaf0e3e0832977b6eb257e1ed27747cf9...
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Mina-Almasry/mm-shmem-support-deterministic-charging-of-tmpfs/20211111-062122
git checkout aaf0e3e0832977b6eb257e1ed27747cf97c479d4
# save the attached .config to linux build tree
mkdir build_dir
make W=1 O=build_dir ARCH=um SUBARCH=i386 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
mm/shmem.c:118:5: warning: "CONFIG_MEMCG" is not defined, evaluates to 0 [-Wundef]
118 | #if CONFIG_MEMCG
| ^~~~~~~~~~~~
mm/shmem.c: In function 'shmem_add_to_page_cache':
>> mm/shmem.c:721:25: error: dereferencing pointer to incomplete type 'struct mem_cgroup'
721 | css_put(&remote_memcg->css);
| ^~
mm/shmem.c: In function 'shmem_parse_one':
mm/shmem.c:3410:21: warning: unused variable 'memcg' [-Wunused-variable]
3410 | struct mem_cgroup *memcg;
| ^~~~~
mm/shmem.c: In function 'shmem_reconfigure':
mm/shmem.c:3616:5: warning: "CONFIG_MEMCG" is not defined, evaluates to 0 [-Wundef]
3616 | #if CONFIG_MEMCG
| ^~~~~~~~~~~~
mm/shmem.c: In function 'shmem_fill_super':
mm/shmem.c:3772:5: warning: "CONFIG_MEMCG" is not defined, evaluates to 0 [-Wundef]
3772 | #if CONFIG_MEMCG
| ^~~~~~~~~~~~
--
fs/super.c: In function 'destroy_unused_super':
>> fs/super.c:184:33: error: 'struct super_block' has no member named 's_memcg_to_charge'
184 | mem_cgroup_set_charge_target(&s->s_memcg_to_charge, NULL);
| ^~
fs/super.c: In function '__put_super':
fs/super.c:297:34: error: 'struct super_block' has no member named 's_memcg_to_charge'
297 | mem_cgroup_set_charge_target(&s->s_memcg_to_charge, NULL);
| ^~
vim +721 mm/shmem.c
691
692 /*
693 * Like add_to_page_cache_locked, but error if expected item has gone.
694 */
695 static int shmem_add_to_page_cache(struct page *page,
696 struct address_space *mapping,
697 pgoff_t index, void *expected, gfp_t gfp,
698 struct mm_struct *charge_mm)
699 {
700 XA_STATE_ORDER(xas, &mapping->i_pages, index, compound_order(page));
701 unsigned long i = 0;
702 unsigned long nr = compound_nr(page);
703 int error;
704 struct mem_cgroup *remote_memcg;
705
706 VM_BUG_ON_PAGE(PageTail(page), page);
707 VM_BUG_ON_PAGE(index != round_down(index, nr), page);
708 VM_BUG_ON_PAGE(!PageLocked(page), page);
709 VM_BUG_ON_PAGE(!PageSwapBacked(page), page);
710 VM_BUG_ON(expected && PageTransHuge(page));
711
712 page_ref_add(page, nr);
713 page->mapping = mapping;
714 page->index = index;
715
716 if (!PageSwapCache(page)) {
717 remote_memcg = mem_cgroup_mapping_get_charge_target(mapping);
718 if (remote_memcg) {
719 error = mem_cgroup_charge_memcg(page_folio(page),
720 remote_memcg, gfp);
> 721 css_put(&remote_memcg->css);
722 } else
723 error = mem_cgroup_charge(page_folio(page), charge_mm,
724 gfp);
725 if (error) {
726 if (PageTransHuge(page)) {
727 count_vm_event(THP_FILE_FALLBACK);
728 count_vm_event(THP_FILE_FALLBACK_CHARGE);
729 }
730 goto error;
731 }
732 }
733 cgroup_throttle_swaprate(page, gfp);
734
735 do {
736 void *entry;
737 xas_lock_irq(&xas);
738 entry = xas_find_conflict(&xas);
739 if (entry != expected)
740 xas_set_err(&xas, -EEXIST);
741 xas_create_range(&xas);
742 if (xas_error(&xas))
743 goto unlock;
744 next:
745 xas_store(&xas, page);
746 if (++i < nr) {
747 xas_next(&xas);
748 goto next;
749 }
750 if (PageTransHuge(page)) {
751 count_vm_event(THP_FILE_ALLOC);
752 __mod_lruvec_page_state(page, NR_SHMEM_THPS, nr);
753 }
754 mapping->nrpages += nr;
755 __mod_lruvec_page_state(page, NR_FILE_PAGES, nr);
756 __mod_lruvec_page_state(page, NR_SHMEM, nr);
757 unlock:
758 xas_unlock_irq(&xas);
759 } while (xas_nomem(&xas, gfp));
760
761 if (xas_error(&xas)) {
762 error = xas_error(&xas);
763 goto error;
764 }
765
766 return 0;
767 error:
768 page->mapping = NULL;
769 page_ref_sub(page, nr);
770 return error;
771 }
772
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
10 months, 1 week