Building the Linux kernel with Clang and LLVM
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Taehee Yoo <ap420073@gmail.com>
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
	0day robot <lkp@intel.com>
Subject: net/knod/knod_core.c:1046:8: warning: variable 'i' is used uninitialized whenever 'if' condition is true
Date: Mon, 20 Jul 2026 02:37:27 +0200	[thread overview]
Message-ID: <202607200206.9xzMv73K-lkp@intel.com> (raw)

tree:   https://github.com/intel-lab-lkp/linux/commits/Taehee-Yoo/net-knod-add-uapi-and-core-headers/20260720-021105
head:   d65f8a646efeabb7098a8c9a5b586ad3580fe13e
commit: 326530f9cd40b4a123881f1dcc8832b2691c58e4 net: knod: add offload device core and control plane
date:   6 hours ago
config: x86_64-kexec (https://download.01.org/0day-ci/archive/20260720/202607200206.9xzMv73K-lkp@intel.com/config)
compiler: clang version 22.1.8 (https://github.com/llvm/llvm-project ca7933e47d3a3451d81e72ac174dcb5aa28b59d1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260720/202607200206.9xzMv73K-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202607200206.9xzMv73K-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> net/knod/knod_core.c:1046:8: warning: variable 'i' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
    1046 |                         if (!base_pool) {
         |                             ^~~~~~~~~~
   net/knod/knod_core.c:1088:7: note: uninitialized use occurs here
    1088 |         for (i--; i >= 0; i--)
         |              ^
   net/knod/knod_core.c:1046:4: note: remove the 'if' if its condition is always false
    1046 |                         if (!base_pool) {
         |                         ^~~~~~~~~~~~~~~~~
    1047 |                                 err = -ENOMEM;
         |                                 ~~~~~~~~~~~~~~
    1048 |                                 pr_err("%s: alloc_mem failed\n", __func__);
         |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1049 |                                 goto free_spsc;
         |                                 ~~~~~~~~~~~~~~~
    1050 |                         }
         |                         ~
   net/knod/knod_core.c:958:22: note: initialize the variable 'i' to silence this warning
     958 |         int err = -EINVAL, i;
         |                             ^
         |                              = 0
   1 warning generated.


vim +1046 net/knod/knod_core.c

   954	
   955	int knod_dev_attach(struct knod_netdev *knetdev, struct knod_accel *accel)
   956	{
   957		struct knod_dev *knodev;
   958		int err = -EINVAL, i;
   959	
   960		if (knetdev->status == KNOD_STATUS_USED ||
   961		    accel->status == KNOD_STATUS_USED) {
   962			pr_err("knod: %s already attached\n",
   963			       netdev_name(knetdev->dev));
   964			return -EINVAL;
   965		}
   966	
   967		knodev = kzalloc(sizeof(struct knod_dev), GFP_KERNEL);
   968		if (!knodev)
   969			return -ENOMEM;
   970	
   971		if (!try_module_get(knetdev->owner)) {
   972			pr_err("knod: NIC driver for %s is unloading\n",
   973			       netdev_name(knetdev->dev));
   974			kfree(knodev);
   975			return -ENODEV;
   976		}
   977		if (!try_module_get(accel->owner)) {
   978			pr_err("knod: accelerator driver is unloading\n");
   979			module_put(knetdev->owner);
   980			kfree(knodev);
   981			return -ENODEV;
   982		}
   983	
   984		knetdev->accel = accel;
   985		knetdev->knodev = knodev;
   986		accel->knetdev = knetdev;
   987		accel->knodev = knodev;
   988		knodev->knetdev = knetdev;
   989		knodev->accel = accel;
   990		knodev->netdev = knetdev->dev;
   991		knodev->accel_ops = accel->accel_ops;
   992		knodev->nic_ops = knetdev->nic_ops;
   993		mutex_init(&knodev->lock);
   994	
   995		knodev->stats = netdev_alloc_pcpu_stats(struct knod_dev_stats);
   996		if (!knodev->stats) {
   997			err = -ENOMEM;
   998			pr_err("knod: failed to allocate stats for %s\n",
   999			       netdev_name(knetdev->dev));
  1000			goto free_xdev;
  1001		}
  1002	
  1003		knodev->wpriv = kmalloc_array(KNOD_SPSC_MAX,
  1004					    sizeof(struct knod_work_priv),
  1005					    GFP_KERNEL | __GFP_ZERO);
  1006		if (!knodev->wpriv) {
  1007			pr_err("knod: failed to allocate work priv for %s\n",
  1008			       netdev_name(knetdev->dev));
  1009			err = -ENOMEM;
  1010			goto free_percpu;
  1011		}
  1012	
  1013		netdev_lock(knodev->netdev);
  1014		err = knodev->nic_ops->attach(knodev);
  1015		if (err) {
  1016			err = -ENOMEM;
  1017			pr_err("knod: NIC attach failed on %s\n",
  1018			       netdev_name(knetdev->dev));
  1019			goto unlock;
  1020		}
  1021	
  1022		err = knodev->accel_ops->attach(knodev);
  1023		if (err) {
  1024			err = -ENOMEM;
  1025			pr_err("knod: accelerator attach failed on %s\n",
  1026			       netdev_name(knetdev->dev));
  1027			goto nic_detach;
  1028		}
  1029	
  1030		{
  1031			unsigned int nqueues = min(knodev->netdev->num_rx_queues,
  1032						  KNOD_SPSC_MAX);
  1033			unsigned int stride = ALIGN(sizeof(struct spsc_bd),
  1034						    SMP_CACHE_BYTES);
  1035			unsigned int cap = roundup_pow_of_two(KNOD_SPSC_ELEMS_MAX);
  1036			size_t pool_size = (size_t)stride * cap;
  1037	
  1038			if (knodev->accel_ops->alloc_mem) {
  1039				size_t total = pool_size * nqueues;
  1040				u64 base_gaddr;
  1041				void *base_pool;
  1042				void *pool_priv;
  1043	
  1044				base_pool = knodev->accel_ops->alloc_mem(knodev, total,
  1045						&base_gaddr, NULL, &pool_priv);
> 1046				if (!base_pool) {
  1047					err = -ENOMEM;
  1048					pr_err("%s: alloc_mem failed\n", __func__);
  1049					goto free_spsc;
  1050				}
  1051				memset(base_pool, 0, total);
  1052	
  1053				/* First queue owns the BO, others reference it */
  1054				knodev->wpriv[0].spsc_pool_priv = pool_priv;
  1055				for (i = 0; i < nqueues; i++) {
  1056					void *pool = base_pool +
  1057						     (unsigned long)i * pool_size;
  1058	
  1059					knodev->wpriv[i].spsc_pool_gaddr =
  1060						base_gaddr + (u64)i * pool_size;
  1061					err = __spsc_init(&knodev->wpriv[i].spsc_bds,
  1062							  sizeof(struct spsc_bd),
  1063							  KNOD_SPSC_ELEMS_MAX, pool,
  1064							  GFP_KERNEL);
  1065					if (err) {
  1066						pr_err("%s: spsc_init failed q%d\n",
  1067						       __func__, i);
  1068						goto free_spsc;
  1069					}
  1070				}
  1071			} else {
  1072				for (i = 0; i < nqueues; i++) {
  1073					err = spsc_init(&knodev->wpriv[i].spsc_bds,
  1074							sizeof(struct spsc_bd),
  1075							KNOD_SPSC_ELEMS_MAX,
  1076							GFP_KERNEL);
  1077					if (err) {
  1078						pr_err("%s: spsc_init failed q%d\n",
  1079						       __func__, i);
  1080						goto free_spsc;
  1081					}
  1082				}
  1083			}
  1084		}
  1085		goto spsc_done;
  1086	
  1087	free_spsc:
  1088		for (i--; i >= 0; i--)
  1089			spsc_destroy(&knodev->wpriv[i].spsc_bds);
  1090		if (knodev->wpriv[0].spsc_pool_priv)
  1091			knodev->accel_ops->free_mem(knodev,
  1092					knodev->wpriv[0].spsc_pool_priv);
  1093		knodev->accel_ops->detach(knodev);
  1094		goto nic_detach;
  1095	spsc_done:
  1096	
  1097		err = knod_pass_attach(knodev);
  1098		if (err) {
  1099			pr_err("%s: knod_pass_attach failed (%d)\n", __func__, err);
  1100			goto accel_detach;
  1101		}
  1102	
  1103		err = knod_dmabuf_attach(knodev);
  1104		if (err) {
  1105			err = -ENOMEM;
  1106			pr_err("knod: dmabuf attach failed on %s\n",
  1107			       netdev_name(knetdev->dev));
  1108			goto accel_detach;
  1109		}
  1110	
  1111		pr_info("knod: %s attached to accel %d\n",
  1112			netdev_name(knodev->netdev), accel->id);
  1113		list_add(&knodev->list, &knod_dev_list);
  1114		knetdev->status = KNOD_STATUS_USED;
  1115		accel->status = KNOD_STATUS_USED;
  1116	
  1117		if (knodev->accel_ops->xdp_ops && knodev->accel_ops->xdp_ops->init) {
  1118			err = knodev->accel_ops->xdp_ops->init(knodev);
  1119			if (err) {
  1120				pr_err("knod: XDP init failed on %s\n",
  1121				       netdev_name(knetdev->dev));
  1122				goto xdp_err;
  1123			}
  1124		}
  1125	
  1126		/*
  1127		 * Feature offloads (BPF, IPsec) allocate their GPU resources and
  1128		 * advertise their netdev capabilities only when the feature is
  1129		 * selected via knod_accel_feature_set(), not at attach.
  1130		 */
  1131		netdev_unlock(knodev->netdev);
  1132	
  1133		if (knodev->accel_ops->mp_map) {
  1134			err = knodev->accel_ops->mp_map(knodev);
  1135			if (err) {
  1136				pr_err("knod: mp_map failed (%d)\n", err);
  1137				goto dmabuf_detach;
  1138			}
  1139		}
  1140	
  1141		return err;
  1142	
  1143	dmabuf_detach:
  1144		netdev_lock(knodev->netdev);
  1145	xdp_err:
  1146		list_del(&knodev->list);
  1147		knetdev->status = KNOD_STATUS_FREE;
  1148		accel->status = KNOD_STATUS_FREE;
  1149		knod_dmabuf_detach(knodev);
  1150	accel_detach:
  1151		knod_pass_detach(knodev);
  1152		for (i = 0; i < KNOD_SPSC_MAX; i++)
  1153			spsc_destroy(&knodev->wpriv[i].spsc_bds);
  1154		if (knodev->wpriv[0].spsc_pool_priv)
  1155			knodev->accel_ops->free_mem(knodev,
  1156					knodev->wpriv[0].spsc_pool_priv);
  1157		knodev->accel_ops->detach(knodev);
  1158	nic_detach:
  1159		knodev->nic_ops->detach(knodev);
  1160	unlock:
  1161		netdev_unlock(knodev->netdev);
  1162		kfree(knodev->wpriv);
  1163	free_percpu:
  1164		free_percpu(knodev->stats);
  1165	free_xdev:
  1166		/* Drop the accel<->knetdev<->knodev links set above before freeing
  1167		 * knodev, or a reader (e.g. knod_default_worker via accel->knodev)
  1168		 * dereferences a dangling pointer after a failed attach.
  1169		 */
  1170		accel->knodev = NULL;
  1171		accel->knetdev = NULL;
  1172		knetdev->knodev = NULL;
  1173		knetdev->accel = NULL;
  1174		module_put(accel->owner);
  1175		module_put(knetdev->owner);
  1176		kfree(knodev);
  1177		return err;
  1178	}
  1179	

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

                 reply	other threads:[~2026-07-20  0:37 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202607200206.9xzMv73K-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=ap420073@gmail.com \
    --cc=llvm@lists.linux.dev \
    --cc=oe-kbuild-all@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox