All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: [jpirko-mlxsw:petrm_leftovers 31/33] net/sched/act_dpxfer.c:15:9: error: 'TC_ACT_OK' undeclared
Date: Fri, 05 Nov 2021 09:07:52 +0800	[thread overview]
Message-ID: <202111050941.sCyk7JHD-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 19822 bytes --]

tree:   https://github.com/jpirko/linux_mlxsw petrm_leftovers
head:   99db5530c934193451b2a6d90792f37ac803ea93
commit: 82da66831b70737dfca05d0da5318181965b56c0 [31/33] dpxfer xxx
config: i386-randconfig-s032-20211104 (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/jpirko/linux_mlxsw/commit/82da66831b70737dfca05d0da5318181965b56c0
        git remote add jpirko-mlxsw https://github.com/jpirko/linux_mlxsw
        git fetch --no-tags jpirko-mlxsw petrm_leftovers
        git checkout 82da66831b70737dfca05d0da5318181965b56c0
        # 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

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   net/sched/act_dpxfer.c:13:13: warning: 'struct tcf_result' declared inside parameter list will not be visible outside of this definition or declaration
      13 |      struct tcf_result *res)
         |             ^~~~~~~~~~
   net/sched/act_dpxfer.c:12:61: warning: 'struct tc_action' declared inside parameter list will not be visible outside of this definition or declaration
      12 | static int tcf_dpxfer_act(struct sk_buff *skb, const struct tc_action *a,
         |                                                             ^~~~~~~~~
   net/sched/act_dpxfer.c:12:34: warning: 'struct sk_buff' declared inside parameter list will not be visible outside of this definition or declaration
      12 | static int tcf_dpxfer_act(struct sk_buff *skb, const struct tc_action *a,
         |                                  ^~~~~~~
   net/sched/act_dpxfer.c: In function 'tcf_dpxfer_act':
>> net/sched/act_dpxfer.c:15:9: error: 'TC_ACT_OK' undeclared (first use in this function)
      15 |  return TC_ACT_OK;
         |         ^~~~~~~~~
   net/sched/act_dpxfer.c:15:9: note: each undeclared identifier is reported only once for each function it appears in
   net/sched/act_dpxfer.c: At top level:
   net/sched/act_dpxfer.c:18:56: warning: 'struct tc_action' declared inside parameter list will not be visible outside of this definition or declaration
      18 | static int tcf_dpxfer_dump(struct sk_buff *skb, struct tc_action *a, int bind,
         |                                                        ^~~~~~~~~
   net/sched/act_dpxfer.c:18:35: warning: 'struct sk_buff' declared inside parameter list will not be visible outside of this definition or declaration
      18 | static int tcf_dpxfer_dump(struct sk_buff *skb, struct tc_action *a, int bind,
         |                                   ^~~~~~~
   net/sched/act_dpxfer.c: In function 'tcf_dpxfer_dump':
>> net/sched/act_dpxfer.c:21:21: error: implicit declaration of function 'skb_tail_pointer' [-Werror=implicit-function-declaration]
      21 |  unsigned char *b = skb_tail_pointer(skb);
         |                     ^~~~~~~~~~~~~~~~
   net/sched/act_dpxfer.c:21:21: warning: initialization of 'unsigned char *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
>> net/sched/act_dpxfer.c:22:25: error: implicit declaration of function 'to_dpxfer' [-Werror=implicit-function-declaration]
      22 |  struct tcf_dpxfer *s = to_dpxfer(a);
         |                         ^~~~~~~~~
   net/sched/act_dpxfer.c:22:25: warning: initialization of 'struct tcf_dpxfer *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
>> net/sched/act_dpxfer.c:23:9: error: variable 'opt' has initializer but incomplete type
      23 |  struct tc_dpxfer opt = {
         |         ^~~~~~~~~
>> net/sched/act_dpxfer.c:24:4: error: 'struct tc_dpxfer' has no member named 'index'
      24 |   .index      = s->tcf_index,
         |    ^~~~~
>> net/sched/act_dpxfer.c:24:18: error: dereferencing pointer to incomplete type 'struct tcf_dpxfer'
      24 |   .index      = s->tcf_index,
         |                  ^~
   net/sched/act_dpxfer.c:24:17: warning: excess elements in struct initializer
      24 |   .index      = s->tcf_index,
         |                 ^
   net/sched/act_dpxfer.c:24:17: note: (near initialization for 'opt')
>> net/sched/act_dpxfer.c:25:4: error: 'struct tc_dpxfer' has no member named 'refcnt'
      25 |   .refcnt     = refcount_read(&s->tcf_refcnt) - ref,
         |    ^~~~~~
>> net/sched/act_dpxfer.c:25:17: error: implicit declaration of function 'refcount_read' [-Werror=implicit-function-declaration]
      25 |   .refcnt     = refcount_read(&s->tcf_refcnt) - ref,
         |                 ^~~~~~~~~~~~~
   net/sched/act_dpxfer.c:25:17: warning: excess elements in struct initializer
   net/sched/act_dpxfer.c:25:17: note: (near initialization for 'opt')
>> net/sched/act_dpxfer.c:26:4: error: 'struct tc_dpxfer' has no member named 'bindcnt'
      26 |   .bindcnt    = atomic_read(&s->tcf_bindcnt) - bind,
         |    ^~~~~~~
>> net/sched/act_dpxfer.c:26:17: error: implicit declaration of function 'atomic_read' [-Werror=implicit-function-declaration]
      26 |   .bindcnt    = atomic_read(&s->tcf_bindcnt) - bind,
         |                 ^~~~~~~~~~~
   net/sched/act_dpxfer.c:26:17: warning: excess elements in struct initializer
   net/sched/act_dpxfer.c:26:17: note: (near initialization for 'opt')
>> net/sched/act_dpxfer.c:23:19: error: storage size of 'opt' isn't known
      23 |  struct tc_dpxfer opt = {
         |                   ^~~
>> net/sched/act_dpxfer.c:28:15: error: storage size of 't' isn't known
      28 |  struct tcf_t t;
         |               ^
>> net/sched/act_dpxfer.c:30:2: error: implicit declaration of function 'spin_lock_bh' [-Werror=implicit-function-declaration]
      30 |  spin_lock_bh(&s->tcf_lock);
         |  ^~~~~~~~~~~~
>> net/sched/act_dpxfer.c:33:6: error: implicit declaration of function 'nla_put' [-Werror=implicit-function-declaration]
      33 |  if (nla_put(skb, TCA_DPXFER_PARMS, sizeof(opt), &opt))
         |      ^~~~~~~
>> net/sched/act_dpxfer.c:33:19: error: 'TCA_DPXFER_PARMS' undeclared (first use in this function)
      33 |  if (nla_put(skb, TCA_DPXFER_PARMS, sizeof(opt), &opt))
         |                   ^~~~~~~~~~~~~~~~
>> net/sched/act_dpxfer.c:36:2: error: implicit declaration of function 'tcf_tm_dump' [-Werror=implicit-function-declaration]
      36 |  tcf_tm_dump(&t, &s->tcf_tm);
         |  ^~~~~~~~~~~
>> net/sched/act_dpxfer.c:37:6: error: implicit declaration of function 'nla_put_64bit' [-Werror=implicit-function-declaration]
      37 |  if (nla_put_64bit(skb, TCA_DPXFER_TM, sizeof(t), &t, TCA_DPXFER_PAD))
         |      ^~~~~~~~~~~~~
>> net/sched/act_dpxfer.c:37:25: error: 'TCA_DPXFER_TM' undeclared (first use in this function)
      37 |  if (nla_put_64bit(skb, TCA_DPXFER_TM, sizeof(t), &t, TCA_DPXFER_PAD))
         |                         ^~~~~~~~~~~~~
>> net/sched/act_dpxfer.c:37:55: error: 'TCA_DPXFER_PAD' undeclared (first use in this function)
      37 |  if (nla_put_64bit(skb, TCA_DPXFER_TM, sizeof(t), &t, TCA_DPXFER_PAD))
         |                                                       ^~~~~~~~~~~~~~
>> net/sched/act_dpxfer.c:40:2: error: implicit declaration of function 'spin_unlock_bh' [-Werror=implicit-function-declaration]
      40 |  spin_unlock_bh(&s->tcf_lock);
         |  ^~~~~~~~~~~~~~
   net/sched/act_dpxfer.c:42:12: error: dereferencing pointer to incomplete type 'struct sk_buff'
      42 |  return skb->len;
         |            ^~
   net/sched/act_dpxfer.c:46:2: error: implicit declaration of function 'nlmsg_trim' [-Werror=implicit-function-declaration]
      46 |  nlmsg_trim(skb, b);
         |  ^~~~~~~~~~
   net/sched/act_dpxfer.c:28:15: warning: unused variable 't' [-Wunused-variable]
      28 |  struct tcf_t t;
         |               ^
   net/sched/act_dpxfer.c:23:19: warning: unused variable 'opt' [-Wunused-variable]
      23 |  struct tc_dpxfer opt = {
         |                   ^~~
   net/sched/act_dpxfer.c: At top level:
   net/sched/act_dpxfer.c:52:17: error: unknown type name 'bool'
      52 |       int bind, bool rtnl_held, struct tcf_proto *tp,
         |                 ^~~~
   net/sched/act_dpxfer.c:53:7: error: unknown type name 'u32'
      53 |       u32 flags, struct netlink_ext_ack *extack)
         |       ^~~
   net/sched/act_dpxfer.c:193:15: error: variable 'act_dpxfer_ops' has initializer but incomplete type
     193 | static struct tc_action_ops act_dpxfer_ops = {
         |               ^~~~~~~~~~~~~
   net/sched/act_dpxfer.c:194:3: error: 'struct tc_action_ops' has no member named 'kind'
     194 |  .kind  = "dpxfer",
         |   ^~~~
   net/sched/act_dpxfer.c:194:11: warning: excess elements in struct initializer
     194 |  .kind  = "dpxfer",
         |           ^~~~~~~~
   net/sched/act_dpxfer.c:194:11: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:195:3: error: 'struct tc_action_ops' has no member named 'id'
     195 |  .id  = TCA_ID_DPXFER,
         |   ^~
   net/sched/act_dpxfer.c:195:9: error: 'TCA_ID_DPXFER' undeclared here (not in a function)
     195 |  .id  = TCA_ID_DPXFER,
         |         ^~~~~~~~~~~~~
   net/sched/act_dpxfer.c:195:9: warning: excess elements in struct initializer
   net/sched/act_dpxfer.c:195:9: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:196:3: error: 'struct tc_action_ops' has no member named 'owner'
     196 |  .owner  = THIS_MODULE,
         |   ^~~~~
   net/sched/act_dpxfer.c:196:12: error: 'THIS_MODULE' undeclared here (not in a function); did you mean 'IS_MODULE'?
     196 |  .owner  = THIS_MODULE,
         |            ^~~~~~~~~~~
         |            IS_MODULE
   net/sched/act_dpxfer.c:196:12: warning: excess elements in struct initializer
   net/sched/act_dpxfer.c:196:12: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:197:3: error: 'struct tc_action_ops' has no member named 'act'
     197 |  .act  = tcf_dpxfer_act,
         |   ^~~
   net/sched/act_dpxfer.c:197:10: warning: excess elements in struct initializer
     197 |  .act  = tcf_dpxfer_act,
         |          ^~~~~~~~~~~~~~
   net/sched/act_dpxfer.c:197:10: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:198:3: error: 'struct tc_action_ops' has no member named 'stats_update'
     198 |  .stats_update = tcf_stats_update,
         |   ^~~~~~~~~~~~
   net/sched/act_dpxfer.c:198:18: error: 'tcf_stats_update' undeclared here (not in a function)
     198 |  .stats_update = tcf_stats_update,
         |                  ^~~~~~~~~~~~~~~~
   net/sched/act_dpxfer.c:198:18: warning: excess elements in struct initializer
   net/sched/act_dpxfer.c:198:18: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:199:3: error: 'struct tc_action_ops' has no member named 'dump'
     199 |  .dump  = tcf_dpxfer_dump,
         |   ^~~~
   net/sched/act_dpxfer.c:199:11: warning: excess elements in struct initializer
     199 |  .dump  = tcf_dpxfer_dump,
         |           ^~~~~~~~~~~~~~~
   net/sched/act_dpxfer.c:199:11: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:200:3: error: 'struct tc_action_ops' has no member named 'init'
     200 |  .init  = tcf_dpxfer_init,
         |   ^~~~
   net/sched/act_dpxfer.c:200:11: error: 'tcf_dpxfer_init' undeclared here (not in a function); did you mean 'tcf_dpxfer_act'?
     200 |  .init  = tcf_dpxfer_init,
         |           ^~~~~~~~~~~~~~~
         |           tcf_dpxfer_act
   net/sched/act_dpxfer.c:200:11: warning: excess elements in struct initializer
   net/sched/act_dpxfer.c:200:11: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:201:3: error: 'struct tc_action_ops' has no member named 'walk'
     201 |  .walk  = tcf_dpxfer_walker,
         |   ^~~~
   net/sched/act_dpxfer.c:201:11: error: 'tcf_dpxfer_walker' undeclared here (not in a function); did you mean 'tcf_dpxfer_act'?
     201 |  .walk  = tcf_dpxfer_walker,
         |           ^~~~~~~~~~~~~~~~~
         |           tcf_dpxfer_act
   net/sched/act_dpxfer.c:201:11: warning: excess elements in struct initializer
   net/sched/act_dpxfer.c:201:11: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:202:3: error: 'struct tc_action_ops' has no member named 'lookup'
     202 |  .lookup  = tcf_dpxfer_search,
         |   ^~~~~~
   net/sched/act_dpxfer.c:202:13: error: 'tcf_dpxfer_search' undeclared here (not in a function); did you mean 'tcf_dpxfer_act'?
     202 |  .lookup  = tcf_dpxfer_search,
         |             ^~~~~~~~~~~~~~~~~
         |             tcf_dpxfer_act
   net/sched/act_dpxfer.c:202:13: warning: excess elements in struct initializer
   net/sched/act_dpxfer.c:202:13: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:203:3: error: 'struct tc_action_ops' has no member named 'get_fill_size'
     203 |  .get_fill_size = tcf_dpxfer_get_fill_size,
         |   ^~~~~~~~~~~~~


vim +/TC_ACT_OK +15 net/sched/act_dpxfer.c

    11	
    12	static int tcf_dpxfer_act(struct sk_buff *skb, const struct tc_action *a,
    13				  struct tcf_result *res)
    14	{
  > 15		return TC_ACT_OK;
    16	}
    17	
    18	static int tcf_dpxfer_dump(struct sk_buff *skb, struct tc_action *a, int bind,
    19				   int ref)
    20	{
  > 21		unsigned char *b = skb_tail_pointer(skb);
  > 22		struct tcf_dpxfer *s = to_dpxfer(a);
  > 23		struct tc_dpxfer opt = {
  > 24			.index      = s->tcf_index,
  > 25			.refcnt     = refcount_read(&s->tcf_refcnt) - ref,
  > 26			.bindcnt    = atomic_read(&s->tcf_bindcnt) - bind,
    27		};
  > 28		struct tcf_t t;
    29	
  > 30		spin_lock_bh(&s->tcf_lock);
    31	
    32		opt.action = s->tcf_action;
  > 33		if (nla_put(skb, TCA_DPXFER_PARMS, sizeof(opt), &opt))
    34			goto nla_put_failure;
    35	
  > 36		tcf_tm_dump(&t, &s->tcf_tm);
  > 37		if (nla_put_64bit(skb, TCA_DPXFER_TM, sizeof(t), &t, TCA_DPXFER_PAD))
    38			goto nla_put_failure;
    39	
  > 40		spin_unlock_bh(&s->tcf_lock);
    41	
  > 42		return skb->len;
    43	
    44	nla_put_failure:
    45		spin_unlock_bh(&s->tcf_lock);
  > 46		nlmsg_trim(skb, b);
    47		return -1;
    48	}
    49	
    50	static int tcf_dpxfer_init(struct net *net, struct nlattr *nla,
    51				   struct nlattr *est, struct tc_action **a, int ovr,
  > 52				   int bind, bool rtnl_held, struct tcf_proto *tp,
  > 53				   u32 flags, struct netlink_ext_ack *extack)
    54	{
    55		struct tc_action_net *tn = net_generic(net, gate_net_id);
    56		enum tk_offsets tk_offset = TK_OFFS_TAI;
    57		struct nlattr *tb[TCA_GATE_MAX + 1];
    58		struct tcf_chain *goto_ch = NULL;
    59		u64 cycletime = 0, basetime = 0;
    60		struct tcf_gate_params *p;
    61		s32 clockid = CLOCK_TAI;
    62		struct tcf_gate *gact;
    63		struct tc_gate *parm;
    64		int ret = 0, err;
    65		u32 gflags = 0;
    66		s32 prio = -1;
    67		ktime_t start;
    68		bool exists;
    69		u32 index;
    70	
    71		if (!nla)
    72			return -EINVAL;
    73	
    74		err = nla_parse_nested(tb, TCA_DPXFER_MAX, nla, dpxfer_policy, extack);
    75		if (err < 0)
    76			return err;
    77	
    78		if (!tb[TCA_DPXFER_PARMS])
    79			return -EINVAL;
    80	
    81		parm = nla_data(tb[TCA_GATE_PARMS]);
    82		index = parm->index;
    83	
    84		err = tcf_idr_check_alloc(tn, &index, a, bind);
    85		if (err < 0)
    86			return err;
    87	
    88		exists = err;
    89		if (exists && bind)
    90			return 0;
    91	
    92		if (!exists) {
    93			ret = tcf_idr_create(tn, index, est, a,
    94					     &act_gate_ops, bind, false, 0);
    95			if (ret) {
    96				tcf_idr_cleanup(tn, index);
    97				return ret;
    98			}
    99	
   100			ret = ACT_P_CREATED;
   101		} else if (!ovr) {
   102			tcf_idr_release(*a, bind);
   103			return -EEXIST;
   104		}
   105	
   106		if (tb[TCA_GATE_PRIORITY])
   107			prio = nla_get_s32(tb[TCA_GATE_PRIORITY]);
   108	
   109		if (tb[TCA_GATE_BASE_TIME])
   110			basetime = nla_get_u64(tb[TCA_GATE_BASE_TIME]);
   111	
   112		if (tb[TCA_GATE_FLAGS])
   113			gflags = nla_get_u32(tb[TCA_GATE_FLAGS]);
   114	
   115		gact = to_gate(*a);
   116		if (ret == ACT_P_CREATED)
   117			INIT_LIST_HEAD(&gact->param.entries);
   118	
   119		err = tcf_action_check_ctrlact(parm->action, tp, &goto_ch, extack);
   120		if (err < 0)
   121			goto release_idr;
   122	
   123		spin_lock_bh(&gact->tcf_lock);
   124		p = &gact->param;
   125	
   126		if (tb[TCA_GATE_CYCLE_TIME])
   127			cycletime = nla_get_u64(tb[TCA_GATE_CYCLE_TIME]);
   128	
   129		if (tb[TCA_GATE_ENTRY_LIST]) {
   130			err = parse_gate_list(tb[TCA_GATE_ENTRY_LIST], p, extack);
   131			if (err < 0)
   132				goto chain_put;
   133		}
   134	
   135		if (!cycletime) {
   136			struct tcfg_gate_entry *entry;
   137			ktime_t cycle = 0;
   138	
   139			list_for_each_entry(entry, &p->entries, list)
   140				cycle = ktime_add_ns(cycle, entry->interval);
   141			cycletime = cycle;
   142			if (!cycletime) {
   143				err = -EINVAL;
   144				goto chain_put;
   145			}
   146		}
   147		p->tcfg_cycletime = cycletime;
   148	
   149		if (tb[TCA_GATE_CYCLE_TIME_EXT])
   150			p->tcfg_cycletime_ext =
   151				nla_get_u64(tb[TCA_GATE_CYCLE_TIME_EXT]);
   152	
   153		gate_setup_timer(gact, basetime, tk_offset, clockid,
   154				 ret == ACT_P_CREATED);
   155		p->tcfg_priority = prio;
   156		p->tcfg_flags = gflags;
   157		gate_get_start_time(gact, &start);
   158	
   159		gact->current_close_time = start;
   160		gact->current_gate_status = GATE_ACT_GATE_OPEN | GATE_ACT_PENDING;
   161	
   162		gact->next_entry = list_first_entry(&p->entries,
   163						    struct tcfg_gate_entry, list);
   164	
   165		goto_ch = tcf_action_set_ctrlact(*a, parm->action, goto_ch);
   166	
   167		gate_start_timer(gact, start);
   168	
   169		spin_unlock_bh(&gact->tcf_lock);
   170	
   171		if (goto_ch)
   172			tcf_chain_put_by_act(goto_ch);
   173	
   174		return ret;
   175	
   176	chain_put:
   177		spin_unlock_bh(&gact->tcf_lock);
   178	
   179		if (goto_ch)
   180			tcf_chain_put_by_act(goto_ch);
   181	release_idr:
   182		/* action is not inserted in any list: it's safe to init hitimer
   183		 * without taking tcf_lock.
   184		 */
   185		if (ret == ACT_P_CREATED)
   186			gate_setup_timer(gact, gact->param.tcfg_basetime,
   187					 gact->tk_offset, gact->param.tcfg_clockid,
   188					 true);
   189		tcf_idr_release(*a, bind);
   190		return err;
   191	}
   192	
 > 193	static struct tc_action_ops act_dpxfer_ops = {
 > 194		.kind		=	"dpxfer",
 > 195		.id		=	TCA_ID_DPXFER,
 > 196		.owner		=	THIS_MODULE,
 > 197		.act		=	tcf_dpxfer_act,
 > 198		.stats_update	=	tcf_stats_update,
 > 199		.dump		=	tcf_dpxfer_dump,
 > 200		.init		=	tcf_dpxfer_init,
 > 201		.walk		=	tcf_dpxfer_walker,
 > 202		.lookup		=	tcf_dpxfer_search,
 > 203		.get_fill_size	=	tcf_dpxfer_get_fill_size,
 > 204		.size		=	sizeof(struct tcf_dpxfer),
 > 205		.get_dev	=	tcf_dpxfer_get_dev,
   206	};
   207	
 > 208	static __net_init int dpxfer_init_net(struct net *net)
   209	{
 > 210		struct tc_action_net *tn = net_generic(net, dpxfer_net_id);
   211	
 > 212		return tc_action_net_init(net, tn, &act_dpxfer_ops);
   213	}
   214	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 37876 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Petr Machata <petrm@nvidia.com>
Cc: kbuild-all@lists.01.org, linux-kernel@vger.kernel.org
Subject: [jpirko-mlxsw:petrm_leftovers 31/33] net/sched/act_dpxfer.c:15:9: error: 'TC_ACT_OK' undeclared
Date: Fri, 5 Nov 2021 09:07:52 +0800	[thread overview]
Message-ID: <202111050941.sCyk7JHD-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 19401 bytes --]

tree:   https://github.com/jpirko/linux_mlxsw petrm_leftovers
head:   99db5530c934193451b2a6d90792f37ac803ea93
commit: 82da66831b70737dfca05d0da5318181965b56c0 [31/33] dpxfer xxx
config: i386-randconfig-s032-20211104 (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/jpirko/linux_mlxsw/commit/82da66831b70737dfca05d0da5318181965b56c0
        git remote add jpirko-mlxsw https://github.com/jpirko/linux_mlxsw
        git fetch --no-tags jpirko-mlxsw petrm_leftovers
        git checkout 82da66831b70737dfca05d0da5318181965b56c0
        # 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

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   net/sched/act_dpxfer.c:13:13: warning: 'struct tcf_result' declared inside parameter list will not be visible outside of this definition or declaration
      13 |      struct tcf_result *res)
         |             ^~~~~~~~~~
   net/sched/act_dpxfer.c:12:61: warning: 'struct tc_action' declared inside parameter list will not be visible outside of this definition or declaration
      12 | static int tcf_dpxfer_act(struct sk_buff *skb, const struct tc_action *a,
         |                                                             ^~~~~~~~~
   net/sched/act_dpxfer.c:12:34: warning: 'struct sk_buff' declared inside parameter list will not be visible outside of this definition or declaration
      12 | static int tcf_dpxfer_act(struct sk_buff *skb, const struct tc_action *a,
         |                                  ^~~~~~~
   net/sched/act_dpxfer.c: In function 'tcf_dpxfer_act':
>> net/sched/act_dpxfer.c:15:9: error: 'TC_ACT_OK' undeclared (first use in this function)
      15 |  return TC_ACT_OK;
         |         ^~~~~~~~~
   net/sched/act_dpxfer.c:15:9: note: each undeclared identifier is reported only once for each function it appears in
   net/sched/act_dpxfer.c: At top level:
   net/sched/act_dpxfer.c:18:56: warning: 'struct tc_action' declared inside parameter list will not be visible outside of this definition or declaration
      18 | static int tcf_dpxfer_dump(struct sk_buff *skb, struct tc_action *a, int bind,
         |                                                        ^~~~~~~~~
   net/sched/act_dpxfer.c:18:35: warning: 'struct sk_buff' declared inside parameter list will not be visible outside of this definition or declaration
      18 | static int tcf_dpxfer_dump(struct sk_buff *skb, struct tc_action *a, int bind,
         |                                   ^~~~~~~
   net/sched/act_dpxfer.c: In function 'tcf_dpxfer_dump':
>> net/sched/act_dpxfer.c:21:21: error: implicit declaration of function 'skb_tail_pointer' [-Werror=implicit-function-declaration]
      21 |  unsigned char *b = skb_tail_pointer(skb);
         |                     ^~~~~~~~~~~~~~~~
   net/sched/act_dpxfer.c:21:21: warning: initialization of 'unsigned char *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
>> net/sched/act_dpxfer.c:22:25: error: implicit declaration of function 'to_dpxfer' [-Werror=implicit-function-declaration]
      22 |  struct tcf_dpxfer *s = to_dpxfer(a);
         |                         ^~~~~~~~~
   net/sched/act_dpxfer.c:22:25: warning: initialization of 'struct tcf_dpxfer *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
>> net/sched/act_dpxfer.c:23:9: error: variable 'opt' has initializer but incomplete type
      23 |  struct tc_dpxfer opt = {
         |         ^~~~~~~~~
>> net/sched/act_dpxfer.c:24:4: error: 'struct tc_dpxfer' has no member named 'index'
      24 |   .index      = s->tcf_index,
         |    ^~~~~
>> net/sched/act_dpxfer.c:24:18: error: dereferencing pointer to incomplete type 'struct tcf_dpxfer'
      24 |   .index      = s->tcf_index,
         |                  ^~
   net/sched/act_dpxfer.c:24:17: warning: excess elements in struct initializer
      24 |   .index      = s->tcf_index,
         |                 ^
   net/sched/act_dpxfer.c:24:17: note: (near initialization for 'opt')
>> net/sched/act_dpxfer.c:25:4: error: 'struct tc_dpxfer' has no member named 'refcnt'
      25 |   .refcnt     = refcount_read(&s->tcf_refcnt) - ref,
         |    ^~~~~~
>> net/sched/act_dpxfer.c:25:17: error: implicit declaration of function 'refcount_read' [-Werror=implicit-function-declaration]
      25 |   .refcnt     = refcount_read(&s->tcf_refcnt) - ref,
         |                 ^~~~~~~~~~~~~
   net/sched/act_dpxfer.c:25:17: warning: excess elements in struct initializer
   net/sched/act_dpxfer.c:25:17: note: (near initialization for 'opt')
>> net/sched/act_dpxfer.c:26:4: error: 'struct tc_dpxfer' has no member named 'bindcnt'
      26 |   .bindcnt    = atomic_read(&s->tcf_bindcnt) - bind,
         |    ^~~~~~~
>> net/sched/act_dpxfer.c:26:17: error: implicit declaration of function 'atomic_read' [-Werror=implicit-function-declaration]
      26 |   .bindcnt    = atomic_read(&s->tcf_bindcnt) - bind,
         |                 ^~~~~~~~~~~
   net/sched/act_dpxfer.c:26:17: warning: excess elements in struct initializer
   net/sched/act_dpxfer.c:26:17: note: (near initialization for 'opt')
>> net/sched/act_dpxfer.c:23:19: error: storage size of 'opt' isn't known
      23 |  struct tc_dpxfer opt = {
         |                   ^~~
>> net/sched/act_dpxfer.c:28:15: error: storage size of 't' isn't known
      28 |  struct tcf_t t;
         |               ^
>> net/sched/act_dpxfer.c:30:2: error: implicit declaration of function 'spin_lock_bh' [-Werror=implicit-function-declaration]
      30 |  spin_lock_bh(&s->tcf_lock);
         |  ^~~~~~~~~~~~
>> net/sched/act_dpxfer.c:33:6: error: implicit declaration of function 'nla_put' [-Werror=implicit-function-declaration]
      33 |  if (nla_put(skb, TCA_DPXFER_PARMS, sizeof(opt), &opt))
         |      ^~~~~~~
>> net/sched/act_dpxfer.c:33:19: error: 'TCA_DPXFER_PARMS' undeclared (first use in this function)
      33 |  if (nla_put(skb, TCA_DPXFER_PARMS, sizeof(opt), &opt))
         |                   ^~~~~~~~~~~~~~~~
>> net/sched/act_dpxfer.c:36:2: error: implicit declaration of function 'tcf_tm_dump' [-Werror=implicit-function-declaration]
      36 |  tcf_tm_dump(&t, &s->tcf_tm);
         |  ^~~~~~~~~~~
>> net/sched/act_dpxfer.c:37:6: error: implicit declaration of function 'nla_put_64bit' [-Werror=implicit-function-declaration]
      37 |  if (nla_put_64bit(skb, TCA_DPXFER_TM, sizeof(t), &t, TCA_DPXFER_PAD))
         |      ^~~~~~~~~~~~~
>> net/sched/act_dpxfer.c:37:25: error: 'TCA_DPXFER_TM' undeclared (first use in this function)
      37 |  if (nla_put_64bit(skb, TCA_DPXFER_TM, sizeof(t), &t, TCA_DPXFER_PAD))
         |                         ^~~~~~~~~~~~~
>> net/sched/act_dpxfer.c:37:55: error: 'TCA_DPXFER_PAD' undeclared (first use in this function)
      37 |  if (nla_put_64bit(skb, TCA_DPXFER_TM, sizeof(t), &t, TCA_DPXFER_PAD))
         |                                                       ^~~~~~~~~~~~~~
>> net/sched/act_dpxfer.c:40:2: error: implicit declaration of function 'spin_unlock_bh' [-Werror=implicit-function-declaration]
      40 |  spin_unlock_bh(&s->tcf_lock);
         |  ^~~~~~~~~~~~~~
   net/sched/act_dpxfer.c:42:12: error: dereferencing pointer to incomplete type 'struct sk_buff'
      42 |  return skb->len;
         |            ^~
   net/sched/act_dpxfer.c:46:2: error: implicit declaration of function 'nlmsg_trim' [-Werror=implicit-function-declaration]
      46 |  nlmsg_trim(skb, b);
         |  ^~~~~~~~~~
   net/sched/act_dpxfer.c:28:15: warning: unused variable 't' [-Wunused-variable]
      28 |  struct tcf_t t;
         |               ^
   net/sched/act_dpxfer.c:23:19: warning: unused variable 'opt' [-Wunused-variable]
      23 |  struct tc_dpxfer opt = {
         |                   ^~~
   net/sched/act_dpxfer.c: At top level:
   net/sched/act_dpxfer.c:52:17: error: unknown type name 'bool'
      52 |       int bind, bool rtnl_held, struct tcf_proto *tp,
         |                 ^~~~
   net/sched/act_dpxfer.c:53:7: error: unknown type name 'u32'
      53 |       u32 flags, struct netlink_ext_ack *extack)
         |       ^~~
   net/sched/act_dpxfer.c:193:15: error: variable 'act_dpxfer_ops' has initializer but incomplete type
     193 | static struct tc_action_ops act_dpxfer_ops = {
         |               ^~~~~~~~~~~~~
   net/sched/act_dpxfer.c:194:3: error: 'struct tc_action_ops' has no member named 'kind'
     194 |  .kind  = "dpxfer",
         |   ^~~~
   net/sched/act_dpxfer.c:194:11: warning: excess elements in struct initializer
     194 |  .kind  = "dpxfer",
         |           ^~~~~~~~
   net/sched/act_dpxfer.c:194:11: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:195:3: error: 'struct tc_action_ops' has no member named 'id'
     195 |  .id  = TCA_ID_DPXFER,
         |   ^~
   net/sched/act_dpxfer.c:195:9: error: 'TCA_ID_DPXFER' undeclared here (not in a function)
     195 |  .id  = TCA_ID_DPXFER,
         |         ^~~~~~~~~~~~~
   net/sched/act_dpxfer.c:195:9: warning: excess elements in struct initializer
   net/sched/act_dpxfer.c:195:9: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:196:3: error: 'struct tc_action_ops' has no member named 'owner'
     196 |  .owner  = THIS_MODULE,
         |   ^~~~~
   net/sched/act_dpxfer.c:196:12: error: 'THIS_MODULE' undeclared here (not in a function); did you mean 'IS_MODULE'?
     196 |  .owner  = THIS_MODULE,
         |            ^~~~~~~~~~~
         |            IS_MODULE
   net/sched/act_dpxfer.c:196:12: warning: excess elements in struct initializer
   net/sched/act_dpxfer.c:196:12: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:197:3: error: 'struct tc_action_ops' has no member named 'act'
     197 |  .act  = tcf_dpxfer_act,
         |   ^~~
   net/sched/act_dpxfer.c:197:10: warning: excess elements in struct initializer
     197 |  .act  = tcf_dpxfer_act,
         |          ^~~~~~~~~~~~~~
   net/sched/act_dpxfer.c:197:10: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:198:3: error: 'struct tc_action_ops' has no member named 'stats_update'
     198 |  .stats_update = tcf_stats_update,
         |   ^~~~~~~~~~~~
   net/sched/act_dpxfer.c:198:18: error: 'tcf_stats_update' undeclared here (not in a function)
     198 |  .stats_update = tcf_stats_update,
         |                  ^~~~~~~~~~~~~~~~
   net/sched/act_dpxfer.c:198:18: warning: excess elements in struct initializer
   net/sched/act_dpxfer.c:198:18: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:199:3: error: 'struct tc_action_ops' has no member named 'dump'
     199 |  .dump  = tcf_dpxfer_dump,
         |   ^~~~
   net/sched/act_dpxfer.c:199:11: warning: excess elements in struct initializer
     199 |  .dump  = tcf_dpxfer_dump,
         |           ^~~~~~~~~~~~~~~
   net/sched/act_dpxfer.c:199:11: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:200:3: error: 'struct tc_action_ops' has no member named 'init'
     200 |  .init  = tcf_dpxfer_init,
         |   ^~~~
   net/sched/act_dpxfer.c:200:11: error: 'tcf_dpxfer_init' undeclared here (not in a function); did you mean 'tcf_dpxfer_act'?
     200 |  .init  = tcf_dpxfer_init,
         |           ^~~~~~~~~~~~~~~
         |           tcf_dpxfer_act
   net/sched/act_dpxfer.c:200:11: warning: excess elements in struct initializer
   net/sched/act_dpxfer.c:200:11: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:201:3: error: 'struct tc_action_ops' has no member named 'walk'
     201 |  .walk  = tcf_dpxfer_walker,
         |   ^~~~
   net/sched/act_dpxfer.c:201:11: error: 'tcf_dpxfer_walker' undeclared here (not in a function); did you mean 'tcf_dpxfer_act'?
     201 |  .walk  = tcf_dpxfer_walker,
         |           ^~~~~~~~~~~~~~~~~
         |           tcf_dpxfer_act
   net/sched/act_dpxfer.c:201:11: warning: excess elements in struct initializer
   net/sched/act_dpxfer.c:201:11: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:202:3: error: 'struct tc_action_ops' has no member named 'lookup'
     202 |  .lookup  = tcf_dpxfer_search,
         |   ^~~~~~
   net/sched/act_dpxfer.c:202:13: error: 'tcf_dpxfer_search' undeclared here (not in a function); did you mean 'tcf_dpxfer_act'?
     202 |  .lookup  = tcf_dpxfer_search,
         |             ^~~~~~~~~~~~~~~~~
         |             tcf_dpxfer_act
   net/sched/act_dpxfer.c:202:13: warning: excess elements in struct initializer
   net/sched/act_dpxfer.c:202:13: note: (near initialization for 'act_dpxfer_ops')
   net/sched/act_dpxfer.c:203:3: error: 'struct tc_action_ops' has no member named 'get_fill_size'
     203 |  .get_fill_size = tcf_dpxfer_get_fill_size,
         |   ^~~~~~~~~~~~~


vim +/TC_ACT_OK +15 net/sched/act_dpxfer.c

    11	
    12	static int tcf_dpxfer_act(struct sk_buff *skb, const struct tc_action *a,
    13				  struct tcf_result *res)
    14	{
  > 15		return TC_ACT_OK;
    16	}
    17	
    18	static int tcf_dpxfer_dump(struct sk_buff *skb, struct tc_action *a, int bind,
    19				   int ref)
    20	{
  > 21		unsigned char *b = skb_tail_pointer(skb);
  > 22		struct tcf_dpxfer *s = to_dpxfer(a);
  > 23		struct tc_dpxfer opt = {
  > 24			.index      = s->tcf_index,
  > 25			.refcnt     = refcount_read(&s->tcf_refcnt) - ref,
  > 26			.bindcnt    = atomic_read(&s->tcf_bindcnt) - bind,
    27		};
  > 28		struct tcf_t t;
    29	
  > 30		spin_lock_bh(&s->tcf_lock);
    31	
    32		opt.action = s->tcf_action;
  > 33		if (nla_put(skb, TCA_DPXFER_PARMS, sizeof(opt), &opt))
    34			goto nla_put_failure;
    35	
  > 36		tcf_tm_dump(&t, &s->tcf_tm);
  > 37		if (nla_put_64bit(skb, TCA_DPXFER_TM, sizeof(t), &t, TCA_DPXFER_PAD))
    38			goto nla_put_failure;
    39	
  > 40		spin_unlock_bh(&s->tcf_lock);
    41	
  > 42		return skb->len;
    43	
    44	nla_put_failure:
    45		spin_unlock_bh(&s->tcf_lock);
  > 46		nlmsg_trim(skb, b);
    47		return -1;
    48	}
    49	
    50	static int tcf_dpxfer_init(struct net *net, struct nlattr *nla,
    51				   struct nlattr *est, struct tc_action **a, int ovr,
  > 52				   int bind, bool rtnl_held, struct tcf_proto *tp,
  > 53				   u32 flags, struct netlink_ext_ack *extack)
    54	{
    55		struct tc_action_net *tn = net_generic(net, gate_net_id);
    56		enum tk_offsets tk_offset = TK_OFFS_TAI;
    57		struct nlattr *tb[TCA_GATE_MAX + 1];
    58		struct tcf_chain *goto_ch = NULL;
    59		u64 cycletime = 0, basetime = 0;
    60		struct tcf_gate_params *p;
    61		s32 clockid = CLOCK_TAI;
    62		struct tcf_gate *gact;
    63		struct tc_gate *parm;
    64		int ret = 0, err;
    65		u32 gflags = 0;
    66		s32 prio = -1;
    67		ktime_t start;
    68		bool exists;
    69		u32 index;
    70	
    71		if (!nla)
    72			return -EINVAL;
    73	
    74		err = nla_parse_nested(tb, TCA_DPXFER_MAX, nla, dpxfer_policy, extack);
    75		if (err < 0)
    76			return err;
    77	
    78		if (!tb[TCA_DPXFER_PARMS])
    79			return -EINVAL;
    80	
    81		parm = nla_data(tb[TCA_GATE_PARMS]);
    82		index = parm->index;
    83	
    84		err = tcf_idr_check_alloc(tn, &index, a, bind);
    85		if (err < 0)
    86			return err;
    87	
    88		exists = err;
    89		if (exists && bind)
    90			return 0;
    91	
    92		if (!exists) {
    93			ret = tcf_idr_create(tn, index, est, a,
    94					     &act_gate_ops, bind, false, 0);
    95			if (ret) {
    96				tcf_idr_cleanup(tn, index);
    97				return ret;
    98			}
    99	
   100			ret = ACT_P_CREATED;
   101		} else if (!ovr) {
   102			tcf_idr_release(*a, bind);
   103			return -EEXIST;
   104		}
   105	
   106		if (tb[TCA_GATE_PRIORITY])
   107			prio = nla_get_s32(tb[TCA_GATE_PRIORITY]);
   108	
   109		if (tb[TCA_GATE_BASE_TIME])
   110			basetime = nla_get_u64(tb[TCA_GATE_BASE_TIME]);
   111	
   112		if (tb[TCA_GATE_FLAGS])
   113			gflags = nla_get_u32(tb[TCA_GATE_FLAGS]);
   114	
   115		gact = to_gate(*a);
   116		if (ret == ACT_P_CREATED)
   117			INIT_LIST_HEAD(&gact->param.entries);
   118	
   119		err = tcf_action_check_ctrlact(parm->action, tp, &goto_ch, extack);
   120		if (err < 0)
   121			goto release_idr;
   122	
   123		spin_lock_bh(&gact->tcf_lock);
   124		p = &gact->param;
   125	
   126		if (tb[TCA_GATE_CYCLE_TIME])
   127			cycletime = nla_get_u64(tb[TCA_GATE_CYCLE_TIME]);
   128	
   129		if (tb[TCA_GATE_ENTRY_LIST]) {
   130			err = parse_gate_list(tb[TCA_GATE_ENTRY_LIST], p, extack);
   131			if (err < 0)
   132				goto chain_put;
   133		}
   134	
   135		if (!cycletime) {
   136			struct tcfg_gate_entry *entry;
   137			ktime_t cycle = 0;
   138	
   139			list_for_each_entry(entry, &p->entries, list)
   140				cycle = ktime_add_ns(cycle, entry->interval);
   141			cycletime = cycle;
   142			if (!cycletime) {
   143				err = -EINVAL;
   144				goto chain_put;
   145			}
   146		}
   147		p->tcfg_cycletime = cycletime;
   148	
   149		if (tb[TCA_GATE_CYCLE_TIME_EXT])
   150			p->tcfg_cycletime_ext =
   151				nla_get_u64(tb[TCA_GATE_CYCLE_TIME_EXT]);
   152	
   153		gate_setup_timer(gact, basetime, tk_offset, clockid,
   154				 ret == ACT_P_CREATED);
   155		p->tcfg_priority = prio;
   156		p->tcfg_flags = gflags;
   157		gate_get_start_time(gact, &start);
   158	
   159		gact->current_close_time = start;
   160		gact->current_gate_status = GATE_ACT_GATE_OPEN | GATE_ACT_PENDING;
   161	
   162		gact->next_entry = list_first_entry(&p->entries,
   163						    struct tcfg_gate_entry, list);
   164	
   165		goto_ch = tcf_action_set_ctrlact(*a, parm->action, goto_ch);
   166	
   167		gate_start_timer(gact, start);
   168	
   169		spin_unlock_bh(&gact->tcf_lock);
   170	
   171		if (goto_ch)
   172			tcf_chain_put_by_act(goto_ch);
   173	
   174		return ret;
   175	
   176	chain_put:
   177		spin_unlock_bh(&gact->tcf_lock);
   178	
   179		if (goto_ch)
   180			tcf_chain_put_by_act(goto_ch);
   181	release_idr:
   182		/* action is not inserted in any list: it's safe to init hitimer
   183		 * without taking tcf_lock.
   184		 */
   185		if (ret == ACT_P_CREATED)
   186			gate_setup_timer(gact, gact->param.tcfg_basetime,
   187					 gact->tk_offset, gact->param.tcfg_clockid,
   188					 true);
   189		tcf_idr_release(*a, bind);
   190		return err;
   191	}
   192	
 > 193	static struct tc_action_ops act_dpxfer_ops = {
 > 194		.kind		=	"dpxfer",
 > 195		.id		=	TCA_ID_DPXFER,
 > 196		.owner		=	THIS_MODULE,
 > 197		.act		=	tcf_dpxfer_act,
 > 198		.stats_update	=	tcf_stats_update,
 > 199		.dump		=	tcf_dpxfer_dump,
 > 200		.init		=	tcf_dpxfer_init,
 > 201		.walk		=	tcf_dpxfer_walker,
 > 202		.lookup		=	tcf_dpxfer_search,
 > 203		.get_fill_size	=	tcf_dpxfer_get_fill_size,
 > 204		.size		=	sizeof(struct tcf_dpxfer),
 > 205		.get_dev	=	tcf_dpxfer_get_dev,
   206	};
   207	
 > 208	static __net_init int dpxfer_init_net(struct net *net)
   209	{
 > 210		struct tc_action_net *tn = net_generic(net, dpxfer_net_id);
   211	
 > 212		return tc_action_net_init(net, tn, &act_dpxfer_ops);
   213	}
   214	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 37876 bytes --]

             reply	other threads:[~2021-11-05  1:07 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-05  1:07 kernel test robot [this message]
2021-11-05  1:07 ` [jpirko-mlxsw:petrm_leftovers 31/33] net/sched/act_dpxfer.c:15:9: error: 'TC_ACT_OK' undeclared kernel test robot

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=202111050941.sCyk7JHD-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@lists.01.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.