-
Bug
-
Resolution: Unresolved
-
Undefined
-
None
-
rhel-8.10
-
None
-
No
-
None
-
rhel-pt-perf-tools
-
None
-
False
-
False
-
-
None
-
None
-
None
-
None
-
Unspecified
-
Unspecified
-
Unspecified
-
-
x86_64
-
None
What were you trying to do that didn't work?
We can see "registration error [man warning::pass5] (rc -84)" shows in RHEL8.10" with RHEL8.10 , but RHEL 9.6 work well
RHEL 8.10
~~~
systemtap-4.9-3.el8.x86_64
4.18.0-553.44.1.el8_10.x86_64
- stap -L 'kernel.function("skb_flow_limit")'
kernel.function("skb_flow_limit@net/core/dev.c:4725") $qlen:unsigned int $skb:struct sk_buff*
- stap
vge 'probe kernel.function("skb_flow_limit"){printf("%s %d\n",kernel_string($skb>dev->name),$qlen)}'
Pass 1: parsed user script and 507 library scripts using 361180virt/156208res/16644shr/141584data kb, in 990usr/270sys/1285real ms.
Pass 2: analyzed script: 1 probe, 3 functions, 0 embeds, 0 globals using 429964virt/226520res/17828shr/210368data kb, in 3620usr/220sys/3922real ms.
Pass 3: translated to C into "/tmp/stap0BtQby/stap_d959725eae59bfcf193987751a604be0_2064_src.c" using 429964virt/226712res/18020shr/210368data kb, in 10usr/10sys/19real ms.
Pass 4: compiled C into "stap_d959725eae59bfcf193987751a604be0_2064.ko" in 7780usr/6360sys/13409real ms.
Pass 5: starting run.
WARNING: probe kernel.function("skb_flow_limit@net/core/dev.c:4725") (address 0xffffffff9ae4a566) registration error [man warning::pass5] (rc -84)
~~~
codes from RHEL8
~~~
static bool skb_flow_limit(struct sk_buff *skb, unsigned int qlen)
{
#ifdef CONFIG_NET_FLOW_LIMIT
struct sd_flow_limit *fl;
struct softnet_data *sd;
unsigned int old_flow, new_flow;
if (qlen < (netdev_max_backlog >> 1))
return false;
sd = this_cpu_ptr(&softnet_data);
rcu_read_lock();
fl = rcu_dereference(sd->flow_limit);
if (fl) {
new_flow = skb_get_hash(skb) & (fl->num_buckets - 1);
old_flow = fl->history[fl->history_head];
fl->history[fl->history_head] = new_flow;
fl->history_head++;
fl->history_head &= FLOW_LIMIT_HISTORY - 1;
if (likely(fl->buckets[old_flow]))
fl->buckets[old_flow]--;
if (++fl->buckets[new_flow] > (FLOW_LIMIT_HISTORY >> 1))
}
rcu_read_unlock();
#endif
return false;
}
~~~
RHEL 9.6 works well
~~~
systemtap-5.2-2.el9.x86_64
5.14.0-570.17.1.el9_6.x86_64
- stap -L 'kernel.function("skb_flow_limit")'
kernel.function("skb_flow_limit@net/core/dev.c:4802") $qlen:unsigned int $skb:struct sk_buff*
- stap
vge 'probe kernel.function("skb_flow_limit"){printf("%s %d\n",kernel_string($skb>dev->name),$qlen)}'
Pass 1: parsed user script and 514 library scripts using 687260virt/442592res/15488shr/426888data kb, in 4510usr/1080sys/6593real ms.
Pass 2: analyzed script: 1 probe, 3 functions, 0 embeds, 0 globals using 794732virt/551560res/16788shr/534360data kb, in 5130usr/1250sys/7161real ms.
Pass 3: translated to C into "/tmp/stapOkZrxe/stap_ad41e9e3a01c3495fd58b614a96fdaeb_2100_src.c" using 794732virt/551688res/16916shr/534360data kb, in 30usr/0sys/25real ms.
Pass 4: compiled C into "stap_ad41e9e3a01c3495fd58b614a96fdaeb_2100.ko" in 9250usr/3260sys/14503real ms.
Pass 5: starting run.
lo 0
lo 0
~~~
codes from RHEL9
~~~
static bool skb_flow_limit(struct sk_buff *skb, unsigned int qlen)
{
#ifdef CONFIG_NET_FLOW_LIMIT
struct sd_flow_limit *fl;
struct softnet_data *sd;
unsigned int old_flow, new_flow;
if (qlen < (READ_ONCE(netdev_max_backlog) >> 1))
return false;
sd = this_cpu_ptr(&softnet_data);
rcu_read_lock();
fl = rcu_dereference(sd->flow_limit);
if (fl) {
new_flow = skb_get_hash(skb) & (fl->num_buckets - 1);
old_flow = fl->history[fl->history_head];
fl->history[fl->history_head] = new_flow;
fl->history_head++;
fl->history_head &= FLOW_LIMIT_HISTORY - 1;
if (likely(fl->buckets[old_flow]))
fl->buckets[old_flow]--;
if (++fl->buckets[new_flow] > (FLOW_LIMIT_HISTORY >> 1))
}
rcu_read_unlock();
#endif
return false;
}
~~~
What is the impact of this issue to you?
RHEL 8.10 register warning
Please provide the package NVR for which the bug is seen:
How reproducible is this bug?:
execute command as above