* Net: [DSA]: dsa-loop kernel panic
@ 2020-04-30 6:24 Allen
2020-04-30 14:06 ` Andrew Lunn
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Allen @ 2020-04-30 6:24 UTC (permalink / raw)
To: netdev, Andrew Lunn, Vivien Didelot, Florian Fainelli
Hi,
We ran into a kernel panic with dsa-loop.
Here are the details:
VM: aarch64 kvm running 5.7.0-rc3+
$ modprobe dsa-loop
[ 25.968427] dsa-loop fixed-0:1f: DSA mockup driver: 0x1f
[ 25.978156] libphy: dsa slave smi: probed
[ 25.979230] dsa-loop fixed-0:1f: nonfatal error -95 setting MTU on port 0
[ 25.980974] dsa-loop fixed-0:1f lan1 (uninitialized): PHY
[dsa-0.0:00] driver [Generic PHY] (irq=POLL)
[ 25.983855] dsa-loop fixed-0:1f: nonfatal error -95 setting MTU on port 1
[ 25.985523] dsa-loop fixed-0:1f lan2 (uninitialized): PHY
[dsa-0.0:01] driver [Generic PHY] (irq=POLL)
[ 25.988127] dsa-loop fixed-0:1f: nonfatal error -95 setting MTU on port 2
[ 25.989775] dsa-loop fixed-0:1f lan3 (uninitialized): PHY
[dsa-0.0:02] driver [Generic PHY] (irq=POLL)
[ 25.992651] dsa-loop fixed-0:1f: nonfatal error -95 setting MTU on port 3
[ 25.994472] dsa-loop fixed-0:1f lan4 (uninitialized): PHY
[dsa-0.0:03] driver [Generic PHY] (irq=POLL)
[ 25.997015] DSA: tree 0 setup
[root@localhost ~]# [ 26.002672] dsa-loop fixed-0:1f lan1: configuring
for phy/gmii link mode
[ 26.008264] dsa-loop fixed-0:1f lan1: Link is Up - 100Mbps/Full -
flow control off
[ 26.010098] IPv6: ADDRCONF(NETDEV_CHANGE): lan1: link becomes ready
[ 26.014539] dsa-loop fixed-0:1f lan3: configuring for phy/gmii link mode
[ 26.021323] dsa-loop fixed-0:1f lan2: configuring for phy/gmii link mode
[ 26.023274] dsa-loop fixed-0:1f lan3: Link is Up - 100Mbps/Full -
flow control off
[ 26.028358] dsa-loop fixed-0:1f lan4: configuring for phy/gmii link mode
[ 26.036157] dsa-loop fixed-0:1f lan2: Link is Up - 100Mbps/Full -
flow control off
[ 26.037875] dsa-loop fixed-0:1f lan4: Link is Up - 100Mbps/Full -
flow control off
[ 26.039858] IPv6: ADDRCONF(NETDEV_CHANGE): lan3: link becomes ready
[ 26.041527] IPv6: ADDRCONF(NETDEV_CHANGE): lan2: link becomes ready
[ 26.043219] IPv6: ADDRCONF(NETDEV_CHANGE): lan4: link becomes ready
$ rmmod dsa-loop
[ 50.688935] Unable to handle kernel read from unreadable memory at
virtual address 0000000000000040
[ 50.690775] Mem abort info:
[ 50.691285] ESR = 0x96000005
[ 50.691831] EC = 0x25: DABT (current EL), IL = 32 bits
[ 50.693061] SET = 0, FnV = 0
[ 50.693799] EA = 0, S1PTW = 0
[ 50.694542] Data abort info:
[ 50.695093] ISV = 0, ISS = 0x00000005
[ 50.695841] CM = 0, WnR = 0
[ 50.696543] user pgtable: 64k pages, 48-bit VAs, pgdp=000000020dde7000
[ 50.697925] [0000000000000040] pgd=000000020bec0003,
pud=000000020bec0003, pmd=0000000212ab0003, pte=0000000000000000
[ 50.700057] Internal error: Oops: 96000005 [#1] SMP
p650M.e7s0s1a0g4e8 ]f rMoomd uslyseslo lgdin@lkeocd alinh: osdst a_atlo
oAppr(- 2) 9 ip236t:1_r4:pf06il .te..r
_ t _kReEJrnECelT :Infnt_rerejnaecl t_eirprovr6: iOpotp_sR:E J9E6C0T0
0n0f0_5re j[e#c1t]_ iSpMvP4 xt
onntrack ebtable_nat ebtable_broute ip6table_nat ip6table_mangle
ip6table_security ip6table_raw iptable_nat nf_nat iptable_mangle
iptable_security iptable_raw nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4
ip_set ebtable_filter ebtables rfkill ip6table_filter ip6_tables
iptable_filter vfat fat aes_ce_blk crypto_simd cryptd aes_ce_cipher
crct10dif_ce ghash_ce sha2_ce sha256_arm64 sha1_ce virtio_rng button
qemu_fw_cfg ip_tables xfs libcrc32c virtio_net net_failover
virtio_console failover virtio_scsi virtio_pci
[ 50.715211] CPU: 3 PID: 1559 Comm: rmmod Not tainted 5.7.0-rc3+ #3
[ 50.716620] Hardware name: QEMU KVM Virtual Machine, BIOS 0.0.0
02/06/2015
[ 50.718185] pstate: 60400005 (nZCv daif +PAN -UAO)
[ 50.719274] pc : __dev_set_rx_mode+0x48/0xa0
[ 50.720252] lr : dev_mc_unsync+0xbc/0xfc
[ 50.721129] sp : ffff800010f6f960
[ 50.721875] x29: ffff800010f6f960 x28: ffff0001c10d5d40
[ 50.723085] x27: 0000000000000000 x26: ffffa039806cfcd0
[ 50.724301] x25: ffffa03980f53000 x24: ffffa03980f53000
[ 50.725488] x23: 0000000000000001 x22: ffffa03980f53000
[ 50.726669] x21: ffffa03980137f1c x20: 0000000000000000
[ 50.727849] x19: ffff0001c11a2000 x18: 0000000000000000
[ 50.729046] x17: 0000000000000000 x16: ffffa0397fd53578
[ 50.730236] x15: 6e04191515120a09 x14: 0000000000000000
[ 50.731451] x13: ffff000000000000 x12: ffffffffffffffff
[ 50.732681] x11: 0000000000000030 x10: 0000000000001bd0
[ 50.733874] x9 : ffff800010f6f6d0 x8 : 0000000000000000
[ 50.735054] x7 : ffffffffffffffff x6 : 000000000000ffff
[ 50.736261] x5 : 0000000000000001 x4 : ffff0001c2e32f00
[ 50.737446] x3 : 0000000000000000 x2 : 0000000000000000
[ 50.738631] x1 : ffff0001c2e3bd00 x0 : 0000000000029820
[ 50.739815] Call trace:
[ 50.740385] __dev_set_rx_mode+0x48/0xa0
[ 50.741267] dev_mc_unsync+0xbc/0xfc
[ 50.742064] dsa_slave_close+0x34/0xb4
[ 50.742905] __dev_close_many+0xbc/0x13c
[ 50.743782] dev_close_many+0xb8/0x184
[ 50.744637] rollback_registered_many+0x160/0x558
[ 50.745691] rollback_registered+0x68/0xac
[ 50.746606] unregister_netdevice_queue+0x9c/0x128
[ 50.747673] unregister_netdev+0x28/0x38
[ 50.748564] dsa_slave_destroy+0x4c/0x74
[ 50.749447] dsa_port_teardown+0xac/0xb8
[ 50.750326] dsa_tree_teardown_switches+0x38/0x9c
[ 50.751372] dsa_unregister_switch+0x104/0x1c0
[ 50.752384] dsa_loop_drv_remove+0x24/0x54 [dsa_loop]
[ 50.753518] mdio_remove+0x2c/0x48
[ 50.754284] device_release_driver_internal+0xfc/0x1ac
[ 50.755428] driver_detach+0x6c/0xdc
[ 50.756244] bus_remove_driver+0x74/0xe8
[ 50.757120] driver_unregister+0x34/0x5c
[ 50.758039] mdio_driver_unregister+0x20/0x2c
[ 50.759026] dsa_loop_exit+0x1c/0xf670 [dsa_loop]
[ 50.760094] __arm64_sys_delete_module+0x18c/0x29c
[ 50.761177] el0_svc_common.constprop.3+0xdc/0x194
[ 50.762288] do_el0_svc+0x84/0xa0
[ 50.763029] el0_sync_handler+0x80/0x9c
[ 50.763888] el0_sync+0x164/0x180
[ 50.764654] Code: b9429275 35000175 3949f660 35000220 (f9402281)
[ 50.766046] ---[ end trace 9e9af4eb8dcf17ac ]---
[ 50.767088] Kernel panic - not syncing: Fatal exception in interrupt
[ 50.768527] SMP: stopping secondary CPUs
[ 50.769431] Kernel Offset: 0x20396f4a0000 from 0xffff800010000000
[ 50.770796] PHYS_OFFSET: 0xffffd52500000000
[ 50.771733] CPU features: 0x080002,20802008
[ 50.772620] Memory Limit: none
[ 50.773260] ---[ end Kernel panic - not syncing: Fatal exception in
interrupt ]---
I haven't had much luck trying to figure what exactly is causing the
panic. Will keep looking, any help here would be great.
Thanks,
- Allen
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Net: [DSA]: dsa-loop kernel panic
2020-04-30 6:24 Net: [DSA]: dsa-loop kernel panic Allen
@ 2020-04-30 14:06 ` Andrew Lunn
2020-05-01 6:47 ` Allen
2020-04-30 17:12 ` Florian Fainelli
2020-05-01 13:10 ` Andrew Lunn
2 siblings, 1 reply; 13+ messages in thread
From: Andrew Lunn @ 2020-04-30 14:06 UTC (permalink / raw)
To: Allen; +Cc: netdev, Vivien Didelot, Florian Fainelli
On Thu, Apr 30, 2020 at 11:54:15AM +0530, Allen wrote:
> Hi,
>
> We ran into a kernel panic with dsa-loop.
> Here are the details:
>
> VM: aarch64 kvm running 5.7.0-rc3+
Hi Allen
Can you reproduce it? If so, could you do:
make net/core/dev.lst
and then show us the listing for __dev_set_rx_mode. The instructions
around 0x48/0xa0 will tell us what structure is a NULL pointer.
For this to work, it is important the build to create the .lst file is
the same as the build which fails. Changing the kernel configuration,
compiler flags etc can change 0x48/0xa0.
Thanks
Andrew
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Net: [DSA]: dsa-loop kernel panic
2020-04-30 6:24 Net: [DSA]: dsa-loop kernel panic Allen
2020-04-30 14:06 ` Andrew Lunn
@ 2020-04-30 17:12 ` Florian Fainelli
2020-05-01 6:48 ` Allen
2020-05-01 13:10 ` Andrew Lunn
2 siblings, 1 reply; 13+ messages in thread
From: Florian Fainelli @ 2020-04-30 17:12 UTC (permalink / raw)
To: Allen, netdev, Andrew Lunn, Vivien Didelot
On 4/29/20 11:24 PM, Allen wrote:
> Hi,
>
> We ran into a kernel panic with dsa-loop.
> Here are the details:
>
> VM: aarch64 kvm running 5.7.0-rc3+
>
> $ modprobe dsa-loop
> [ 25.968427] dsa-loop fixed-0:1f: DSA mockup driver: 0x1f
> [ 25.978156] libphy: dsa slave smi: probed
> [ 25.979230] dsa-loop fixed-0:1f: nonfatal error -95 setting MTU on
> port 0
> [ 25.980974] dsa-loop fixed-0:1f lan1 (uninitialized): PHY
> [dsa-0.0:00] driver [Generic PHY] (irq=POLL)
> [ 25.983855] dsa-loop fixed-0:1f: nonfatal error -95 setting MTU on
> port 1
> [ 25.985523] dsa-loop fixed-0:1f lan2 (uninitialized): PHY
> [dsa-0.0:01] driver [Generic PHY] (irq=POLL)
> [ 25.988127] dsa-loop fixed-0:1f: nonfatal error -95 setting MTU on
> port 2
> [ 25.989775] dsa-loop fixed-0:1f lan3 (uninitialized): PHY
> [dsa-0.0:02] driver [Generic PHY] (irq=POLL)
> [ 25.992651] dsa-loop fixed-0:1f: nonfatal error -95 setting MTU on
> port 3
> [ 25.994472] dsa-loop fixed-0:1f lan4 (uninitialized): PHY
> [dsa-0.0:03] driver [Generic PHY] (irq=POLL)
> [ 25.997015] DSA: tree 0 setup
> [root@localhost ~]# [ 26.002672] dsa-loop fixed-0:1f lan1: configuring
> for phy/gmii link mode
> [ 26.008264] dsa-loop fixed-0:1f lan1: Link is Up - 100Mbps/Full -
> flow control off
> [ 26.010098] IPv6: ADDRCONF(NETDEV_CHANGE): lan1: link becomes ready
> [ 26.014539] dsa-loop fixed-0:1f lan3: configuring for phy/gmii link mode
> [ 26.021323] dsa-loop fixed-0:1f lan2: configuring for phy/gmii link mode
> [ 26.023274] dsa-loop fixed-0:1f lan3: Link is Up - 100Mbps/Full -
> flow control off
> [ 26.028358] dsa-loop fixed-0:1f lan4: configuring for phy/gmii link mode
> [ 26.036157] dsa-loop fixed-0:1f lan2: Link is Up - 100Mbps/Full -
> flow control off
> [ 26.037875] dsa-loop fixed-0:1f lan4: Link is Up - 100Mbps/Full -
> flow control off
> [ 26.039858] IPv6: ADDRCONF(NETDEV_CHANGE): lan3: link becomes ready
> [ 26.041527] IPv6: ADDRCONF(NETDEV_CHANGE): lan2: link becomes ready
> [ 26.043219] IPv6: ADDRCONF(NETDEV_CHANGE): lan4: link becomes ready
you have missed an important detail here which is the master device that
was used for DSA. The current code defaults to whatever "eth0" is, what
does this map to for your configuration?
--
Florian
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Net: [DSA]: dsa-loop kernel panic
2020-04-30 14:06 ` Andrew Lunn
@ 2020-05-01 6:47 ` Allen
0 siblings, 0 replies; 13+ messages in thread
From: Allen @ 2020-05-01 6:47 UTC (permalink / raw)
To: Andrew Lunn; +Cc: netdev, Vivien Didelot, Florian Fainelli
[-- Attachment #1: Type: text/plain, Size: 3297 bytes --]
Andrew,
>
> Can you reproduce it? If so, could you do:
>
> make net/core/dev.lst
Yes. Attached is the file.
ffff8000113adb60 <__dev_set_rx_mode>:
{
ffff8000113adb60: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113adb64: 910003fd mov x29, sp
ffff8000113adb68: a90153f3 stp x19, x20, [sp,#16]
ffff8000113adb6c: f90013f5 str x21, [sp,#32]
ffff8000113adb70: aa0003f3 mov x19, x0
ffff8000113adb74: aa1e03e0 mov x0, x30
ffff8000113adb78: 94000000 bl 0 <_mcount>
ffff8000113adb78: R_AARCH64_CALL26 _mcount
if (!(dev->flags&IFF_UP))
ffff8000113adb7c: b9422a60 ldr w0, [x19,#552]
const struct net_device_ops *ops = dev->netdev_ops;
ffff8000113adb80: f940fa74 ldr x20, [x19,#496]
if (!(dev->flags&IFF_UP))
ffff8000113adb84: 360001a0 tbz w0, #0, ffff8000113adbb8
<__dev_set_rx_mode+0x58>
ffff8000113adb88: f9402260 ldr x0, [x19,#64]
if (!netif_device_present(dev))
ffff8000113adb8c: 36080160 tbz w0, #1, ffff8000113adbb8
<__dev_set_rx_mode+0x58>
if (!(dev->priv_flags & IFF_UNICAST_FLT)) {
ffff8000113adb90: b9422e60 ldr w0, [x19,#556]
ffff8000113adb94: 376000a0 tbnz w0, #12, ffff8000113adba8
<__dev_set_rx_mode+0x48>
if (!netdev_uc_empty(dev) && !dev->uc_promisc) {
ffff8000113adb98: b9429275 ldr w21, [x19,#656]
ffff8000113adb9c: 35000175 cbnz w21, ffff8000113adbc8
<__dev_set_rx_mode+0x68>
} else if (netdev_uc_empty(dev) && dev->uc_promisc) {
ffff8000113adba0: 3949f660 ldrb w0, [x19,#637]
ffff8000113adba4: 35000220 cbnz w0, ffff8000113adbe8
<__dev_set_rx_mode+0x88>
if (ops->ndo_set_rx_mode)
ffff8000113adba8: f9402281 ldr x1, [x20,#64]
ffff8000113adbac: b4000061 cbz x1, ffff8000113adbb8
<__dev_set_rx_mode+0x58>
ops->ndo_set_rx_mode(dev);
ffff8000113adbb0: aa1303e0 mov x0, x19
ffff8000113adbb4: d63f0020 blr x1
}
ffff8000113adbb8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113adbbc: f94013f5 ldr x21, [sp,#32]
ffff8000113adbc0: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113adbc4: d65f03c0 ret
if (!netdev_uc_empty(dev) && !dev->uc_promisc) {
ffff8000113adbc8: 3949f662 ldrb w2, [x19,#637]
ffff8000113adbcc: 35fffee2 cbnz w2, ffff8000113adba8
<__dev_set_rx_mode+0x48>
__dev_set_promiscuity(dev, 1, false);
ffff8000113adbd0: aa1303e0 mov x0, x19
ffff8000113adbd4: 52800021 mov w1, #0x1 // #1
ffff8000113adbd8: 97ffff6a bl ffff8000113ad980 <__dev_set_promiscuity>
dev->uc_promisc = true;
ffff8000113adbdc: 52800020 mov w0, #0x1 // #1
ffff8000113adbe0: 3909f660 strb w0, [x19,#637]
ffff8000113adbe4: 17fffff1 b ffff8000113adba8 <__dev_set_rx_mode+0x48>
__dev_set_promiscuity(dev, -1, false);
ffff8000113adbe8: aa1303e0 mov x0, x19
ffff8000113adbec: 12800001 mov w1, #0xffffffff // #-1
ffff8000113adbf0: 2a1503e2 mov w2, w21
ffff8000113adbf4: 97ffff63 bl ffff8000113ad980 <__dev_set_promiscuity>
dev->uc_promisc = false;
ffff8000113adbf8: 3909f675 strb w21, [x19,#637]
ffff8000113adbfc: 17ffffeb b ffff8000113adba8 <__dev_set_rx_mode+0x48>
> and then show us the listing for __dev_set_rx_mode. The instructions
> around 0x48/0xa0 will tell us what structure is a NULL pointer.
>
> For this to work, it is important the build to create the .lst file is
> the same as the build which fails. Changing the kernel configuration,
> compiler flags etc can change 0x48/0xa0.
- Allen
[-- Attachment #2: dev.lst --]
[-- Type: text/plain, Size: 1432037 bytes --]
dev.o: file format elf64-littleaarch64
Disassembly of section .text:
ffff80001139e37c <__my_cpu_offset>:
/*
* We want to allow caching the value, so avoid using volatile and
* instead use a fake stack read to hazard against barrier().
*/
asm(ALTERNATIVE("mrs %0, tpidr_el1",
ffff80001139e37c: d538d080 mrs x0, tpidr_el1
ARM64_HAS_VIRT_HOST_EXTN)
: "=r" (off) :
"Q" (*(const unsigned long *)current_stack_pointer));
return off;
}
ffff80001139e380: d65f03c0 ret
ffff80001139e384 <dev_get_iflink>:
* Indicates the ifindex the interface is linked to.
* Physical interfaces have the same 'ifindex' and 'iflink' values.
*/
int dev_get_iflink(const struct net_device *dev)
{
ffff80001139e384: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139e388: 910003fd mov x29, sp
ffff80001139e38c: f9000bf3 str x19, [sp,#16]
ffff80001139e390: aa0003f3 mov x19, x0
ffff80001139e394: aa1e03e0 mov x0, x30
ffff80001139e398: 94000000 bl 0 <_mcount>
ffff80001139e398: R_AARCH64_CALL26 _mcount
if (dev->netdev_ops && dev->netdev_ops->ndo_get_iflink)
ffff80001139e39c: f940fa60 ldr x0, [x19,#496]
ffff80001139e3a0: b4000100 cbz x0, ffff80001139e3c0 <dev_get_iflink+0x3c>
ffff80001139e3a4: f9411401 ldr x1, [x0,#552]
ffff80001139e3a8: b40000c1 cbz x1, ffff80001139e3c0 <dev_get_iflink+0x3c>
return dev->netdev_ops->ndo_get_iflink(dev);
ffff80001139e3ac: aa1303e0 mov x0, x19
ffff80001139e3b0: d63f0020 blr x1
return dev->ifindex;
}
ffff80001139e3b4: f9400bf3 ldr x19, [sp,#16]
ffff80001139e3b8: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139e3bc: d65f03c0 ret
return dev->ifindex;
ffff80001139e3c0: b9410260 ldr w0, [x19,#256]
}
ffff80001139e3c4: f9400bf3 ldr x19, [sp,#16]
ffff80001139e3c8: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139e3cc: d65f03c0 ret
ffff80001139e3d0 <__dev_get_by_index>:
* about locking. The caller must hold either the RTNL semaphore
* or @dev_base_lock.
*/
struct net_device *__dev_get_by_index(struct net *net, int ifindex)
{
ffff80001139e3d0: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139e3d4: 910003fd mov x29, sp
ffff80001139e3d8: f9000bf3 str x19, [sp,#16]
ffff80001139e3dc: aa0003f3 mov x19, x0
ffff80001139e3e0: aa1e03e0 mov x0, x30
ffff80001139e3e4: f90017a1 str x1, [x29,#40]
ffff80001139e3e8: 94000000 bl 0 <_mcount>
ffff80001139e3e8: R_AARCH64_CALL26 _mcount
return &net->dev_index_head[ifindex & (NETDEV_HASHENTRIES - 1)];
ffff80001139e3ec: f94017a1 ldr x1, [x29,#40]
struct net_device *dev;
struct hlist_head *head = dev_index_hash(net, ifindex);
hlist_for_each_entry(dev, head, index_hlist)
ffff80001139e3f0: f9409a62 ldr x2, [x19,#304]
return &net->dev_index_head[ifindex & (NETDEV_HASHENTRIES - 1)];
ffff80001139e3f4: d37d1c20 ubfiz x0, x1, #3, #8
hlist_for_each_entry(dev, head, index_hlist)
ffff80001139e3f8: f8606840 ldr x0, [x2,x0]
ffff80001139e3fc: b4000040 cbz x0, ffff80001139e404 <__dev_get_by_index+0x34>
ffff80001139e400: d10e4000 sub x0, x0, #0x390
ffff80001139e404: b40000c0 cbz x0, ffff80001139e41c <__dev_get_by_index+0x4c>
if (dev->ifindex == ifindex)
ffff80001139e408: b9410002 ldr w2, [x0,#256]
ffff80001139e40c: 6b01005f cmp w2, w1
ffff80001139e410: 54000060 b.eq ffff80001139e41c <__dev_get_by_index+0x4c>
hlist_for_each_entry(dev, head, index_hlist)
ffff80001139e414: f941c800 ldr x0, [x0,#912]
ffff80001139e418: b5ffff40 cbnz x0, ffff80001139e400 <__dev_get_by_index+0x30>
return dev;
return NULL;
}
ffff80001139e41c: f9400bf3 ldr x19, [sp,#16]
ffff80001139e420: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139e424: d65f03c0 ret
ffff80001139e428 <dev_get_by_index_rcu>:
* had its reference counter increased so the caller must be careful
* about locking. The caller must hold RCU lock.
*/
struct net_device *dev_get_by_index_rcu(struct net *net, int ifindex)
{
ffff80001139e428: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139e42c: 910003fd mov x29, sp
ffff80001139e430: f9000bf3 str x19, [sp,#16]
ffff80001139e434: aa0003f3 mov x19, x0
ffff80001139e438: aa1e03e0 mov x0, x30
ffff80001139e43c: f90017a1 str x1, [x29,#40]
ffff80001139e440: 94000000 bl 0 <_mcount>
ffff80001139e440: R_AARCH64_CALL26 _mcount
return &net->dev_index_head[ifindex & (NETDEV_HASHENTRIES - 1)];
ffff80001139e444: f94017a1 ldr x1, [x29,#40]
ffff80001139e448: f9409a62 ldr x2, [x19,#304]
ffff80001139e44c: d37d1c20 ubfiz x0, x1, #3, #8
})
static __always_inline
void __read_once_size(const volatile void *p, void *res, int size)
{
__READ_ONCE_SIZE;
ffff80001139e450: f8606840 ldr x0, [x2,x0]
struct net_device *dev;
struct hlist_head *head = dev_index_hash(net, ifindex);
hlist_for_each_entry_rcu(dev, head, index_hlist)
ffff80001139e454: b4000040 cbz x0, ffff80001139e45c <dev_get_by_index_rcu+0x34>
ffff80001139e458: d10e4000 sub x0, x0, #0x390
ffff80001139e45c: b40000c0 cbz x0, ffff80001139e474 <dev_get_by_index_rcu+0x4c>
if (dev->ifindex == ifindex)
ffff80001139e460: b9410002 ldr w2, [x0,#256]
ffff80001139e464: 6b01005f cmp w2, w1
ffff80001139e468: 54000060 b.eq ffff80001139e474 <dev_get_by_index_rcu+0x4c>
ffff80001139e46c: f941c800 ldr x0, [x0,#912]
hlist_for_each_entry_rcu(dev, head, index_hlist)
ffff80001139e470: b5ffff40 cbnz x0, ffff80001139e458 <dev_get_by_index_rcu+0x30>
return dev;
return NULL;
}
ffff80001139e474: f9400bf3 ldr x19, [sp,#16]
ffff80001139e478: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139e47c: d65f03c0 ret
ffff80001139e480 <dev_get_by_napi_id>:
* its reference counter increased so the caller must be careful
* about locking. The caller must hold RCU lock.
*/
struct net_device *dev_get_by_napi_id(unsigned int napi_id)
{
ffff80001139e480: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139e484: 910003fd mov x29, sp
ffff80001139e488: f9000bf3 str x19, [sp,#16]
ffff80001139e48c: 2a0003f3 mov w19, w0
ffff80001139e490: aa1e03e0 mov x0, x30
ffff80001139e494: 94000000 bl 0 <_mcount>
ffff80001139e494: R_AARCH64_CALL26 _mcount
struct napi_struct *napi;
WARN_ON_ONCE(!rcu_read_lock_held());
if (napi_id < MIN_NAPI_ID)
ffff80001139e498: 7140067f cmp w19, #0x1, lsl #12
ffff80001139e49c: 540001a9 b.ls ffff80001139e4d0 <dev_get_by_napi_id+0x50>
ffff80001139e4a0: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff80001139e4a0: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
static struct napi_struct *napi_by_id(unsigned int napi_id)
{
unsigned int hash = napi_id % HASH_SIZE(napi_hash);
struct napi_struct *napi;
hlist_for_each_entry_rcu(napi, &napi_hash[hash], napi_hash_node)
ffff80001139e4a4: d37d1e60 ubfiz x0, x19, #3, #8
ffff80001139e4a8: 91000021 add x1, x1, #0x0
ffff80001139e4a8: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff80001139e4ac: f8606821 ldr x1, [x1,x0]
ffff80001139e4b0: b4000041 cbz x1, ffff80001139e4b8 <dev_get_by_napi_id+0x38>
ffff80001139e4b4: d105c021 sub x1, x1, #0x170
ffff80001139e4b8: b40000c1 cbz x1, ffff80001139e4d0 <dev_get_by_napi_id+0x50>
if (napi->napi_id == napi_id)
ffff80001139e4bc: b9418022 ldr w2, [x1,#384]
ffff80001139e4c0: 6b02027f cmp w19, w2
ffff80001139e4c4: 540000e0 b.eq ffff80001139e4e0 <dev_get_by_napi_id+0x60>
ffff80001139e4c8: f940b821 ldr x1, [x1,#368]
hlist_for_each_entry_rcu(napi, &napi_hash[hash], napi_hash_node)
ffff80001139e4cc: b5ffff41 cbnz x1, ffff80001139e4b4 <dev_get_by_napi_id+0x34>
return NULL;
ffff80001139e4d0: d2800000 mov x0, #0x0 // #0
}
ffff80001139e4d4: f9400bf3 ldr x19, [sp,#16]
ffff80001139e4d8: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139e4dc: d65f03c0 ret
return napi ? napi->dev : NULL;
ffff80001139e4e0: f9401c20 ldr x0, [x1,#56]
}
ffff80001139e4e4: f9400bf3 ldr x19, [sp,#16]
ffff80001139e4e8: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139e4ec: d65f03c0 ret
ffff80001139e4f0 <netdev_cmd_to_name>:
{
ffff80001139e4f0: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139e4f4: 910003fd mov x29, sp
ffff80001139e4f8: f9000bf3 str x19, [sp,#16]
ffff80001139e4fc: 2a0003f3 mov w19, w0
ffff80001139e500: aa1e03e0 mov x0, x30
ffff80001139e504: 94000000 bl 0 <_mcount>
ffff80001139e504: R_AARCH64_CALL26 _mcount
ffff80001139e508: 51000660 sub w0, w19, #0x1
ffff80001139e50c: 7100841f cmp w0, #0x21
ffff80001139e510: 540000e8 b.hi ffff80001139e52c <netdev_cmd_to_name+0x3c>
ffff80001139e514: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff80001139e514: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x90
ffff80001139e518: 91000021 add x1, x1, #0x0
ffff80001139e518: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x90
ffff80001139e51c: f8605820 ldr x0, [x1,w0,uxtw #3]
}
ffff80001139e520: f9400bf3 ldr x19, [sp,#16]
ffff80001139e524: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139e528: d65f03c0 ret
{
ffff80001139e52c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff80001139e52c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8
ffff80001139e530: 91000000 add x0, x0, #0x0
ffff80001139e530: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8
}
ffff80001139e534: f9400bf3 ldr x19, [sp,#16]
ffff80001139e538: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139e53c: d65f03c0 ret
ffff80001139e540 <call_netdevice_unregister_notifiers>:
{
ffff80001139e540: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff80001139e544: 910003fd mov x29, sp
ffff80001139e548: a90153f3 stp x19, x20, [sp,#16]
ffff80001139e54c: a9025bf5 stp x21, x22, [sp,#32]
ffff80001139e550: aa0003f3 mov x19, x0
ffff80001139e554: aa1e03e0 mov x0, x30
ffff80001139e558: aa0103f5 mov x21, x1
ffff80001139e55c: 90000016 adrp x22, 0 <__stack_chk_guard>
ffff80001139e55c: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff80001139e560: 94000000 bl 0 <_mcount>
ffff80001139e560: R_AARCH64_CALL26 _mcount
ffff80001139e564: f94002c1 ldr x1, [x22]
ffff80001139e564: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
if (dev->flags & IFF_UP) {
ffff80001139e568: b9422aa0 ldr w0, [x21,#552]
{
ffff80001139e56c: f90027a1 str x1, [x29,#72]
struct netdev_notifier_info info = {
ffff80001139e570: 9100e3b4 add x20, x29, #0x38
if (dev->flags & IFF_UP) {
ffff80001139e574: 360001e0 tbz w0, #0, ffff80001139e5b0 <call_netdevice_unregister_notifiers+0x70>
struct netdev_notifier_info info = {
ffff80001139e578: a9007e9f stp xzr, xzr, [x20]
return nb->notifier_call(nb, val, &info);
ffff80001139e57c: f9400263 ldr x3, [x19]
ffff80001139e580: d2800141 mov x1, #0xa // #10
ffff80001139e584: aa1403e2 mov x2, x20
struct netdev_notifier_info info = {
ffff80001139e588: f9001fb5 str x21, [x29,#56]
return nb->notifier_call(nb, val, &info);
ffff80001139e58c: aa1303e0 mov x0, x19
ffff80001139e590: d63f0060 blr x3
ffff80001139e594: f9400263 ldr x3, [x19]
struct netdev_notifier_info info = {
ffff80001139e598: a9007e9f stp xzr, xzr, [x20]
ffff80001139e59c: f9001fb5 str x21, [x29,#56]
return nb->notifier_call(nb, val, &info);
ffff80001139e5a0: aa1303e0 mov x0, x19
ffff80001139e5a4: d2800041 mov x1, #0x2 // #2
ffff80001139e5a8: aa1403e2 mov x2, x20
ffff80001139e5ac: d63f0060 blr x3
struct netdev_notifier_info info = {
ffff80001139e5b0: a9007e9f stp xzr, xzr, [x20]
return nb->notifier_call(nb, val, &info);
ffff80001139e5b4: f9400263 ldr x3, [x19]
ffff80001139e5b8: d28000c1 mov x1, #0x6 // #6
struct netdev_notifier_info info = {
ffff80001139e5bc: f9001fb5 str x21, [x29,#56]
return nb->notifier_call(nb, val, &info);
ffff80001139e5c0: aa1303e0 mov x0, x19
ffff80001139e5c4: aa1403e2 mov x2, x20
ffff80001139e5c8: d63f0060 blr x3
}
ffff80001139e5cc: f94027a1 ldr x1, [x29,#72]
ffff80001139e5d0: f94002c0 ldr x0, [x22]
ffff80001139e5d0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139e5d4: eb00003f cmp x1, x0
ffff80001139e5d8: 540000a1 b.ne ffff80001139e5ec <call_netdevice_unregister_notifiers+0xac>
ffff80001139e5dc: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139e5e0: a9425bf5 ldp x21, x22, [sp,#32]
ffff80001139e5e4: a8c57bfd ldp x29, x30, [sp],#80
ffff80001139e5e8: d65f03c0 ret
ffff80001139e5ec: 94000000 bl 0 <__stack_chk_fail>
ffff80001139e5ec: R_AARCH64_CALL26 __stack_chk_fail
ffff80001139e5f0 <call_netdevice_register_net_notifiers>:
{
ffff80001139e5f0: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff80001139e5f4: 910003fd mov x29, sp
ffff80001139e5f8: a90153f3 stp x19, x20, [sp,#16]
ffff80001139e5fc: a9025bf5 stp x21, x22, [sp,#32]
ffff80001139e600: f9001bf7 str x23, [sp,#48]
ffff80001139e604: aa0003f5 mov x21, x0
ffff80001139e608: aa1e03e0 mov x0, x30
for_each_netdev(net, dev) {
ffff80001139e60c: aa0103f6 mov x22, x1
{
ffff80001139e610: 90000017 adrp x23, 0 <__stack_chk_guard>
ffff80001139e610: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff80001139e614: 94000000 bl 0 <_mcount>
ffff80001139e614: R_AARCH64_CALL26 _mcount
ffff80001139e618: f94002e0 ldr x0, [x23]
ffff80001139e618: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
for_each_netdev(net, dev) {
ffff80001139e61c: f8490ed4 ldr x20, [x22,#144]!
{
ffff80001139e620: f9002fa0 str x0, [x29,#88]
for_each_netdev(net, dev) {
ffff80001139e624: eb1402df cmp x22, x20
ffff80001139e628: 910123b3 add x19, x29, #0x48
ffff80001139e62c: d1012294 sub x20, x20, #0x48
ffff80001139e630: 540005e0 b.eq ffff80001139e6ec <call_netdevice_register_net_notifiers+0xfc>
struct netdev_notifier_info info = {
ffff80001139e634: a9007e7f stp xzr, xzr, [x19]
return nb->notifier_call(nb, val, &info);
ffff80001139e638: f94002a3 ldr x3, [x21]
struct netdev_notifier_info info = {
ffff80001139e63c: f9000274 str x20, [x19]
return nb->notifier_call(nb, val, &info);
ffff80001139e640: aa1503e0 mov x0, x21
ffff80001139e644: d28000a1 mov x1, #0x5 // #5
ffff80001139e648: aa1303e2 mov x2, x19
ffff80001139e64c: d63f0060 blr x3
}
/* Restore (negative) errno value from notify return value. */
static inline int notifier_to_errno(int ret)
{
ret &= ~NOTIFY_STOP_MASK;
ffff80001139e650: 12107800 and w0, w0, #0xffff7fff
return ret > NOTIFY_OK ? NOTIFY_OK - ret : 0;
ffff80001139e654: 7100041f cmp w0, #0x1
ffff80001139e658: 5400030d b.le ffff80001139e6b8 <call_netdevice_register_net_notifiers+0xc8>
for_each_netdev_continue_reverse(net, dev)
ffff80001139e65c: f9402a82 ldr x2, [x20,#80]
ffff80001139e660: 52800021 mov w1, #0x1 // #1
ffff80001139e664: eb0202df cmp x22, x2
ffff80001139e668: 4b000034 sub w20, w1, w0
ffff80001139e66c: d1012053 sub x19, x2, #0x48
ffff80001139e670: 54000100 b.eq ffff80001139e690 <call_netdevice_register_net_notifiers+0xa0>
call_netdevice_unregister_notifiers(nb, dev);
ffff80001139e674: aa1303e1 mov x1, x19
ffff80001139e678: aa1503e0 mov x0, x21
ffff80001139e67c: 97ffffb1 bl ffff80001139e540 <call_netdevice_unregister_notifiers>
for_each_netdev_continue_reverse(net, dev)
ffff80001139e680: f9402a73 ldr x19, [x19,#80]
ffff80001139e684: eb1302df cmp x22, x19
ffff80001139e688: d1012273 sub x19, x19, #0x48
ffff80001139e68c: 54ffff41 b.ne ffff80001139e674 <call_netdevice_register_net_notifiers+0x84>
ffff80001139e690: 2a1403e0 mov w0, w20
}
ffff80001139e694: f9402fa2 ldr x2, [x29,#88]
ffff80001139e698: f94002e1 ldr x1, [x23]
ffff80001139e698: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139e69c: eb01005f cmp x2, x1
ffff80001139e6a0: 540002a1 b.ne ffff80001139e6f4 <call_netdevice_register_net_notifiers+0x104>
ffff80001139e6a4: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139e6a8: a9425bf5 ldp x21, x22, [sp,#32]
ffff80001139e6ac: f9401bf7 ldr x23, [sp,#48]
ffff80001139e6b0: a8c67bfd ldp x29, x30, [sp],#96
ffff80001139e6b4: d65f03c0 ret
if (!(dev->flags & IFF_UP))
ffff80001139e6b8: b9422a80 ldr w0, [x20,#552]
ffff80001139e6bc: 36000100 tbz w0, #0, ffff80001139e6dc <call_netdevice_register_net_notifiers+0xec>
struct netdev_notifier_info info = {
ffff80001139e6c0: a9007e7f stp xzr, xzr, [x19]
return nb->notifier_call(nb, val, &info);
ffff80001139e6c4: f94002a3 ldr x3, [x21]
struct netdev_notifier_info info = {
ffff80001139e6c8: f9000274 str x20, [x19]
return nb->notifier_call(nb, val, &info);
ffff80001139e6cc: aa1503e0 mov x0, x21
ffff80001139e6d0: d2800021 mov x1, #0x1 // #1
ffff80001139e6d4: aa1303e2 mov x2, x19
ffff80001139e6d8: d63f0060 blr x3
for_each_netdev(net, dev) {
ffff80001139e6dc: f9402694 ldr x20, [x20,#72]
ffff80001139e6e0: eb1402df cmp x22, x20
ffff80001139e6e4: d1012294 sub x20, x20, #0x48
ffff80001139e6e8: 54fffa61 b.ne ffff80001139e634 <call_netdevice_register_net_notifiers+0x44>
return 0;
ffff80001139e6ec: 52800000 mov w0, #0x0 // #0
ffff80001139e6f0: 17ffffe9 b ffff80001139e694 <call_netdevice_register_net_notifiers+0xa4>
}
ffff80001139e6f4: 94000000 bl 0 <__stack_chk_fail>
ffff80001139e6f4: R_AARCH64_CALL26 __stack_chk_fail
ffff80001139e6f8 <dev_nit_active>:
{
ffff80001139e6f8: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139e6fc: 910003fd mov x29, sp
ffff80001139e700: f9000bf3 str x19, [sp,#16]
ffff80001139e704: aa0003f3 mov x19, x0
ffff80001139e708: aa1e03e0 mov x0, x30
ffff80001139e70c: 94000000 bl 0 <_mcount>
ffff80001139e70c: R_AARCH64_CALL26 _mcount
ffff80001139e710: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff80001139e710: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff80001139e714: 91000021 add x1, x1, #0x0
ffff80001139e714: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff80001139e718: f9440022 ldr x2, [x1,#2048]
ffff80001139e71c: 91200021 add x1, x1, #0x800
return !list_empty(&ptype_all) || !list_empty(&dev->ptype_all);
ffff80001139e720: eb02003f cmp x1, x2
ffff80001139e724: 52800020 mov w0, #0x1 // #1
ffff80001139e728: 54000080 b.eq ffff80001139e738 <dev_nit_active+0x40>
}
ffff80001139e72c: f9400bf3 ldr x19, [sp,#16]
ffff80001139e730: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139e734: d65f03c0 ret
ffff80001139e738: f8488e60 ldr x0, [x19,#136]!
return !list_empty(&ptype_all) || !list_empty(&dev->ptype_all);
ffff80001139e73c: eb00027f cmp x19, x0
ffff80001139e740: 1a9f07e0 cset w0, ne
}
ffff80001139e744: f9400bf3 ldr x19, [sp,#16]
ffff80001139e748: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139e74c: d65f03c0 ret
ffff80001139e750 <netdev_bind_sb_channel_queue>:
{
ffff80001139e750: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff80001139e754: 910003fd mov x29, sp
ffff80001139e758: a90153f3 stp x19, x20, [sp,#16]
ffff80001139e75c: a9025bf5 stp x21, x22, [sp,#32]
ffff80001139e760: aa0003f3 mov x19, x0
ffff80001139e764: aa1e03e0 mov x0, x30
ffff80001139e768: f9001fa1 str x1, [x29,#56]
ffff80001139e76c: 53001c56 uxtb w22, w2
ffff80001139e770: 53003c75 uxth w21, w3
ffff80001139e774: 53003c94 uxth w20, w4
ffff80001139e778: 94000000 bl 0 <_mcount>
ffff80001139e778: R_AARCH64_CALL26 _mcount
if (sb_dev->num_tc >= 0 || tc >= dev->num_tc)
ffff80001139e77c: f9401fa1 ldr x1, [x29,#56]
ffff80001139e780: 79d09020 ldrsh w0, [x1,#2120]
ffff80001139e784: 36f803a0 tbz w0, #31, ffff80001139e7f8 <netdev_bind_sb_channel_queue+0xa8>
ffff80001139e788: 79d09260 ldrsh w0, [x19,#2120]
ffff80001139e78c: 6b0002df cmp w22, w0
ffff80001139e790: 5400034a b.ge ffff80001139e7f8 <netdev_bind_sb_channel_queue+0xa8>
if ((offset + count) > dev->real_num_tx_queues)
ffff80001139e794: b943ce60 ldr w0, [x19,#972]
ffff80001139e798: 0b150282 add w2, w20, w21
ffff80001139e79c: 6b00005f cmp w2, w0
ffff80001139e7a0: 540002c8 b.hi ffff80001139e7f8 <netdev_bind_sb_channel_queue+0xa8>
ffff80001139e7a4: 8b360836 add x22, x1, w22, uxtb #2
while (count--)
ffff80001139e7a8: 510006a2 sub w2, w21, #0x1
sb_dev->tc_to_txq[tc].count = count;
ffff80001139e7ac: 791096d5 strh w21, [x22,#2122]
sb_dev->tc_to_txq[tc].offset = offset;
ffff80001139e7b0: 79109ad4 strh w20, [x22,#2124]
while (count--)
ffff80001139e7b4: 53003c42 uxth w2, w2
static inline
struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev,
unsigned int index)
{
return &dev->_tx[index];
ffff80001139e7b8: 52802804 mov w4, #0x140 // #320
ffff80001139e7bc: 529fffe0 mov w0, #0xffff // #65535
ffff80001139e7c0: 34000135 cbz w21, ffff80001139e7e4 <netdev_bind_sb_channel_queue+0x94>
netdev_get_tx_queue(dev, count + offset)->sb_dev = sb_dev;
ffff80001139e7c4: f941e263 ldr x3, [x19,#960]
ffff80001139e7c8: 0b020285 add w5, w20, w2
while (count--)
ffff80001139e7cc: 51000442 sub w2, w2, #0x1
netdev_get_tx_queue(dev, count + offset)->sb_dev = sb_dev;
ffff80001139e7d0: 9b240ca3 smaddl x3, w5, w4, x3
while (count--)
ffff80001139e7d4: 53003c42 uxth w2, w2
netdev_get_tx_queue(dev, count + offset)->sb_dev = sb_dev;
ffff80001139e7d8: f9003861 str x1, [x3,#112]
while (count--)
ffff80001139e7dc: 6b00005f cmp w2, w0
ffff80001139e7e0: 54ffff21 b.ne ffff80001139e7c4 <netdev_bind_sb_channel_queue+0x74>
}
ffff80001139e7e4: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139e7e8: a9425bf5 ldp x21, x22, [sp,#32]
return 0;
ffff80001139e7ec: 52800000 mov w0, #0x0 // #0
}
ffff80001139e7f0: a8c47bfd ldp x29, x30, [sp],#64
ffff80001139e7f4: d65f03c0 ret
ffff80001139e7f8: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139e7fc: a9425bf5 ldp x21, x22, [sp,#32]
return -EINVAL;
ffff80001139e800: 128002a0 mov w0, #0xffffffea // #-22
}
ffff80001139e804: a8c47bfd ldp x29, x30, [sp],#64
ffff80001139e808: d65f03c0 ret
ffff80001139e80c <netdev_set_sb_channel>:
{
ffff80001139e80c: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139e810: 910003fd mov x29, sp
ffff80001139e814: a90153f3 stp x19, x20, [sp,#16]
ffff80001139e818: aa0003f3 mov x19, x0
ffff80001139e81c: aa1e03e0 mov x0, x30
ffff80001139e820: 53003c34 uxth w20, w1
ffff80001139e824: 94000000 bl 0 <_mcount>
ffff80001139e824: R_AARCH64_CALL26 _mcount
if (netif_is_multiqueue(dev))
ffff80001139e828: b943ca60 ldr w0, [x19,#968]
ffff80001139e82c: 7100041f cmp w0, #0x1
ffff80001139e830: 54000108 b.hi ffff80001139e850 <netdev_set_sb_channel+0x44>
if (channel > S16_MAX)
ffff80001139e834: 37780174 tbnz w20, #15, ffff80001139e860 <netdev_set_sb_channel+0x54>
dev->num_tc = -channel;
ffff80001139e838: 4b1403f4 neg w20, w20
ffff80001139e83c: 79109274 strh w20, [x19,#2120]
return 0;
ffff80001139e840: 52800000 mov w0, #0x0 // #0
}
ffff80001139e844: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139e848: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139e84c: d65f03c0 ret
return -ENODEV;
ffff80001139e850: 12800240 mov w0, #0xffffffed // #-19
}
ffff80001139e854: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139e858: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139e85c: d65f03c0 ret
return -EINVAL;
ffff80001139e860: 128002a0 mov w0, #0xffffffea // #-22
ffff80001139e864: 17fffff8 b ffff80001139e844 <netdev_set_sb_channel+0x38>
ffff80001139e868 <netif_get_num_default_rss_queues>:
{
ffff80001139e868: a9bf7bfd stp x29, x30, [sp,#-16]!
ffff80001139e86c: 910003fd mov x29, sp
ffff80001139e870: aa1e03e0 mov x0, x30
ffff80001139e874: 94000000 bl 0 <_mcount>
ffff80001139e874: R_AARCH64_CALL26 _mcount
* of previous kernel.
*/
static inline bool is_kdump_kernel(void)
{
return elfcorehdr_addr != ELFCORE_ADDR_MAX;
ffff80001139e878: 90000000 adrp x0, 0 <elfcorehdr_addr>
ffff80001139e878: R_AARCH64_ADR_PREL_PG_HI21 elfcorehdr_addr
1 : min_t(int, DEFAULT_MAX_NUM_RSS_QUEUES, num_online_cpus());
ffff80001139e87c: f9400001 ldr x1, [x0]
ffff80001139e87c: R_AARCH64_LDST64_ABS_LO12_NC elfcorehdr_addr
ffff80001139e880: 52800020 mov w0, #0x1 // #1
ffff80001139e884: b100043f cmn x1, #0x1
ffff80001139e888: 540000c1 b.ne ffff80001139e8a0 <netif_get_num_default_rss_queues+0x38>
ffff80001139e88c: 90000000 adrp x0, 0 <__num_online_cpus>
ffff80001139e88c: R_AARCH64_ADR_PREL_PG_HI21 __num_online_cpus
ffff80001139e890: b9400000 ldr w0, [x0]
ffff80001139e890: R_AARCH64_LDST32_ABS_LO12_NC __num_online_cpus
ffff80001139e894: 52800101 mov w1, #0x8 // #8
ffff80001139e898: 7100201f cmp w0, #0x8
ffff80001139e89c: 1a81d000 csel w0, w0, w1, le
}
ffff80001139e8a0: a8c17bfd ldp x29, x30, [sp],#16
ffff80001139e8a4: d65f03c0 ret
ffff80001139e8a8 <passthru_features_check>:
{
ffff80001139e8a8: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139e8ac: 910003fd mov x29, sp
ffff80001139e8b0: aa1e03e0 mov x0, x30
ffff80001139e8b4: f9000fa2 str x2, [x29,#24]
ffff80001139e8b8: 94000000 bl 0 <_mcount>
ffff80001139e8b8: R_AARCH64_CALL26 _mcount
}
ffff80001139e8bc: f9400fa2 ldr x2, [x29,#24]
ffff80001139e8c0: aa0203e0 mov x0, x2
ffff80001139e8c4: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139e8c8: d65f03c0 ret
ffff80001139e8cc <dev_pick_tx_zero>:
{
ffff80001139e8cc: a9bf7bfd stp x29, x30, [sp,#-16]!
ffff80001139e8d0: 910003fd mov x29, sp
ffff80001139e8d4: aa1e03e0 mov x0, x30
ffff80001139e8d8: 94000000 bl 0 <_mcount>
ffff80001139e8d8: R_AARCH64_CALL26 _mcount
}
ffff80001139e8dc: 52800000 mov w0, #0x0 // #0
ffff80001139e8e0: a8c17bfd ldp x29, x30, [sp],#16
ffff80001139e8e4: d65f03c0 ret
ffff80001139e8e8 <gro_find_receive_by_type>:
{
ffff80001139e8e8: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139e8ec: 910003fd mov x29, sp
ffff80001139e8f0: f9000bf3 str x19, [sp,#16]
ffff80001139e8f4: 53003c13 uxth w19, w0
ffff80001139e8f8: aa1e03e0 mov x0, x30
ffff80001139e8fc: 94000000 bl 0 <_mcount>
ffff80001139e8fc: R_AARCH64_CALL26 _mcount
ffff80001139e900: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff80001139e900: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff80001139e904: 91000042 add x2, x2, #0x0
ffff80001139e904: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff80001139e908: f9440840 ldr x0, [x2,#2064]
ffff80001139e90c: 91204042 add x2, x2, #0x810
list_for_each_entry_rcu(ptype, offload_head, list) {
ffff80001139e910: eb00005f cmp x2, x0
ffff80001139e914: d1008000 sub x0, x0, #0x20
ffff80001139e918: 54000100 b.eq ffff80001139e938 <gro_find_receive_by_type+0x50>
if (ptype->type != type || !ptype->callbacks.gro_receive)
ffff80001139e91c: 79400001 ldrh w1, [x0]
ffff80001139e920: 6b13003f cmp w1, w19
ffff80001139e924: 54000120 b.eq ffff80001139e948 <gro_find_receive_by_type+0x60>
ffff80001139e928: f9401000 ldr x0, [x0,#32]
list_for_each_entry_rcu(ptype, offload_head, list) {
ffff80001139e92c: eb00005f cmp x2, x0
ffff80001139e930: d1008000 sub x0, x0, #0x20
ffff80001139e934: 54ffff41 b.ne ffff80001139e91c <gro_find_receive_by_type+0x34>
return NULL;
ffff80001139e938: d2800000 mov x0, #0x0 // #0
}
ffff80001139e93c: f9400bf3 ldr x19, [sp,#16]
ffff80001139e940: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139e944: d65f03c0 ret
if (ptype->type != type || !ptype->callbacks.gro_receive)
ffff80001139e948: f9400801 ldr x1, [x0,#16]
ffff80001139e94c: b4fffee1 cbz x1, ffff80001139e928 <gro_find_receive_by_type+0x40>
}
ffff80001139e950: f9400bf3 ldr x19, [sp,#16]
ffff80001139e954: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139e958: d65f03c0 ret
ffff80001139e95c <gro_find_complete_by_type>:
{
ffff80001139e95c: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139e960: 910003fd mov x29, sp
ffff80001139e964: f9000bf3 str x19, [sp,#16]
ffff80001139e968: 53003c13 uxth w19, w0
ffff80001139e96c: aa1e03e0 mov x0, x30
ffff80001139e970: 94000000 bl 0 <_mcount>
ffff80001139e970: R_AARCH64_CALL26 _mcount
ffff80001139e974: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff80001139e974: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff80001139e978: 91000042 add x2, x2, #0x0
ffff80001139e978: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff80001139e97c: f9440840 ldr x0, [x2,#2064]
ffff80001139e980: 91204042 add x2, x2, #0x810
list_for_each_entry_rcu(ptype, offload_head, list) {
ffff80001139e984: eb00005f cmp x2, x0
ffff80001139e988: d1008000 sub x0, x0, #0x20
ffff80001139e98c: 54000100 b.eq ffff80001139e9ac <gro_find_complete_by_type+0x50>
if (ptype->type != type || !ptype->callbacks.gro_complete)
ffff80001139e990: 79400001 ldrh w1, [x0]
ffff80001139e994: 6b13003f cmp w1, w19
ffff80001139e998: 54000120 b.eq ffff80001139e9bc <gro_find_complete_by_type+0x60>
ffff80001139e99c: f9401000 ldr x0, [x0,#32]
list_for_each_entry_rcu(ptype, offload_head, list) {
ffff80001139e9a0: eb00005f cmp x2, x0
ffff80001139e9a4: d1008000 sub x0, x0, #0x20
ffff80001139e9a8: 54ffff41 b.ne ffff80001139e990 <gro_find_complete_by_type+0x34>
return NULL;
ffff80001139e9ac: d2800000 mov x0, #0x0 // #0
}
ffff80001139e9b0: f9400bf3 ldr x19, [sp,#16]
ffff80001139e9b4: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139e9b8: d65f03c0 ret
if (ptype->type != type || !ptype->callbacks.gro_complete)
ffff80001139e9bc: f9400c01 ldr x1, [x0,#24]
ffff80001139e9c0: b4fffee1 cbz x1, ffff80001139e99c <gro_find_complete_by_type+0x40>
}
ffff80001139e9c4: f9400bf3 ldr x19, [sp,#16]
ffff80001139e9c8: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139e9cc: d65f03c0 ret
ffff80001139e9d0 <____netdev_has_upper_dev>:
}
return NULL;
}
static int ____netdev_has_upper_dev(struct net_device *upper_dev, void *data)
{
ffff80001139e9d0: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139e9d4: 910003fd mov x29, sp
ffff80001139e9d8: f9000bf3 str x19, [sp,#16]
ffff80001139e9dc: aa0003f3 mov x19, x0
ffff80001139e9e0: aa1e03e0 mov x0, x30
ffff80001139e9e4: f90017a1 str x1, [x29,#40]
ffff80001139e9e8: 94000000 bl 0 <_mcount>
ffff80001139e9e8: R_AARCH64_CALL26 _mcount
struct net_device *dev = data;
return upper_dev == dev;
ffff80001139e9ec: f94017a1 ldr x1, [x29,#40]
ffff80001139e9f0: eb13003f cmp x1, x19
}
ffff80001139e9f4: f9400bf3 ldr x19, [sp,#16]
ffff80001139e9f8: 1a9f17e0 cset w0, eq
ffff80001139e9fc: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139ea00: d65f03c0 ret
ffff80001139ea04 <netdev_adjacent_get_private>:
return !list_empty(&dev->adj_list.lower);
}
void *netdev_adjacent_get_private(struct list_head *adj_list)
{
ffff80001139ea04: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139ea08: 910003fd mov x29, sp
ffff80001139ea0c: f9000bf3 str x19, [sp,#16]
ffff80001139ea10: aa0003f3 mov x19, x0
ffff80001139ea14: aa1e03e0 mov x0, x30
ffff80001139ea18: 94000000 bl 0 <_mcount>
ffff80001139ea18: R_AARCH64_CALL26 _mcount
struct netdev_adjacent *adj;
adj = list_entry(adj_list, struct netdev_adjacent, list);
return adj->private;
}
ffff80001139ea1c: f85f8260 ldur x0, [x19,#-8]
ffff80001139ea20: f9400bf3 ldr x19, [sp,#16]
ffff80001139ea24: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139ea28: d65f03c0 ret
ffff80001139ea2c <netdev_upper_get_next_dev_rcu>:
* Gets the next device from the dev's upper list, starting from iter
* position. The caller must hold RCU read lock.
*/
struct net_device *netdev_upper_get_next_dev_rcu(struct net_device *dev,
struct list_head **iter)
{
ffff80001139ea2c: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139ea30: 910003fd mov x29, sp
ffff80001139ea34: f9000bf3 str x19, [sp,#16]
ffff80001139ea38: aa0003f3 mov x19, x0
ffff80001139ea3c: aa1e03e0 mov x0, x30
ffff80001139ea40: f90017a1 str x1, [x29,#40]
ffff80001139ea44: 94000000 bl 0 <_mcount>
ffff80001139ea44: R_AARCH64_CALL26 _mcount
struct netdev_adjacent *upper;
WARN_ON_ONCE(!rcu_read_lock_held() && !lockdep_rtnl_is_held());
upper = list_entry_rcu((*iter)->next, struct netdev_adjacent, list);
ffff80001139ea48: f94017a1 ldr x1, [x29,#40]
if (&upper->list == &dev->adj_list.upper)
ffff80001139ea4c: 9102a273 add x19, x19, #0xa8
upper = list_entry_rcu((*iter)->next, struct netdev_adjacent, list);
ffff80001139ea50: f9400020 ldr x0, [x1]
ffff80001139ea54: f9400002 ldr x2, [x0]
if (&upper->list == &dev->adj_list.upper)
ffff80001139ea58: eb13005f cmp x2, x19
ffff80001139ea5c: 540000c0 b.eq ffff80001139ea74 <netdev_upper_get_next_dev_rcu+0x48>
return NULL;
*iter = &upper->list;
ffff80001139ea60: f9000022 str x2, [x1]
return upper->dev;
ffff80001139ea64: f85e8040 ldur x0, [x2,#-24]
}
ffff80001139ea68: f9400bf3 ldr x19, [sp,#16]
ffff80001139ea6c: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139ea70: d65f03c0 ret
return NULL;
ffff80001139ea74: d2800000 mov x0, #0x0 // #0
ffff80001139ea78: 17fffffc b ffff80001139ea68 <netdev_upper_get_next_dev_rcu+0x3c>
ffff80001139ea7c <__netdev_walk_all_upper_dev>:
static int __netdev_walk_all_upper_dev(struct net_device *dev,
int (*fn)(struct net_device *dev,
void *data),
void *data)
{
ffff80001139ea7c: a9b17bfd stp x29, x30, [sp,#-240]!
ffff80001139ea80: 910003fd mov x29, sp
ffff80001139ea84: a90153f3 stp x19, x20, [sp,#16]
ffff80001139ea88: a9025bf5 stp x21, x22, [sp,#32]
ffff80001139ea8c: a90363f7 stp x23, x24, [sp,#48]
ffff80001139ea90: a9046bf9 stp x25, x26, [sp,#64]
ffff80001139ea94: aa0003f6 mov x22, x0
ffff80001139ea98: aa1e03e0 mov x0, x30
ffff80001139ea9c: aa0103f9 mov x25, x1
ffff80001139eaa0: 9000001a adrp x26, 0 <__stack_chk_guard>
ffff80001139eaa0: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff80001139eaa4: aa0203f8 mov x24, x2
ffff80001139eaa8: 94000000 bl 0 <_mcount>
ffff80001139eaa8: R_AARCH64_CALL26 _mcount
ffff80001139eaac: f9400340 ldr x0, [x26]
ffff80001139eaac: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
struct list_head *niter, *iter, *iter_stack[MAX_NEST_DEV + 1];
int ret, cur = 0;
bool ignore;
now = dev;
iter = &dev->adj_list.upper;
ffff80001139eab0: 9102a2d3 add x19, x22, #0xa8
{
ffff80001139eab4: f90077a0 str x0, [x29,#232]
iter = &dev->adj_list.upper;
ffff80001139eab8: aa1303e1 mov x1, x19
now = dev;
ffff80001139eabc: aa1603f4 mov x20, x22
int ret, cur = 0;
ffff80001139eac0: 52800015 mov w21, #0x0 // #0
if (!next) {
if (!cur)
return 0;
next = dev_stack[--cur];
niter = iter_stack[cur];
ffff80001139eac4: 910283b7 add x23, x29, #0xa0
upper = list_entry((*iter)->next, struct netdev_adjacent, list);
ffff80001139eac8: f9400263 ldr x3, [x19]
if (&upper->list == &dev->adj_list.upper)
ffff80001139eacc: eb01007f cmp x3, x1
ffff80001139ead0: aa0303f3 mov x19, x3
ffff80001139ead4: 540002c0 b.eq ffff80001139eb2c <__netdev_walk_all_upper_dev+0xb0>
return upper->dev;
ffff80001139ead8: f85e8064 ldur x4, [x3,#-24]
*ignore = upper->ignore;
ffff80001139eadc: 385f1060 ldurb w0, [x3,#-15]
if (!udev)
ffff80001139eae0: b4000264 cbz x4, ffff80001139eb2c <__netdev_walk_all_upper_dev+0xb0>
if (ignore)
ffff80001139eae4: 35ffff20 cbnz w0, ffff80001139eac8 <__netdev_walk_all_upper_dev+0x4c>
dev_stack[cur] = now;
ffff80001139eae8: 910163a0 add x0, x29, #0x58
ffff80001139eaec: f835d814 str x20, [x0,w21,sxtw #3]
iter_stack[cur++] = iter;
ffff80001139eaf0: f835dae3 str x3, [x23,w21,sxtw #3]
niter = &udev->adj_list.upper;
ffff80001139eaf4: 9102a093 add x19, x4, #0xa8
iter_stack[cur++] = iter;
ffff80001139eaf8: 110006b5 add w21, w21, #0x1
return upper->dev;
ffff80001139eafc: aa0403f4 mov x20, x4
if (now != dev) {
ffff80001139eb00: eb16029f cmp x20, x22
ffff80001139eb04: 540000a0 b.eq ffff80001139eb18 <__netdev_walk_all_upper_dev+0x9c>
ret = fn(now, data);
ffff80001139eb08: aa1403e0 mov x0, x20
ffff80001139eb0c: aa1803e1 mov x1, x24
ffff80001139eb10: d63f0320 blr x25
if (ret)
ffff80001139eb14: 350001a0 cbnz w0, ffff80001139eb48 <__netdev_walk_all_upper_dev+0xcc>
upper = list_entry((*iter)->next, struct netdev_adjacent, list);
ffff80001139eb18: f9400263 ldr x3, [x19]
ffff80001139eb1c: 9102a281 add x1, x20, #0xa8
if (&upper->list == &dev->adj_list.upper)
ffff80001139eb20: eb01007f cmp x3, x1
ffff80001139eb24: aa0303f3 mov x19, x3
ffff80001139eb28: 54fffd81 b.ne ffff80001139ead8 <__netdev_walk_all_upper_dev+0x5c>
if (!cur)
ffff80001139eb2c: 340000d5 cbz w21, ffff80001139eb44 <__netdev_walk_all_upper_dev+0xc8>
next = dev_stack[--cur];
ffff80001139eb30: 510006b5 sub w21, w21, #0x1
ffff80001139eb34: 910163a0 add x0, x29, #0x58
ffff80001139eb38: f875d814 ldr x20, [x0,w21,sxtw #3]
niter = iter_stack[cur];
ffff80001139eb3c: f875daf3 ldr x19, [x23,w21,sxtw #3]
ffff80001139eb40: 17fffff0 b ffff80001139eb00 <__netdev_walk_all_upper_dev+0x84>
return 0;
ffff80001139eb44: 2a1503e0 mov w0, w21
now = next;
iter = niter;
}
return 0;
}
ffff80001139eb48: f94077a2 ldr x2, [x29,#232]
ffff80001139eb4c: f9400341 ldr x1, [x26]
ffff80001139eb4c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139eb50: eb01005f cmp x2, x1
ffff80001139eb54: 540000e1 b.ne ffff80001139eb70 <__netdev_walk_all_upper_dev+0xf4>
ffff80001139eb58: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139eb5c: a9425bf5 ldp x21, x22, [sp,#32]
ffff80001139eb60: a94363f7 ldp x23, x24, [sp,#48]
ffff80001139eb64: a9446bf9 ldp x25, x26, [sp,#64]
ffff80001139eb68: a8cf7bfd ldp x29, x30, [sp],#240
ffff80001139eb6c: d65f03c0 ret
ffff80001139eb70: 94000000 bl 0 <__stack_chk_fail>
ffff80001139eb70: R_AARCH64_CALL26 __stack_chk_fail
ffff80001139eb74 <netdev_walk_all_upper_dev_rcu>:
int netdev_walk_all_upper_dev_rcu(struct net_device *dev,
int (*fn)(struct net_device *dev,
void *data),
void *data)
{
ffff80001139eb74: a9b17bfd stp x29, x30, [sp,#-240]!
ffff80001139eb78: 910003fd mov x29, sp
ffff80001139eb7c: a90153f3 stp x19, x20, [sp,#16]
ffff80001139eb80: a9025bf5 stp x21, x22, [sp,#32]
ffff80001139eb84: a90363f7 stp x23, x24, [sp,#48]
ffff80001139eb88: a9046bf9 stp x25, x26, [sp,#64]
ffff80001139eb8c: aa0003f6 mov x22, x0
ffff80001139eb90: aa1e03e0 mov x0, x30
ffff80001139eb94: 9000001a adrp x26, 0 <__stack_chk_guard>
ffff80001139eb94: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff80001139eb98: aa0103f9 mov x25, x1
ffff80001139eb9c: aa0203f8 mov x24, x2
ffff80001139eba0: 94000000 bl 0 <_mcount>
ffff80001139eba0: R_AARCH64_CALL26 _mcount
ffff80001139eba4: f9400340 ldr x0, [x26]
ffff80001139eba4: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
struct net_device *udev, *next, *now, *dev_stack[MAX_NEST_DEV + 1];
struct list_head *niter, *iter, *iter_stack[MAX_NEST_DEV + 1];
int ret, cur = 0;
now = dev;
iter = &dev->adj_list.upper;
ffff80001139eba8: 9102a2d5 add x21, x22, #0xa8
{
ffff80001139ebac: f90077a0 str x0, [x29,#232]
ffff80001139ebb0: f94002a3 ldr x3, [x21]
iter = &dev->adj_list.upper;
ffff80001139ebb4: aa1503e0 mov x0, x21
if (&upper->list == &dev->adj_list.upper)
ffff80001139ebb8: eb03001f cmp x0, x3
now = dev;
ffff80001139ebbc: aa1603f3 mov x19, x22
int ret, cur = 0;
ffff80001139ebc0: 52800014 mov w20, #0x0 // #0
if (!next) {
if (!cur)
return 0;
next = dev_stack[--cur];
niter = iter_stack[cur];
ffff80001139ebc4: 910283b7 add x23, x29, #0xa0
if (&upper->list == &dev->adj_list.upper)
ffff80001139ebc8: 54000260 b.eq ffff80001139ec14 <netdev_walk_all_upper_dev_rcu+0xa0>
return upper->dev;
ffff80001139ebcc: f85e8064 ldur x4, [x3,#-24]
if (!udev)
ffff80001139ebd0: b4000224 cbz x4, ffff80001139ec14 <netdev_walk_all_upper_dev_rcu+0xa0>
dev_stack[cur] = now;
ffff80001139ebd4: 910163a0 add x0, x29, #0x58
ffff80001139ebd8: f834d813 str x19, [x0,w20,sxtw #3]
iter_stack[cur++] = iter;
ffff80001139ebdc: f834dae3 str x3, [x23,w20,sxtw #3]
niter = &udev->adj_list.upper;
ffff80001139ebe0: 9102a095 add x21, x4, #0xa8
iter_stack[cur++] = iter;
ffff80001139ebe4: 11000694 add w20, w20, #0x1
ffff80001139ebe8: aa0403f3 mov x19, x4
if (now != dev) {
ffff80001139ebec: eb16027f cmp x19, x22
ffff80001139ebf0: 540000a0 b.eq ffff80001139ec04 <netdev_walk_all_upper_dev_rcu+0x90>
ret = fn(now, data);
ffff80001139ebf4: aa1303e0 mov x0, x19
ffff80001139ebf8: aa1803e1 mov x1, x24
ffff80001139ebfc: d63f0320 blr x25
if (ret)
ffff80001139ec00: 35000180 cbnz w0, ffff80001139ec30 <netdev_walk_all_upper_dev_rcu+0xbc>
ffff80001139ec04: f94002a3 ldr x3, [x21]
ffff80001139ec08: 9102a260 add x0, x19, #0xa8
if (&upper->list == &dev->adj_list.upper)
ffff80001139ec0c: eb03001f cmp x0, x3
ffff80001139ec10: 54fffde1 b.ne ffff80001139ebcc <netdev_walk_all_upper_dev_rcu+0x58>
if (!cur)
ffff80001139ec14: 340000d4 cbz w20, ffff80001139ec2c <netdev_walk_all_upper_dev_rcu+0xb8>
next = dev_stack[--cur];
ffff80001139ec18: 51000694 sub w20, w20, #0x1
ffff80001139ec1c: 910163a0 add x0, x29, #0x58
ffff80001139ec20: f874d813 ldr x19, [x0,w20,sxtw #3]
niter = iter_stack[cur];
ffff80001139ec24: f874daf5 ldr x21, [x23,w20,sxtw #3]
ffff80001139ec28: 17fffff1 b ffff80001139ebec <netdev_walk_all_upper_dev_rcu+0x78>
return 0;
ffff80001139ec2c: 2a1403e0 mov w0, w20
now = next;
iter = niter;
}
return 0;
}
ffff80001139ec30: f94077a2 ldr x2, [x29,#232]
ffff80001139ec34: f9400341 ldr x1, [x26]
ffff80001139ec34: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139ec38: eb01005f cmp x2, x1
ffff80001139ec3c: 540000e1 b.ne ffff80001139ec58 <netdev_walk_all_upper_dev_rcu+0xe4>
ffff80001139ec40: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139ec44: a9425bf5 ldp x21, x22, [sp,#32]
ffff80001139ec48: a94363f7 ldp x23, x24, [sp,#48]
ffff80001139ec4c: a9446bf9 ldp x25, x26, [sp,#64]
ffff80001139ec50: a8cf7bfd ldp x29, x30, [sp],#240
ffff80001139ec54: d65f03c0 ret
ffff80001139ec58: 94000000 bl 0 <__stack_chk_fail>
ffff80001139ec58: R_AARCH64_CALL26 __stack_chk_fail
ffff80001139ec5c <netdev_has_upper_dev_all_rcu>:
{
ffff80001139ec5c: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139ec60: 910003fd mov x29, sp
ffff80001139ec64: f9000bf3 str x19, [sp,#16]
ffff80001139ec68: aa0003f3 mov x19, x0
ffff80001139ec6c: aa1e03e0 mov x0, x30
ffff80001139ec70: f90017a1 str x1, [x29,#40]
ffff80001139ec74: 94000000 bl 0 <_mcount>
ffff80001139ec74: R_AARCH64_CALL26 _mcount
return !!netdev_walk_all_upper_dev_rcu(dev, ____netdev_has_upper_dev,
ffff80001139ec78: f94017a2 ldr x2, [x29,#40]
ffff80001139ec7c: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff80001139ec7c: R_AARCH64_ADR_PREL_PG_HI21 .text+0x654
ffff80001139ec80: aa1303e0 mov x0, x19
ffff80001139ec84: 91000021 add x1, x1, #0x0
ffff80001139ec84: R_AARCH64_ADD_ABS_LO12_NC .text+0x654
ffff80001139ec88: 94000000 bl ffff80001139eb74 <netdev_walk_all_upper_dev_rcu>
ffff80001139ec88: R_AARCH64_CALL26 netdev_walk_all_upper_dev_rcu
}
ffff80001139ec8c: f9400bf3 ldr x19, [sp,#16]
return !!netdev_walk_all_upper_dev_rcu(dev, ____netdev_has_upper_dev,
ffff80001139ec90: 6b1f001f cmp w0, wzr
}
ffff80001139ec94: 1a9f07e0 cset w0, ne
ffff80001139ec98: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139ec9c: d65f03c0 ret
ffff80001139eca0 <netdev_lower_get_next_private>:
* RTNL lock or its own locking that guarantees that the neighbour lower
* list will remain unchanged.
*/
void *netdev_lower_get_next_private(struct net_device *dev,
struct list_head **iter)
{
ffff80001139eca0: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139eca4: 910003fd mov x29, sp
ffff80001139eca8: f9000bf3 str x19, [sp,#16]
ffff80001139ecac: aa0003f3 mov x19, x0
ffff80001139ecb0: aa1e03e0 mov x0, x30
ffff80001139ecb4: f90017a1 str x1, [x29,#40]
ffff80001139ecb8: 94000000 bl 0 <_mcount>
ffff80001139ecb8: R_AARCH64_CALL26 _mcount
struct netdev_adjacent *lower;
lower = list_entry(*iter, struct netdev_adjacent, list);
ffff80001139ecbc: f94017a1 ldr x1, [x29,#40]
if (&lower->list == &dev->adj_list.lower)
ffff80001139ecc0: 9102e273 add x19, x19, #0xb8
lower = list_entry(*iter, struct netdev_adjacent, list);
ffff80001139ecc4: f9400022 ldr x2, [x1]
if (&lower->list == &dev->adj_list.lower)
ffff80001139ecc8: eb13005f cmp x2, x19
ffff80001139eccc: 540000e0 b.eq ffff80001139ece8 <netdev_lower_get_next_private+0x48>
return NULL;
*iter = lower->list.next;
ffff80001139ecd0: f9400040 ldr x0, [x2]
ffff80001139ecd4: f9000020 str x0, [x1]
return lower->private;
ffff80001139ecd8: f85f8040 ldur x0, [x2,#-8]
}
ffff80001139ecdc: f9400bf3 ldr x19, [sp,#16]
ffff80001139ece0: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139ece4: d65f03c0 ret
return NULL;
ffff80001139ece8: d2800000 mov x0, #0x0 // #0
ffff80001139ecec: 17fffffc b ffff80001139ecdc <netdev_lower_get_next_private+0x3c>
ffff80001139ecf0 <netdev_lower_get_next_private_rcu>:
* Gets the next netdev_adjacent->private from the dev's lower neighbour
* list, starting from iter position. The caller must hold RCU read lock.
*/
void *netdev_lower_get_next_private_rcu(struct net_device *dev,
struct list_head **iter)
{
ffff80001139ecf0: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139ecf4: 910003fd mov x29, sp
ffff80001139ecf8: f9000bf3 str x19, [sp,#16]
ffff80001139ecfc: aa0003f3 mov x19, x0
ffff80001139ed00: aa1e03e0 mov x0, x30
ffff80001139ed04: f90017a1 str x1, [x29,#40]
ffff80001139ed08: 94000000 bl 0 <_mcount>
ffff80001139ed08: R_AARCH64_CALL26 _mcount
struct netdev_adjacent *lower;
WARN_ON_ONCE(!rcu_read_lock_held());
lower = list_entry_rcu((*iter)->next, struct netdev_adjacent, list);
ffff80001139ed0c: f94017a1 ldr x1, [x29,#40]
if (&lower->list == &dev->adj_list.lower)
ffff80001139ed10: 9102e273 add x19, x19, #0xb8
lower = list_entry_rcu((*iter)->next, struct netdev_adjacent, list);
ffff80001139ed14: f9400020 ldr x0, [x1]
ffff80001139ed18: f9400002 ldr x2, [x0]
if (&lower->list == &dev->adj_list.lower)
ffff80001139ed1c: eb13005f cmp x2, x19
ffff80001139ed20: 540000c0 b.eq ffff80001139ed38 <netdev_lower_get_next_private_rcu+0x48>
return NULL;
*iter = &lower->list;
ffff80001139ed24: f9000022 str x2, [x1]
return lower->private;
ffff80001139ed28: f85f8040 ldur x0, [x2,#-8]
}
ffff80001139ed2c: f9400bf3 ldr x19, [sp,#16]
ffff80001139ed30: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139ed34: d65f03c0 ret
return NULL;
ffff80001139ed38: d2800000 mov x0, #0x0 // #0
ffff80001139ed3c: 17fffffc b ffff80001139ed2c <netdev_lower_get_next_private_rcu+0x3c>
ffff80001139ed40 <netdev_lower_get_next>:
* list, starting from iter position. The caller must hold RTNL lock or
* its own locking that guarantees that the neighbour lower
* list will remain unchanged.
*/
void *netdev_lower_get_next(struct net_device *dev, struct list_head **iter)
{
ffff80001139ed40: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139ed44: 910003fd mov x29, sp
ffff80001139ed48: f9000bf3 str x19, [sp,#16]
ffff80001139ed4c: aa0003f3 mov x19, x0
ffff80001139ed50: aa1e03e0 mov x0, x30
ffff80001139ed54: f90017a1 str x1, [x29,#40]
ffff80001139ed58: 94000000 bl 0 <_mcount>
ffff80001139ed58: R_AARCH64_CALL26 _mcount
struct netdev_adjacent *lower;
lower = list_entry(*iter, struct netdev_adjacent, list);
ffff80001139ed5c: f94017a1 ldr x1, [x29,#40]
if (&lower->list == &dev->adj_list.lower)
ffff80001139ed60: 9102e273 add x19, x19, #0xb8
lower = list_entry(*iter, struct netdev_adjacent, list);
ffff80001139ed64: f9400022 ldr x2, [x1]
if (&lower->list == &dev->adj_list.lower)
ffff80001139ed68: eb13005f cmp x2, x19
ffff80001139ed6c: 540000e0 b.eq ffff80001139ed88 <netdev_lower_get_next+0x48>
return NULL;
*iter = lower->list.next;
ffff80001139ed70: f9400040 ldr x0, [x2]
ffff80001139ed74: f9000020 str x0, [x1]
return lower->dev;
ffff80001139ed78: f85e8040 ldur x0, [x2,#-24]
}
ffff80001139ed7c: f9400bf3 ldr x19, [sp,#16]
ffff80001139ed80: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139ed84: d65f03c0 ret
return NULL;
ffff80001139ed88: d2800000 mov x0, #0x0 // #0
ffff80001139ed8c: 17fffffc b ffff80001139ed7c <netdev_lower_get_next+0x3c>
ffff80001139ed90 <netdev_walk_all_lower_dev>:
int netdev_walk_all_lower_dev(struct net_device *dev,
int (*fn)(struct net_device *dev,
void *data),
void *data)
{
ffff80001139ed90: a9b17bfd stp x29, x30, [sp,#-240]!
ffff80001139ed94: 910003fd mov x29, sp
ffff80001139ed98: a90153f3 stp x19, x20, [sp,#16]
ffff80001139ed9c: a9025bf5 stp x21, x22, [sp,#32]
ffff80001139eda0: a90363f7 stp x23, x24, [sp,#48]
ffff80001139eda4: a9046bf9 stp x25, x26, [sp,#64]
ffff80001139eda8: aa0003f6 mov x22, x0
ffff80001139edac: aa1e03e0 mov x0, x30
ffff80001139edb0: 9000001a adrp x26, 0 <__stack_chk_guard>
ffff80001139edb0: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff80001139edb4: aa0103f9 mov x25, x1
ffff80001139edb8: aa0203f8 mov x24, x2
ffff80001139edbc: 94000000 bl 0 <_mcount>
ffff80001139edbc: R_AARCH64_CALL26 _mcount
ffff80001139edc0: f9400340 ldr x0, [x26]
ffff80001139edc0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
struct net_device *ldev, *next, *now, *dev_stack[MAX_NEST_DEV + 1];
struct list_head *niter, *iter, *iter_stack[MAX_NEST_DEV + 1];
int ret, cur = 0;
now = dev;
iter = &dev->adj_list.lower;
ffff80001139edc4: 9102e2d5 add x21, x22, #0xb8
lower = list_entry((*iter)->next, struct netdev_adjacent, list);
ffff80001139edc8: f94002a3 ldr x3, [x21]
{
ffff80001139edcc: f90077a0 str x0, [x29,#232]
iter = &dev->adj_list.lower;
ffff80001139edd0: aa1503e0 mov x0, x21
if (&lower->list == &dev->adj_list.lower)
ffff80001139edd4: eb03001f cmp x0, x3
now = dev;
ffff80001139edd8: aa1603f3 mov x19, x22
int ret, cur = 0;
ffff80001139eddc: 52800014 mov w20, #0x0 // #0
if (!next) {
if (!cur)
return 0;
next = dev_stack[--cur];
niter = iter_stack[cur];
ffff80001139ede0: 910283b7 add x23, x29, #0xa0
if (&lower->list == &dev->adj_list.lower)
ffff80001139ede4: 54000260 b.eq ffff80001139ee30 <netdev_walk_all_lower_dev+0xa0>
return lower->dev;
ffff80001139ede8: f85e8064 ldur x4, [x3,#-24]
if (!ldev)
ffff80001139edec: b4000224 cbz x4, ffff80001139ee30 <netdev_walk_all_lower_dev+0xa0>
dev_stack[cur] = now;
ffff80001139edf0: 910163a0 add x0, x29, #0x58
ffff80001139edf4: f834d813 str x19, [x0,w20,sxtw #3]
iter_stack[cur++] = iter;
ffff80001139edf8: f834dae3 str x3, [x23,w20,sxtw #3]
niter = &ldev->adj_list.lower;
ffff80001139edfc: 9102e095 add x21, x4, #0xb8
iter_stack[cur++] = iter;
ffff80001139ee00: 11000694 add w20, w20, #0x1
ffff80001139ee04: aa0403f3 mov x19, x4
if (now != dev) {
ffff80001139ee08: eb16027f cmp x19, x22
ffff80001139ee0c: 540000a0 b.eq ffff80001139ee20 <netdev_walk_all_lower_dev+0x90>
ret = fn(now, data);
ffff80001139ee10: aa1303e0 mov x0, x19
ffff80001139ee14: aa1803e1 mov x1, x24
ffff80001139ee18: d63f0320 blr x25
if (ret)
ffff80001139ee1c: 35000180 cbnz w0, ffff80001139ee4c <netdev_walk_all_lower_dev+0xbc>
lower = list_entry((*iter)->next, struct netdev_adjacent, list);
ffff80001139ee20: f94002a3 ldr x3, [x21]
ffff80001139ee24: 9102e260 add x0, x19, #0xb8
if (&lower->list == &dev->adj_list.lower)
ffff80001139ee28: eb03001f cmp x0, x3
ffff80001139ee2c: 54fffde1 b.ne ffff80001139ede8 <netdev_walk_all_lower_dev+0x58>
if (!cur)
ffff80001139ee30: 340000d4 cbz w20, ffff80001139ee48 <netdev_walk_all_lower_dev+0xb8>
next = dev_stack[--cur];
ffff80001139ee34: 51000694 sub w20, w20, #0x1
ffff80001139ee38: 910163a0 add x0, x29, #0x58
ffff80001139ee3c: f874d813 ldr x19, [x0,w20,sxtw #3]
niter = iter_stack[cur];
ffff80001139ee40: f874daf5 ldr x21, [x23,w20,sxtw #3]
ffff80001139ee44: 17fffff1 b ffff80001139ee08 <netdev_walk_all_lower_dev+0x78>
return 0;
ffff80001139ee48: 2a1403e0 mov w0, w20
now = next;
iter = niter;
}
return 0;
}
ffff80001139ee4c: f94077a2 ldr x2, [x29,#232]
ffff80001139ee50: f9400341 ldr x1, [x26]
ffff80001139ee50: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139ee54: eb01005f cmp x2, x1
ffff80001139ee58: 540000e1 b.ne ffff80001139ee74 <netdev_walk_all_lower_dev+0xe4>
ffff80001139ee5c: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139ee60: a9425bf5 ldp x21, x22, [sp,#32]
ffff80001139ee64: a94363f7 ldp x23, x24, [sp,#48]
ffff80001139ee68: a9446bf9 ldp x25, x26, [sp,#64]
ffff80001139ee6c: a8cf7bfd ldp x29, x30, [sp],#240
ffff80001139ee70: d65f03c0 ret
ffff80001139ee74: 94000000 bl 0 <__stack_chk_fail>
ffff80001139ee74: R_AARCH64_CALL26 __stack_chk_fail
ffff80001139ee78 <netdev_next_lower_dev_rcu>:
return 0;
}
struct net_device *netdev_next_lower_dev_rcu(struct net_device *dev,
struct list_head **iter)
{
ffff80001139ee78: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139ee7c: 910003fd mov x29, sp
ffff80001139ee80: f9000bf3 str x19, [sp,#16]
ffff80001139ee84: aa0003f3 mov x19, x0
ffff80001139ee88: aa1e03e0 mov x0, x30
ffff80001139ee8c: f90017a1 str x1, [x29,#40]
ffff80001139ee90: 94000000 bl 0 <_mcount>
ffff80001139ee90: R_AARCH64_CALL26 _mcount
struct netdev_adjacent *lower;
lower = list_entry_rcu((*iter)->next, struct netdev_adjacent, list);
ffff80001139ee94: f94017a1 ldr x1, [x29,#40]
if (&lower->list == &dev->adj_list.lower)
ffff80001139ee98: 9102e273 add x19, x19, #0xb8
lower = list_entry_rcu((*iter)->next, struct netdev_adjacent, list);
ffff80001139ee9c: f9400020 ldr x0, [x1]
ffff80001139eea0: f9400002 ldr x2, [x0]
if (&lower->list == &dev->adj_list.lower)
ffff80001139eea4: eb13005f cmp x2, x19
ffff80001139eea8: 540000c0 b.eq ffff80001139eec0 <netdev_next_lower_dev_rcu+0x48>
return NULL;
*iter = &lower->list;
ffff80001139eeac: f9000022 str x2, [x1]
return lower->dev;
ffff80001139eeb0: f85e8040 ldur x0, [x2,#-24]
}
ffff80001139eeb4: f9400bf3 ldr x19, [sp,#16]
ffff80001139eeb8: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139eebc: d65f03c0 ret
return NULL;
ffff80001139eec0: d2800000 mov x0, #0x0 // #0
ffff80001139eec4: 17fffffc b ffff80001139eeb4 <netdev_next_lower_dev_rcu+0x3c>
ffff80001139eec8 <__netdev_upper_depth>:
EXPORT_SYMBOL(netdev_next_lower_dev_rcu);
static u8 __netdev_upper_depth(struct net_device *dev)
{
ffff80001139eec8: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139eecc: 910003fd mov x29, sp
ffff80001139eed0: f9000bf3 str x19, [sp,#16]
ffff80001139eed4: aa0003f3 mov x19, x0
ffff80001139eed8: aa1e03e0 mov x0, x30
ffff80001139eedc: 94000000 bl 0 <_mcount>
ffff80001139eedc: R_AARCH64_CALL26 _mcount
upper = list_entry((*iter)->next, struct netdev_adjacent, list);
ffff80001139eee0: f9405662 ldr x2, [x19,#168]
struct net_device *udev;
struct list_head *iter;
u8 max_depth = 0;
bool ignore;
for (iter = &dev->adj_list.upper,
ffff80001139eee4: 9102a264 add x4, x19, #0xa8
if (&upper->list == &dev->adj_list.upper)
ffff80001139eee8: eb02009f cmp x4, x2
ffff80001139eeec: 54000280 b.eq ffff80001139ef3c <__netdev_upper_depth+0x74>
return upper->dev;
ffff80001139eef0: f85e8043 ldur x3, [x2,#-24]
*ignore = upper->ignore;
ffff80001139eef4: 385f1041 ldurb w1, [x2,#-15]
for (iter = &dev->adj_list.upper,
ffff80001139eef8: 52800000 mov w0, #0x0 // #0
ffff80001139eefc: b40001a3 cbz x3, ffff80001139ef30 <__netdev_upper_depth+0x68>
udev = __netdev_next_upper_dev(dev, &iter, &ignore);
udev;
udev = __netdev_next_upper_dev(dev, &iter, &ignore)) {
if (ignore)
ffff80001139ef00: 350000a1 cbnz w1, ffff80001139ef14 <__netdev_upper_depth+0x4c>
continue;
if (max_depth < udev->upper_level)
ffff80001139ef04: 3949c061 ldrb w1, [x3,#624]
ffff80001139ef08: 6b00003f cmp w1, w0
ffff80001139ef0c: 1a808020 csel w0, w1, w0, hi
ffff80001139ef10: 53001c00 uxtb w0, w0
upper = list_entry((*iter)->next, struct netdev_adjacent, list);
ffff80001139ef14: f9400041 ldr x1, [x2]
if (&upper->list == &dev->adj_list.upper)
ffff80001139ef18: eb01009f cmp x4, x1
ffff80001139ef1c: aa0103e2 mov x2, x1
ffff80001139ef20: 54000080 b.eq ffff80001139ef30 <__netdev_upper_depth+0x68>
return upper->dev;
ffff80001139ef24: f85e8023 ldur x3, [x1,#-24]
*ignore = upper->ignore;
ffff80001139ef28: 385f1021 ldurb w1, [x1,#-15]
for (iter = &dev->adj_list.upper,
ffff80001139ef2c: b5fffea3 cbnz x3, ffff80001139ef00 <__netdev_upper_depth+0x38>
max_depth = udev->upper_level;
}
return max_depth;
}
ffff80001139ef30: f9400bf3 ldr x19, [sp,#16]
ffff80001139ef34: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139ef38: d65f03c0 ret
if (&upper->list == &dev->adj_list.upper)
ffff80001139ef3c: 52800000 mov w0, #0x0 // #0
}
ffff80001139ef40: f9400bf3 ldr x19, [sp,#16]
ffff80001139ef44: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139ef48: d65f03c0 ret
ffff80001139ef4c <__netdev_lower_depth>:
static u8 __netdev_lower_depth(struct net_device *dev)
{
ffff80001139ef4c: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139ef50: 910003fd mov x29, sp
ffff80001139ef54: f9000bf3 str x19, [sp,#16]
ffff80001139ef58: aa0003f3 mov x19, x0
ffff80001139ef5c: aa1e03e0 mov x0, x30
ffff80001139ef60: 94000000 bl 0 <_mcount>
ffff80001139ef60: R_AARCH64_CALL26 _mcount
lower = list_entry((*iter)->next, struct netdev_adjacent, list);
ffff80001139ef64: f9405e62 ldr x2, [x19,#184]
struct net_device *ldev;
struct list_head *iter;
u8 max_depth = 0;
bool ignore;
for (iter = &dev->adj_list.lower,
ffff80001139ef68: 9102e264 add x4, x19, #0xb8
if (&lower->list == &dev->adj_list.lower)
ffff80001139ef6c: eb02009f cmp x4, x2
ffff80001139ef70: 54000280 b.eq ffff80001139efc0 <__netdev_lower_depth+0x74>
return lower->dev;
ffff80001139ef74: f85e8043 ldur x3, [x2,#-24]
*ignore = lower->ignore;
ffff80001139ef78: 385f1041 ldurb w1, [x2,#-15]
for (iter = &dev->adj_list.lower,
ffff80001139ef7c: 52800000 mov w0, #0x0 // #0
ffff80001139ef80: b40001a3 cbz x3, ffff80001139efb4 <__netdev_lower_depth+0x68>
ldev = __netdev_next_lower_dev(dev, &iter, &ignore);
ldev;
ldev = __netdev_next_lower_dev(dev, &iter, &ignore)) {
if (ignore)
ffff80001139ef84: 350000a1 cbnz w1, ffff80001139ef98 <__netdev_lower_depth+0x4c>
continue;
if (max_depth < ldev->lower_level)
ffff80001139ef88: 3949c461 ldrb w1, [x3,#625]
ffff80001139ef8c: 6b00003f cmp w1, w0
ffff80001139ef90: 1a808020 csel w0, w1, w0, hi
ffff80001139ef94: 53001c00 uxtb w0, w0
lower = list_entry((*iter)->next, struct netdev_adjacent, list);
ffff80001139ef98: f9400041 ldr x1, [x2]
if (&lower->list == &dev->adj_list.lower)
ffff80001139ef9c: eb01009f cmp x4, x1
ffff80001139efa0: aa0103e2 mov x2, x1
ffff80001139efa4: 54000080 b.eq ffff80001139efb4 <__netdev_lower_depth+0x68>
return lower->dev;
ffff80001139efa8: f85e8023 ldur x3, [x1,#-24]
*ignore = lower->ignore;
ffff80001139efac: 385f1021 ldurb w1, [x1,#-15]
for (iter = &dev->adj_list.lower,
ffff80001139efb0: b5fffea3 cbnz x3, ffff80001139ef84 <__netdev_lower_depth+0x38>
max_depth = ldev->lower_level;
}
return max_depth;
}
ffff80001139efb4: f9400bf3 ldr x19, [sp,#16]
ffff80001139efb8: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139efbc: d65f03c0 ret
if (&lower->list == &dev->adj_list.lower)
ffff80001139efc0: 52800000 mov w0, #0x0 // #0
}
ffff80001139efc4: f9400bf3 ldr x19, [sp,#16]
ffff80001139efc8: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139efcc: d65f03c0 ret
ffff80001139efd0 <__netdev_update_upper_level>:
static int __netdev_update_upper_level(struct net_device *dev, void *data)
{
ffff80001139efd0: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139efd4: 910003fd mov x29, sp
ffff80001139efd8: f9000bf3 str x19, [sp,#16]
ffff80001139efdc: aa0003f3 mov x19, x0
ffff80001139efe0: aa1e03e0 mov x0, x30
ffff80001139efe4: 94000000 bl 0 <_mcount>
ffff80001139efe4: R_AARCH64_CALL26 _mcount
dev->upper_level = __netdev_upper_depth(dev) + 1;
ffff80001139efe8: aa1303e0 mov x0, x19
ffff80001139efec: 97ffffb7 bl ffff80001139eec8 <__netdev_upper_depth>
ffff80001139eff0: 53001c00 uxtb w0, w0
ffff80001139eff4: 11000400 add w0, w0, #0x1
ffff80001139eff8: 3909c260 strb w0, [x19,#624]
return 0;
}
ffff80001139effc: f9400bf3 ldr x19, [sp,#16]
ffff80001139f000: 52800000 mov w0, #0x0 // #0
ffff80001139f004: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139f008: d65f03c0 ret
ffff80001139f00c <__netdev_update_lower_level>:
static int __netdev_update_lower_level(struct net_device *dev, void *data)
{
ffff80001139f00c: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139f010: 910003fd mov x29, sp
ffff80001139f014: f9000bf3 str x19, [sp,#16]
ffff80001139f018: aa0003f3 mov x19, x0
ffff80001139f01c: aa1e03e0 mov x0, x30
ffff80001139f020: 94000000 bl 0 <_mcount>
ffff80001139f020: R_AARCH64_CALL26 _mcount
dev->lower_level = __netdev_lower_depth(dev) + 1;
ffff80001139f024: aa1303e0 mov x0, x19
ffff80001139f028: 97ffffc9 bl ffff80001139ef4c <__netdev_lower_depth>
ffff80001139f02c: 53001c00 uxtb w0, w0
ffff80001139f030: 11000400 add w0, w0, #0x1
ffff80001139f034: 3909c660 strb w0, [x19,#625]
return 0;
}
ffff80001139f038: f9400bf3 ldr x19, [sp,#16]
ffff80001139f03c: 52800000 mov w0, #0x0 // #0
ffff80001139f040: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139f044: d65f03c0 ret
ffff80001139f048 <netdev_walk_all_lower_dev_rcu>:
int netdev_walk_all_lower_dev_rcu(struct net_device *dev,
int (*fn)(struct net_device *dev,
void *data),
void *data)
{
ffff80001139f048: a9b17bfd stp x29, x30, [sp,#-240]!
ffff80001139f04c: 910003fd mov x29, sp
ffff80001139f050: a90153f3 stp x19, x20, [sp,#16]
ffff80001139f054: a9025bf5 stp x21, x22, [sp,#32]
ffff80001139f058: a90363f7 stp x23, x24, [sp,#48]
ffff80001139f05c: a9046bf9 stp x25, x26, [sp,#64]
ffff80001139f060: aa0003f6 mov x22, x0
ffff80001139f064: aa1e03e0 mov x0, x30
ffff80001139f068: 9000001a adrp x26, 0 <__stack_chk_guard>
ffff80001139f068: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff80001139f06c: aa0103f9 mov x25, x1
ffff80001139f070: aa0203f8 mov x24, x2
ffff80001139f074: 94000000 bl 0 <_mcount>
ffff80001139f074: R_AARCH64_CALL26 _mcount
ffff80001139f078: f9400340 ldr x0, [x26]
ffff80001139f078: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
struct net_device *ldev, *next, *now, *dev_stack[MAX_NEST_DEV + 1];
struct list_head *niter, *iter, *iter_stack[MAX_NEST_DEV + 1];
int ret, cur = 0;
now = dev;
iter = &dev->adj_list.lower;
ffff80001139f07c: 9102e2d5 add x21, x22, #0xb8
{
ffff80001139f080: f90077a0 str x0, [x29,#232]
ffff80001139f084: f94002a3 ldr x3, [x21]
iter = &dev->adj_list.lower;
ffff80001139f088: aa1503e0 mov x0, x21
if (&lower->list == &dev->adj_list.lower)
ffff80001139f08c: eb03001f cmp x0, x3
now = dev;
ffff80001139f090: aa1603f3 mov x19, x22
int ret, cur = 0;
ffff80001139f094: 52800014 mov w20, #0x0 // #0
if (!next) {
if (!cur)
return 0;
next = dev_stack[--cur];
niter = iter_stack[cur];
ffff80001139f098: 910283b7 add x23, x29, #0xa0
if (&lower->list == &dev->adj_list.lower)
ffff80001139f09c: 54000260 b.eq ffff80001139f0e8 <netdev_walk_all_lower_dev_rcu+0xa0>
return lower->dev;
ffff80001139f0a0: f85e8064 ldur x4, [x3,#-24]
if (!ldev)
ffff80001139f0a4: b4000224 cbz x4, ffff80001139f0e8 <netdev_walk_all_lower_dev_rcu+0xa0>
dev_stack[cur] = now;
ffff80001139f0a8: 910163a0 add x0, x29, #0x58
ffff80001139f0ac: f834d813 str x19, [x0,w20,sxtw #3]
iter_stack[cur++] = iter;
ffff80001139f0b0: f834dae3 str x3, [x23,w20,sxtw #3]
niter = &ldev->adj_list.lower;
ffff80001139f0b4: 9102e095 add x21, x4, #0xb8
iter_stack[cur++] = iter;
ffff80001139f0b8: 11000694 add w20, w20, #0x1
ffff80001139f0bc: aa0403f3 mov x19, x4
if (now != dev) {
ffff80001139f0c0: eb16027f cmp x19, x22
ffff80001139f0c4: 540000a0 b.eq ffff80001139f0d8 <netdev_walk_all_lower_dev_rcu+0x90>
ret = fn(now, data);
ffff80001139f0c8: aa1303e0 mov x0, x19
ffff80001139f0cc: aa1803e1 mov x1, x24
ffff80001139f0d0: d63f0320 blr x25
if (ret)
ffff80001139f0d4: 35000180 cbnz w0, ffff80001139f104 <netdev_walk_all_lower_dev_rcu+0xbc>
ffff80001139f0d8: f94002a3 ldr x3, [x21]
ffff80001139f0dc: 9102e260 add x0, x19, #0xb8
if (&lower->list == &dev->adj_list.lower)
ffff80001139f0e0: eb03001f cmp x0, x3
ffff80001139f0e4: 54fffde1 b.ne ffff80001139f0a0 <netdev_walk_all_lower_dev_rcu+0x58>
if (!cur)
ffff80001139f0e8: 340000d4 cbz w20, ffff80001139f100 <netdev_walk_all_lower_dev_rcu+0xb8>
next = dev_stack[--cur];
ffff80001139f0ec: 51000694 sub w20, w20, #0x1
ffff80001139f0f0: 910163a0 add x0, x29, #0x58
ffff80001139f0f4: f874d813 ldr x19, [x0,w20,sxtw #3]
niter = iter_stack[cur];
ffff80001139f0f8: f874daf5 ldr x21, [x23,w20,sxtw #3]
ffff80001139f0fc: 17fffff1 b ffff80001139f0c0 <netdev_walk_all_lower_dev_rcu+0x78>
return 0;
ffff80001139f100: 2a1403e0 mov w0, w20
now = next;
iter = niter;
}
return 0;
}
ffff80001139f104: f94077a2 ldr x2, [x29,#232]
ffff80001139f108: f9400341 ldr x1, [x26]
ffff80001139f108: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139f10c: eb01005f cmp x2, x1
ffff80001139f110: 540000e1 b.ne ffff80001139f12c <netdev_walk_all_lower_dev_rcu+0xe4>
ffff80001139f114: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139f118: a9425bf5 ldp x21, x22, [sp,#32]
ffff80001139f11c: a94363f7 ldp x23, x24, [sp,#48]
ffff80001139f120: a9446bf9 ldp x25, x26, [sp,#64]
ffff80001139f124: a8cf7bfd ldp x29, x30, [sp],#240
ffff80001139f128: d65f03c0 ret
ffff80001139f12c: 94000000 bl 0 <__stack_chk_fail>
ffff80001139f12c: R_AARCH64_CALL26 __stack_chk_fail
ffff80001139f130 <__netdev_adjacent_dev_set>:
EXPORT_SYMBOL(netdev_upper_dev_unlink);
static void __netdev_adjacent_dev_set(struct net_device *upper_dev,
struct net_device *lower_dev,
bool val)
{
ffff80001139f130: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139f134: 910003fd mov x29, sp
ffff80001139f138: a90153f3 stp x19, x20, [sp,#16]
ffff80001139f13c: aa0003f3 mov x19, x0
ffff80001139f140: aa1e03e0 mov x0, x30
ffff80001139f144: f90017a1 str x1, [x29,#40]
ffff80001139f148: 53001c54 uxtb w20, w2
ffff80001139f14c: 94000000 bl 0 <_mcount>
ffff80001139f14c: R_AARCH64_CALL26 _mcount
list_for_each_entry(adj, adj_list, list) {
ffff80001139f150: f9405e63 ldr x3, [x19,#184]
struct netdev_adjacent *adj;
adj = __netdev_find_adj(lower_dev, &upper_dev->adj_list.lower);
ffff80001139f154: 9102e260 add x0, x19, #0xb8
list_for_each_entry(adj, adj_list, list) {
ffff80001139f158: eb03001f cmp x0, x3
ffff80001139f15c: d1006064 sub x4, x3, #0x18
ffff80001139f160: f94017a1 ldr x1, [x29,#40]
ffff80001139f164: 54000180 b.eq ffff80001139f194 <__netdev_adjacent_dev_set+0x64>
if (adj->dev == adj_dev)
ffff80001139f168: f85e8062 ldur x2, [x3,#-24]
ffff80001139f16c: eb02003f cmp x1, x2
ffff80001139f170: 540000a1 b.ne ffff80001139f184 <__netdev_adjacent_dev_set+0x54>
ffff80001139f174: 1400001b b ffff80001139f1e0 <__netdev_adjacent_dev_set+0xb0>
ffff80001139f178: f85e8063 ldur x3, [x3,#-24]
ffff80001139f17c: eb03003f cmp x1, x3
ffff80001139f180: 54000300 b.eq ffff80001139f1e0 <__netdev_adjacent_dev_set+0xb0>
list_for_each_entry(adj, adj_list, list) {
ffff80001139f184: f9400c83 ldr x3, [x4,#24]
ffff80001139f188: eb03001f cmp x0, x3
ffff80001139f18c: d1006064 sub x4, x3, #0x18
ffff80001139f190: 54ffff41 b.ne ffff80001139f178 <__netdev_adjacent_dev_set+0x48>
ffff80001139f194: f9405420 ldr x0, [x1,#168]
if (adj)
adj->ignore = val;
adj = __netdev_find_adj(upper_dev, &lower_dev->adj_list.upper);
ffff80001139f198: 9102a021 add x1, x1, #0xa8
list_for_each_entry(adj, adj_list, list) {
ffff80001139f19c: eb00003f cmp x1, x0
ffff80001139f1a0: d1006004 sub x4, x0, #0x18
ffff80001139f1a4: 54000180 b.eq ffff80001139f1d4 <__netdev_adjacent_dev_set+0xa4>
if (adj->dev == adj_dev)
ffff80001139f1a8: f85e8000 ldur x0, [x0,#-24]
ffff80001139f1ac: eb00027f cmp x19, x0
ffff80001139f1b0: 540000a1 b.ne ffff80001139f1c4 <__netdev_adjacent_dev_set+0x94>
ffff80001139f1b4: 1400000e b ffff80001139f1ec <__netdev_adjacent_dev_set+0xbc>
ffff80001139f1b8: f85e8063 ldur x3, [x3,#-24]
ffff80001139f1bc: eb03027f cmp x19, x3
ffff80001139f1c0: 54000160 b.eq ffff80001139f1ec <__netdev_adjacent_dev_set+0xbc>
list_for_each_entry(adj, adj_list, list) {
ffff80001139f1c4: f9400c83 ldr x3, [x4,#24]
ffff80001139f1c8: eb03003f cmp x1, x3
ffff80001139f1cc: d1006064 sub x4, x3, #0x18
ffff80001139f1d0: 54ffff41 b.ne ffff80001139f1b8 <__netdev_adjacent_dev_set+0x88>
if (adj)
adj->ignore = val;
}
ffff80001139f1d4: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139f1d8: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f1dc: d65f03c0 ret
if (adj)
ffff80001139f1e0: b4fffda4 cbz x4, ffff80001139f194 <__netdev_adjacent_dev_set+0x64>
adj->ignore = val;
ffff80001139f1e4: 39002494 strb w20, [x4,#9]
ffff80001139f1e8: 17ffffeb b ffff80001139f194 <__netdev_adjacent_dev_set+0x64>
if (adj)
ffff80001139f1ec: b4ffff44 cbz x4, ffff80001139f1d4 <__netdev_adjacent_dev_set+0xa4>
adj->ignore = val;
ffff80001139f1f0: 39002494 strb w20, [x4,#9]
}
ffff80001139f1f4: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139f1f8: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f1fc: d65f03c0 ret
ffff80001139f200 <netdev_lower_dev_get_private>:
}
}
void *netdev_lower_dev_get_private(struct net_device *dev,
struct net_device *lower_dev)
{
ffff80001139f200: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139f204: 910003fd mov x29, sp
ffff80001139f208: f9000bf3 str x19, [sp,#16]
ffff80001139f20c: aa0003f3 mov x19, x0
ffff80001139f210: aa1e03e0 mov x0, x30
ffff80001139f214: f90017a1 str x1, [x29,#40]
ffff80001139f218: 94000000 bl 0 <_mcount>
ffff80001139f218: R_AARCH64_CALL26 _mcount
struct netdev_adjacent *lower;
if (!lower_dev)
ffff80001139f21c: f94017a1 ldr x1, [x29,#40]
ffff80001139f220: b4000301 cbz x1, ffff80001139f280 <netdev_lower_dev_get_private+0x80>
list_for_each_entry(adj, adj_list, list) {
ffff80001139f224: f9405e62 ldr x2, [x19,#184]
return NULL;
lower = __netdev_find_adj(lower_dev, &dev->adj_list.lower);
ffff80001139f228: 9102e260 add x0, x19, #0xb8
list_for_each_entry(adj, adj_list, list) {
ffff80001139f22c: eb02001f cmp x0, x2
ffff80001139f230: d1006043 sub x3, x2, #0x18
ffff80001139f234: 540000c1 b.ne ffff80001139f24c <netdev_lower_dev_get_private+0x4c>
ffff80001139f238: 1400000e b ffff80001139f270 <netdev_lower_dev_get_private+0x70>
ffff80001139f23c: f9400c62 ldr x2, [x3,#24]
ffff80001139f240: eb02001f cmp x0, x2
ffff80001139f244: d1006043 sub x3, x2, #0x18
ffff80001139f248: 54000140 b.eq ffff80001139f270 <netdev_lower_dev_get_private+0x70>
if (adj->dev == adj_dev)
ffff80001139f24c: f85e8042 ldur x2, [x2,#-24]
ffff80001139f250: eb02003f cmp x1, x2
ffff80001139f254: 54ffff41 b.ne ffff80001139f23c <netdev_lower_dev_get_private+0x3c>
return NULL;
ffff80001139f258: d2800000 mov x0, #0x0 // #0
if (!lower)
ffff80001139f25c: b40000c3 cbz x3, ffff80001139f274 <netdev_lower_dev_get_private+0x74>
return NULL;
return lower->private;
ffff80001139f260: f9400860 ldr x0, [x3,#16]
}
ffff80001139f264: f9400bf3 ldr x19, [sp,#16]
ffff80001139f268: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f26c: d65f03c0 ret
return NULL;
ffff80001139f270: d2800000 mov x0, #0x0 // #0
}
ffff80001139f274: f9400bf3 ldr x19, [sp,#16]
ffff80001139f278: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f27c: d65f03c0 ret
return NULL;
ffff80001139f280: aa0103e0 mov x0, x1
ffff80001139f284: 17fffffc b ffff80001139f274 <netdev_lower_dev_get_private+0x74>
ffff80001139f288 <dev_get_flags>:
* @dev: device
*
* Get the combination of flag bits exported through APIs to userspace.
*/
unsigned int dev_get_flags(const struct net_device *dev)
{
ffff80001139f288: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139f28c: 910003fd mov x29, sp
ffff80001139f290: f9000bf3 str x19, [sp,#16]
ffff80001139f294: aa0003f3 mov x19, x0
ffff80001139f298: aa1e03e0 mov x0, x30
ffff80001139f29c: 94000000 bl 0 <_mcount>
ffff80001139f29c: R_AARCH64_CALL26 _mcount
flags = (dev->flags & ~(IFF_PROMISC |
IFF_ALLMULTI |
IFF_RUNNING |
IFF_LOWER_UP |
IFF_DORMANT)) |
ffff80001139f2a0: 79446260 ldrh w0, [x19,#560]
flags = (dev->flags & ~(IFF_PROMISC |
ffff80001139f2a4: b9422a63 ldr w3, [x19,#552]
ffff80001139f2a8: 529f97e1 mov w1, #0xfcbf // #64703
ffff80001139f2ac: 72bfff81 movk w1, #0xfffc, lsl #16
* @nr: bit number to test
* @addr: Address to start counting from
*/
static inline int test_bit(int nr, const volatile unsigned long *addr)
{
return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
ffff80001139f2b0: f9402262 ldr x2, [x19,#64]
IFF_DORMANT)) |
ffff80001139f2b4: 12180400 and w0, w0, #0x300
flags = (dev->flags & ~(IFF_PROMISC |
ffff80001139f2b8: 0a010061 and w1, w3, w1
ffff80001139f2bc: 2a010000 orr w0, w0, w1
(dev->gflags & (IFF_PROMISC |
IFF_ALLMULTI));
if (netif_running(dev)) {
ffff80001139f2c0: 36000182 tbz w2, #0, ffff80001139f2f0 <dev_get_flags+0x68>
unsigned int dev_get_flags(const struct net_device *dev)
ffff80001139f2c4: 3948d261 ldrb w1, [x19,#564]
if (netif_oper_up(dev))
ffff80001139f2c8: 350001a1 cbnz w1, ffff80001139f2fc <dev_get_flags+0x74>
flags |= IFF_RUNNING;
ffff80001139f2cc: 321a0000 orr w0, w0, #0x40
ffff80001139f2d0: f9402263 ldr x3, [x19,#64]
ffff80001139f2d4: f9402261 ldr x1, [x19,#64]
ffff80001139f2d8: d3420863 ubfx x3, x3, #2, #1
if (netif_carrier_ok(dev))
flags |= IFF_LOWER_UP;
ffff80001139f2dc: 32100002 orr w2, w0, #0x10000
ffff80001139f2e0: 6b1f007f cmp w3, wzr
ffff80001139f2e4: 1a800040 csel w0, w2, w0, eq
ffff80001139f2e8: d3441021 ubfx x1, x1, #4, #1
if (netif_dormant(dev))
flags |= IFF_DORMANT;
ffff80001139f2ec: 2a014400 orr w0, w0, w1, lsl #17
}
return flags;
}
ffff80001139f2f0: f9400bf3 ldr x19, [sp,#16]
ffff80001139f2f4: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139f2f8: d65f03c0 ret
if (netif_oper_up(dev))
ffff80001139f2fc: 7100183f cmp w1, #0x6
ffff80001139f300: 54fffe81 b.ne ffff80001139f2d0 <dev_get_flags+0x48>
ffff80001139f304: 17fffff2 b ffff80001139f2cc <dev_get_flags+0x44>
ffff80001139f308 <__dev_set_mtu>:
return ret;
}
EXPORT_SYMBOL(dev_change_flags);
int __dev_set_mtu(struct net_device *dev, int new_mtu)
{
ffff80001139f308: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139f30c: 910003fd mov x29, sp
ffff80001139f310: f9000bf3 str x19, [sp,#16]
ffff80001139f314: aa0003f3 mov x19, x0
ffff80001139f318: aa1e03e0 mov x0, x30
ffff80001139f31c: f90017a1 str x1, [x29,#40]
ffff80001139f320: 94000000 bl 0 <_mcount>
ffff80001139f320: R_AARCH64_CALL26 _mcount
const struct net_device_ops *ops = dev->netdev_ops;
if (ops->ndo_change_mtu)
ffff80001139f324: f940fa60 ldr x0, [x19,#496]
ffff80001139f328: f94017a1 ldr x1, [x29,#40]
ffff80001139f32c: f9403402 ldr x2, [x0,#104]
ffff80001139f330: b40000c2 cbz x2, ffff80001139f348 <__dev_set_mtu+0x40>
return ops->ndo_change_mtu(dev, new_mtu);
ffff80001139f334: aa1303e0 mov x0, x19
ffff80001139f338: d63f0040 blr x2
/* Pairs with all the lockless reads of dev->mtu in the stack */
WRITE_ONCE(dev->mtu, new_mtu);
return 0;
}
ffff80001139f33c: f9400bf3 ldr x19, [sp,#16]
ffff80001139f340: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f344: d65f03c0 ret
static __always_inline void __write_once_size(volatile void *p, void *res, int size)
{
switch (size) {
case 1: *(volatile __u8 *)p = *(__u8 *)res; break;
case 2: *(volatile __u16 *)p = *(__u16 *)res; break;
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff80001139f348: b9023a61 str w1, [x19,#568]
ffff80001139f34c: f9400bf3 ldr x19, [sp,#16]
return 0;
ffff80001139f350: 2a0203e0 mov w0, w2
}
ffff80001139f354: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f358: d65f03c0 ret
ffff80001139f35c <dev_set_group>:
* dev_set_group - Change group this device belongs to
* @dev: device
* @new_group: group this device should belong to
*/
void dev_set_group(struct net_device *dev, int new_group)
{
ffff80001139f35c: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139f360: 910003fd mov x29, sp
ffff80001139f364: f9000bf3 str x19, [sp,#16]
ffff80001139f368: aa0003f3 mov x19, x0
ffff80001139f36c: aa1e03e0 mov x0, x30
ffff80001139f370: f90017a1 str x1, [x29,#40]
ffff80001139f374: 94000000 bl 0 <_mcount>
ffff80001139f374: R_AARCH64_CALL26 _mcount
dev->group = new_group;
ffff80001139f378: f94017a1 ldr x1, [x29,#40]
ffff80001139f37c: b9010661 str w1, [x19,#260]
}
ffff80001139f380: f9400bf3 ldr x19, [sp,#16]
ffff80001139f384: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f388: d65f03c0 ret
ffff80001139f38c <dev_change_carrier>:
* @new_carrier: new value
*
* Change device carrier
*/
int dev_change_carrier(struct net_device *dev, bool new_carrier)
{
ffff80001139f38c: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139f390: 910003fd mov x29, sp
ffff80001139f394: a90153f3 stp x19, x20, [sp,#16]
ffff80001139f398: aa0003f3 mov x19, x0
ffff80001139f39c: aa1e03e0 mov x0, x30
ffff80001139f3a0: 53001c34 uxtb w20, w1
ffff80001139f3a4: 94000000 bl 0 <_mcount>
ffff80001139f3a4: R_AARCH64_CALL26 _mcount
const struct net_device_ops *ops = dev->netdev_ops;
if (!ops->ndo_change_carrier)
ffff80001139f3a8: f940fa60 ldr x0, [x19,#496]
ffff80001139f3ac: f940f002 ldr x2, [x0,#480]
ffff80001139f3b0: b4000162 cbz x2, ffff80001139f3dc <dev_change_carrier+0x50>
ffff80001139f3b4: f9402260 ldr x0, [x19,#64]
return -EOPNOTSUPP;
if (!netif_device_present(dev))
ffff80001139f3b8: 360800e0 tbz w0, #1, ffff80001139f3d4 <dev_change_carrier+0x48>
return -ENODEV;
return ops->ndo_change_carrier(dev, new_carrier);
ffff80001139f3bc: aa1303e0 mov x0, x19
ffff80001139f3c0: 2a1403e1 mov w1, w20
ffff80001139f3c4: d63f0040 blr x2
}
ffff80001139f3c8: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139f3cc: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139f3d0: d65f03c0 ret
return -ENODEV;
ffff80001139f3d4: 12800240 mov w0, #0xffffffed // #-19
ffff80001139f3d8: 17fffffc b ffff80001139f3c8 <dev_change_carrier+0x3c>
return -EOPNOTSUPP;
ffff80001139f3dc: 12800bc0 mov w0, #0xffffffa1 // #-95
ffff80001139f3e0: 17fffffa b ffff80001139f3c8 <dev_change_carrier+0x3c>
ffff80001139f3e4 <dev_get_phys_port_id>:
*
* Get device physical port ID
*/
int dev_get_phys_port_id(struct net_device *dev,
struct netdev_phys_item_id *ppid)
{
ffff80001139f3e4: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139f3e8: 910003fd mov x29, sp
ffff80001139f3ec: f9000bf3 str x19, [sp,#16]
ffff80001139f3f0: aa0003f3 mov x19, x0
ffff80001139f3f4: aa1e03e0 mov x0, x30
ffff80001139f3f8: f90017a1 str x1, [x29,#40]
ffff80001139f3fc: 94000000 bl 0 <_mcount>
ffff80001139f3fc: R_AARCH64_CALL26 _mcount
const struct net_device_ops *ops = dev->netdev_ops;
if (!ops->ndo_get_phys_port_id)
ffff80001139f400: f940fa60 ldr x0, [x19,#496]
ffff80001139f404: f94017a1 ldr x1, [x29,#40]
ffff80001139f408: f940f402 ldr x2, [x0,#488]
ffff80001139f40c: b40000c2 cbz x2, ffff80001139f424 <dev_get_phys_port_id+0x40>
return -EOPNOTSUPP;
return ops->ndo_get_phys_port_id(dev, ppid);
ffff80001139f410: aa1303e0 mov x0, x19
ffff80001139f414: d63f0040 blr x2
}
ffff80001139f418: f9400bf3 ldr x19, [sp,#16]
ffff80001139f41c: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f420: d65f03c0 ret
return -EOPNOTSUPP;
ffff80001139f424: 12800bc0 mov w0, #0xffffffa1 // #-95
ffff80001139f428: 17fffffc b ffff80001139f418 <dev_get_phys_port_id+0x34>
ffff80001139f42c <dev_change_proto_down>:
*
* This info can be used by switch drivers to set the phys state of the
* port.
*/
int dev_change_proto_down(struct net_device *dev, bool proto_down)
{
ffff80001139f42c: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139f430: 910003fd mov x29, sp
ffff80001139f434: a90153f3 stp x19, x20, [sp,#16]
ffff80001139f438: aa0003f3 mov x19, x0
ffff80001139f43c: aa1e03e0 mov x0, x30
ffff80001139f440: 53001c34 uxtb w20, w1
ffff80001139f444: 94000000 bl 0 <_mcount>
ffff80001139f444: R_AARCH64_CALL26 _mcount
const struct net_device_ops *ops = dev->netdev_ops;
if (!ops->ndo_change_proto_down)
ffff80001139f448: f940fa60 ldr x0, [x19,#496]
ffff80001139f44c: f9411802 ldr x2, [x0,#560]
ffff80001139f450: b4000162 cbz x2, ffff80001139f47c <dev_change_proto_down+0x50>
ffff80001139f454: f9402260 ldr x0, [x19,#64]
return -EOPNOTSUPP;
if (!netif_device_present(dev))
ffff80001139f458: 360800e0 tbz w0, #1, ffff80001139f474 <dev_change_proto_down+0x48>
return -ENODEV;
return ops->ndo_change_proto_down(dev, proto_down);
ffff80001139f45c: aa1303e0 mov x0, x19
ffff80001139f460: 2a1403e1 mov w1, w20
ffff80001139f464: d63f0040 blr x2
}
ffff80001139f468: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139f46c: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139f470: d65f03c0 ret
return -ENODEV;
ffff80001139f474: 12800240 mov w0, #0xffffffed // #-19
ffff80001139f478: 17fffffc b ffff80001139f468 <dev_change_proto_down+0x3c>
return -EOPNOTSUPP;
ffff80001139f47c: 12800bc0 mov w0, #0xffffffa1 // #-95
ffff80001139f480: 17fffffa b ffff80001139f468 <dev_change_proto_down+0x3c>
ffff80001139f484 <dev_new_index>:
* Returns a suitable unique value for a new device interface
* number. The caller must hold the rtnl semaphore or the
* dev_base_lock to be sure it remains unique.
*/
static int dev_new_index(struct net *net)
{
ffff80001139f484: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139f488: 910003fd mov x29, sp
ffff80001139f48c: f9000bf3 str x19, [sp,#16]
ffff80001139f490: aa0003f3 mov x19, x0
ffff80001139f494: aa1e03e0 mov x0, x30
ffff80001139f498: 94000000 bl 0 <_mcount>
ffff80001139f498: R_AARCH64_CALL26 _mcount
int ifindex = net->ifindex;
ffff80001139f49c: b9401660 ldr w0, [x19,#20]
ffff80001139f4a0: f9409a63 ldr x3, [x19,#304]
for (;;) {
if (++ifindex <= 0)
ffff80001139f4a4: 11000400 add w0, w0, #0x1
ffff80001139f4a8: 6b1f001f cmp w0, wzr
ffff80001139f4ac: 540001ed b.le ffff80001139f4e8 <dev_new_index+0x64>
ffff80001139f4b0: d37d1c01 ubfiz x1, x0, #3, #8
hlist_for_each_entry(dev, head, index_hlist)
ffff80001139f4b4: f8616861 ldr x1, [x3,x1]
ffff80001139f4b8: b4000041 cbz x1, ffff80001139f4c0 <dev_new_index+0x3c>
ffff80001139f4bc: d10e4021 sub x1, x1, #0x390
ffff80001139f4c0: b40000c1 cbz x1, ffff80001139f4d8 <dev_new_index+0x54>
if (dev->ifindex == ifindex)
ffff80001139f4c4: b9410022 ldr w2, [x1,#256]
ffff80001139f4c8: 6b02001f cmp w0, w2
ffff80001139f4cc: 54fffec0 b.eq ffff80001139f4a4 <dev_new_index+0x20>
hlist_for_each_entry(dev, head, index_hlist)
ffff80001139f4d0: f941c821 ldr x1, [x1,#912]
ffff80001139f4d4: b5ffff41 cbnz x1, ffff80001139f4bc <dev_new_index+0x38>
ifindex = 1;
if (!__dev_get_by_index(net, ifindex))
return net->ifindex = ifindex;
ffff80001139f4d8: b9001660 str w0, [x19,#20]
}
}
ffff80001139f4dc: f9400bf3 ldr x19, [sp,#16]
ffff80001139f4e0: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139f4e4: d65f03c0 ret
ffff80001139f4e8: d2800101 mov x1, #0x8 // #8
ifindex = 1;
ffff80001139f4ec: 52800020 mov w0, #0x1 // #1
ffff80001139f4f0: 17fffff1 b ffff80001139f4b4 <dev_new_index+0x30>
ffff80001139f4f4 <netdev_update_lockdep_key>:
lockdep_unregister_key(&dev->qdisc_xmit_lock_key);
lockdep_unregister_key(&dev->addr_list_lock_key);
}
void netdev_update_lockdep_key(struct net_device *dev)
{
ffff80001139f4f4: a9bf7bfd stp x29, x30, [sp,#-16]!
ffff80001139f4f8: 910003fd mov x29, sp
ffff80001139f4fc: aa1e03e0 mov x0, x30
ffff80001139f500: 94000000 bl 0 <_mcount>
ffff80001139f500: R_AARCH64_CALL26 _mcount
lockdep_unregister_key(&dev->addr_list_lock_key);
lockdep_register_key(&dev->addr_list_lock_key);
lockdep_set_class(&dev->addr_list_lock, &dev->addr_list_lock_key);
}
ffff80001139f504: a8c17bfd ldp x29, x30, [sp],#16
ffff80001139f508: d65f03c0 ret
ffff80001139f50c <netdev_set_default_ethtool_ops>:
static const struct ethtool_ops default_ethtool_ops;
void netdev_set_default_ethtool_ops(struct net_device *dev,
const struct ethtool_ops *ops)
{
ffff80001139f50c: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139f510: 910003fd mov x29, sp
ffff80001139f514: f9000bf3 str x19, [sp,#16]
ffff80001139f518: aa0003f3 mov x19, x0
ffff80001139f51c: aa1e03e0 mov x0, x30
ffff80001139f520: f90017a1 str x1, [x29,#40]
ffff80001139f524: 94000000 bl 0 <_mcount>
ffff80001139f524: R_AARCH64_CALL26 _mcount
if (dev->ethtool_ops == &default_ethtool_ops)
ffff80001139f528: f940fe62 ldr x2, [x19,#504]
ffff80001139f52c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff80001139f52c: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff80001139f530: 91000000 add x0, x0, #0x0
ffff80001139f530: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff80001139f534: eb00005f cmp x2, x0
ffff80001139f538: f94017a1 ldr x1, [x29,#40]
ffff80001139f53c: 54000080 b.eq ffff80001139f54c <netdev_set_default_ethtool_ops+0x40>
dev->ethtool_ops = ops;
}
ffff80001139f540: f9400bf3 ldr x19, [sp,#16]
ffff80001139f544: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f548: d65f03c0 ret
dev->ethtool_ops = ops;
ffff80001139f54c: f900fe61 str x1, [x19,#504]
}
ffff80001139f550: f9400bf3 ldr x19, [sp,#16]
ffff80001139f554: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f558: d65f03c0 ret
ffff80001139f55c <netdev_increment_features>:
* @one to the master device with current feature set @all. Will not
* enable anything that is off in @mask. Returns the new feature set.
*/
netdev_features_t netdev_increment_features(netdev_features_t all,
netdev_features_t one, netdev_features_t mask)
{
ffff80001139f55c: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139f560: 910003fd mov x29, sp
ffff80001139f564: f9000bf3 str x19, [sp,#16]
ffff80001139f568: aa0003f3 mov x19, x0
ffff80001139f56c: aa1e03e0 mov x0, x30
ffff80001139f570: f90017a1 str x1, [x29,#40]
ffff80001139f574: f90013a2 str x2, [x29,#32]
ffff80001139f578: 94000000 bl 0 <_mcount>
ffff80001139f578: R_AARCH64_CALL26 _mcount
if (mask & NETIF_F_HW_CSUM)
ffff80001139f57c: f94013a2 ldr x2, [x29,#32]
ffff80001139f580: f94017a1 ldr x1, [x29,#40]
ffff80001139f584: 36180062 tbz w2, #3, ffff80001139f590 <netdev_increment_features+0x34>
mask |= NETIF_F_CSUM_MASK;
ffff80001139f588: d2800340 mov x0, #0x1a // #26
ffff80001139f58c: aa000042 orr x2, x2, x0
mask |= NETIF_F_VLAN_CHALLENGED;
all |= one & (NETIF_F_ONE_FOR_ALL | NETIF_F_CSUM_MASK) & mask;
ffff80001139f590: d2808f63 mov x3, #0x47b // #1147
ffff80001139f594: f2a803e3 movk x3, #0x401f, lsl #16
ffff80001139f598: 8a030020 and x0, x1, x3
mask |= NETIF_F_VLAN_CHALLENGED;
ffff80001139f59c: b2760042 orr x2, x2, #0x400
all &= one | ~NETIF_F_ALL_FOR_ALL;
ffff80001139f5a0: 92c04003 mov x3, #0xfffffdffffffffff // #-2199023255553
all |= one & (NETIF_F_ONE_FOR_ALL | NETIF_F_CSUM_MASK) & mask;
ffff80001139f5a4: 8a020000 and x0, x0, x2
all &= one | ~NETIF_F_ALL_FOR_ALL;
ffff80001139f5a8: f2bffbe3 movk x3, #0xffdf, lsl #16
all |= one & (NETIF_F_ONE_FOR_ALL | NETIF_F_CSUM_MASK) & mask;
ffff80001139f5ac: aa130000 orr x0, x0, x19
all &= one | ~NETIF_F_ALL_FOR_ALL;
ffff80001139f5b0: aa030021 orr x1, x1, x3
ffff80001139f5b4: 8a010000 and x0, x0, x1
/* If one device supports hw checksumming, set for all. */
if (all & NETIF_F_HW_CSUM)
ffff80001139f5b8: 36180060 tbz w0, #3, ffff80001139f5c4 <netdev_increment_features+0x68>
all &= ~(NETIF_F_CSUM_MASK & ~NETIF_F_HW_CSUM);
ffff80001139f5bc: 92800241 mov x1, #0xffffffffffffffed // #-19
ffff80001139f5c0: 8a010000 and x0, x0, x1
return all;
}
ffff80001139f5c4: f9400bf3 ldr x19, [sp,#16]
ffff80001139f5c8: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f5cc: d65f03c0 ret
ffff80001139f5d0 <netdev_boot_setup_check>:
{
ffff80001139f5d0: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139f5d4: 910003fd mov x29, sp
ffff80001139f5d8: a90153f3 stp x19, x20, [sp,#16]
ffff80001139f5dc: f90013f5 str x21, [sp,#32]
ffff80001139f5e0: 90000015 adrp x21, ffff80001139e37c <__my_cpu_offset>
ffff80001139f5e0: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff80001139f5e4: 910002b5 add x21, x21, #0x0
ffff80001139f5e4: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff80001139f5e8: aa0003f4 mov x20, x0
ffff80001139f5ec: aa1e03e0 mov x0, x30
ffff80001139f5f0: 910722b3 add x19, x21, #0x1c8
ffff80001139f5f4: 94000000 bl 0 <_mcount>
ffff80001139f5f4: R_AARCH64_CALL26 _mcount
ffff80001139f5f8: 910c22b5 add x21, x21, #0x308
if (s[i].name[0] != '\0' && s[i].name[0] != ' ' &&
ffff80001139f5fc: 39400262 ldrb w2, [x19]
!strcmp(dev->name, s[i].name)) {
ffff80001139f600: aa1303e1 mov x1, x19
if (s[i].name[0] != '\0' && s[i].name[0] != ' ' &&
ffff80001139f604: 121a7842 and w2, w2, #0xffffffdf
ffff80001139f608: 53001c42 uxtb w2, w2
!strcmp(dev->name, s[i].name)) {
ffff80001139f60c: aa1403e0 mov x0, x20
if (s[i].name[0] != '\0' && s[i].name[0] != ' ' &&
ffff80001139f610: 34000062 cbz w2, ffff80001139f61c <netdev_boot_setup_check+0x4c>
!strcmp(dev->name, s[i].name)) {
ffff80001139f614: 94000000 bl 0 <strcmp>
ffff80001139f614: R_AARCH64_CALL26 strcmp
if (s[i].name[0] != '\0' && s[i].name[0] != ' ' &&
ffff80001139f618: 34000120 cbz w0, ffff80001139f63c <netdev_boot_setup_check+0x6c>
ffff80001139f61c: 9100a273 add x19, x19, #0x28
for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++) {
ffff80001139f620: eb15027f cmp x19, x21
ffff80001139f624: 54fffec1 b.ne ffff80001139f5fc <netdev_boot_setup_check+0x2c>
return 0;
ffff80001139f628: 52800000 mov w0, #0x0 // #0
}
ffff80001139f62c: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139f630: f94013f5 ldr x21, [sp,#32]
ffff80001139f634: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f638: d65f03c0 ret
dev->irq = s[i].map.irq;
ffff80001139f63c: 39408a61 ldrb w1, [x19,#34]
return 1;
ffff80001139f640: 52800020 mov w0, #0x1 // #1
dev->irq = s[i].map.irq;
ffff80001139f644: b9003a81 str w1, [x20,#56]
dev->base_addr = s[i].map.base_addr;
ffff80001139f648: 79404261 ldrh w1, [x19,#32]
ffff80001139f64c: f9001a81 str x1, [x20,#48]
dev->mem_start = s[i].map.mem_start;
ffff80001139f650: f9400a61 ldr x1, [x19,#16]
ffff80001139f654: f9001681 str x1, [x20,#40]
dev->mem_end = s[i].map.mem_end;
ffff80001139f658: f9400e61 ldr x1, [x19,#24]
ffff80001139f65c: f9001281 str x1, [x20,#32]
}
ffff80001139f660: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139f664: f94013f5 ldr x21, [sp,#32]
ffff80001139f668: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f66c: d65f03c0 ret
ffff80001139f670 <netdev_name_node_lookup>:
{
ffff80001139f670: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139f674: 910003fd mov x29, sp
ffff80001139f678: a90153f3 stp x19, x20, [sp,#16]
ffff80001139f67c: aa0003f3 mov x19, x0
ffff80001139f680: aa1e03e0 mov x0, x30
ffff80001139f684: aa0103f4 mov x20, x1
ffff80001139f688: 94000000 bl 0 <_mcount>
ffff80001139f688: R_AARCH64_CALL26 _mcount
extern __kernel_size_t __real_strnlen(const char *, __kernel_size_t) __RENAME(strnlen);
__FORTIFY_INLINE __kernel_size_t strnlen(const char *p, __kernel_size_t maxlen)
{
size_t p_size = __builtin_object_size(p, 0);
__kernel_size_t ret = __real_strnlen(p, maxlen < p_size ? maxlen : p_size);
ffff80001139f68c: aa1403e0 mov x0, x20
ffff80001139f690: d2800201 mov x1, #0x10 // #16
ffff80001139f694: 94000000 bl 0 <strnlen>
ffff80001139f694: R_AARCH64_CALL26 strnlen
if (p_size <= ret && maxlen != ret)
ffff80001139f698: b100041f cmn x0, #0x1
__kernel_size_t ret = __real_strnlen(p, maxlen < p_size ? maxlen : p_size);
ffff80001139f69c: aa0003e2 mov x2, x0
if (p_size <= ret && maxlen != ret)
ffff80001139f6a0: 540002a0 b.eq ffff80001139f6f4 <netdev_name_node_lookup+0x84>
unsigned int hash = full_name_hash(net, name, strnlen(name, IFNAMSIZ));
ffff80001139f6a4: aa1303e0 mov x0, x19
ffff80001139f6a8: aa1403e1 mov x1, x20
ffff80001139f6ac: 94000000 bl 0 <full_name_hash>
ffff80001139f6ac: R_AARCH64_CALL26 full_name_hash
#ifndef HAVE_ARCH__HASH_32
#define __hash_32 __hash_32_generic
#endif
static inline u32 __hash_32_generic(u32 val)
{
return val * GOLDEN_RATIO_32;
ffff80001139f6b0: 5290c8e1 mov w1, #0x8647 // #34375
ffff80001139f6b4: 72ac3901 movk w1, #0x61c8, lsl #16
ffff80001139f6b8: 1b017c00 mul w0, w0, w1
hlist_for_each_entry(name_node, head, hlist)
ffff80001139f6bc: f9409662 ldr x2, [x19,#296]
return &net->dev_name_head[hash_32(hash, NETDEV_HASHBITS)];
ffff80001139f6c0: d3587c01 ubfx x1, x0, #24, #8
hlist_for_each_entry(name_node, head, hlist)
ffff80001139f6c4: f8617853 ldr x19, [x2,x1,lsl #3]
ffff80001139f6c8: b40000f3 cbz x19, ffff80001139f6e4 <netdev_name_node_lookup+0x74>
if (!strcmp(name_node->name, name))
ffff80001139f6cc: f9401660 ldr x0, [x19,#40]
ffff80001139f6d0: aa1403e1 mov x1, x20
ffff80001139f6d4: 94000000 bl 0 <strcmp>
ffff80001139f6d4: R_AARCH64_CALL26 strcmp
ffff80001139f6d8: 34000060 cbz w0, ffff80001139f6e4 <netdev_name_node_lookup+0x74>
hlist_for_each_entry(name_node, head, hlist)
ffff80001139f6dc: f9400273 ldr x19, [x19]
ffff80001139f6e0: b5ffff73 cbnz x19, ffff80001139f6cc <netdev_name_node_lookup+0x5c>
}
ffff80001139f6e4: aa1303e0 mov x0, x19
ffff80001139f6e8: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139f6ec: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139f6f0: d65f03c0 ret
fortify_panic(__func__);
ffff80001139f6f4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff80001139f6f4: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x90
ffff80001139f6f8: 91000000 add x0, x0, #0x0
ffff80001139f6f8: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x90
ffff80001139f6fc: 91044000 add x0, x0, #0x110
ffff80001139f700: 94000000 bl 0 <fortify_panic>
ffff80001139f700: R_AARCH64_CALL26 fortify_panic
ffff80001139f704 <__dev_get_by_name>:
{
ffff80001139f704: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139f708: 910003fd mov x29, sp
ffff80001139f70c: f9000bf3 str x19, [sp,#16]
ffff80001139f710: aa0003f3 mov x19, x0
ffff80001139f714: aa1e03e0 mov x0, x30
ffff80001139f718: f90017a1 str x1, [x29,#40]
ffff80001139f71c: 94000000 bl 0 <_mcount>
ffff80001139f71c: R_AARCH64_CALL26 _mcount
node_name = netdev_name_node_lookup(net, name);
ffff80001139f720: f94017a1 ldr x1, [x29,#40]
ffff80001139f724: aa1303e0 mov x0, x19
ffff80001139f728: 97ffffd2 bl ffff80001139f670 <netdev_name_node_lookup>
return node_name ? node_name->dev : NULL;
ffff80001139f72c: b4000040 cbz x0, ffff80001139f734 <__dev_get_by_name+0x30>
ffff80001139f730: f9401000 ldr x0, [x0,#32]
}
ffff80001139f734: f9400bf3 ldr x19, [sp,#16]
ffff80001139f738: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f73c: d65f03c0 ret
ffff80001139f740 <netdev_name_node_alloc>:
{
ffff80001139f740: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139f744: 910003fd mov x29, sp
ffff80001139f748: a90153f3 stp x19, x20, [sp,#16]
ffff80001139f74c: aa0003f4 mov x20, x0
ffff80001139f750: aa1e03e0 mov x0, x30
ffff80001139f754: aa0103f3 mov x19, x1
ffff80001139f758: 94000000 bl 0 <_mcount>
ffff80001139f758: R_AARCH64_CALL26 _mcount
index = kmalloc_index(size);
if (!index)
return ZERO_SIZE_PTR;
return kmem_cache_alloc_trace(
ffff80001139f75c: 90000002 adrp x2, 0 <kmalloc_caches>
ffff80001139f75c: R_AARCH64_ADR_PREL_PG_HI21 kmalloc_caches+0x38
ffff80001139f760: f9400040 ldr x0, [x2]
ffff80001139f760: R_AARCH64_LDST64_ABS_LO12_NC kmalloc_caches+0x38
ffff80001139f764: 52819801 mov w1, #0xcc0 // #3264
ffff80001139f768: d2800602 mov x2, #0x30 // #48
ffff80001139f76c: 94000000 bl 0 <kmem_cache_alloc_trace>
ffff80001139f76c: R_AARCH64_CALL26 kmem_cache_alloc_trace
if (!name_node)
ffff80001139f770: b40000a0 cbz x0, ffff80001139f784 <netdev_name_node_alloc+0x44>
#define HLIST_HEAD_INIT { .first = NULL }
#define HLIST_HEAD(name) struct hlist_head name = { .first = NULL }
#define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
static inline void INIT_HLIST_NODE(struct hlist_node *h)
{
h->next = NULL;
ffff80001139f774: f900001f str xzr, [x0]
h->pprev = NULL;
ffff80001139f778: f900041f str xzr, [x0,#8]
name_node->dev = dev;
ffff80001139f77c: f9001014 str x20, [x0,#32]
name_node->name = name;
ffff80001139f780: f9001413 str x19, [x0,#40]
}
ffff80001139f784: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139f788: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139f78c: d65f03c0 ret
ffff80001139f790 <netdev_lower_get_first_private_rcu>:
{
ffff80001139f790: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139f794: 910003fd mov x29, sp
ffff80001139f798: f9000bf3 str x19, [sp,#16]
ffff80001139f79c: aa0003f3 mov x19, x0
ffff80001139f7a0: aa1e03e0 mov x0, x30
ffff80001139f7a4: 94000000 bl 0 <_mcount>
ffff80001139f7a4: R_AARCH64_CALL26 _mcount
ffff80001139f7a8: 90000002 adrp x2, 0 <__stack_chk_guard>
ffff80001139f7a8: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff80001139f7ac: f9400041 ldr x1, [x2]
ffff80001139f7ac: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
__READ_ONCE_SIZE;
ffff80001139f7b0: aa1303e0 mov x0, x19
ffff80001139f7b4: f90017a1 str x1, [x29,#40]
ffff80001139f7b8: f84b8c01 ldr x1, [x0,#184]!
lower = list_first_or_null_rcu(&dev->adj_list.lower,
ffff80001139f7bc: f90013a1 str x1, [x29,#32]
ffff80001139f7c0: eb00003f cmp x1, x0
ffff80001139f7c4: 540001a0 b.eq ffff80001139f7f8 <netdev_lower_get_first_private_rcu+0x68>
ffff80001139f7c8: f94013a1 ldr x1, [x29,#32]
if (lower)
ffff80001139f7cc: f1006020 subs x0, x1, #0x18
ffff80001139f7d0: 54000040 b.eq ffff80001139f7d8 <netdev_lower_get_first_private_rcu+0x48>
return lower->private;
ffff80001139f7d4: f85f8020 ldur x0, [x1,#-8]
}
ffff80001139f7d8: f94017a3 ldr x3, [x29,#40]
ffff80001139f7dc: f9400041 ldr x1, [x2]
ffff80001139f7dc: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139f7e0: eb01007f cmp x3, x1
ffff80001139f7e4: 54000081 b.ne ffff80001139f7f4 <netdev_lower_get_first_private_rcu+0x64>
ffff80001139f7e8: f9400bf3 ldr x19, [sp,#16]
ffff80001139f7ec: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f7f0: d65f03c0 ret
ffff80001139f7f4: 94000000 bl 0 <__stack_chk_fail>
ffff80001139f7f4: R_AARCH64_CALL26 __stack_chk_fail
return NULL;
ffff80001139f7f8: d2800000 mov x0, #0x0 // #0
ffff80001139f7fc: 17fffff7 b ffff80001139f7d8 <netdev_lower_get_first_private_rcu+0x48>
ffff80001139f800 <netdev_master_upper_dev_get_rcu>:
{
ffff80001139f800: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139f804: 910003fd mov x29, sp
ffff80001139f808: f9000bf3 str x19, [sp,#16]
ffff80001139f80c: aa0003f3 mov x19, x0
ffff80001139f810: aa1e03e0 mov x0, x30
ffff80001139f814: 94000000 bl 0 <_mcount>
ffff80001139f814: R_AARCH64_CALL26 _mcount
ffff80001139f818: 90000002 adrp x2, 0 <__stack_chk_guard>
ffff80001139f818: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff80001139f81c: f9400041 ldr x1, [x2]
ffff80001139f81c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139f820: aa1303e0 mov x0, x19
ffff80001139f824: f90017a1 str x1, [x29,#40]
ffff80001139f828: f84a8c01 ldr x1, [x0,#168]!
upper = list_first_or_null_rcu(&dev->adj_list.upper,
ffff80001139f82c: f90013a1 str x1, [x29,#32]
ffff80001139f830: eb00003f cmp x1, x0
ffff80001139f834: 540001c0 b.eq ffff80001139f86c <netdev_master_upper_dev_get_rcu+0x6c>
ffff80001139f838: f94013a1 ldr x1, [x29,#32]
if (upper && likely(upper->master))
ffff80001139f83c: f1006020 subs x0, x1, #0x18
ffff80001139f840: 54000080 b.eq ffff80001139f850 <netdev_master_upper_dev_get_rcu+0x50>
ffff80001139f844: 385f0020 ldurb w0, [x1,#-16]
ffff80001139f848: 34000120 cbz w0, ffff80001139f86c <netdev_master_upper_dev_get_rcu+0x6c>
return upper->dev;
ffff80001139f84c: f85e8020 ldur x0, [x1,#-24]
}
ffff80001139f850: f94017a3 ldr x3, [x29,#40]
ffff80001139f854: f9400041 ldr x1, [x2]
ffff80001139f854: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139f858: eb01007f cmp x3, x1
ffff80001139f85c: 540000c1 b.ne ffff80001139f874 <netdev_master_upper_dev_get_rcu+0x74>
ffff80001139f860: f9400bf3 ldr x19, [sp,#16]
ffff80001139f864: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f868: d65f03c0 ret
return NULL;
ffff80001139f86c: d2800000 mov x0, #0x0 // #0
ffff80001139f870: 17fffff8 b ffff80001139f850 <netdev_master_upper_dev_get_rcu+0x50>
}
ffff80001139f874: 94000000 bl 0 <__stack_chk_fail>
ffff80001139f874: R_AARCH64_CALL26 __stack_chk_fail
ffff80001139f878 <init_dummy_netdev>:
{
ffff80001139f878: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139f87c: 910003fd mov x29, sp
ffff80001139f880: f9000bf3 str x19, [sp,#16]
ffff80001139f884: aa0003f3 mov x19, x0
ffff80001139f888: aa1e03e0 mov x0, x30
ffff80001139f88c: 94000000 bl 0 <_mcount>
ffff80001139f88c: R_AARCH64_CALL26 _mcount
size_t p_size = __builtin_object_size(p, 0);
if (__builtin_constant_p(size) && p_size < size)
__write_overflow();
if (p_size < size)
fortify_panic(__func__);
return __builtin_memset(p, c, size);
ffff80001139f890: aa1303e0 mov x0, x19
ffff80001139f894: 52800001 mov w1, #0x0 // #0
ffff80001139f898: d2812002 mov x2, #0x900 // #2304
ffff80001139f89c: 94000000 bl 0 <memset>
ffff80001139f89c: R_AARCH64_CALL26 memset
INIT_LIST_HEAD(&dev->napi_list);
ffff80001139f8a0: 91016260 add x0, x19, #0x58
dev->reg_state = NETREG_DUMMY;
ffff80001139f8a4: 528000a1 mov w1, #0x5 // #5
ffff80001139f8a8: 39136261 strb w1, [x19,#1240]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff80001139f8ac: f9002e60 str x0, [x19,#88]
list->prev = list;
ffff80001139f8b0: f9000400 str x0, [x0,#8]
ATOMIC64_FETCH_OP (_relaxed,, , , , __VA_ARGS__) \
ATOMIC64_FETCH_OP (_acquire,, a, , "memory", __VA_ARGS__) \
ATOMIC64_FETCH_OP (_release,, , l, "memory", __VA_ARGS__)
ATOMIC64_OPS(and, and, L)
ATOMIC64_OPS(or, orr, L)
ffff80001139f8b4: 91010262 add x2, x19, #0x40
ffff80001139f8b8: f9800051 prfm pstl1strm, [x2]
ffff80001139f8bc: c85f7c40 ldxr x0, [x2]
ffff80001139f8c0: b27f0000 orr x0, x0, #0x2
ffff80001139f8c4: c8017c40 stxr w1, x0, [x2]
ffff80001139f8c8: 35ffffa1 cbnz w1, ffff80001139f8bc <init_dummy_netdev+0x44>
ffff80001139f8cc: f9800051 prfm pstl1strm, [x2]
ffff80001139f8d0: c85f7c40 ldxr x0, [x2]
ffff80001139f8d4: b2400000 orr x0, x0, #0x1
ffff80001139f8d8: c8017c40 stxr w1, x0, [x2]
ffff80001139f8dc: 35ffffa1 cbnz w1, ffff80001139f8d0 <init_dummy_netdev+0x58>
} possible_net_t;
static inline void write_pnet(possible_net_t *pnet, struct net *net)
{
#ifdef CONFIG_NET_NS
pnet->net = net;
ffff80001139f8e0: 90000000 adrp x0, 0 <init_net>
ffff80001139f8e0: R_AARCH64_ADR_PREL_PG_HI21 init_net
ffff80001139f8e4: 91000000 add x0, x0, #0x0
ffff80001139f8e4: R_AARCH64_ADD_ABS_LO12_NC init_net
ffff80001139f8e8: f9027a60 str x0, [x19,#1264]
}
ffff80001139f8ec: f9400bf3 ldr x19, [sp,#16]
ffff80001139f8f0: 52800000 mov w0, #0x0 // #0
ffff80001139f8f4: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139f8f8: d65f03c0 ret
ffff80001139f8fc <netdev_stats_to_stats64>:
{
ffff80001139f8fc: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139f900: 910003fd mov x29, sp
ffff80001139f904: f9000bf3 str x19, [sp,#16]
ffff80001139f908: aa0003f3 mov x19, x0
ffff80001139f90c: aa1e03e0 mov x0, x30
ffff80001139f910: f90017a1 str x1, [x29,#40]
ffff80001139f914: 94000000 bl 0 <_mcount>
ffff80001139f914: R_AARCH64_CALL26 _mcount
if (q_size < size)
__read_overflow2();
}
if (p_size < size || q_size < size)
fortify_panic(__func__);
return __builtin_memcpy(p, q, size);
ffff80001139f918: f94017a1 ldr x1, [x29,#40]
ffff80001139f91c: aa1303e0 mov x0, x19
ffff80001139f920: d2801702 mov x2, #0xb8 // #184
ffff80001139f924: 94000000 bl 0 <memcpy>
ffff80001139f924: R_AARCH64_CALL26 memcpy
return __builtin_memset(p, c, size);
ffff80001139f928: f9005e7f str xzr, [x19,#184]
}
ffff80001139f92c: f9400bf3 ldr x19, [sp,#16]
ffff80001139f930: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139f934: d65f03c0 ret
ffff80001139f938 <dev_get_stats>:
{
ffff80001139f938: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139f93c: 910003fd mov x29, sp
ffff80001139f940: a90153f3 stp x19, x20, [sp,#16]
ffff80001139f944: aa0003f4 mov x20, x0
ffff80001139f948: aa1e03e0 mov x0, x30
ffff80001139f94c: aa0103f3 mov x19, x1
ffff80001139f950: 94000000 bl 0 <_mcount>
ffff80001139f950: R_AARCH64_CALL26 _mcount
const struct net_device_ops *ops = dev->netdev_ops;
ffff80001139f954: f940fa80 ldr x0, [x20,#496]
if (ops->ndo_get_stats64) {
ffff80001139f958: f9404001 ldr x1, [x0,#128]
ffff80001139f95c: b4000421 cbz x1, ffff80001139f9e0 <dev_get_stats+0xa8>
ffff80001139f960: a9007e7f stp xzr, xzr, [x19]
ffff80001139f964: a9017e7f stp xzr, xzr, [x19,#16]
ffff80001139f968: a9027e7f stp xzr, xzr, [x19,#32]
ffff80001139f96c: a9037e7f stp xzr, xzr, [x19,#48]
ffff80001139f970: a9047e7f stp xzr, xzr, [x19,#64]
ffff80001139f974: a9057e7f stp xzr, xzr, [x19,#80]
ffff80001139f978: a9067e7f stp xzr, xzr, [x19,#96]
ffff80001139f97c: a9077e7f stp xzr, xzr, [x19,#112]
ffff80001139f980: a9087e7f stp xzr, xzr, [x19,#128]
ffff80001139f984: a9097e7f stp xzr, xzr, [x19,#144]
ffff80001139f988: a90a7e7f stp xzr, xzr, [x19,#160]
ffff80001139f98c: a90b7e7f stp xzr, xzr, [x19,#176]
ops->ndo_get_stats64(dev, storage);
ffff80001139f990: f9404002 ldr x2, [x0,#128]
ffff80001139f994: aa1303e1 mov x1, x19
ffff80001139f998: aa1403e0 mov x0, x20
ffff80001139f99c: d63f0040 blr x2
__READ_ONCE_SIZE;
ffff80001139f9a0: f940e280 ldr x0, [x20,#448]
storage->rx_dropped += (unsigned long)atomic_long_read(&dev->rx_dropped);
ffff80001139f9a4: f9401a62 ldr x2, [x19,#48]
storage->tx_dropped += (unsigned long)atomic_long_read(&dev->tx_dropped);
ffff80001139f9a8: f9401e61 ldr x1, [x19,#56]
storage->rx_dropped += (unsigned long)atomic_long_read(&dev->rx_dropped);
ffff80001139f9ac: 8b000040 add x0, x2, x0
ffff80001139f9b0: f9001a60 str x0, [x19,#48]
ffff80001139f9b4: f940e680 ldr x0, [x20,#456]
storage->rx_nohandler += (unsigned long)atomic_long_read(&dev->rx_nohandler);
ffff80001139f9b8: f9405e62 ldr x2, [x19,#184]
storage->tx_dropped += (unsigned long)atomic_long_read(&dev->tx_dropped);
ffff80001139f9bc: 8b000020 add x0, x1, x0
ffff80001139f9c0: f9001e60 str x0, [x19,#56]
ffff80001139f9c4: f940ea81 ldr x1, [x20,#464]
}
ffff80001139f9c8: aa1303e0 mov x0, x19
storage->rx_nohandler += (unsigned long)atomic_long_read(&dev->rx_nohandler);
ffff80001139f9cc: 8b010041 add x1, x2, x1
ffff80001139f9d0: f9005e61 str x1, [x19,#184]
}
ffff80001139f9d4: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139f9d8: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139f9dc: d65f03c0 ret
} else if (ops->ndo_get_stats) {
ffff80001139f9e0: f9404c01 ldr x1, [x0,#152]
ffff80001139f9e4: b40000e1 cbz x1, ffff80001139fa00 <dev_get_stats+0xc8>
netdev_stats_to_stats64(storage, ops->ndo_get_stats(dev));
ffff80001139f9e8: aa1403e0 mov x0, x20
ffff80001139f9ec: d63f0020 blr x1
ffff80001139f9f0: aa0003e1 mov x1, x0
ffff80001139f9f4: aa1303e0 mov x0, x19
ffff80001139f9f8: 94000000 bl ffff80001139f8fc <netdev_stats_to_stats64>
ffff80001139f9f8: R_AARCH64_CALL26 netdev_stats_to_stats64
ffff80001139f9fc: 17ffffe9 b ffff80001139f9a0 <dev_get_stats+0x68>
netdev_stats_to_stats64(storage, &dev->stats);
ffff80001139fa00: aa1303e0 mov x0, x19
ffff80001139fa04: 91042281 add x1, x20, #0x108
ffff80001139fa08: 94000000 bl ffff80001139f8fc <netdev_stats_to_stats64>
ffff80001139fa08: R_AARCH64_CALL26 netdev_stats_to_stats64
ffff80001139fa0c: 17ffffe5 b ffff80001139f9a0 <dev_get_stats+0x68>
ffff80001139fa10 <dev_getbyhwaddr_rcu>:
{
ffff80001139fa10: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139fa14: 910003fd mov x29, sp
ffff80001139fa18: a90153f3 stp x19, x20, [sp,#16]
ffff80001139fa1c: a9025bf5 stp x21, x22, [sp,#32]
ffff80001139fa20: aa0003f4 mov x20, x0
ffff80001139fa24: aa1e03e0 mov x0, x30
ffff80001139fa28: 53003c35 uxth w21, w1
ffff80001139fa2c: aa0203f6 mov x22, x2
ffff80001139fa30: 94000000 bl 0 <_mcount>
ffff80001139fa30: R_AARCH64_CALL26 _mcount
ffff80001139fa34: f8490e93 ldr x19, [x20,#144]!
for_each_netdev_rcu(net, dev)
ffff80001139fa38: eb13029f cmp x20, x19
ffff80001139fa3c: d1012273 sub x19, x19, #0x48
ffff80001139fa40: 540000c1 b.ne ffff80001139fa58 <dev_getbyhwaddr_rcu+0x48>
ffff80001139fa44: 14000012 b ffff80001139fa8c <dev_getbyhwaddr_rcu+0x7c>
ffff80001139fa48: f9402673 ldr x19, [x19,#72]
ffff80001139fa4c: eb13029f cmp x20, x19
ffff80001139fa50: d1012273 sub x19, x19, #0x48
ffff80001139fa54: 540001c0 b.eq ffff80001139fa8c <dev_getbyhwaddr_rcu+0x7c>
if (dev->type == type &&
ffff80001139fa58: 79448a63 ldrh w3, [x19,#580]
ffff80001139fa5c: 6b15007f cmp w3, w21
ffff80001139fa60: 54ffff41 b.ne ffff80001139fa48 <dev_getbyhwaddr_rcu+0x38>
if (q_size < size)
__read_overflow2();
}
if (p_size < size || q_size < size)
fortify_panic(__func__);
return __builtin_memcmp(p, q, size);
ffff80001139fa64: f9418e60 ldr x0, [x19,#792]
ffff80001139fa68: 3949be62 ldrb w2, [x19,#623]
ffff80001139fa6c: aa1603e1 mov x1, x22
ffff80001139fa70: 94000000 bl 0 <memcmp>
ffff80001139fa70: R_AARCH64_CALL26 memcmp
ffff80001139fa74: 35fffea0 cbnz w0, ffff80001139fa48 <dev_getbyhwaddr_rcu+0x38>
ffff80001139fa78: aa1303e0 mov x0, x19
}
ffff80001139fa7c: a9425bf5 ldp x21, x22, [sp,#32]
ffff80001139fa80: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139fa84: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139fa88: d65f03c0 ret
return NULL;
ffff80001139fa8c: d2800000 mov x0, #0x0 // #0
}
ffff80001139fa90: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139fa94: a9425bf5 ldp x21, x22, [sp,#32]
ffff80001139fa98: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139fa9c: d65f03c0 ret
ffff80001139faa0 <__dev_getfirstbyhwtype>:
{
ffff80001139faa0: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139faa4: 910003fd mov x29, sp
ffff80001139faa8: a90153f3 stp x19, x20, [sp,#16]
ffff80001139faac: aa0003f4 mov x20, x0
ffff80001139fab0: aa1e03e0 mov x0, x30
ffff80001139fab4: 53003c33 uxth w19, w1
ffff80001139fab8: 94000000 bl 0 <_mcount>
ffff80001139fab8: R_AARCH64_CALL26 _mcount
ASSERT_RTNL();
ffff80001139fabc: 94000000 bl 0 <rtnl_is_locked>
ffff80001139fabc: R_AARCH64_CALL26 rtnl_is_locked
ffff80001139fac0: 34000320 cbz w0, ffff80001139fb24 <__dev_getfirstbyhwtype+0x84>
for_each_netdev(net, dev)
ffff80001139fac4: aa1403e0 mov x0, x20
ffff80001139fac8: f8490c02 ldr x2, [x0,#144]!
ffff80001139facc: eb02001f cmp x0, x2
ffff80001139fad0: d1012042 sub x2, x2, #0x48
ffff80001139fad4: 54000180 b.eq ffff80001139fb04 <__dev_getfirstbyhwtype+0x64>
if (dev->type == type)
ffff80001139fad8: 79448841 ldrh w1, [x2,#580]
ffff80001139fadc: 6b13003f cmp w1, w19
ffff80001139fae0: 540000a1 b.ne ffff80001139faf4 <__dev_getfirstbyhwtype+0x54>
ffff80001139fae4: 1400000c b ffff80001139fb14 <__dev_getfirstbyhwtype+0x74>
ffff80001139fae8: 79448843 ldrh w3, [x2,#580]
ffff80001139faec: 6b13007f cmp w3, w19
ffff80001139faf0: 54000120 b.eq ffff80001139fb14 <__dev_getfirstbyhwtype+0x74>
for_each_netdev(net, dev)
ffff80001139faf4: f9402442 ldr x2, [x2,#72]
ffff80001139faf8: eb02001f cmp x0, x2
ffff80001139fafc: d1012042 sub x2, x2, #0x48
ffff80001139fb00: 54ffff41 b.ne ffff80001139fae8 <__dev_getfirstbyhwtype+0x48>
return NULL;
ffff80001139fb04: d2800000 mov x0, #0x0 // #0
}
ffff80001139fb08: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139fb0c: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139fb10: d65f03c0 ret
for_each_netdev(net, dev)
ffff80001139fb14: aa0203e0 mov x0, x2
}
ffff80001139fb18: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139fb1c: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139fb20: d65f03c0 ret
ASSERT_RTNL();
ffff80001139fb24: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff80001139fb24: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff80001139fb28: 39400060 ldrb w0, [x3]
ffff80001139fb28: R_AARCH64_LDST8_ABS_LO12_NC .data.once
ffff80001139fb2c: 35fffcc0 cbnz w0, ffff80001139fac4 <__dev_getfirstbyhwtype+0x24>
ffff80001139fb30: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff80001139fb30: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff80001139fb34: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff80001139fb34: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff80001139fb38: 52800024 mov w4, #0x1 // #1
ffff80001139fb3c: 91000000 add x0, x0, #0x0
ffff80001139fb3c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff80001139fb40: 91000021 add x1, x1, #0x0
ffff80001139fb40: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff80001139fb44: 52807c42 mov w2, #0x3e2 // #994
ffff80001139fb48: 39000064 strb w4, [x3]
ffff80001139fb48: R_AARCH64_LDST8_ABS_LO12_NC .data.once
ffff80001139fb4c: 94000000 bl 0 <__warn_printk>
ffff80001139fb4c: R_AARCH64_CALL26 __warn_printk
ffff80001139fb50: d4210000 brk #0x800
ffff80001139fb54: 17ffffdc b ffff80001139fac4 <__dev_getfirstbyhwtype+0x24>
ffff80001139fb58 <__dev_get_by_flags>:
{
ffff80001139fb58: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139fb5c: 910003fd mov x29, sp
ffff80001139fb60: a90153f3 stp x19, x20, [sp,#16]
ffff80001139fb64: f90013f5 str x21, [sp,#32]
ffff80001139fb68: aa0003f5 mov x21, x0
ffff80001139fb6c: aa1e03e0 mov x0, x30
ffff80001139fb70: 53003c34 uxth w20, w1
ffff80001139fb74: 53003c53 uxth w19, w2
ffff80001139fb78: 94000000 bl 0 <_mcount>
ffff80001139fb78: R_AARCH64_CALL26 _mcount
ASSERT_RTNL();
ffff80001139fb7c: 94000000 bl 0 <rtnl_is_locked>
ffff80001139fb7c: R_AARCH64_CALL26 rtnl_is_locked
ffff80001139fb80: 34000300 cbz w0, ffff80001139fbe0 <__dev_get_by_flags+0x88>
for_each_netdev(net, dev) {
ffff80001139fb84: aa1503e4 mov x4, x21
ffff80001139fb88: f8490c80 ldr x0, [x4,#144]!
ffff80001139fb8c: eb00009f cmp x4, x0
ffff80001139fb90: d1012000 sub x0, x0, #0x48
ffff80001139fb94: 540001c0 b.eq ffff80001139fbcc <__dev_get_by_flags+0x74>
if (((dev->flags ^ if_flags) & mask) == 0) {
ffff80001139fb98: b9422801 ldr w1, [x0,#552]
ffff80001139fb9c: 4a010281 eor w1, w20, w1
ffff80001139fba0: 6a13003f tst w1, w19
ffff80001139fba4: 540000c1 b.ne ffff80001139fbbc <__dev_get_by_flags+0x64>
ffff80001139fba8: 1400000a b ffff80001139fbd0 <__dev_get_by_flags+0x78>
ffff80001139fbac: b9422803 ldr w3, [x0,#552]
ffff80001139fbb0: 4a030283 eor w3, w20, w3
ffff80001139fbb4: 6a13007f tst w3, w19
ffff80001139fbb8: 540000c0 b.eq ffff80001139fbd0 <__dev_get_by_flags+0x78>
for_each_netdev(net, dev) {
ffff80001139fbbc: f9402400 ldr x0, [x0,#72]
ffff80001139fbc0: eb00009f cmp x4, x0
ffff80001139fbc4: d1012000 sub x0, x0, #0x48
ffff80001139fbc8: 54ffff21 b.ne ffff80001139fbac <__dev_get_by_flags+0x54>
ret = NULL;
ffff80001139fbcc: d2800000 mov x0, #0x0 // #0
}
ffff80001139fbd0: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139fbd4: f94013f5 ldr x21, [sp,#32]
ffff80001139fbd8: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139fbdc: d65f03c0 ret
ASSERT_RTNL();
ffff80001139fbe0: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff80001139fbe0: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff80001139fbe4: 91000063 add x3, x3, #0x0
ffff80001139fbe4: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff80001139fbe8: 39400460 ldrb w0, [x3,#1]
ffff80001139fbec: 35fffcc0 cbnz w0, ffff80001139fb84 <__dev_get_by_flags+0x2c>
ffff80001139fbf0: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff80001139fbf0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff80001139fbf4: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff80001139fbf4: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff80001139fbf8: 52800024 mov w4, #0x1 // #1
ffff80001139fbfc: 91000000 add x0, x0, #0x0
ffff80001139fbfc: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff80001139fc00: 91000021 add x1, x1, #0x0
ffff80001139fc00: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff80001139fc04: 52808162 mov w2, #0x40b // #1035
ffff80001139fc08: 39000464 strb w4, [x3,#1]
ffff80001139fc0c: 94000000 bl 0 <__warn_printk>
ffff80001139fc0c: R_AARCH64_CALL26 __warn_printk
ffff80001139fc10: d4210000 brk #0x800
ffff80001139fc14: 17ffffdc b ffff80001139fb84 <__dev_get_by_flags+0x2c>
ffff80001139fc18 <netdev_reg_state>:
{
return dev->reg_state == NETREG_UNREGISTERING;
}
static inline const char *netdev_reg_state(const struct net_device *dev)
{
ffff80001139fc18: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139fc1c: 910003fd mov x29, sp
ffff80001139fc20: f9000bf3 str x19, [sp,#16]
switch (dev->reg_state) {
ffff80001139fc24: 39536002 ldrb w2, [x0,#1240]
{
ffff80001139fc28: aa0003e1 mov x1, x0
switch (dev->reg_state) {
ffff80001139fc2c: 7100145f cmp w2, #0x5
ffff80001139fc30: 54000169 b.ls ffff80001139fc5c <netdev_reg_state+0x44>
case NETREG_UNREGISTERED: return " (unregistered)";
case NETREG_RELEASED: return " (released)";
case NETREG_DUMMY: return " (dummy)";
}
WARN_ONCE(1, "%s: unknown reg_state %d\n", dev->name, dev->reg_state);
ffff80001139fc34: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff80001139fc34: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff80001139fc38: 91000063 add x3, x3, #0x0
ffff80001139fc38: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff80001139fc3c: 39400860 ldrb w0, [x3,#2]
return " (unknown)";
ffff80001139fc40: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff80001139fc40: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xb8
ffff80001139fc44: 91000273 add x19, x19, #0x0
ffff80001139fc44: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xb8
WARN_ONCE(1, "%s: unknown reg_state %d\n", dev->name, dev->reg_state);
ffff80001139fc48: 340005e0 cbz w0, ffff80001139fd04 <netdev_reg_state+0xec>
}
ffff80001139fc4c: aa1303e0 mov x0, x19
ffff80001139fc50: f9400bf3 ldr x19, [sp,#16]
ffff80001139fc54: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139fc58: d65f03c0 ret
switch (dev->reg_state) {
ffff80001139fc5c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff80001139fc5c: R_AARCH64_ADR_PREL_PG_HI21 .rodata
ffff80001139fc60: 91000000 add x0, x0, #0x0
ffff80001139fc60: R_AARCH64_ADD_ABS_LO12_NC .rodata
ffff80001139fc64: 38624801 ldrb w1, [x0,w2,uxtw]
ffff80001139fc68: 10000063 adr x3, ffff80001139fc74 <netdev_reg_state+0x5c>
ffff80001139fc6c: 8b218861 add x1, x3, w1, sxtb #2
ffff80001139fc70: d61f0020 br x1
case NETREG_REGISTERED: return "";
ffff80001139fc74: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff80001139fc74: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x68
ffff80001139fc78: 91000273 add x19, x19, #0x0
ffff80001139fc78: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x68
}
ffff80001139fc7c: aa1303e0 mov x0, x19
ffff80001139fc80: f9400bf3 ldr x19, [sp,#16]
ffff80001139fc84: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139fc88: d65f03c0 ret
case NETREG_UNREGISTERING: return " (unregistering)";
ffff80001139fc8c: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff80001139fc8c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x70
ffff80001139fc90: 91000273 add x19, x19, #0x0
ffff80001139fc90: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x70
}
ffff80001139fc94: aa1303e0 mov x0, x19
ffff80001139fc98: f9400bf3 ldr x19, [sp,#16]
ffff80001139fc9c: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139fca0: d65f03c0 ret
case NETREG_UNREGISTERED: return " (unregistered)";
ffff80001139fca4: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff80001139fca4: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x88
ffff80001139fca8: 91000273 add x19, x19, #0x0
ffff80001139fca8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x88
}
ffff80001139fcac: aa1303e0 mov x0, x19
ffff80001139fcb0: f9400bf3 ldr x19, [sp,#16]
ffff80001139fcb4: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139fcb8: d65f03c0 ret
case NETREG_RELEASED: return " (released)";
ffff80001139fcbc: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff80001139fcbc: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x98
ffff80001139fcc0: 91000273 add x19, x19, #0x0
ffff80001139fcc0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x98
}
ffff80001139fcc4: aa1303e0 mov x0, x19
ffff80001139fcc8: f9400bf3 ldr x19, [sp,#16]
ffff80001139fccc: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139fcd0: d65f03c0 ret
case NETREG_DUMMY: return " (dummy)";
ffff80001139fcd4: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff80001139fcd4: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xa8
ffff80001139fcd8: 91000273 add x19, x19, #0x0
ffff80001139fcd8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xa8
}
ffff80001139fcdc: aa1303e0 mov x0, x19
ffff80001139fce0: f9400bf3 ldr x19, [sp,#16]
ffff80001139fce4: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139fce8: d65f03c0 ret
case NETREG_UNINITIALIZED: return " (uninitialized)";
ffff80001139fcec: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff80001139fcec: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x50
ffff80001139fcf0: 91000273 add x19, x19, #0x0
ffff80001139fcf0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x50
}
ffff80001139fcf4: aa1303e0 mov x0, x19
ffff80001139fcf8: f9400bf3 ldr x19, [sp,#16]
ffff80001139fcfc: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139fd00: d65f03c0 ret
WARN_ONCE(1, "%s: unknown reg_state %d\n", dev->name, dev->reg_state);
ffff80001139fd04: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff80001139fd04: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xc8
ffff80001139fd08: 52800024 mov w4, #0x1 // #1
ffff80001139fd0c: 91000000 add x0, x0, #0x0
ffff80001139fd0c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xc8
ffff80001139fd10: 39000864 strb w4, [x3,#2]
ffff80001139fd14: 94000000 bl 0 <__warn_printk>
ffff80001139fd14: R_AARCH64_CALL26 __warn_printk
ffff80001139fd18: d4210000 brk #0x800
ffff80001139fd1c: 17ffffcc b ffff80001139fc4c <netdev_reg_state+0x34>
ffff80001139fd20 <netdev_is_rx_handler_busy>:
{
ffff80001139fd20: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139fd24: 910003fd mov x29, sp
ffff80001139fd28: f9000bf3 str x19, [sp,#16]
ffff80001139fd2c: aa0003f3 mov x19, x0
ffff80001139fd30: aa1e03e0 mov x0, x30
ffff80001139fd34: 94000000 bl 0 <_mcount>
ffff80001139fd34: R_AARCH64_CALL26 _mcount
ASSERT_RTNL();
ffff80001139fd38: 94000000 bl 0 <rtnl_is_locked>
ffff80001139fd38: R_AARCH64_CALL26 rtnl_is_locked
ffff80001139fd3c: 34000180 cbz w0, ffff80001139fd6c <netdev_is_rx_handler_busy+0x4c>
return dev && rtnl_dereference(dev->rx_handler);
ffff80001139fd40: b40000f3 cbz x19, ffff80001139fd5c <netdev_is_rx_handler_busy+0x3c>
ffff80001139fd44: f941a260 ldr x0, [x19,#832]
}
ffff80001139fd48: f9400bf3 ldr x19, [sp,#16]
return dev && rtnl_dereference(dev->rx_handler);
ffff80001139fd4c: eb1f001f cmp x0, xzr
ffff80001139fd50: 1a9f07e0 cset w0, ne
}
ffff80001139fd54: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139fd58: d65f03c0 ret
ffff80001139fd5c: 2a1303e0 mov w0, w19
ffff80001139fd60: f9400bf3 ldr x19, [sp,#16]
ffff80001139fd64: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139fd68: d65f03c0 ret
ASSERT_RTNL();
ffff80001139fd6c: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff80001139fd6c: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff80001139fd70: 91000063 add x3, x3, #0x0
ffff80001139fd70: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff80001139fd74: 39400c60 ldrb w0, [x3,#3]
ffff80001139fd78: 35fffe40 cbnz w0, ffff80001139fd40 <netdev_is_rx_handler_busy+0x20>
ffff80001139fd7c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff80001139fd7c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff80001139fd80: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff80001139fd80: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff80001139fd84: 52800024 mov w4, #0x1 // #1
ffff80001139fd88: 91000000 add x0, x0, #0x0
ffff80001139fd88: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff80001139fd8c: 91000021 add x1, x1, #0x0
ffff80001139fd8c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff80001139fd90: 528263e2 mov w2, #0x131f // #4895
ffff80001139fd94: 39000c64 strb w4, [x3,#3]
ffff80001139fd98: 94000000 bl 0 <__warn_printk>
ffff80001139fd98: R_AARCH64_CALL26 __warn_printk
ffff80001139fd9c: d4210000 brk #0x800
ffff80001139fda0: 17ffffe8 b ffff80001139fd40 <netdev_is_rx_handler_busy+0x20>
ffff80001139fda4 <netdev_rx_handler_register>:
{
ffff80001139fda4: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139fda8: 910003fd mov x29, sp
ffff80001139fdac: f9000bf3 str x19, [sp,#16]
ffff80001139fdb0: aa0003f3 mov x19, x0
ffff80001139fdb4: aa1e03e0 mov x0, x30
ffff80001139fdb8: f90017a1 str x1, [x29,#40]
ffff80001139fdbc: f90013a2 str x2, [x29,#32]
ffff80001139fdc0: 94000000 bl 0 <_mcount>
ffff80001139fdc0: R_AARCH64_CALL26 _mcount
if (netdev_is_rx_handler_busy(dev))
ffff80001139fdc4: aa1303e0 mov x0, x19
ffff80001139fdc8: 94000000 bl ffff80001139fd20 <netdev_is_rx_handler_busy>
ffff80001139fdc8: R_AARCH64_CALL26 netdev_is_rx_handler_busy
ffff80001139fdcc: 53001c00 uxtb w0, w0
ffff80001139fdd0: f94017a1 ldr x1, [x29,#40]
ffff80001139fdd4: f94013a2 ldr x2, [x29,#32]
ffff80001139fdd8: 35000160 cbnz w0, ffff80001139fe04 <netdev_rx_handler_register+0x60>
if (dev->priv_flags & IFF_NO_RX_HANDLER)
ffff80001139fddc: b9422e60 ldr w0, [x19,#556]
ffff80001139fde0: 12060000 and w0, w0, #0x4000000
ffff80001139fde4: 35000140 cbnz w0, ffff80001139fe0c <netdev_rx_handler_register+0x68>
rcu_assign_pointer(dev->rx_handler_data, rx_handler_data);
ffff80001139fde8: 910d2263 add x3, x19, #0x348
ffff80001139fdec: c89ffc62 stlr x2, [x3]
rcu_assign_pointer(dev->rx_handler, rx_handler);
ffff80001139fdf0: 910d0273 add x19, x19, #0x340
ffff80001139fdf4: c89ffe61 stlr x1, [x19]
}
ffff80001139fdf8: f9400bf3 ldr x19, [sp,#16]
ffff80001139fdfc: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139fe00: d65f03c0 ret
return -EBUSY;
ffff80001139fe04: 128001e0 mov w0, #0xfffffff0 // #-16
ffff80001139fe08: 17fffffc b ffff80001139fdf8 <netdev_rx_handler_register+0x54>
return -EINVAL;
ffff80001139fe0c: 128002a0 mov w0, #0xffffffea // #-22
ffff80001139fe10: 17fffffa b ffff80001139fdf8 <netdev_rx_handler_register+0x54>
ffff80001139fe14 <netdev_has_upper_dev>:
{
ffff80001139fe14: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139fe18: 910003fd mov x29, sp
ffff80001139fe1c: a90153f3 stp x19, x20, [sp,#16]
ffff80001139fe20: aa0003f4 mov x20, x0
ffff80001139fe24: aa1e03e0 mov x0, x30
ffff80001139fe28: aa0103f3 mov x19, x1
ffff80001139fe2c: 94000000 bl 0 <_mcount>
ffff80001139fe2c: R_AARCH64_CALL26 _mcount
ASSERT_RTNL();
ffff80001139fe30: 94000000 bl 0 <rtnl_is_locked>
ffff80001139fe30: R_AARCH64_CALL26 rtnl_is_locked
ffff80001139fe34: 34000160 cbz w0, ffff80001139fe60 <netdev_has_upper_dev+0x4c>
return netdev_walk_all_upper_dev_rcu(dev, ____netdev_has_upper_dev,
ffff80001139fe38: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff80001139fe38: R_AARCH64_ADR_PREL_PG_HI21 .text+0x654
ffff80001139fe3c: aa1303e2 mov x2, x19
ffff80001139fe40: aa1403e0 mov x0, x20
ffff80001139fe44: 91000021 add x1, x1, #0x0
ffff80001139fe44: R_AARCH64_ADD_ABS_LO12_NC .text+0x654
ffff80001139fe48: 94000000 bl ffff80001139eb74 <netdev_walk_all_upper_dev_rcu>
ffff80001139fe48: R_AARCH64_CALL26 netdev_walk_all_upper_dev_rcu
ffff80001139fe4c: 6b1f001f cmp w0, wzr
}
ffff80001139fe50: 1a9f07e0 cset w0, ne
ffff80001139fe54: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139fe58: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139fe5c: d65f03c0 ret
ASSERT_RTNL();
ffff80001139fe60: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff80001139fe60: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff80001139fe64: 91000063 add x3, x3, #0x0
ffff80001139fe64: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff80001139fe68: 39401060 ldrb w0, [x3,#4]
ffff80001139fe6c: 35fffe60 cbnz w0, ffff80001139fe38 <netdev_has_upper_dev+0x24>
ffff80001139fe70: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff80001139fe70: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff80001139fe74: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff80001139fe74: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff80001139fe78: 52800024 mov w4, #0x1 // #1
ffff80001139fe7c: 91000000 add x0, x0, #0x0
ffff80001139fe7c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff80001139fe80: 91000021 add x1, x1, #0x0
ffff80001139fe80: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff80001139fe84: 52834782 mov w2, #0x1a3c // #6716
ffff80001139fe88: 39001064 strb w4, [x3,#4]
ffff80001139fe8c: 94000000 bl 0 <__warn_printk>
ffff80001139fe8c: R_AARCH64_CALL26 __warn_printk
ffff80001139fe90: d4210000 brk #0x800
ffff80001139fe94: 17ffffe9 b ffff80001139fe38 <netdev_has_upper_dev+0x24>
ffff80001139fe98 <netdev_has_any_upper_dev>:
{
ffff80001139fe98: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139fe9c: 910003fd mov x29, sp
ffff80001139fea0: f9000bf3 str x19, [sp,#16]
ffff80001139fea4: aa0003f3 mov x19, x0
ffff80001139fea8: aa1e03e0 mov x0, x30
ffff80001139feac: 94000000 bl 0 <_mcount>
ffff80001139feac: R_AARCH64_CALL26 _mcount
ASSERT_RTNL();
ffff80001139feb0: 94000000 bl 0 <rtnl_is_locked>
ffff80001139feb0: R_AARCH64_CALL26 rtnl_is_locked
ffff80001139feb4: 34000100 cbz w0, ffff80001139fed4 <netdev_has_any_upper_dev+0x3c>
ffff80001139feb8: aa1303e0 mov x0, x19
ffff80001139febc: f84a8c01 ldr x1, [x0,#168]!
}
ffff80001139fec0: f9400bf3 ldr x19, [sp,#16]
return !list_empty(&dev->adj_list.upper);
ffff80001139fec4: eb01001f cmp x0, x1
}
ffff80001139fec8: 1a9f07e0 cset w0, ne
ffff80001139fecc: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139fed0: d65f03c0 ret
ASSERT_RTNL();
ffff80001139fed4: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff80001139fed4: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff80001139fed8: 91000063 add x3, x3, #0x0
ffff80001139fed8: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff80001139fedc: 39401460 ldrb w0, [x3,#5]
ffff80001139fee0: 35fffec0 cbnz w0, ffff80001139feb8 <netdev_has_any_upper_dev+0x20>
ffff80001139fee4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff80001139fee4: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff80001139fee8: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff80001139fee8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff80001139feec: 52800024 mov w4, #0x1 // #1
ffff80001139fef0: 91000000 add x0, x0, #0x0
ffff80001139fef0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff80001139fef4: 91000021 add x1, x1, #0x0
ffff80001139fef4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff80001139fef8: 52834bc2 mov w2, #0x1a5e // #6750
ffff80001139fefc: 39001464 strb w4, [x3,#5]
ffff80001139ff00: 94000000 bl 0 <__warn_printk>
ffff80001139ff00: R_AARCH64_CALL26 __warn_printk
ffff80001139ff04: d4210000 brk #0x800
ffff80001139ff08: 17ffffec b ffff80001139feb8 <netdev_has_any_upper_dev+0x20>
ffff80001139ff0c <netdev_master_upper_dev_get>:
{
ffff80001139ff0c: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139ff10: 910003fd mov x29, sp
ffff80001139ff14: f9000bf3 str x19, [sp,#16]
ffff80001139ff18: aa0003f3 mov x19, x0
ffff80001139ff1c: aa1e03e0 mov x0, x30
ffff80001139ff20: 94000000 bl 0 <_mcount>
ffff80001139ff20: R_AARCH64_CALL26 _mcount
ASSERT_RTNL();
ffff80001139ff24: 94000000 bl 0 <rtnl_is_locked>
ffff80001139ff24: R_AARCH64_CALL26 rtnl_is_locked
ffff80001139ff28: 340001c0 cbz w0, ffff80001139ff60 <netdev_master_upper_dev_get+0x54>
ffff80001139ff2c: aa1303e1 mov x1, x19
ffff80001139ff30: f84a8c20 ldr x0, [x1,#168]!
if (list_empty(&dev->adj_list.upper))
ffff80001139ff34: eb00003f cmp x1, x0
ffff80001139ff38: 54000100 b.eq ffff80001139ff58 <netdev_master_upper_dev_get+0x4c>
upper = list_first_entry(&dev->adj_list.upper,
ffff80001139ff3c: f9405660 ldr x0, [x19,#168]
if (likely(upper->master))
ffff80001139ff40: 385f0001 ldurb w1, [x0,#-16]
ffff80001139ff44: 340000a1 cbz w1, ffff80001139ff58 <netdev_master_upper_dev_get+0x4c>
return upper->dev;
ffff80001139ff48: f85e8000 ldur x0, [x0,#-24]
}
ffff80001139ff4c: f9400bf3 ldr x19, [sp,#16]
ffff80001139ff50: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139ff54: d65f03c0 ret
return NULL;
ffff80001139ff58: d2800000 mov x0, #0x0 // #0
ffff80001139ff5c: 17fffffc b ffff80001139ff4c <netdev_master_upper_dev_get+0x40>
ASSERT_RTNL();
ffff80001139ff60: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff80001139ff60: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff80001139ff64: 91000063 add x3, x3, #0x0
ffff80001139ff64: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff80001139ff68: 39401860 ldrb w0, [x3,#6]
ffff80001139ff6c: 35fffe00 cbnz w0, ffff80001139ff2c <netdev_master_upper_dev_get+0x20>
ffff80001139ff70: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff80001139ff70: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff80001139ff74: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff80001139ff74: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff80001139ff78: 52800024 mov w4, #0x1 // #1
ffff80001139ff7c: 91000000 add x0, x0, #0x0
ffff80001139ff7c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff80001139ff80: 91000021 add x1, x1, #0x0
ffff80001139ff80: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff80001139ff84: 52834de2 mov w2, #0x1a6f // #6767
ffff80001139ff88: 39001864 strb w4, [x3,#6]
ffff80001139ff8c: 94000000 bl 0 <__warn_printk>
ffff80001139ff8c: R_AARCH64_CALL26 __warn_printk
ffff80001139ff90: d4210000 brk #0x800
ffff80001139ff94: 17ffffe6 b ffff80001139ff2c <netdev_master_upper_dev_get+0x20>
ffff80001139ff98 <__netdev_has_upper_dev>:
{
ffff80001139ff98: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139ff9c: 910003fd mov x29, sp
ffff80001139ffa0: a90153f3 stp x19, x20, [sp,#16]
ffff80001139ffa4: aa0003f4 mov x20, x0
ffff80001139ffa8: aa1e03e0 mov x0, x30
ffff80001139ffac: aa0103f3 mov x19, x1
ffff80001139ffb0: 94000000 bl 0 <_mcount>
ffff80001139ffb0: R_AARCH64_CALL26 _mcount
ASSERT_RTNL();
ffff80001139ffb4: 94000000 bl 0 <rtnl_is_locked>
ffff80001139ffb4: R_AARCH64_CALL26 rtnl_is_locked
ffff80001139ffb8: 34000160 cbz w0, ffff80001139ffe4 <__netdev_has_upper_dev+0x4c>
return __netdev_walk_all_upper_dev(dev, ____netdev_has_upper_dev,
ffff80001139ffbc: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff80001139ffbc: R_AARCH64_ADR_PREL_PG_HI21 .text+0x654
ffff80001139ffc0: aa1303e2 mov x2, x19
ffff80001139ffc4: aa1403e0 mov x0, x20
ffff80001139ffc8: 91000021 add x1, x1, #0x0
ffff80001139ffc8: R_AARCH64_ADD_ABS_LO12_NC .text+0x654
ffff80001139ffcc: 97fffaac bl ffff80001139ea7c <__netdev_walk_all_upper_dev>
ffff80001139ffd0: 6b1f001f cmp w0, wzr
}
ffff80001139ffd4: 1a9f07e0 cset w0, ne
ffff80001139ffd8: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139ffdc: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139ffe0: d65f03c0 ret
ASSERT_RTNL();
ffff80001139ffe4: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff80001139ffe4: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff80001139ffe8: 91000063 add x3, x3, #0x0
ffff80001139ffe8: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff80001139ffec: 39401c60 ldrb w0, [x3,#7]
ffff80001139fff0: 35fffe60 cbnz w0, ffff80001139ffbc <__netdev_has_upper_dev+0x24>
ffff80001139fff4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff80001139fff4: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff80001139fff8: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff80001139fff8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff80001139fffc: 52800024 mov w4, #0x1 // #1
ffff8000113a0000: 91000000 add x0, x0, #0x0
ffff8000113a0000: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113a0004: 91000021 add x1, x1, #0x0
ffff8000113a0004: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113a0008: 52836862 mov w2, #0x1b43 // #6979
ffff8000113a000c: 39001c64 strb w4, [x3,#7]
ffff8000113a0010: 94000000 bl 0 <__warn_printk>
ffff8000113a0010: R_AARCH64_CALL26 __warn_printk
ffff8000113a0014: d4210000 brk #0x800
ffff8000113a0018: 17ffffe9 b ffff80001139ffbc <__netdev_has_upper_dev+0x24>
ffff8000113a001c <remove_xps_queue>:
{
ffff8000113a001c: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a0020: 910003fd mov x29, sp
ffff8000113a0024: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a0028: aa0003f4 mov x20, x0
ffff8000113a002c: aa1e03e0 mov x0, x30
ffff8000113a0030: f90017a1 str x1, [x29,#40]
ffff8000113a0034: 53003c53 uxth w19, w2
ffff8000113a0038: 94000000 bl 0 <_mcount>
ffff8000113a0038: R_AARCH64_CALL26 _mcount
if (dev_maps)
ffff8000113a003c: f94017a1 ldr x1, [x29,#40]
ffff8000113a0040: b40004d4 cbz x20, ffff8000113a00d8 <remove_xps_queue+0xbc>
map = xmap_dereference(dev_maps->attr_map[tci]);
ffff8000113a0044: 93407c21 sxtw x1, w1
ffff8000113a0048: 91000820 add x0, x1, #0x2
ffff8000113a004c: f8607a84 ldr x4, [x20,x0,lsl #3]
return false;
ffff8000113a0050: 52800000 mov w0, #0x0 // #0
if (!map)
ffff8000113a0054: b4000284 cbz x4, ffff8000113a00a4 <remove_xps_queue+0x88>
for (pos = map->len; pos--;) {
ffff8000113a0058: b9400082 ldr w2, [x4]
ffff8000113a005c: 51000440 sub w0, w2, #0x1
ffff8000113a0060: 2a0003e3 mov w3, w0
if (map->queues[pos] != index)
ffff8000113a0064: 93407c65 sxtw x5, w3
ffff8000113a0068: 910020a5 add x5, x5, #0x8
for (pos = map->len; pos--;) {
ffff8000113a006c: 3100047f cmn w3, #0x1
if (map->queues[pos] != index)
ffff8000113a0070: 8b050485 add x5, x4, x5, lsl #1
for (pos = map->len; pos--;) {
ffff8000113a0074: 540003a0 b.eq ffff8000113a00e8 <remove_xps_queue+0xcc>
if (map->queues[pos] != index)
ffff8000113a0078: 794010a6 ldrh w6, [x5,#8]
ffff8000113a007c: 51000463 sub w3, w3, #0x1
ffff8000113a0080: 6b1300df cmp w6, w19
ffff8000113a0084: 54ffff01 b.ne ffff8000113a0064 <remove_xps_queue+0x48>
if (map->len > 1) {
ffff8000113a0088: 7100045f cmp w2, #0x1
ffff8000113a008c: 54000129 b.ls ffff8000113a00b0 <remove_xps_queue+0x94>
map->queues[pos] = map->queues[--map->len];
ffff8000113a0090: b9000080 str w0, [x4]
ffff8000113a0094: 8b204484 add x4, x4, w0, uxtw #1
ffff8000113a0098: 79403081 ldrh w1, [x4,#24]
return true;
ffff8000113a009c: 52800020 mov w0, #0x1 // #1
map->queues[pos] = map->queues[--map->len];
ffff8000113a00a0: 790010a1 strh w1, [x5,#8]
}
ffff8000113a00a4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a00a8: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a00ac: d65f03c0 ret
RCU_INIT_POINTER(dev_maps->attr_map[tci], NULL);
ffff8000113a00b0: 91000821 add x1, x1, #0x2
ffff8000113a00b4: d37df021 lsl x1, x1, #3
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a00b8: f8216a9f str xzr, [x20,x1]
kfree_rcu(map, rcu);
ffff8000113a00bc: 91002080 add x0, x4, #0x8
ffff8000113a00c0: d2800101 mov x1, #0x8 // #8
ffff8000113a00c4: 94000000 bl 0 <kfree_call_rcu>
ffff8000113a00c4: R_AARCH64_CALL26 kfree_call_rcu
}
ffff8000113a00c8: a94153f3 ldp x19, x20, [sp,#16]
return false;
ffff8000113a00cc: 52800000 mov w0, #0x0 // #0
}
ffff8000113a00d0: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a00d4: d65f03c0 ret
return false;
ffff8000113a00d8: 2a1403e0 mov w0, w20
}
ffff8000113a00dc: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a00e0: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a00e4: d65f03c0 ret
ffff8000113a00e8: a94153f3 ldp x19, x20, [sp,#16]
return true;
ffff8000113a00ec: 52800020 mov w0, #0x1 // #1
}
ffff8000113a00f0: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a00f4: d65f03c0 ret
ffff8000113a00f8 <call_netdevice_notifiers_info>:
{
ffff8000113a00f8: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a00fc: 910003fd mov x29, sp
ffff8000113a0100: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a0104: f90013f5 str x21, [sp,#32]
ffff8000113a0108: aa0003f4 mov x20, x0
ffff8000113a010c: aa1e03e0 mov x0, x30
ffff8000113a0110: aa0103f3 mov x19, x1
ffff8000113a0114: 94000000 bl 0 <_mcount>
ffff8000113a0114: R_AARCH64_CALL26 _mcount
}
static inline struct net *read_pnet(const possible_net_t *pnet)
{
#ifdef CONFIG_NET_NS
return pnet->net;
ffff8000113a0118: f9400260 ldr x0, [x19]
ffff8000113a011c: f9427815 ldr x21, [x0,#1264]
ASSERT_RTNL();
ffff8000113a0120: 94000000 bl 0 <rtnl_is_locked>
ffff8000113a0120: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113a0124: 34000200 cbz w0, ffff8000113a0164 <call_netdevice_notifiers_info+0x6c>
ret = raw_notifier_call_chain(&net->netdev_chain, val, info);
ffff8000113a0128: aa1403e1 mov x1, x20
ffff8000113a012c: 9104e2a0 add x0, x21, #0x138
ffff8000113a0130: aa1303e2 mov x2, x19
ffff8000113a0134: 94000000 bl 0 <raw_notifier_call_chain>
ffff8000113a0134: R_AARCH64_CALL26 raw_notifier_call_chain
if (ret & NOTIFY_STOP_MASK)
ffff8000113a0138: 377800e0 tbnz w0, #15, ffff8000113a0154 <call_netdevice_notifiers_info+0x5c>
return raw_notifier_call_chain(&netdev_chain, val, info);
ffff8000113a013c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a013c: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a0140: 91000000 add x0, x0, #0x0
ffff8000113a0140: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a0144: 910c2000 add x0, x0, #0x308
ffff8000113a0148: aa1403e1 mov x1, x20
ffff8000113a014c: aa1303e2 mov x2, x19
ffff8000113a0150: 94000000 bl 0 <raw_notifier_call_chain>
ffff8000113a0150: R_AARCH64_CALL26 raw_notifier_call_chain
}
ffff8000113a0154: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a0158: f94013f5 ldr x21, [sp,#32]
ffff8000113a015c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a0160: d65f03c0 ret
ASSERT_RTNL();
ffff8000113a0164: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0164: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113a0168: 91000063 add x3, x3, #0x0
ffff8000113a0168: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113a016c: 39402060 ldrb w0, [x3,#8]
ffff8000113a0170: 35fffdc0 cbnz w0, ffff8000113a0128 <call_netdevice_notifiers_info+0x30>
ffff8000113a0174: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0174: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113a0178: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0178: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113a017c: 52800024 mov w4, #0x1 // #1
ffff8000113a0180: 91000000 add x0, x0, #0x0
ffff8000113a0180: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113a0184: 91000021 add x1, x1, #0x0
ffff8000113a0184: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113a0188: 5280f262 mov w2, #0x793 // #1939
ffff8000113a018c: 39002064 strb w4, [x3,#8]
ffff8000113a0190: 94000000 bl 0 <__warn_printk>
ffff8000113a0190: R_AARCH64_CALL26 __warn_printk
ffff8000113a0194: d4210000 brk #0x800
ffff8000113a0198: 17ffffe4 b ffff8000113a0128 <call_netdevice_notifiers_info+0x30>
ffff8000113a019c <call_netdevice_notifiers>:
{
ffff8000113a019c: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113a01a0: 910003fd mov x29, sp
ffff8000113a01a4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a01a8: f90013f5 str x21, [sp,#32]
ffff8000113a01ac: aa0003f5 mov x21, x0
ffff8000113a01b0: aa1e03e0 mov x0, x30
ffff8000113a01b4: aa0103f4 mov x20, x1
ffff8000113a01b8: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff8000113a01b8: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a01bc: 94000000 bl 0 <_mcount>
ffff8000113a01bc: R_AARCH64_CALL26 _mcount
ffff8000113a01c0: f9400262 ldr x2, [x19]
ffff8000113a01c0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
return call_netdevice_notifiers_info(val, &info);
ffff8000113a01c4: 9100e3a1 add x1, x29, #0x38
ffff8000113a01c8: aa1503e0 mov x0, x21
{
ffff8000113a01cc: f90027a2 str x2, [x29,#72]
struct netdev_notifier_info info = {
ffff8000113a01d0: f9001fb4 str x20, [x29,#56]
ffff8000113a01d4: f90023bf str xzr, [x29,#64]
return call_netdevice_notifiers_info(val, &info);
ffff8000113a01d8: 97ffffc8 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
}
ffff8000113a01dc: f94027a2 ldr x2, [x29,#72]
ffff8000113a01e0: f9400261 ldr x1, [x19]
ffff8000113a01e0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a01e4: eb01005f cmp x2, x1
ffff8000113a01e8: 540000a1 b.ne ffff8000113a01fc <call_netdevice_notifiers+0x60>
ffff8000113a01ec: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a01f0: f94013f5 ldr x21, [sp,#32]
ffff8000113a01f4: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113a01f8: d65f03c0 ret
ffff8000113a01fc: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a01fc: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a0200 <netdev_features_change>:
{
ffff8000113a0200: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a0204: 910003fd mov x29, sp
ffff8000113a0208: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a020c: aa0003f4 mov x20, x0
ffff8000113a0210: aa1e03e0 mov x0, x30
ffff8000113a0214: 94000000 bl 0 <_mcount>
ffff8000113a0214: R_AARCH64_CALL26 _mcount
ffff8000113a0218: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff8000113a0218: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a021c: f9400262 ldr x2, [x19]
ffff8000113a021c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
return call_netdevice_notifiers_info(val, &info);
ffff8000113a0220: 9100a3a1 add x1, x29, #0x28
ffff8000113a0224: d2800180 mov x0, #0xc // #12
{
ffff8000113a0228: f9001fa2 str x2, [x29,#56]
struct netdev_notifier_info info = {
ffff8000113a022c: f90017b4 str x20, [x29,#40]
ffff8000113a0230: f9001bbf str xzr, [x29,#48]
return call_netdevice_notifiers_info(val, &info);
ffff8000113a0234: 97ffffb1 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
}
ffff8000113a0238: f9401fa1 ldr x1, [x29,#56]
ffff8000113a023c: f9400260 ldr x0, [x19]
ffff8000113a023c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a0240: eb00003f cmp x1, x0
ffff8000113a0244: 54000081 b.ne ffff8000113a0254 <netdev_features_change+0x54>
ffff8000113a0248: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a024c: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a0250: d65f03c0 ret
ffff8000113a0254: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a0254: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a0258 <netdev_bonding_info_change>:
{
ffff8000113a0258: a9b97bfd stp x29, x30, [sp,#-112]!
ffff8000113a025c: 910003fd mov x29, sp
ffff8000113a0260: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a0264: aa0003f4 mov x20, x0
ffff8000113a0268: aa1e03e0 mov x0, x30
ffff8000113a026c: f90017a1 str x1, [x29,#40]
ffff8000113a0270: 94000000 bl 0 <_mcount>
ffff8000113a0270: R_AARCH64_CALL26 _mcount
return __builtin_memcpy(p, q, size);
ffff8000113a0274: f94017a1 ldr x1, [x29,#40]
ffff8000113a0278: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff8000113a0278: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a027c: a9401424 ldp x4, x5, [x1]
ffff8000113a0280: f9401027 ldr x7, [x1,#32]
ffff8000113a0284: a9410c22 ldp x2, x3, [x1,#16]
struct netdev_notifier_bonding_info info = {
ffff8000113a0288: a9037fbf stp xzr, xzr, [x29,#48]
ffff8000113a028c: 910103a6 add x6, x29, #0x40
ffff8000113a0290: a90417a4 stp x4, x5, [x29,#64]
{
ffff8000113a0294: f9400268 ldr x8, [x19]
ffff8000113a0294: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
call_netdevice_notifiers_info(NETDEV_BONDING_INFO,
ffff8000113a0298: 9100c3a1 add x1, x29, #0x30
ffff8000113a029c: d2800320 mov x0, #0x19 // #25
ffff8000113a02a0: a9010cc2 stp x2, x3, [x6,#16]
ffff8000113a02a4: f90010c7 str x7, [x6,#32]
{
ffff8000113a02a8: f90037a8 str x8, [x29,#104]
struct netdev_notifier_bonding_info info = {
ffff8000113a02ac: f9001bb4 str x20, [x29,#48]
call_netdevice_notifiers_info(NETDEV_BONDING_INFO,
ffff8000113a02b0: 97ffff92 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
}
ffff8000113a02b4: f94037a1 ldr x1, [x29,#104]
ffff8000113a02b8: f9400260 ldr x0, [x19]
ffff8000113a02b8: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a02bc: eb00003f cmp x1, x0
ffff8000113a02c0: 54000081 b.ne ffff8000113a02d0 <netdev_bonding_info_change+0x78>
ffff8000113a02c4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a02c8: a8c77bfd ldp x29, x30, [sp],#112
ffff8000113a02cc: d65f03c0 ret
ffff8000113a02d0: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a02d0: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a02d4 <netdev_lower_state_changed>:
{
ffff8000113a02d4: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113a02d8: 910003fd mov x29, sp
ffff8000113a02dc: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a02e0: f90013f5 str x21, [sp,#32]
ffff8000113a02e4: aa0003f5 mov x21, x0
ffff8000113a02e8: aa1e03e0 mov x0, x30
ffff8000113a02ec: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff8000113a02ec: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a02f0: aa0103f4 mov x20, x1
ffff8000113a02f4: 94000000 bl 0 <_mcount>
ffff8000113a02f4: R_AARCH64_CALL26 _mcount
ffff8000113a02f8: f9400260 ldr x0, [x19]
ffff8000113a02f8: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
struct netdev_notifier_changelowerstate_info changelowerstate_info = {
ffff8000113a02fc: a9037fbf stp xzr, xzr, [x29,#48]
{
ffff8000113a0300: f90027a0 str x0, [x29,#72]
struct netdev_notifier_changelowerstate_info changelowerstate_info = {
ffff8000113a0304: f90023bf str xzr, [x29,#64]
ffff8000113a0308: f9001bb5 str x21, [x29,#48]
ASSERT_RTNL();
ffff8000113a030c: 94000000 bl 0 <rtnl_is_locked>
ffff8000113a030c: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113a0310: 340001a0 cbz w0, ffff8000113a0344 <netdev_lower_state_changed+0x70>
call_netdevice_notifiers_info(NETDEV_CHANGELOWERSTATE,
ffff8000113a0314: 9100c3a1 add x1, x29, #0x30
ffff8000113a0318: d2800360 mov x0, #0x1b // #27
changelowerstate_info.lower_state_info = lower_state_info;
ffff8000113a031c: f90023b4 str x20, [x29,#64]
call_netdevice_notifiers_info(NETDEV_CHANGELOWERSTATE,
ffff8000113a0320: 97ffff76 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
}
ffff8000113a0324: f94027a1 ldr x1, [x29,#72]
ffff8000113a0328: f9400260 ldr x0, [x19]
ffff8000113a0328: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a032c: eb00003f cmp x1, x0
ffff8000113a0330: 54000261 b.ne ffff8000113a037c <netdev_lower_state_changed+0xa8>
ffff8000113a0334: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a0338: f94013f5 ldr x21, [sp,#32]
ffff8000113a033c: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113a0340: d65f03c0 ret
ASSERT_RTNL();
ffff8000113a0344: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0344: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113a0348: 91000063 add x3, x3, #0x0
ffff8000113a0348: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113a034c: 39402460 ldrb w0, [x3,#9]
ffff8000113a0350: 35fffe20 cbnz w0, ffff8000113a0314 <netdev_lower_state_changed+0x40>
ffff8000113a0354: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0354: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113a0358: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0358: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113a035c: 52800024 mov w4, #0x1 // #1
ffff8000113a0360: 91000000 add x0, x0, #0x0
ffff8000113a0360: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113a0364: 91000021 add x1, x1, #0x0
ffff8000113a0364: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113a0368: 5283dae2 mov w2, #0x1ed7 // #7895
ffff8000113a036c: 39002464 strb w4, [x3,#9]
ffff8000113a0370: 94000000 bl 0 <__warn_printk>
ffff8000113a0370: R_AARCH64_CALL26 __warn_printk
ffff8000113a0374: d4210000 brk #0x800
ffff8000113a0378: 17ffffe7 b ffff8000113a0314 <netdev_lower_state_changed+0x40>
}
ffff8000113a037c: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a037c: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a0380 <dev_pre_changeaddr_notify>:
{
ffff8000113a0380: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff8000113a0384: 910003fd mov x29, sp
ffff8000113a0388: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a038c: f90013f5 str x21, [sp,#32]
ffff8000113a0390: aa0003f5 mov x21, x0
ffff8000113a0394: aa1e03e0 mov x0, x30
ffff8000113a0398: aa0103f4 mov x20, x1
ffff8000113a039c: f9001fa2 str x2, [x29,#56]
ffff8000113a03a0: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff8000113a03a0: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a03a4: 94000000 bl 0 <_mcount>
ffff8000113a03a4: R_AARCH64_CALL26 _mcount
ffff8000113a03a8: f9400263 ldr x3, [x19]
ffff8000113a03a8: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
struct netdev_notifier_pre_changeaddr_info info = {
ffff8000113a03ac: f9401fa2 ldr x2, [x29,#56]
rc = call_netdevice_notifiers_info(NETDEV_PRE_CHANGEADDR, &info.info);
ffff8000113a03b0: d2800120 mov x0, #0x9 // #9
ffff8000113a03b4: 910103a1 add x1, x29, #0x40
{
ffff8000113a03b8: f9002fa3 str x3, [x29,#88]
struct netdev_notifier_pre_changeaddr_info info = {
ffff8000113a03bc: f90023b5 str x21, [x29,#64]
ffff8000113a03c0: f90027a2 str x2, [x29,#72]
ffff8000113a03c4: f9002bb4 str x20, [x29,#80]
rc = call_netdevice_notifiers_info(NETDEV_PRE_CHANGEADDR, &info.info);
ffff8000113a03c8: 97ffff4c bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ret &= ~NOTIFY_STOP_MASK;
ffff8000113a03cc: 12107800 and w0, w0, #0xffff7fff
return ret > NOTIFY_OK ? NOTIFY_OK - ret : 0;
ffff8000113a03d0: 7100041f cmp w0, #0x1
ffff8000113a03d4: 5400016d b.le ffff8000113a0400 <dev_pre_changeaddr_notify+0x80>
ffff8000113a03d8: 52800021 mov w1, #0x1 // #1
ffff8000113a03dc: 4b000020 sub w0, w1, w0
}
ffff8000113a03e0: f9402fa2 ldr x2, [x29,#88]
ffff8000113a03e4: f9400261 ldr x1, [x19]
ffff8000113a03e4: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a03e8: eb01005f cmp x2, x1
ffff8000113a03ec: 540000e1 b.ne ffff8000113a0408 <dev_pre_changeaddr_notify+0x88>
ffff8000113a03f0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a03f4: f94013f5 ldr x21, [sp,#32]
ffff8000113a03f8: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113a03fc: d65f03c0 ret
ffff8000113a0400: 52800000 mov w0, #0x0 // #0
ffff8000113a0404: 17fffff7 b ffff8000113a03e0 <dev_pre_changeaddr_notify+0x60>
ffff8000113a0408: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a0408: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a040c <netdev_notify_peers>:
{
ffff8000113a040c: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a0410: 910003fd mov x29, sp
ffff8000113a0414: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a0418: aa0003f4 mov x20, x0
ffff8000113a041c: aa1e03e0 mov x0, x30
ffff8000113a0420: 94000000 bl 0 <_mcount>
ffff8000113a0420: R_AARCH64_CALL26 _mcount
ffff8000113a0424: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff8000113a0424: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a0428: f9400260 ldr x0, [x19]
ffff8000113a0428: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a042c: f9001fa0 str x0, [x29,#56]
rtnl_lock();
ffff8000113a0430: 94000000 bl 0 <rtnl_lock>
ffff8000113a0430: R_AARCH64_CALL26 rtnl_lock
return call_netdevice_notifiers_info(val, &info);
ffff8000113a0434: 9100a3a1 add x1, x29, #0x28
ffff8000113a0438: d2800260 mov x0, #0x13 // #19
struct netdev_notifier_info info = {
ffff8000113a043c: f90017b4 str x20, [x29,#40]
ffff8000113a0440: f9001bbf str xzr, [x29,#48]
return call_netdevice_notifiers_info(val, &info);
ffff8000113a0444: 97ffff2d bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ffff8000113a0448: 9100a3a1 add x1, x29, #0x28
ffff8000113a044c: d28002c0 mov x0, #0x16 // #22
struct netdev_notifier_info info = {
ffff8000113a0450: f90017b4 str x20, [x29,#40]
ffff8000113a0454: f9001bbf str xzr, [x29,#48]
return call_netdevice_notifiers_info(val, &info);
ffff8000113a0458: 97ffff28 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
rtnl_unlock();
ffff8000113a045c: 94000000 bl 0 <rtnl_unlock>
ffff8000113a045c: R_AARCH64_CALL26 rtnl_unlock
}
ffff8000113a0460: f9401fa1 ldr x1, [x29,#56]
ffff8000113a0464: f9400260 ldr x0, [x19]
ffff8000113a0464: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a0468: eb00003f cmp x1, x0
ffff8000113a046c: 54000081 b.ne ffff8000113a047c <netdev_notify_peers+0x70>
ffff8000113a0470: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a0474: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a0478: d65f03c0 ret
ffff8000113a047c: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a047c: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a0480 <__dev_close_many>:
{
ffff8000113a0480: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113a0484: 910003fd mov x29, sp
ffff8000113a0488: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a048c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a0490: aa0003f5 mov x21, x0
ffff8000113a0494: aa1e03e0 mov x0, x30
ffff8000113a0498: 94000000 bl 0 <_mcount>
ffff8000113a0498: R_AARCH64_CALL26 _mcount
ffff8000113a049c: 90000016 adrp x22, 0 <__stack_chk_guard>
ffff8000113a049c: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a04a0: f94002c0 ldr x0, [x22]
ffff8000113a04a0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a04a4: f90027a0 str x0, [x29,#72]
ASSERT_RTNL();
ffff8000113a04a8: 94000000 bl 0 <rtnl_is_locked>
ffff8000113a04a8: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113a04ac: 340006a0 cbz w0, ffff8000113a0580 <__dev_close_many+0x100>
might_sleep();
ffff8000113a04b0: 94000000 bl 0 <_cond_resched>
ffff8000113a04b0: R_AARCH64_CALL26 _cond_resched
list_for_each_entry(dev, head, close_list) {
ffff8000113a04b4: f94002b3 ldr x19, [x21]
/*
* GAS converts the mysterious and undocumented BIC (immediate) alias to
* an AND (immediate) instruction with the immediate inverted. We don't
* have a constraint for this, so fall back to register.
*/
ATOMIC64_OPS(andnot, bic, )
ffff8000113a04b8: d2800034 mov x20, #0x1 // #1
ffff8000113a04bc: eb1302bf cmp x21, x19
ffff8000113a04c0: d101e273 sub x19, x19, #0x78
ffff8000113a04c4: 54000260 b.eq ffff8000113a0510 <__dev_close_many+0x90>
netpoll_poll_disable(dev);
ffff8000113a04c8: aa1303e0 mov x0, x19
ffff8000113a04cc: 94000000 bl 0 <netpoll_poll_disable>
ffff8000113a04cc: R_AARCH64_CALL26 netpoll_poll_disable
return call_netdevice_notifiers_info(val, &info);
ffff8000113a04d0: 9100e3a1 add x1, x29, #0x38
ffff8000113a04d4: d2800140 mov x0, #0xa // #10
struct netdev_notifier_info info = {
ffff8000113a04d8: f9001fb3 str x19, [x29,#56]
ffff8000113a04dc: f90023bf str xzr, [x29,#64]
return call_netdevice_notifiers_info(val, &info);
ffff8000113a04e0: 97ffff06 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ffff8000113a04e4: 91010262 add x2, x19, #0x40
ffff8000113a04e8: f9800051 prfm pstl1strm, [x2]
ffff8000113a04ec: c85f7c40 ldxr x0, [x2]
ffff8000113a04f0: 8a340000 bic x0, x0, x20
ffff8000113a04f4: c8017c40 stxr w1, x0, [x2]
ffff8000113a04f8: 35ffffa1 cbnz w1, ffff8000113a04ec <__dev_close_many+0x6c>
smp_mb__after_atomic(); /* Commit netif_running(). */
ffff8000113a04fc: d5033bbf dmb ish
list_for_each_entry(dev, head, close_list) {
ffff8000113a0500: f9403e73 ldr x19, [x19,#120]
ffff8000113a0504: eb1302bf cmp x21, x19
ffff8000113a0508: d101e273 sub x19, x19, #0x78
ffff8000113a050c: 54fffde1 b.ne ffff8000113a04c8 <__dev_close_many+0x48>
dev_deactivate_many(head);
ffff8000113a0510: aa1503e0 mov x0, x21
ffff8000113a0514: 94000000 bl 0 <dev_deactivate_many>
ffff8000113a0514: R_AARCH64_CALL26 dev_deactivate_many
list_for_each_entry(dev, head, close_list) {
ffff8000113a0518: f94002b3 ldr x19, [x21]
ffff8000113a051c: eb1302bf cmp x21, x19
ffff8000113a0520: d101e273 sub x19, x19, #0x78
ffff8000113a0524: 540001e0 b.eq ffff8000113a0560 <__dev_close_many+0xe0>
if (ops->ndo_stop)
ffff8000113a0528: f940fa60 ldr x0, [x19,#496]
ffff8000113a052c: f9400c01 ldr x1, [x0,#24]
ffff8000113a0530: b4000061 cbz x1, ffff8000113a053c <__dev_close_many+0xbc>
ops->ndo_stop(dev);
ffff8000113a0534: aa1303e0 mov x0, x19
ffff8000113a0538: d63f0020 blr x1
dev->flags &= ~IFF_UP;
ffff8000113a053c: b9422a61 ldr w1, [x19,#552]
netpoll_poll_enable(dev);
ffff8000113a0540: aa1303e0 mov x0, x19
dev->flags &= ~IFF_UP;
ffff8000113a0544: 121f7821 and w1, w1, #0xfffffffe
ffff8000113a0548: b9022a61 str w1, [x19,#552]
netpoll_poll_enable(dev);
ffff8000113a054c: 94000000 bl 0 <netpoll_poll_enable>
ffff8000113a054c: R_AARCH64_CALL26 netpoll_poll_enable
list_for_each_entry(dev, head, close_list) {
ffff8000113a0550: f9403e73 ldr x19, [x19,#120]
ffff8000113a0554: eb1302bf cmp x21, x19
ffff8000113a0558: d101e273 sub x19, x19, #0x78
ffff8000113a055c: 54fffe61 b.ne ffff8000113a0528 <__dev_close_many+0xa8>
}
ffff8000113a0560: f94027a1 ldr x1, [x29,#72]
ffff8000113a0564: f94002c0 ldr x0, [x22]
ffff8000113a0564: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a0568: eb00003f cmp x1, x0
ffff8000113a056c: 54000261 b.ne ffff8000113a05b8 <__dev_close_many+0x138>
ffff8000113a0570: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a0574: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a0578: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113a057c: d65f03c0 ret
ASSERT_RTNL();
ffff8000113a0580: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0580: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113a0584: 91000063 add x3, x3, #0x0
ffff8000113a0584: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113a0588: 39402860 ldrb w0, [x3,#10]
ffff8000113a058c: 35fff920 cbnz w0, ffff8000113a04b0 <__dev_close_many+0x30>
ffff8000113a0590: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0590: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113a0594: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0594: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113a0598: 52800024 mov w4, #0x1 // #1
ffff8000113a059c: 91000000 add x0, x0, #0x0
ffff8000113a059c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113a05a0: 91000021 add x1, x1, #0x0
ffff8000113a05a0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113a05a4: 5280b9e2 mov w2, #0x5cf // #1487
ffff8000113a05a8: 39002864 strb w4, [x3,#10]
ffff8000113a05ac: 94000000 bl 0 <__warn_printk>
ffff8000113a05ac: R_AARCH64_CALL26 __warn_printk
ffff8000113a05b0: d4210000 brk #0x800
ffff8000113a05b4: 17ffffbf b ffff8000113a04b0 <__dev_close_many+0x30>
}
ffff8000113a05b8: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a05b8: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a05bc <register_netdevice_notifier>:
{
ffff8000113a05bc: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113a05c0: 910003fd mov x29, sp
ffff8000113a05c4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a05c8: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a05cc: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a05d0: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113a05d4: aa0003f5 mov x21, x0
ffff8000113a05d8: aa1e03e0 mov x0, x30
ffff8000113a05dc: 94000000 bl 0 <_mcount>
ffff8000113a05dc: R_AARCH64_CALL26 _mcount
down_write(&pernet_ops_rwsem);
ffff8000113a05e0: 90000018 adrp x24, 0 <pernet_ops_rwsem>
ffff8000113a05e0: R_AARCH64_ADR_PREL_PG_HI21 pernet_ops_rwsem
ffff8000113a05e4: 91000300 add x0, x24, #0x0
ffff8000113a05e4: R_AARCH64_ADD_ABS_LO12_NC pernet_ops_rwsem
ffff8000113a05e8: 94000000 bl 0 <down_write>
ffff8000113a05e8: R_AARCH64_CALL26 down_write
rtnl_lock();
ffff8000113a05ec: 94000000 bl 0 <rtnl_lock>
ffff8000113a05ec: R_AARCH64_CALL26 rtnl_lock
err = raw_notifier_chain_register(&netdev_chain, nb);
ffff8000113a05f0: 90000019 adrp x25, ffff80001139e37c <__my_cpu_offset>
ffff8000113a05f0: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a05f4: 91000320 add x0, x25, #0x0
ffff8000113a05f4: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a05f8: 910c2000 add x0, x0, #0x308
ffff8000113a05fc: aa1503e1 mov x1, x21
ffff8000113a0600: 94000000 bl 0 <raw_notifier_chain_register>
ffff8000113a0600: R_AARCH64_CALL26 raw_notifier_chain_register
ffff8000113a0604: 2a0003f7 mov w23, w0
if (err)
ffff8000113a0608: 350005c0 cbnz w0, ffff8000113a06c0 <register_netdevice_notifier+0x104>
if (dev_boot_phase)
ffff8000113a060c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a060c: R_AARCH64_ADR_PREL_PG_HI21 .data
ffff8000113a0610: b9400000 ldr w0, [x0]
ffff8000113a0610: R_AARCH64_LDST32_ABS_LO12_NC .data
ffff8000113a0614: 35000560 cbnz w0, ffff8000113a06c0 <register_netdevice_notifier+0x104>
for_each_net(net) {
ffff8000113a0618: 9000001a adrp x26, 0 <net_namespace_list>
ffff8000113a0618: R_AARCH64_ADR_PREL_PG_HI21 net_namespace_list
ffff8000113a061c: f9400353 ldr x19, [x26]
ffff8000113a061c: R_AARCH64_LDST64_ABS_LO12_NC net_namespace_list
ffff8000113a0620: 91000354 add x20, x26, #0x0
ffff8000113a0620: R_AARCH64_ADD_ABS_LO12_NC net_namespace_list
ffff8000113a0624: eb14027f cmp x19, x20
ffff8000113a0628: d1008273 sub x19, x19, #0x20
ffff8000113a062c: 540000c1 b.ne ffff8000113a0644 <register_netdevice_notifier+0x88>
ffff8000113a0630: 14000024 b ffff8000113a06c0 <register_netdevice_notifier+0x104>
ffff8000113a0634: f9401273 ldr x19, [x19,#32]
ffff8000113a0638: eb14027f cmp x19, x20
ffff8000113a063c: d1008273 sub x19, x19, #0x20
ffff8000113a0640: 54000400 b.eq ffff8000113a06c0 <register_netdevice_notifier+0x104>
err = call_netdevice_register_net_notifiers(nb, net);
ffff8000113a0644: aa1303e1 mov x1, x19
ffff8000113a0648: aa1503e0 mov x0, x21
ffff8000113a064c: 97fff7e9 bl ffff80001139e5f0 <call_netdevice_register_net_notifiers>
ffff8000113a0650: 2a0003f6 mov w22, w0
if (err)
ffff8000113a0654: 34ffff00 cbz w0, ffff8000113a0634 <register_netdevice_notifier+0x78>
for_each_net_continue_reverse(net)
ffff8000113a0658: f9401677 ldr x23, [x19,#40]
ffff8000113a065c: 9100035a add x26, x26, #0x0
ffff8000113a065c: R_AARCH64_ADD_ABS_LO12_NC net_namespace_list
ffff8000113a0660: eb1a02ff cmp x23, x26
ffff8000113a0664: d10082f7 sub x23, x23, #0x20
ffff8000113a0668: 54000220 b.eq ffff8000113a06ac <register_netdevice_notifier+0xf0>
for_each_netdev(net, dev)
ffff8000113a066c: aa1703f4 mov x20, x23
ffff8000113a0670: f8490e93 ldr x19, [x20,#144]!
ffff8000113a0674: eb13029f cmp x20, x19
ffff8000113a0678: d1012273 sub x19, x19, #0x48
ffff8000113a067c: 54000100 b.eq ffff8000113a069c <register_netdevice_notifier+0xe0>
call_netdevice_unregister_notifiers(nb, dev);
ffff8000113a0680: aa1303e1 mov x1, x19
ffff8000113a0684: aa1503e0 mov x0, x21
ffff8000113a0688: 97fff7ae bl ffff80001139e540 <call_netdevice_unregister_notifiers>
for_each_netdev(net, dev)
ffff8000113a068c: f9402673 ldr x19, [x19,#72]
ffff8000113a0690: eb13029f cmp x20, x19
ffff8000113a0694: d1012273 sub x19, x19, #0x48
ffff8000113a0698: 54ffff41 b.ne ffff8000113a0680 <register_netdevice_notifier+0xc4>
for_each_net_continue_reverse(net)
ffff8000113a069c: f94016f7 ldr x23, [x23,#40]
ffff8000113a06a0: eb1a02ff cmp x23, x26
ffff8000113a06a4: d10082f7 sub x23, x23, #0x20
ffff8000113a06a8: 54fffe21 b.ne ffff8000113a066c <register_netdevice_notifier+0xb0>
raw_notifier_chain_unregister(&netdev_chain, nb);
ffff8000113a06ac: 91000320 add x0, x25, #0x0
ffff8000113a06ac: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a06b0: 910c2000 add x0, x0, #0x308
ffff8000113a06b4: aa1503e1 mov x1, x21
ffff8000113a06b8: 94000000 bl 0 <raw_notifier_chain_unregister>
ffff8000113a06b8: R_AARCH64_CALL26 raw_notifier_chain_unregister
err = call_netdevice_register_net_notifiers(nb, net);
ffff8000113a06bc: 2a1603f7 mov w23, w22
rtnl_unlock();
ffff8000113a06c0: 94000000 bl 0 <rtnl_unlock>
ffff8000113a06c0: R_AARCH64_CALL26 rtnl_unlock
up_write(&pernet_ops_rwsem);
ffff8000113a06c4: 91000300 add x0, x24, #0x0
ffff8000113a06c4: R_AARCH64_ADD_ABS_LO12_NC pernet_ops_rwsem
ffff8000113a06c8: 94000000 bl 0 <up_write>
ffff8000113a06c8: R_AARCH64_CALL26 up_write
}
ffff8000113a06cc: 2a1703e0 mov w0, w23
ffff8000113a06d0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a06d4: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a06d8: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a06dc: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a06e0: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113a06e4: d65f03c0 ret
ffff8000113a06e8 <unregister_netdevice_notifier>:
{
ffff8000113a06e8: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113a06ec: 910003fd mov x29, sp
ffff8000113a06f0: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a06f4: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a06f8: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a06fc: f90023f9 str x25, [sp,#64]
ffff8000113a0700: aa0003f5 mov x21, x0
ffff8000113a0704: aa1e03e0 mov x0, x30
ffff8000113a0708: 94000000 bl 0 <_mcount>
ffff8000113a0708: R_AARCH64_CALL26 _mcount
down_write(&pernet_ops_rwsem);
ffff8000113a070c: 90000019 adrp x25, 0 <pernet_ops_rwsem>
ffff8000113a070c: R_AARCH64_ADR_PREL_PG_HI21 pernet_ops_rwsem
ffff8000113a0710: 91000320 add x0, x25, #0x0
ffff8000113a0710: R_AARCH64_ADD_ABS_LO12_NC pernet_ops_rwsem
ffff8000113a0714: 94000000 bl 0 <down_write>
ffff8000113a0714: R_AARCH64_CALL26 down_write
rtnl_lock();
ffff8000113a0718: 94000000 bl 0 <rtnl_lock>
ffff8000113a0718: R_AARCH64_CALL26 rtnl_lock
err = raw_notifier_chain_unregister(&netdev_chain, nb);
ffff8000113a071c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a071c: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a0720: 91000000 add x0, x0, #0x0
ffff8000113a0720: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a0724: 910c2000 add x0, x0, #0x308
ffff8000113a0728: aa1503e1 mov x1, x21
ffff8000113a072c: 94000000 bl 0 <raw_notifier_chain_unregister>
ffff8000113a072c: R_AARCH64_CALL26 raw_notifier_chain_unregister
ffff8000113a0730: 2a0003f8 mov w24, w0
if (err)
ffff8000113a0734: 350002e0 cbnz w0, ffff8000113a0790 <unregister_netdevice_notifier+0xa8>
for_each_net(net)
ffff8000113a0738: 90000017 adrp x23, 0 <net_namespace_list>
ffff8000113a0738: R_AARCH64_ADR_PREL_PG_HI21 net_namespace_list
ffff8000113a073c: f94002f6 ldr x22, [x23]
ffff8000113a073c: R_AARCH64_LDST64_ABS_LO12_NC net_namespace_list
ffff8000113a0740: 910002f7 add x23, x23, #0x0
ffff8000113a0740: R_AARCH64_ADD_ABS_LO12_NC net_namespace_list
ffff8000113a0744: eb1702df cmp x22, x23
ffff8000113a0748: d10082d6 sub x22, x22, #0x20
ffff8000113a074c: 54000220 b.eq ffff8000113a0790 <unregister_netdevice_notifier+0xa8>
for_each_netdev(net, dev)
ffff8000113a0750: aa1603f4 mov x20, x22
ffff8000113a0754: f8490e93 ldr x19, [x20,#144]!
ffff8000113a0758: eb13029f cmp x20, x19
ffff8000113a075c: d1012273 sub x19, x19, #0x48
ffff8000113a0760: 54000100 b.eq ffff8000113a0780 <unregister_netdevice_notifier+0x98>
call_netdevice_unregister_notifiers(nb, dev);
ffff8000113a0764: aa1303e1 mov x1, x19
ffff8000113a0768: aa1503e0 mov x0, x21
ffff8000113a076c: 97fff775 bl ffff80001139e540 <call_netdevice_unregister_notifiers>
for_each_netdev(net, dev)
ffff8000113a0770: f9402673 ldr x19, [x19,#72]
ffff8000113a0774: eb13029f cmp x20, x19
ffff8000113a0778: d1012273 sub x19, x19, #0x48
ffff8000113a077c: 54ffff41 b.ne ffff8000113a0764 <unregister_netdevice_notifier+0x7c>
for_each_net(net)
ffff8000113a0780: f94012d6 ldr x22, [x22,#32]
ffff8000113a0784: eb1702df cmp x22, x23
ffff8000113a0788: d10082d6 sub x22, x22, #0x20
ffff8000113a078c: 54fffe21 b.ne ffff8000113a0750 <unregister_netdevice_notifier+0x68>
rtnl_unlock();
ffff8000113a0790: 94000000 bl 0 <rtnl_unlock>
ffff8000113a0790: R_AARCH64_CALL26 rtnl_unlock
up_write(&pernet_ops_rwsem);
ffff8000113a0794: 91000320 add x0, x25, #0x0
ffff8000113a0794: R_AARCH64_ADD_ABS_LO12_NC pernet_ops_rwsem
ffff8000113a0798: 94000000 bl 0 <up_write>
ffff8000113a0798: R_AARCH64_CALL26 up_write
}
ffff8000113a079c: 2a1803e0 mov w0, w24
ffff8000113a07a0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a07a4: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a07a8: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a07ac: f94023f9 ldr x25, [sp,#64]
ffff8000113a07b0: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113a07b4: d65f03c0 ret
ffff8000113a07b8 <__register_netdevice_notifier_net>:
{
ffff8000113a07b8: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a07bc: 910003fd mov x29, sp
ffff8000113a07c0: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a07c4: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a07c8: aa0003f4 mov x20, x0
ffff8000113a07cc: aa1e03e0 mov x0, x30
ffff8000113a07d0: aa0103f3 mov x19, x1
ffff8000113a07d4: 53001c56 uxtb w22, w2
err = raw_notifier_chain_register(&net->netdev_chain, nb);
ffff8000113a07d8: 9104e295 add x21, x20, #0x138
{
ffff8000113a07dc: 94000000 bl 0 <_mcount>
ffff8000113a07dc: R_AARCH64_CALL26 _mcount
err = raw_notifier_chain_register(&net->netdev_chain, nb);
ffff8000113a07e0: aa1503e0 mov x0, x21
ffff8000113a07e4: aa1303e1 mov x1, x19
ffff8000113a07e8: 94000000 bl 0 <raw_notifier_chain_register>
ffff8000113a07e8: R_AARCH64_CALL26 raw_notifier_chain_register
if (err)
ffff8000113a07ec: 350000a0 cbnz w0, ffff8000113a0800 <__register_netdevice_notifier_net+0x48>
if (dev_boot_phase)
ffff8000113a07f0: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a07f0: R_AARCH64_ADR_PREL_PG_HI21 .data
ffff8000113a07f4: b9400000 ldr w0, [x0]
ffff8000113a07f4: R_AARCH64_LDST32_ABS_LO12_NC .data
ffff8000113a07f8: 340000c0 cbz w0, ffff8000113a0810 <__register_netdevice_notifier_net+0x58>
return 0;
ffff8000113a07fc: 52800000 mov w0, #0x0 // #0
}
ffff8000113a0800: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a0804: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a0808: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a080c: d65f03c0 ret
err = call_netdevice_register_net_notifiers(nb, net);
ffff8000113a0810: aa1403e1 mov x1, x20
ffff8000113a0814: aa1303e0 mov x0, x19
ffff8000113a0818: 97fff776 bl ffff80001139e5f0 <call_netdevice_register_net_notifiers>
ffff8000113a081c: 2a0003f4 mov w20, w0
if (err && !ignore_call_fail)
ffff8000113a0820: 34fffee0 cbz w0, ffff8000113a07fc <__register_netdevice_notifier_net+0x44>
ffff8000113a0824: 710006df cmp w22, #0x1
ffff8000113a0828: 54fffea0 b.eq ffff8000113a07fc <__register_netdevice_notifier_net+0x44>
raw_notifier_chain_unregister(&net->netdev_chain, nb);
ffff8000113a082c: aa1503e0 mov x0, x21
ffff8000113a0830: aa1303e1 mov x1, x19
ffff8000113a0834: 94000000 bl 0 <raw_notifier_chain_unregister>
ffff8000113a0834: R_AARCH64_CALL26 raw_notifier_chain_unregister
return err;
ffff8000113a0838: 2a1403e0 mov w0, w20
ffff8000113a083c: 17fffff1 b ffff8000113a0800 <__register_netdevice_notifier_net+0x48>
ffff8000113a0840 <register_netdevice_notifier_net>:
{
ffff8000113a0840: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a0844: 910003fd mov x29, sp
ffff8000113a0848: f9000bf3 str x19, [sp,#16]
ffff8000113a084c: aa0003f3 mov x19, x0
ffff8000113a0850: aa1e03e0 mov x0, x30
ffff8000113a0854: f90017a1 str x1, [x29,#40]
ffff8000113a0858: 94000000 bl 0 <_mcount>
ffff8000113a0858: R_AARCH64_CALL26 _mcount
rtnl_lock();
ffff8000113a085c: 94000000 bl 0 <rtnl_lock>
ffff8000113a085c: R_AARCH64_CALL26 rtnl_lock
err = __register_netdevice_notifier_net(net, nb, false);
ffff8000113a0860: f94017a1 ldr x1, [x29,#40]
ffff8000113a0864: 52800002 mov w2, #0x0 // #0
ffff8000113a0868: aa1303e0 mov x0, x19
ffff8000113a086c: 97ffffd3 bl ffff8000113a07b8 <__register_netdevice_notifier_net>
rtnl_unlock();
ffff8000113a0870: f90017a0 str x0, [x29,#40]
ffff8000113a0874: 94000000 bl 0 <rtnl_unlock>
ffff8000113a0874: R_AARCH64_CALL26 rtnl_unlock
}
ffff8000113a0878: f94017a0 ldr x0, [x29,#40]
ffff8000113a087c: f9400bf3 ldr x19, [sp,#16]
ffff8000113a0880: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a0884: d65f03c0 ret
ffff8000113a0888 <get_rps_cpu>:
{
ffff8000113a0888: a9b97bfd stp x29, x30, [sp,#-112]!
ffff8000113a088c: 910003fd mov x29, sp
ffff8000113a0890: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a0894: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a0898: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a089c: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113a08a0: a90573fb stp x27, x28, [sp,#80]
ffff8000113a08a4: aa0003f5 mov x21, x0
ffff8000113a08a8: aa1e03e0 mov x0, x30
ffff8000113a08ac: aa0103f3 mov x19, x1
ffff8000113a08b0: aa0203f7 mov x23, x2
ffff8000113a08b4: 94000000 bl 0 <_mcount>
ffff8000113a08b4: R_AARCH64_CALL26 _mcount
static int get_rps_cpu(struct net_device *dev, struct sk_buff *skb,
ffff8000113a08b8: 7940fa60 ldrh w0, [x19,#124]
struct netdev_rx_queue *rxqueue = dev->_rx;
ffff8000113a08bc: f94192a4 ldr x4, [x21,#800]
if (skb_rx_queue_recorded(skb)) {
ffff8000113a08c0: 34000100 cbz w0, ffff8000113a08e0 <get_rps_cpu+0x58>
skb->queue_mapping = rx_queue + 1;
}
static inline u16 skb_get_rx_queue(const struct sk_buff *skb)
{
return skb->queue_mapping - 1;
ffff8000113a08c4: 51000400 sub w0, w0, #0x1
if (unlikely(index >= dev->real_num_rx_queues)) {
ffff8000113a08c8: b9432ea3 ldr w3, [x21,#812]
ffff8000113a08cc: 53003c02 uxth w2, w0
ffff8000113a08d0: 6b03005f cmp w2, w3
ffff8000113a08d4: 540009c2 b.cs ffff8000113a0a0c <get_rps_cpu+0x184>
rxqueue += index;
ffff8000113a08d8: d3783c42 ubfiz x2, x2, #8, #16
ffff8000113a08dc: 8b020084 add x4, x4, x2
__READ_ONCE_SIZE;
ffff8000113a08e0: f9400496 ldr x22, [x4,#8]
ffff8000113a08e4: f9400094 ldr x20, [x4]
if (!flow_table && !map)
ffff8000113a08e8: b4000bd4 cbz x20, ffff8000113a0a60 <get_rps_cpu+0x1d8>
skb->network_header = skb->data - skb->head;
ffff8000113a08ec: f9406662 ldr x2, [x19,#200]
ffff8000113a08f0: f9406261 ldr x1, [x19,#192]
if (!skb->l4_hash && !skb->sw_hash)
ffff8000113a08f4: 39420660 ldrb w0, [x19,#129]
skb->network_header = skb->data - skb->head;
ffff8000113a08f8: cb010041 sub x1, x2, x1
ffff8000113a08fc: 79016a61 strh w1, [x19,#180]
if (!skb->l4_hash && !skb->sw_hash)
ffff8000113a0900: 12000400 and w0, w0, #0x3
ffff8000113a0904: 34000640 cbz w0, ffff8000113a09cc <get_rps_cpu+0x144>
return skb->hash;
ffff8000113a0908: b9409663 ldr w3, [x19,#148]
ffff8000113a090c: 2a0303f8 mov w24, w3
if (!hash)
ffff8000113a0910: 34000983 cbz w3, ffff8000113a0a40 <get_rps_cpu+0x1b8>
ffff8000113a0914: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0914: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a0918: 91000000 add x0, x0, #0x0
ffff8000113a0918: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a091c: f9441001 ldr x1, [x0,#2080]
if (flow_table && sock_flow_table) {
ffff8000113a0920: b40002f6 cbz x22, ffff8000113a097c <get_rps_cpu+0xf4>
ffff8000113a0924: b40002c1 cbz x1, ffff8000113a097c <get_rps_cpu+0xf4>
ident = sock_flow_table->ents[hash & sock_flow_table->mask];
ffff8000113a0928: b9400022 ldr w2, [x1]
if ((ident ^ hash) & ~rps_cpu_mask)
ffff8000113a092c: b9482800 ldr w0, [x0,#2088]
ident = sock_flow_table->ents[hash & sock_flow_table->mask];
ffff8000113a0930: 0a020062 and w2, w3, w2
ffff8000113a0934: 91004042 add x2, x2, #0x10
ffff8000113a0938: b8627821 ldr w1, [x1,x2,lsl #2]
if ((ident ^ hash) & ~rps_cpu_mask)
ffff8000113a093c: 4a030022 eor w2, w1, w3
ffff8000113a0940: 0a200042 bic w2, w2, w0
ffff8000113a0944: 350001c2 cbnz w2, ffff8000113a097c <get_rps_cpu+0xf4>
rflow = &flow_table->flows[hash & flow_table->mask];
ffff8000113a0948: b94002c2 ldr w2, [x22]
next_cpu = ident & rps_cpu_mask;
ffff8000113a094c: 0a000039 and w25, w1, w0
rflow = &flow_table->flows[hash & flow_table->mask];
ffff8000113a0950: 0a020060 and w0, w3, w2
ffff8000113a0954: 91000800 add x0, x0, #0x2
ffff8000113a0958: 8b000ed6 add x22, x22, x0, lsl #3
tcpu = rflow->cpu;
ffff8000113a095c: 794012c0 ldrh w0, [x22,#8]
ffff8000113a0960: 9000001a adrp x26, 0 <nr_cpu_ids>
ffff8000113a0960: R_AARCH64_ADR_PREL_PG_HI21 nr_cpu_ids
if (unlikely(tcpu != next_cpu) &&
ffff8000113a0964: 6b00033f cmp w25, w0
rflow = &flow_table->flows[hash & flow_table->mask];
ffff8000113a0968: 910022d6 add x22, x22, #0x8
if (unlikely(tcpu != next_cpu) &&
ffff8000113a096c: 54000801 b.ne ffff8000113a0a6c <get_rps_cpu+0x1e4>
if (tcpu < nr_cpu_ids && cpu_online(tcpu)) {
ffff8000113a0970: b9400341 ldr w1, [x26]
ffff8000113a0970: R_AARCH64_LDST32_ABS_LO12_NC nr_cpu_ids
ffff8000113a0974: 6b01001f cmp w0, w1
ffff8000113a0978: 54000303 b.cc ffff8000113a09d8 <get_rps_cpu+0x150>
if (map) {
ffff8000113a097c: b4000634 cbz x20, ffff8000113a0a40 <get_rps_cpu+0x1b8>
tcpu = map->cpus[reciprocal_scale(hash, map->len)];
ffff8000113a0980: b9400280 ldr w0, [x20]
ffff8000113a0984: 90000001 adrp x1, 0 <__cpu_online_mask>
ffff8000113a0984: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
*
* Return: a result based on @val in interval [0, @ep_ro).
*/
static inline u32 reciprocal_scale(u32 val, u32 ep_ro)
{
return (u32)(((u64) val * ep_ro) >> 32);
ffff8000113a0988: 9bb87c18 umull x24, w0, w24
ffff8000113a098c: d360ff18 lsr x24, x24, #32
ffff8000113a0990: 8b180694 add x20, x20, x24, lsl #1
ffff8000113a0994: 79403280 ldrh w0, [x20,#24]
ffff8000113a0998: 91000021 add x1, x1, #0x0
ffff8000113a0998: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113a099c: 13067c02 asr w2, w0, #6
ffff8000113a09a0: 937d7c42 sbfiz x2, x2, #3, #32
ffff8000113a09a4: f8616841 ldr x1, [x2,x1]
ffff8000113a09a8: 9ac02421 lsr x1, x1, x0
if (cpu_online(tcpu)) {
ffff8000113a09ac: 360004a1 tbz w1, #0, ffff8000113a0a40 <get_rps_cpu+0x1b8>
}
ffff8000113a09b0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a09b4: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a09b8: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a09bc: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a09c0: a94573fb ldp x27, x28, [sp,#80]
ffff8000113a09c4: a8c77bfd ldp x29, x30, [sp],#112
ffff8000113a09c8: d65f03c0 ret
__skb_get_hash(skb);
ffff8000113a09cc: aa1303e0 mov x0, x19
ffff8000113a09d0: 94000000 bl 0 <__skb_get_hash>
ffff8000113a09d0: R_AARCH64_CALL26 __skb_get_hash
ffff8000113a09d4: 17ffffcd b ffff8000113a0908 <get_rps_cpu+0x80>
ffff8000113a09d8: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113a09d8: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113a09dc: 12001401 and w1, w0, #0x3f
ffff8000113a09e0: 1100fc03 add w3, w0, #0x3f
ffff8000113a09e4: 6b1f001f cmp w0, wzr
ffff8000113a09e8: 1a80b063 csel w3, w3, w0, lt
ffff8000113a09ec: 13067c63 asr w3, w3, #6
ffff8000113a09f0: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113a09f4: 91000042 add x2, x2, #0x0
ffff8000113a09f4: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113a09f8: f8626862 ldr x2, [x3,x2]
ffff8000113a09fc: 9ac12441 lsr x1, x2, x1
if (tcpu < nr_cpu_ids && cpu_online(tcpu)) {
ffff8000113a0a00: 3607fbe1 tbz w1, #0, ffff8000113a097c <get_rps_cpu+0xf4>
*rflowp = rflow;
ffff8000113a0a04: f90002f6 str x22, [x23]
goto done;
ffff8000113a0a08: 17ffffea b ffff8000113a09b0 <get_rps_cpu+0x128>
WARN_ONCE(dev->real_num_rx_queues > 1,
ffff8000113a0a0c: 7100047f cmp w3, #0x1
ffff8000113a0a10: 54000189 b.ls ffff8000113a0a40 <get_rps_cpu+0x1b8>
ffff8000113a0a14: 90000004 adrp x4, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0a14: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113a0a18: 91000084 add x4, x4, #0x0
ffff8000113a0a18: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113a0a1c: 39402c80 ldrb w0, [x4,#11]
ffff8000113a0a20: 35000100 cbnz w0, ffff8000113a0a40 <get_rps_cpu+0x1b8>
ffff8000113a0a24: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0a24: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xe8
ffff8000113a0a28: 52800025 mov w5, #0x1 // #1
ffff8000113a0a2c: 91000000 add x0, x0, #0x0
ffff8000113a0a2c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xe8
ffff8000113a0a30: aa1503e1 mov x1, x21
ffff8000113a0a34: 39002c85 strb w5, [x4,#11]
ffff8000113a0a38: 94000000 bl 0 <__warn_printk>
ffff8000113a0a38: R_AARCH64_CALL26 __warn_printk
ffff8000113a0a3c: d4210000 brk #0x800
int cpu = -1;
ffff8000113a0a40: 12800000 mov w0, #0xffffffff // #-1
}
ffff8000113a0a44: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a0a48: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a0a4c: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a0a50: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a0a54: a94573fb ldp x27, x28, [sp,#80]
ffff8000113a0a58: a8c77bfd ldp x29, x30, [sp],#112
ffff8000113a0a5c: d65f03c0 ret
if (!flow_table && !map)
ffff8000113a0a60: b5fff476 cbnz x22, ffff8000113a08ec <get_rps_cpu+0x64>
int cpu = -1;
ffff8000113a0a64: 12800000 mov w0, #0xffffffff // #-1
ffff8000113a0a68: 17fffff7 b ffff8000113a0a44 <get_rps_cpu+0x1bc>
(tcpu >= nr_cpu_ids || !cpu_online(tcpu) ||
ffff8000113a0a6c: b9400345 ldr w5, [x26]
ffff8000113a0a6c: R_AARCH64_LDST32_ABS_LO12_NC nr_cpu_ids
if (unlikely(tcpu != next_cpu) &&
ffff8000113a0a70: 6b05001f cmp w0, w5
ffff8000113a0a74: 54000262 b.cs ffff8000113a0ac0 <get_rps_cpu+0x238>
ffff8000113a0a78: 13067c04 asr w4, w0, #6
ffff8000113a0a7c: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113a0a7c: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113a0a80: 91000041 add x1, x2, #0x0
ffff8000113a0a80: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113a0a84: 937d7c84 sbfiz x4, x4, #3, #32
ffff8000113a0a88: f8616884 ldr x4, [x4,x1]
ffff8000113a0a8c: 12001401 and w1, w0, #0x3f
ffff8000113a0a90: 9ac12484 lsr x4, x4, x1
(tcpu >= nr_cpu_ids || !cpu_online(tcpu) ||
ffff8000113a0a94: 36000164 tbz w4, #0, ffff8000113a0ac0 <get_rps_cpu+0x238>
((int)(per_cpu(softnet_data, tcpu).input_queue_head -
ffff8000113a0a98: 90000004 adrp x4, 0 <__per_cpu_offset>
ffff8000113a0a98: R_AARCH64_ADR_PREL_PG_HI21 __per_cpu_offset
ffff8000113a0a9c: 91000084 add x4, x4, #0x0
ffff8000113a0a9c: R_AARCH64_ADD_ABS_LO12_NC __per_cpu_offset
ffff8000113a0aa0: f8605886 ldr x6, [x4,w0,uxtw #3]
ffff8000113a0aa4: 90000004 adrp x4, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0aa4: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
ffff8000113a0aa8: 91000084 add x4, x4, #0x0
ffff8000113a0aa8: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a0aac: 8b060084 add x4, x4, x6
ffff8000113a0ab0: b9408086 ldr w6, [x4,#128]
ffff8000113a0ab4: b94006c4 ldr w4, [x22,#4]
ffff8000113a0ab8: 4b0400c4 sub w4, w6, w4
(tcpu >= nr_cpu_ids || !cpu_online(tcpu) ||
ffff8000113a0abc: 37fff924 tbnz w4, #31, ffff8000113a09e0 <get_rps_cpu+0x158>
if (next_cpu < nr_cpu_ids) {
ffff8000113a0ac0: 12003f3c and w28, w25, #0xffff
rflow = set_rps_cpu(dev, skb, rflow, next_cpu);
ffff8000113a0ac4: 53003f24 uxth w4, w25
if (next_cpu < nr_cpu_ids) {
ffff8000113a0ac8: 6b1c00bf cmp w5, w28
rflow = set_rps_cpu(dev, skb, rflow, next_cpu);
ffff8000113a0acc: b9006fa4 str w4, [x29,#108]
if (next_cpu < nr_cpu_ids) {
ffff8000113a0ad0: 54000689 b.ls ffff8000113a0ba0 <get_rps_cpu+0x318>
set_rps_cpu(struct net_device *dev, struct sk_buff *skb,
ffff8000113a0ad4: 7940fa60 ldrh w0, [x19,#124]
if (!skb_rx_queue_recorded(skb) || !dev->rx_cpu_rmap ||
ffff8000113a0ad8: 34000540 cbz w0, ffff8000113a0b80 <get_rps_cpu+0x2f8>
ffff8000113a0adc: f941c6a1 ldr x1, [x21,#904]
ffff8000113a0ae0: b4000501 cbz x1, ffff8000113a0b80 <get_rps_cpu+0x2f8>
!(dev->features & NETIF_F_NTUPLE))
ffff8000113a0ae4: f94066a2 ldr x2, [x21,#200]
if (!skb_rx_queue_recorded(skb) || !dev->rx_cpu_rmap ||
ffff8000113a0ae8: b63004c2 tbz x2, #38, ffff8000113a0b80 <get_rps_cpu+0x2f8>
extern int cpu_rmap_update(struct cpu_rmap *rmap, u16 index,
const struct cpumask *affinity);
static inline u16 cpu_rmap_lookup_index(struct cpu_rmap *rmap, unsigned int cpu)
{
return rmap->near[cpu].index;
ffff8000113a0aec: 8b3c2821 add x1, x1, w28, uxth #2
ffff8000113a0af0: 79402022 ldrh w2, [x1,#16]
return skb->queue_mapping - 1;
ffff8000113a0af4: 51000400 sub w0, w0, #0x1
if (rxq_index == skb_get_rx_queue(skb))
ffff8000113a0af8: 6b20205f cmp w2, w0, uxth
ffff8000113a0afc: 54000420 b.eq ffff8000113a0b80 <get_rps_cpu+0x2f8>
rxqueue = dev->_rx + rxq_index;
ffff8000113a0b00: f94192a1 ldr x1, [x21,#800]
ffff8000113a0b04: d3783c40 ubfiz x0, x2, #8, #16
ffff8000113a0b08: 8b000020 add x0, x1, x0
ffff8000113a0b0c: f940041b ldr x27, [x0,#8]
if (!flow_table)
ffff8000113a0b10: b400039b cbz x27, ffff8000113a0b80 <get_rps_cpu+0x2f8>
if (!skb->l4_hash && !skb->sw_hash)
ffff8000113a0b14: 39420660 ldrb w0, [x19,#129]
ffff8000113a0b18: 12000400 and w0, w0, #0x3
ffff8000113a0b1c: 350000c0 cbnz w0, ffff8000113a0b34 <get_rps_cpu+0x2ac>
__skb_get_hash(skb);
ffff8000113a0b20: aa1303e0 mov x0, x19
ffff8000113a0b24: f90033a2 str x2, [x29,#96]
ffff8000113a0b28: 94000000 bl 0 <__skb_get_hash>
ffff8000113a0b28: R_AARCH64_CALL26 __skb_get_hash
ffff8000113a0b2c: b9409663 ldr w3, [x19,#148]
ffff8000113a0b30: f94033a2 ldr x2, [x29,#96]
rc = dev->netdev_ops->ndo_rx_flow_steer(dev, skb,
ffff8000113a0b34: f940faa0 ldr x0, [x21,#496]
flow_id = skb_get_hash(skb) & flow_table->mask;
ffff8000113a0b38: b9400365 ldr w5, [x27]
rc = dev->netdev_ops->ndo_rx_flow_steer(dev, skb,
ffff8000113a0b3c: f940b806 ldr x6, [x0,#368]
flow_id = skb_get_hash(skb) & flow_table->mask;
ffff8000113a0b40: 0a0300a5 and w5, w5, w3
rc = dev->netdev_ops->ndo_rx_flow_steer(dev, skb,
ffff8000113a0b44: 2a0503e3 mov w3, w5
ffff8000113a0b48: f90033a5 str x5, [x29,#96]
ffff8000113a0b4c: aa1503e0 mov x0, x21
ffff8000113a0b50: aa1303e1 mov x1, x19
ffff8000113a0b54: d63f00c0 blr x6
if (rc < 0)
ffff8000113a0b58: f94033a5 ldr x5, [x29,#96]
ffff8000113a0b5c: 37f80120 tbnz w0, #31, ffff8000113a0b80 <get_rps_cpu+0x2f8>
rflow = &flow_table->flows[flow_id];
ffff8000113a0b60: 8b254f64 add x4, x27, w5, uxtw #3
rflow->filter = rc;
ffff8000113a0b64: 53003c00 uxth w0, w0
rflow = &flow_table->flows[flow_id];
ffff8000113a0b68: 91006084 add x4, x4, #0x18
rflow->filter = rc;
ffff8000113a0b6c: 79000480 strh w0, [x4,#2]
if (old_rflow->filter == rflow->filter)
ffff8000113a0b70: 794006c1 ldrh w1, [x22,#2]
ffff8000113a0b74: 6b00003f cmp w1, w0
ffff8000113a0b78: 540001c0 b.eq ffff8000113a0bb0 <get_rps_cpu+0x328>
rflow = &flow_table->flows[flow_id];
ffff8000113a0b7c: aa0403f6 mov x22, x4
per_cpu(softnet_data, next_cpu).input_queue_head;
ffff8000113a0b80: 90000000 adrp x0, 0 <__per_cpu_offset>
ffff8000113a0b80: R_AARCH64_ADR_PREL_PG_HI21 __per_cpu_offset
ffff8000113a0b84: 91000000 add x0, x0, #0x0
ffff8000113a0b84: R_AARCH64_ADD_ABS_LO12_NC __per_cpu_offset
ffff8000113a0b88: f87cd801 ldr x1, [x0,w28,sxtw #3]
ffff8000113a0b8c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0b8c: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
ffff8000113a0b90: 91000000 add x0, x0, #0x0
ffff8000113a0b90: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a0b94: 8b010000 add x0, x0, x1
ffff8000113a0b98: b9408000 ldr w0, [x0,#128]
rflow->last_qtail =
ffff8000113a0b9c: b90006c0 str w0, [x22,#4]
rflow->cpu = next_cpu;
ffff8000113a0ba0: 7940dba2 ldrh w2, [x29,#108]
ffff8000113a0ba4: 2a1903e0 mov w0, w25
ffff8000113a0ba8: 790002c2 strh w2, [x22]
ffff8000113a0bac: 17ffff71 b ffff8000113a0970 <get_rps_cpu+0xe8>
old_rflow->filter = RPS_NO_FILTER;
ffff8000113a0bb0: 12800000 mov w0, #0xffffffff // #-1
ffff8000113a0bb4: 790006c0 strh w0, [x22,#2]
rflow = &flow_table->flows[flow_id];
ffff8000113a0bb8: aa0403f6 mov x22, x4
ffff8000113a0bbc: 17fffff1 b ffff8000113a0b80 <get_rps_cpu+0x2f8>
ffff8000113a0bc0 <__get_xps_queue_idx>:
{
ffff8000113a0bc0: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a0bc4: 910003fd mov x29, sp
ffff8000113a0bc8: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a0bcc: f90013f5 str x21, [sp,#32]
ffff8000113a0bd0: aa0003f4 mov x20, x0
ffff8000113a0bd4: aa1e03e0 mov x0, x30
ffff8000113a0bd8: f9001fa2 str x2, [x29,#56]
ffff8000113a0bdc: f9001ba3 str x3, [x29,#48]
ffff8000113a0be0: aa0103f5 mov x21, x1
ffff8000113a0be4: 94000000 bl 0 <_mcount>
ffff8000113a0be4: R_AARCH64_CALL26 _mcount
if (dev->num_tc) {
ffff8000113a0be8: 79d09280 ldrsh w0, [x20,#2120]
ffff8000113a0bec: f9401fa2 ldr x2, [x29,#56]
ffff8000113a0bf0: f9401ba3 ldr x3, [x29,#48]
ffff8000113a0bf4: 340000e0 cbz w0, ffff8000113a0c10 <__get_xps_queue_idx+0x50>
return dev->prio_tc_map[prio & TC_BITMASK];
ffff8000113a0bf8: b9408ea1 ldr w1, [x21,#140]
tci *= dev->num_tc;
ffff8000113a0bfc: 1b007c63 mul w3, w3, w0
ffff8000113a0c00: 92400c20 and x0, x1, #0xf
ffff8000113a0c04: 8b000280 add x0, x20, x0
tci += netdev_get_prio_tc_map(dev, skb->priority);
ffff8000113a0c08: 39622801 ldrb w1, [x0,#2186]
ffff8000113a0c0c: 0b010063 add w3, w3, w1
map = rcu_dereference(dev_maps->attr_map[tci]);
ffff8000113a0c10: 2a0303e3 mov w3, w3
ffff8000113a0c14: 91000863 add x3, x3, #0x2
ffff8000113a0c18: d37df063 lsl x3, x3, #3
ffff8000113a0c1c: f8636853 ldr x19, [x2,x3]
if (map) {
ffff8000113a0c20: b40002f3 cbz x19, ffff8000113a0c7c <__get_xps_queue_idx+0xbc>
if (map->len == 1)
ffff8000113a0c24: b9400260 ldr w0, [x19]
ffff8000113a0c28: 7100041f cmp w0, #0x1
ffff8000113a0c2c: 54000100 b.eq ffff8000113a0c4c <__get_xps_queue_idx+0x8c>
if (!skb->l4_hash && !skb->sw_hash)
ffff8000113a0c30: 394206a1 ldrb w1, [x21,#129]
ffff8000113a0c34: 12000421 and w1, w1, #0x3
ffff8000113a0c38: 340001a1 cbz w1, ffff8000113a0c6c <__get_xps_queue_idx+0xac>
return skb->hash;
ffff8000113a0c3c: b94096a1 ldr w1, [x21,#148]
ffff8000113a0c40: 9ba17c00 umull x0, w0, w1
queue_index = map->queues[reciprocal_scale(
ffff8000113a0c44: d360fc00 lsr x0, x0, #32
ffff8000113a0c48: 8b000673 add x19, x19, x0, lsl #1
ffff8000113a0c4c: 79403260 ldrh w0, [x19,#24]
if (unlikely(queue_index >= dev->real_num_tx_queues))
ffff8000113a0c50: b943ce81 ldr w1, [x20,#972]
queue_index = -1;
ffff8000113a0c54: 6b01001f cmp w0, w1
ffff8000113a0c58: 5a9f3000 csinv w0, w0, wzr, cc
}
ffff8000113a0c5c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a0c60: f94013f5 ldr x21, [sp,#32]
ffff8000113a0c64: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a0c68: d65f03c0 ret
__skb_get_hash(skb);
ffff8000113a0c6c: aa1503e0 mov x0, x21
ffff8000113a0c70: 94000000 bl 0 <__skb_get_hash>
ffff8000113a0c70: R_AARCH64_CALL26 __skb_get_hash
ffff8000113a0c74: b9400260 ldr w0, [x19]
ffff8000113a0c78: 17fffff1 b ffff8000113a0c3c <__get_xps_queue_idx+0x7c>
int queue_index = -1;
ffff8000113a0c7c: 12800000 mov w0, #0xffffffff // #-1
ffff8000113a0c80: 17fffff7 b ffff8000113a0c5c <__get_xps_queue_idx+0x9c>
ffff8000113a0c84 <netif_set_real_num_rx_queues>:
{
ffff8000113a0c84: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a0c88: 910003fd mov x29, sp
ffff8000113a0c8c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a0c90: f90013f5 str x21, [sp,#32]
ffff8000113a0c94: aa0003f3 mov x19, x0
ffff8000113a0c98: 2a0103f4 mov w20, w1
ffff8000113a0c9c: aa1e03e0 mov x0, x30
ffff8000113a0ca0: 94000000 bl 0 <_mcount>
ffff8000113a0ca0: R_AARCH64_CALL26 _mcount
if (rxq < 1 || rxq > dev->num_rx_queues)
ffff8000113a0ca4: 340002b4 cbz w20, ffff8000113a0cf8 <netif_set_real_num_rx_queues+0x74>
ffff8000113a0ca8: b9432a60 ldr w0, [x19,#808]
ffff8000113a0cac: 6b00029f cmp w20, w0
ffff8000113a0cb0: 54000248 b.hi ffff8000113a0cf8 <netif_set_real_num_rx_queues+0x74>
if (dev->reg_state == NETREG_REGISTERED) {
ffff8000113a0cb4: 39536275 ldrb w21, [x19,#1240]
ffff8000113a0cb8: 710006bf cmp w21, #0x1
ffff8000113a0cbc: 540000e0 b.eq ffff8000113a0cd8 <netif_set_real_num_rx_queues+0x54>
dev->real_num_rx_queues = rxq;
ffff8000113a0cc0: b9032e74 str w20, [x19,#812]
return 0;
ffff8000113a0cc4: 52800000 mov w0, #0x0 // #0
}
ffff8000113a0cc8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a0ccc: f94013f5 ldr x21, [sp,#32]
ffff8000113a0cd0: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a0cd4: d65f03c0 ret
ASSERT_RTNL();
ffff8000113a0cd8: 94000000 bl 0 <rtnl_is_locked>
ffff8000113a0cd8: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113a0cdc: 34000120 cbz w0, ffff8000113a0d00 <netif_set_real_num_rx_queues+0x7c>
rc = net_rx_queue_update_kobjects(dev, dev->real_num_rx_queues,
ffff8000113a0ce0: b9432e61 ldr w1, [x19,#812]
ffff8000113a0ce4: aa1303e0 mov x0, x19
ffff8000113a0ce8: 2a1403e2 mov w2, w20
ffff8000113a0cec: 94000000 bl 0 <net_rx_queue_update_kobjects>
ffff8000113a0cec: R_AARCH64_CALL26 net_rx_queue_update_kobjects
if (rc)
ffff8000113a0cf0: 34fffe80 cbz w0, ffff8000113a0cc0 <netif_set_real_num_rx_queues+0x3c>
ffff8000113a0cf4: 17fffff5 b ffff8000113a0cc8 <netif_set_real_num_rx_queues+0x44>
return -EINVAL;
ffff8000113a0cf8: 128002a0 mov w0, #0xffffffea // #-22
ffff8000113a0cfc: 17fffff3 b ffff8000113a0cc8 <netif_set_real_num_rx_queues+0x44>
ASSERT_RTNL();
ffff8000113a0d00: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0d00: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113a0d04: 91000063 add x3, x3, #0x0
ffff8000113a0d04: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113a0d08: 39403060 ldrb w0, [x3,#12]
ffff8000113a0d0c: 35fffea0 cbnz w0, ffff8000113a0ce0 <netif_set_real_num_rx_queues+0x5c>
ffff8000113a0d10: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0d10: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113a0d14: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0d14: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113a0d18: 91000000 add x0, x0, #0x0
ffff8000113a0d18: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113a0d1c: 91000021 add x1, x1, #0x0
ffff8000113a0d1c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113a0d20: 52816c22 mov w2, #0xb61 // #2913
ffff8000113a0d24: 39003075 strb w21, [x3,#12]
ffff8000113a0d28: 94000000 bl 0 <__warn_printk>
ffff8000113a0d28: R_AARCH64_CALL26 __warn_printk
ffff8000113a0d2c: d4210000 brk #0x800
ffff8000113a0d30: 17ffffec b ffff8000113a0ce0 <netif_set_real_num_rx_queues+0x5c>
ffff8000113a0d34 <pskb_may_pull>:
{
ffff8000113a0d34: a9bf7bfd stp x29, x30, [sp,#-16]!
ffff8000113a0d38: 910003fd mov x29, sp
static inline bool pskb_may_pull(struct sk_buff *skb, unsigned int len)
ffff8000113a0d3c: b9407003 ldr w3, [x0,#112]
return skb->len - skb->data_len;
ffff8000113a0d40: b9407404 ldr w4, [x0,#116]
return true;
ffff8000113a0d44: 52800022 mov w2, #0x1 // #1
return skb->len - skb->data_len;
ffff8000113a0d48: 4b040064 sub w4, w3, w4
if (likely(len <= skb_headlen(skb)))
ffff8000113a0d4c: 6b04003f cmp w1, w4
ffff8000113a0d50: 54000088 b.hi ffff8000113a0d60 <pskb_may_pull+0x2c>
}
ffff8000113a0d54: 2a0203e0 mov w0, w2
ffff8000113a0d58: a8c17bfd ldp x29, x30, [sp],#16
ffff8000113a0d5c: d65f03c0 ret
if (unlikely(len > skb->len))
ffff8000113a0d60: 6b01007f cmp w3, w1
ffff8000113a0d64: 540000c3 b.cc ffff8000113a0d7c <pskb_may_pull+0x48>
return __pskb_pull_tail(skb, len - skb_headlen(skb)) != NULL;
ffff8000113a0d68: 4b040021 sub w1, w1, w4
ffff8000113a0d6c: 94000000 bl 0 <__pskb_pull_tail>
ffff8000113a0d6c: R_AARCH64_CALL26 __pskb_pull_tail
ffff8000113a0d70: eb1f001f cmp x0, xzr
ffff8000113a0d74: 1a9f07e2 cset w2, ne
ffff8000113a0d78: 17fffff7 b ffff8000113a0d54 <pskb_may_pull+0x20>
return false;
ffff8000113a0d7c: 52800002 mov w2, #0x0 // #0
ffff8000113a0d80: 17fffff5 b ffff8000113a0d54 <pskb_may_pull+0x20>
ffff8000113a0d84 <skb_cow_head>:
{
ffff8000113a0d84: a9bf7bfd stp x29, x30, [sp,#-16]!
ffff8000113a0d88: 910003fd mov x29, sp
ffff8000113a0d8c: aa0003e2 mov x2, x0
if (!skb->cloned)
ffff8000113a0d90: 3941f800 ldrb w0, [x0,#126]
ffff8000113a0d94: 12000000 and w0, w0, #0x1
ffff8000113a0d98: 34000320 cbz w0, ffff8000113a0dfc <skb_cow_head+0x78>
static inline int skb_header_cloned(const struct sk_buff *skb)
ffff8000113a0d9c: f9406040 ldr x0, [x2,#192]
return skb->head + skb->end;
ffff8000113a0da0: b940bc44 ldr w4, [x2,#188]
return dataref != 1;
ffff8000113a0da4: aa0003e3 mov x3, x0
return skb->head + skb->end;
ffff8000113a0da8: 8b040000 add x0, x0, x4
ffff8000113a0dac: b9402000 ldr w0, [x0,#32]
dataref = (dataref & SKB_DATAREF_MASK) - (dataref >> SKB_DATAREF_SHIFT);
ffff8000113a0db0: 12003c04 and w4, w0, #0xffff
ffff8000113a0db4: 4b804080 sub w0, w4, w0, asr #16
return dataref != 1;
ffff8000113a0db8: 7100041f cmp w0, #0x1
ffff8000113a0dbc: 1a9f07e0 cset w0, ne
return skb->data - skb->head;
ffff8000113a0dc0: f9406444 ldr x4, [x2,#200]
ffff8000113a0dc4: cb030083 sub x3, x4, x3
delta = headroom - skb_headroom(skb);
ffff8000113a0dc8: 4b030024 sub w4, w1, w3
ffff8000113a0dcc: 6b03003f cmp w1, w3
ffff8000113a0dd0: 1a9f8081 csel w1, w4, wzr, hi
if (delta || cloned)
ffff8000113a0dd4: 2a000020 orr w0, w1, w0
ffff8000113a0dd8: 340000e0 cbz w0, ffff8000113a0df4 <skb_cow_head+0x70>
return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD), 0,
ffff8000113a0ddc: 1100fc21 add w1, w1, #0x3f
ffff8000113a0de0: aa0203e0 mov x0, x2
ffff8000113a0de4: 121a6421 and w1, w1, #0xffffffc0
ffff8000113a0de8: 52800002 mov w2, #0x0 // #0
ffff8000113a0dec: 52814403 mov w3, #0xa20 // #2592
ffff8000113a0df0: 94000000 bl 0 <pskb_expand_head>
ffff8000113a0df0: R_AARCH64_CALL26 pskb_expand_head
}
ffff8000113a0df4: a8c17bfd ldp x29, x30, [sp],#16
ffff8000113a0df8: d65f03c0 ret
ffff8000113a0dfc: f9406043 ldr x3, [x2,#192]
ffff8000113a0e00: 17fffff0 b ffff8000113a0dc0 <skb_cow_head+0x3c>
ffff8000113a0e04 <gro_pull_from_frag0>:
{
ffff8000113a0e04: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a0e08: 910003fd mov x29, sp
ffff8000113a0e0c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a0e10: f90013f5 str x21, [sp,#32]
ffff8000113a0e14: aa0003f3 mov x19, x0
ffff8000113a0e18: aa1e03e0 mov x0, x30
ffff8000113a0e1c: 2a0103f4 mov w20, w1
ffff8000113a0e20: 94000000 bl 0 <_mcount>
ffff8000113a0e20: R_AARCH64_CALL26 _mcount
BUG_ON(skb->end - skb->tail < grow);
ffff8000113a0e24: b940ba62 ldr w2, [x19,#184]
static void gro_pull_from_frag0(struct sk_buff *skb, int grow)
ffff8000113a0e28: b940be75 ldr w21, [x19,#188]
ffff8000113a0e2c: f9406260 ldr x0, [x19,#192]
BUG_ON(skb->end - skb->tail < grow);
ffff8000113a0e30: 4b0202a1 sub w1, w21, w2
ffff8000113a0e34: 6b14003f cmp w1, w20
return skb->head + skb->end;
ffff8000113a0e38: 8b354015 add x21, x0, w21, uxtw
ffff8000113a0e3c: 540002c3 b.cc ffff8000113a0e94 <gro_pull_from_frag0+0x90>
ffff8000113a0e40: f9401661 ldr x1, [x19,#40]
ffff8000113a0e44: 8b224000 add x0, x0, w2, uxtw
ffff8000113a0e48: 93407e82 sxtw x2, w20
ffff8000113a0e4c: 94000000 bl 0 <memcpy>
ffff8000113a0e4c: R_AARCH64_CALL26 memcpy
skb->data_len -= grow;
ffff8000113a0e50: b9407661 ldr w1, [x19,#116]
skb->tail += grow;
ffff8000113a0e54: b940ba60 ldr w0, [x19,#184]
skb->data_len -= grow;
ffff8000113a0e58: 4b140021 sub w1, w1, w20
skb->tail += grow;
ffff8000113a0e5c: 0b140000 add w0, w0, w20
skb->data_len -= grow;
ffff8000113a0e60: b9007661 str w1, [x19,#116]
skb->tail += grow;
ffff8000113a0e64: b900ba60 str w0, [x19,#184]
frag->bv_offset += delta;
ffff8000113a0e68: b9403ea0 ldr w0, [x21,#60]
frag->bv_len -= delta;
ffff8000113a0e6c: b9403aa1 ldr w1, [x21,#56]
frag->bv_offset += delta;
ffff8000113a0e70: 0b140000 add w0, w0, w20
frag->bv_len -= delta;
ffff8000113a0e74: 4b140034 sub w20, w1, w20
frag->bv_offset += delta;
ffff8000113a0e78: b9003ea0 str w0, [x21,#60]
frag->bv_len -= delta;
ffff8000113a0e7c: b9003ab4 str w20, [x21,#56]
if (unlikely(!skb_frag_size(&pinfo->frags[0]))) {
ffff8000113a0e80: 340000d4 cbz w20, ffff8000113a0e98 <gro_pull_from_frag0+0x94>
}
ffff8000113a0e84: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a0e88: f94013f5 ldr x21, [sp,#32]
ffff8000113a0e8c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a0e90: d65f03c0 ret
BUG_ON(skb->end - skb->tail < grow);
ffff8000113a0e94: d4210000 brk #0x800
static inline void __skb_frag_unref(skb_frag_t *frag)
ffff8000113a0e98: f9406261 ldr x1, [x19,#192]
return skb->head + skb->end;
ffff8000113a0e9c: b940be60 ldr w0, [x19,#188]
static inline void __skb_frag_unref(skb_frag_t *frag)
ffff8000113a0ea0: 8b000020 add x0, x1, x0
ffff8000113a0ea4: f9401800 ldr x0, [x0,#48]
ffff8000113a0ea8: f9400401 ldr x1, [x0,#8]
static inline struct page *compound_head(struct page *page)
{
unsigned long head = READ_ONCE(page->compound_head);
if (unlikely(head & 1))
ffff8000113a0eac: 92400022 and x2, x1, #0x1
return (struct page *) (head - 1);
ffff8000113a0eb0: eb1f005f cmp x2, xzr
ffff8000113a0eb4: d1000421 sub x1, x1, #0x1
ffff8000113a0eb8: 9a810000 csel x0, x0, x1, eq
ATOMIC_OPS(sub, sub, J)
ffff8000113a0ebc: 9100d004 add x4, x0, #0x34
ffff8000113a0ec0: 52800021 mov w1, #0x1 // #1
ffff8000113a0ec4: f9800091 prfm pstl1strm, [x4]
ffff8000113a0ec8: 885f7c82 ldxr w2, [x4]
ffff8000113a0ecc: 4b010042 sub w2, w2, w1
ffff8000113a0ed0: 8803fc82 stlxr w3, w2, [x4]
ffff8000113a0ed4: 35ffffa3 cbnz w3, ffff8000113a0ec8 <gro_pull_from_frag0+0xc4>
ffff8000113a0ed8: d5033bbf dmb ish
if (page_is_devmap_managed(page)) {
put_devmap_managed_page(page);
return;
}
if (put_page_testzero(page))
ffff8000113a0edc: 35000042 cbnz w2, ffff8000113a0ee4 <gro_pull_from_frag0+0xe0>
__put_page(page);
ffff8000113a0ee0: 94000000 bl 0 <__put_page>
ffff8000113a0ee0: R_AARCH64_CALL26 __put_page
--pinfo->nr_frags * sizeof(pinfo->frags[0]));
ffff8000113a0ee4: 39400aa2 ldrb w2, [x21,#2]
return __builtin_memmove(p, q, size);
ffff8000113a0ee8: 9100c2a0 add x0, x21, #0x30
ffff8000113a0eec: 51000442 sub w2, w2, #0x1
ffff8000113a0ef0: 53001c42 uxtb w2, w2
memmove(pinfo->frags, pinfo->frags + 1,
ffff8000113a0ef4: 39000aa2 strb w2, [x21,#2]
ffff8000113a0ef8: 910102a1 add x1, x21, #0x40
ffff8000113a0efc: d37c1c42 ubfiz x2, x2, #4, #8
ffff8000113a0f00: 94000000 bl 0 <memmove>
ffff8000113a0f00: R_AARCH64_CALL26 memmove
ffff8000113a0f04: 17ffffe0 b ffff8000113a0e84 <gro_pull_from_frag0+0x80>
ffff8000113a0f08 <netdev_adjacent_sysfs_add>:
{
ffff8000113a0f08: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff8000113a0f0c: 910003fd mov x29, sp
ffff8000113a0f10: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a0f14: f90013f5 str x21, [sp,#32]
ffff8000113a0f18: aa0003f5 mov x21, x0
ffff8000113a0f1c: aa1e03e0 mov x0, x30
ffff8000113a0f20: aa0103f4 mov x20, x1
ffff8000113a0f24: f9001fa2 str x2, [x29,#56]
ffff8000113a0f28: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff8000113a0f28: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a0f2c: 94000000 bl 0 <_mcount>
ffff8000113a0f2c: R_AARCH64_CALL26 _mcount
ffff8000113a0f30: f9400261 ldr x1, [x19]
ffff8000113a0f30: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
sprintf(linkname, dev_list == &dev->adj_list.upper ?
ffff8000113a0f34: f9401fa2 ldr x2, [x29,#56]
ffff8000113a0f38: 9102a2a0 add x0, x21, #0xa8
{
ffff8000113a0f3c: f9002fa1 str x1, [x29,#88]
sprintf(linkname, dev_list == &dev->adj_list.upper ?
ffff8000113a0f40: eb00005f cmp x2, x0
ffff8000113a0f44: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0f44: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x138
ffff8000113a0f48: 91000021 add x1, x1, #0x0
ffff8000113a0f48: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x138
ffff8000113a0f4c: 54000200 b.eq ffff8000113a0f8c <netdev_adjacent_sysfs_add+0x84>
ffff8000113a0f50: aa1403e2 mov x2, x20
ffff8000113a0f54: 910103a0 add x0, x29, #0x40
ffff8000113a0f58: 94000000 bl 0 <sprintf>
ffff8000113a0f58: R_AARCH64_CALL26 sprintf
return sysfs_create_link(&(dev->dev.kobj), &(adj_dev->dev.kobj),
ffff8000113a0f5c: 91144281 add x1, x20, #0x510
ffff8000113a0f60: 910103a2 add x2, x29, #0x40
ffff8000113a0f64: 911442a0 add x0, x21, #0x510
ffff8000113a0f68: 94000000 bl 0 <sysfs_create_link>
ffff8000113a0f68: R_AARCH64_CALL26 sysfs_create_link
}
ffff8000113a0f6c: f9402fa2 ldr x2, [x29,#88]
ffff8000113a0f70: f9400261 ldr x1, [x19]
ffff8000113a0f70: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a0f74: eb01005f cmp x2, x1
ffff8000113a0f78: 54000101 b.ne ffff8000113a0f98 <netdev_adjacent_sysfs_add+0x90>
ffff8000113a0f7c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a0f80: f94013f5 ldr x21, [sp,#32]
ffff8000113a0f84: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113a0f88: d65f03c0 ret
sprintf(linkname, dev_list == &dev->adj_list.upper ?
ffff8000113a0f8c: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0f8c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x128
ffff8000113a0f90: 91000021 add x1, x1, #0x0
ffff8000113a0f90: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x128
ffff8000113a0f94: 17ffffef b ffff8000113a0f50 <netdev_adjacent_sysfs_add+0x48>
}
ffff8000113a0f98: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a0f98: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a0f9c <netdev_adjacent_sysfs_del>:
{
ffff8000113a0f9c: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff8000113a0fa0: 910003fd mov x29, sp
ffff8000113a0fa4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a0fa8: f90013f5 str x21, [sp,#32]
ffff8000113a0fac: aa0003f4 mov x20, x0
ffff8000113a0fb0: aa1e03e0 mov x0, x30
ffff8000113a0fb4: aa0103f5 mov x21, x1
ffff8000113a0fb8: f9001fa2 str x2, [x29,#56]
ffff8000113a0fbc: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff8000113a0fbc: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a0fc0: 94000000 bl 0 <_mcount>
ffff8000113a0fc0: R_AARCH64_CALL26 _mcount
ffff8000113a0fc4: f9400261 ldr x1, [x19]
ffff8000113a0fc4: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
sprintf(linkname, dev_list == &dev->adj_list.upper ?
ffff8000113a0fc8: f9401fa2 ldr x2, [x29,#56]
ffff8000113a0fcc: 9102a280 add x0, x20, #0xa8
{
ffff8000113a0fd0: f9002fa1 str x1, [x29,#88]
sprintf(linkname, dev_list == &dev->adj_list.upper ?
ffff8000113a0fd4: eb00005f cmp x2, x0
ffff8000113a0fd8: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a0fd8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x138
ffff8000113a0fdc: 91000021 add x1, x1, #0x0
ffff8000113a0fdc: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x138
ffff8000113a0fe0: 540001e0 b.eq ffff8000113a101c <netdev_adjacent_sysfs_del+0x80>
ffff8000113a0fe4: aa1503e2 mov x2, x21
ffff8000113a0fe8: 910103a0 add x0, x29, #0x40
ffff8000113a0fec: 94000000 bl 0 <sprintf>
ffff8000113a0fec: R_AARCH64_CALL26 sprintf
sysfs_remove_link(&(dev->dev.kobj), linkname);
ffff8000113a0ff0: 91144280 add x0, x20, #0x510
ffff8000113a0ff4: 910103a1 add x1, x29, #0x40
ffff8000113a0ff8: 94000000 bl 0 <sysfs_remove_link>
ffff8000113a0ff8: R_AARCH64_CALL26 sysfs_remove_link
}
ffff8000113a0ffc: f9402fa1 ldr x1, [x29,#88]
ffff8000113a1000: f9400260 ldr x0, [x19]
ffff8000113a1000: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a1004: eb00003f cmp x1, x0
ffff8000113a1008: 54000101 b.ne ffff8000113a1028 <netdev_adjacent_sysfs_del+0x8c>
ffff8000113a100c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a1010: f94013f5 ldr x21, [sp,#32]
ffff8000113a1014: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113a1018: d65f03c0 ret
sprintf(linkname, dev_list == &dev->adj_list.upper ?
ffff8000113a101c: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a101c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x128
ffff8000113a1020: 91000021 add x1, x1, #0x0
ffff8000113a1020: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x128
ffff8000113a1024: 17fffff0 b ffff8000113a0fe4 <netdev_adjacent_sysfs_del+0x48>
}
ffff8000113a1028: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a1028: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a102c <dev_get_phys_port_name>:
{
ffff8000113a102c: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a1030: 910003fd mov x29, sp
ffff8000113a1034: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a1038: f90013f5 str x21, [sp,#32]
ffff8000113a103c: aa0003f3 mov x19, x0
ffff8000113a1040: aa1e03e0 mov x0, x30
ffff8000113a1044: aa0103f5 mov x21, x1
ffff8000113a1048: aa0203f4 mov x20, x2
ffff8000113a104c: 94000000 bl 0 <_mcount>
ffff8000113a104c: R_AARCH64_CALL26 _mcount
if (ops->ndo_get_phys_port_name) {
ffff8000113a1050: f940fa60 ldr x0, [x19,#496]
ffff8000113a1054: f940fc03 ldr x3, [x0,#504]
ffff8000113a1058: b4000163 cbz x3, ffff8000113a1084 <dev_get_phys_port_name+0x58>
err = ops->ndo_get_phys_port_name(dev, name, len);
ffff8000113a105c: aa1303e0 mov x0, x19
ffff8000113a1060: aa1503e1 mov x1, x21
ffff8000113a1064: aa1403e2 mov x2, x20
ffff8000113a1068: d63f0060 blr x3
if (err != -EOPNOTSUPP)
ffff8000113a106c: 31017c1f cmn w0, #0x5f
ffff8000113a1070: 540000a0 b.eq ffff8000113a1084 <dev_get_phys_port_name+0x58>
}
ffff8000113a1074: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a1078: f94013f5 ldr x21, [sp,#32]
ffff8000113a107c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a1080: d65f03c0 ret
return devlink_compat_phys_port_name_get(dev, name, len);
ffff8000113a1084: aa1503e1 mov x1, x21
ffff8000113a1088: aa1403e2 mov x2, x20
ffff8000113a108c: aa1303e0 mov x0, x19
ffff8000113a1090: 94000000 bl 0 <devlink_compat_phys_port_name_get>
ffff8000113a1090: R_AARCH64_CALL26 devlink_compat_phys_port_name_get
}
ffff8000113a1094: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a1098: f94013f5 ldr x21, [sp,#32]
ffff8000113a109c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a10a0: d65f03c0 ret
ffff8000113a10a4 <dev_get_port_parent_id>:
{
ffff8000113a10a4: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff8000113a10a8: 910003fd mov x29, sp
ffff8000113a10ac: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a10b0: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a10b4: aa0003f5 mov x21, x0
ffff8000113a10b8: aa1e03e0 mov x0, x30
ffff8000113a10bc: aa0103f3 mov x19, x1
ffff8000113a10c0: 53001c54 uxtb w20, w2
ffff8000113a10c4: 94000000 bl 0 <_mcount>
ffff8000113a10c4: R_AARCH64_CALL26 _mcount
ffff8000113a10c8: 90000016 adrp x22, 0 <__stack_chk_guard>
ffff8000113a10c8: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
const struct net_device_ops *ops = dev->netdev_ops;
ffff8000113a10cc: f940faa1 ldr x1, [x21,#496]
{
ffff8000113a10d0: f94002c0 ldr x0, [x22]
ffff8000113a10d0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
if (ops->ndo_get_port_parent_id) {
ffff8000113a10d4: f940f823 ldr x3, [x1,#496]
{
ffff8000113a10d8: f9002fa0 str x0, [x29,#88]
struct netdev_phys_item_id first = { };
ffff8000113a10dc: a9037fbf stp xzr, xzr, [x29,#48]
ffff8000113a10e0: a9047fbf stp xzr, xzr, [x29,#64]
ffff8000113a10e4: 390143bf strb wzr, [x29,#80]
if (ops->ndo_get_port_parent_id) {
ffff8000113a10e8: b4000203 cbz x3, ffff8000113a1128 <dev_get_port_parent_id+0x84>
err = ops->ndo_get_port_parent_id(dev, ppid);
ffff8000113a10ec: aa1303e1 mov x1, x19
ffff8000113a10f0: aa1503e0 mov x0, x21
ffff8000113a10f4: d63f0060 blr x3
if (err != -EOPNOTSUPP)
ffff8000113a10f8: 31017c1f cmn w0, #0x5f
err = ops->ndo_get_port_parent_id(dev, ppid);
ffff8000113a10fc: 2a0003e1 mov w1, w0
if (err != -EOPNOTSUPP)
ffff8000113a1100: 54000140 b.eq ffff8000113a1128 <dev_get_port_parent_id+0x84>
}
ffff8000113a1104: f9402fa3 ldr x3, [x29,#88]
ffff8000113a1108: f94002c2 ldr x2, [x22]
ffff8000113a1108: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a110c: 2a0103e0 mov w0, w1
ffff8000113a1110: eb02007f cmp x3, x2
ffff8000113a1114: 54000601 b.ne ffff8000113a11d4 <dev_get_port_parent_id+0x130>
ffff8000113a1118: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a111c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a1120: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113a1124: d65f03c0 ret
err = devlink_compat_switch_id_get(dev, ppid);
ffff8000113a1128: aa1303e1 mov x1, x19
ffff8000113a112c: aa1503e0 mov x0, x21
ffff8000113a1130: 94000000 bl 0 <devlink_compat_switch_id_get>
ffff8000113a1130: R_AARCH64_CALL26 devlink_compat_switch_id_get
if (!err || err != -EOPNOTSUPP)
ffff8000113a1134: 31017c1f cmn w0, #0x5f
err = devlink_compat_switch_id_get(dev, ppid);
ffff8000113a1138: 2a0003e1 mov w1, w0
if (!err || err != -EOPNOTSUPP)
ffff8000113a113c: 54fffe41 b.ne ffff8000113a1104 <dev_get_port_parent_id+0x60>
if (!recurse)
ffff8000113a1140: 34fffe34 cbz w20, ffff8000113a1104 <dev_get_port_parent_id+0x60>
netdev_for_each_lower_dev(dev, lower_dev, iter) {
ffff8000113a1144: f84b8ea0 ldr x0, [x21,#184]!
if (&lower->list == &dev->adj_list.lower)
ffff8000113a1148: eb0002bf cmp x21, x0
ffff8000113a114c: d1006002 sub x2, x0, #0x18
ffff8000113a1150: 54fffda0 b.eq ffff8000113a1104 <dev_get_port_parent_id+0x60>
return lower->dev;
ffff8000113a1154: f85e8000 ldur x0, [x0,#-24]
*iter = lower->list.next;
ffff8000113a1158: f9400c54 ldr x20, [x2,#24]
netdev_for_each_lower_dev(dev, lower_dev, iter) {
ffff8000113a115c: b50001a0 cbnz x0, ffff8000113a1190 <dev_get_port_parent_id+0xec>
ffff8000113a1160: 17ffffe9 b ffff8000113a1104 <dev_get_port_parent_id+0x60>
first = *ppid;
ffff8000113a1164: 39408260 ldrb w0, [x19,#32]
ffff8000113a1168: a9401664 ldp x4, x5, [x19]
ffff8000113a116c: a9410e62 ldp x2, x3, [x19,#16]
ffff8000113a1170: a90317a4 stp x4, x5, [x29,#48]
ffff8000113a1174: a9040fa2 stp x2, x3, [x29,#64]
ffff8000113a1178: 390143a0 strb w0, [x29,#80]
if (&lower->list == &dev->adj_list.lower)
ffff8000113a117c: eb1402bf cmp x21, x20
ffff8000113a1180: 54000220 b.eq ffff8000113a11c4 <dev_get_port_parent_id+0x120>
return lower->dev;
ffff8000113a1184: f85e8280 ldur x0, [x20,#-24]
*iter = lower->list.next;
ffff8000113a1188: f9400294 ldr x20, [x20]
netdev_for_each_lower_dev(dev, lower_dev, iter) {
ffff8000113a118c: b4000200 cbz x0, ffff8000113a11cc <dev_get_port_parent_id+0x128>
err = dev_get_port_parent_id(lower_dev, ppid, recurse);
ffff8000113a1190: aa1303e1 mov x1, x19
ffff8000113a1194: 52800022 mov w2, #0x1 // #1
ffff8000113a1198: 94000000 bl ffff8000113a10a4 <dev_get_port_parent_id>
ffff8000113a1198: R_AARCH64_CALL26 dev_get_port_parent_id
if (err)
ffff8000113a119c: 35000180 cbnz w0, ffff8000113a11cc <dev_get_port_parent_id+0x128>
if (!first.id_len)
ffff8000113a11a0: 394143a0 ldrb w0, [x29,#80]
ffff8000113a11a4: 34fffe00 cbz w0, ffff8000113a1164 <dev_get_port_parent_id+0xc0>
return __builtin_memcmp(p, q, size);
ffff8000113a11a8: 9100c3a0 add x0, x29, #0x30
ffff8000113a11ac: aa1303e1 mov x1, x19
ffff8000113a11b0: d2800422 mov x2, #0x21 // #33
ffff8000113a11b4: 94000000 bl 0 <memcmp>
ffff8000113a11b4: R_AARCH64_CALL26 memcmp
else if (memcmp(&first, ppid, sizeof(*ppid)))
ffff8000113a11b8: 34fffe20 cbz w0, ffff8000113a117c <dev_get_port_parent_id+0xd8>
return -ENODATA;
ffff8000113a11bc: 12800781 mov w1, #0xffffffc3 // #-61
ffff8000113a11c0: 17ffffd1 b ffff8000113a1104 <dev_get_port_parent_id+0x60>
if (&lower->list == &dev->adj_list.lower)
ffff8000113a11c4: 52800001 mov w1, #0x0 // #0
ffff8000113a11c8: 17ffffcf b ffff8000113a1104 <dev_get_port_parent_id+0x60>
ffff8000113a11cc: 2a0003e1 mov w1, w0
ffff8000113a11d0: 17ffffcd b ffff8000113a1104 <dev_get_port_parent_id+0x60>
}
ffff8000113a11d4: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a11d4: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a11d8 <netdev_port_same_parent_id>:
{
ffff8000113a11d8: a9b77bfd stp x29, x30, [sp,#-144]!
ffff8000113a11dc: 910003fd mov x29, sp
ffff8000113a11e0: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a11e4: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a11e8: aa0003f5 mov x21, x0
ffff8000113a11ec: aa1e03e0 mov x0, x30
ffff8000113a11f0: aa0103f6 mov x22, x1
ffff8000113a11f4: 90000014 adrp x20, 0 <__stack_chk_guard>
ffff8000113a11f4: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a11f8: 94000000 bl 0 <_mcount>
ffff8000113a11f8: R_AARCH64_CALL26 _mcount
struct netdev_phys_item_id a_id = { };
ffff8000113a11fc: 9100e3b3 add x19, x29, #0x38
{
ffff8000113a1200: f9400283 ldr x3, [x20]
ffff8000113a1200: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
if (dev_get_port_parent_id(a, &a_id, true) ||
ffff8000113a1204: aa1503e0 mov x0, x21
ffff8000113a1208: aa1303e1 mov x1, x19
ffff8000113a120c: 52800022 mov w2, #0x1 // #1
{
ffff8000113a1210: f90047a3 str x3, [x29,#136]
struct netdev_phys_item_id a_id = { };
ffff8000113a1214: a9007e7f stp xzr, xzr, [x19]
ffff8000113a1218: a9017e7f stp xzr, xzr, [x19,#16]
ffff8000113a121c: 390163bf strb wzr, [x29,#88]
struct netdev_phys_item_id b_id = { };
ffff8000113a1220: a9067fbf stp xzr, xzr, [x29,#96]
ffff8000113a1224: a9077fbf stp xzr, xzr, [x29,#112]
ffff8000113a1228: 390203bf strb wzr, [x29,#128]
if (dev_get_port_parent_id(a, &a_id, true) ||
ffff8000113a122c: 94000000 bl ffff8000113a10a4 <dev_get_port_parent_id>
ffff8000113a122c: R_AARCH64_CALL26 dev_get_port_parent_id
ffff8000113a1230: 34000140 cbz w0, ffff8000113a1258 <netdev_port_same_parent_id+0x80>
return false;
ffff8000113a1234: 52800000 mov w0, #0x0 // #0
}
ffff8000113a1238: f94047a2 ldr x2, [x29,#136]
ffff8000113a123c: f9400281 ldr x1, [x20]
ffff8000113a123c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a1240: eb01005f cmp x2, x1
ffff8000113a1244: 540002e1 b.ne ffff8000113a12a0 <netdev_port_same_parent_id+0xc8>
ffff8000113a1248: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a124c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a1250: a8c97bfd ldp x29, x30, [sp],#144
ffff8000113a1254: d65f03c0 ret
dev_get_port_parent_id(b, &b_id, true))
ffff8000113a1258: aa1603e0 mov x0, x22
ffff8000113a125c: 910183a1 add x1, x29, #0x60
ffff8000113a1260: 52800022 mov w2, #0x1 // #1
ffff8000113a1264: 94000000 bl ffff8000113a10a4 <dev_get_port_parent_id>
ffff8000113a1264: R_AARCH64_CALL26 dev_get_port_parent_id
if (dev_get_port_parent_id(a, &a_id, true) ||
ffff8000113a1268: 35fffe60 cbnz w0, ffff8000113a1234 <netdev_port_same_parent_id+0x5c>
return a->id_len == b->id_len &&
ffff8000113a126c: 39408261 ldrb w1, [x19,#32]
ffff8000113a1270: 394203a2 ldrb w2, [x29,#128]
ffff8000113a1274: 6b01005f cmp w2, w1
ffff8000113a1278: 54fffe01 b.ne ffff8000113a1238 <netdev_port_same_parent_id+0x60>
memcmp(a->id, b->id, a->id_len) == 0;
ffff8000113a127c: 53001c42 uxtb w2, w2
if (p_size < size || q_size < size)
ffff8000113a1280: f100845f cmp x2, #0x21
ffff8000113a1284: 54000108 b.hi ffff8000113a12a4 <netdev_port_same_parent_id+0xcc>
return __builtin_memcmp(p, q, size);
ffff8000113a1288: aa1303e0 mov x0, x19
ffff8000113a128c: 910183a1 add x1, x29, #0x60
ffff8000113a1290: 94000000 bl 0 <memcmp>
ffff8000113a1290: R_AARCH64_CALL26 memcmp
return a->id_len == b->id_len &&
ffff8000113a1294: 6b1f001f cmp w0, wzr
ffff8000113a1298: 1a9f17e0 cset w0, eq
ffff8000113a129c: 17ffffe7 b ffff8000113a1238 <netdev_port_same_parent_id+0x60>
}
ffff8000113a12a0: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a12a0: R_AARCH64_CALL26 __stack_chk_fail
fortify_panic(__func__);
ffff8000113a12a4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a12a4: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113a12a8: 91000000 add x0, x0, #0x0
ffff8000113a12a8: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113a12ac: 94000000 bl 0 <fortify_panic>
ffff8000113a12ac: R_AARCH64_CALL26 fortify_panic
ffff8000113a12b0 <dev_change_proto_down_generic>:
{
ffff8000113a12b0: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a12b4: 910003fd mov x29, sp
ffff8000113a12b8: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a12bc: aa0003f3 mov x19, x0
ffff8000113a12c0: aa1e03e0 mov x0, x30
ffff8000113a12c4: 53001c34 uxtb w20, w1
ffff8000113a12c8: 94000000 bl 0 <_mcount>
ffff8000113a12c8: R_AARCH64_CALL26 _mcount
netif_carrier_off(dev);
ffff8000113a12cc: aa1303e0 mov x0, x19
if (proto_down)
ffff8000113a12d0: 350000f4 cbnz w20, ffff8000113a12ec <dev_change_proto_down_generic+0x3c>
netif_carrier_on(dev);
ffff8000113a12d4: 94000000 bl 0 <netif_carrier_on>
ffff8000113a12d4: R_AARCH64_CALL26 netif_carrier_on
dev->proto_down = proto_down;
ffff8000113a12d8: 3922e274 strb w20, [x19,#2232]
}
ffff8000113a12dc: 52800000 mov w0, #0x0 // #0
ffff8000113a12e0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a12e4: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a12e8: d65f03c0 ret
netif_carrier_off(dev);
ffff8000113a12ec: 94000000 bl 0 <netif_carrier_off>
ffff8000113a12ec: R_AARCH64_CALL26 netif_carrier_off
dev->proto_down = proto_down;
ffff8000113a12f0: 3922e274 strb w20, [x19,#2232]
}
ffff8000113a12f4: 52800000 mov w0, #0x0 // #0
ffff8000113a12f8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a12fc: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a1300: d65f03c0 ret
ffff8000113a1304 <netdev_refcnt_read>:
{
ffff8000113a1304: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a1308: 910003fd mov x29, sp
ffff8000113a130c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a1310: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a1314: f9001bf7 str x23, [sp,#48]
ffff8000113a1318: aa0003f6 mov x22, x0
ffff8000113a131c: aa1e03e0 mov x0, x30
ffff8000113a1320: 94000000 bl 0 <_mcount>
ffff8000113a1320: R_AARCH64_CALL26 _mcount
for_each_possible_cpu(i)
ffff8000113a1324: 90000014 adrp x20, 0 <__cpu_possible_mask>
ffff8000113a1324: R_AARCH64_ADR_PREL_PG_HI21 __cpu_possible_mask
ffff8000113a1328: 90000017 adrp x23, 0 <nr_cpu_ids>
ffff8000113a1328: R_AARCH64_ADR_PREL_PG_HI21 nr_cpu_ids
int i, refcnt = 0;
ffff8000113a132c: 52800013 mov w19, #0x0 // #0
for_each_possible_cpu(i)
ffff8000113a1330: 12800000 mov w0, #0xffffffff // #-1
ffff8000113a1334: 91000294 add x20, x20, #0x0
ffff8000113a1334: R_AARCH64_ADD_ABS_LO12_NC __cpu_possible_mask
ffff8000113a1338: 910002f7 add x23, x23, #0x0
ffff8000113a1338: R_AARCH64_ADD_ABS_LO12_NC nr_cpu_ids
refcnt += *per_cpu_ptr(dev->pcpu_refcnt, i);
ffff8000113a133c: 90000015 adrp x21, 0 <__per_cpu_offset>
ffff8000113a133c: R_AARCH64_ADR_PREL_PG_HI21 __per_cpu_offset
for_each_possible_cpu(i)
ffff8000113a1340: 14000006 b ffff8000113a1358 <netdev_refcnt_read+0x54>
refcnt += *per_cpu_ptr(dev->pcpu_refcnt, i);
ffff8000113a1344: 910002a2 add x2, x21, #0x0
ffff8000113a1344: R_AARCH64_ADD_ABS_LO12_NC __per_cpu_offset
ffff8000113a1348: f860d843 ldr x3, [x2,w0,sxtw #3]
ffff8000113a134c: f94262c2 ldr x2, [x22,#1216]
ffff8000113a1350: b8636842 ldr w2, [x2,x3]
ffff8000113a1354: 0b020273 add w19, w19, w2
for_each_possible_cpu(i)
ffff8000113a1358: aa1403e1 mov x1, x20
ffff8000113a135c: 94000000 bl 0 <cpumask_next>
ffff8000113a135c: R_AARCH64_CALL26 cpumask_next
ffff8000113a1360: b94002e2 ldr w2, [x23]
ffff8000113a1364: 6b02001f cmp w0, w2
ffff8000113a1368: 54fffee3 b.cc ffff8000113a1344 <netdev_refcnt_read+0x40>
}
ffff8000113a136c: 2a1303e0 mov w0, w19
ffff8000113a1370: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a1374: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a1378: f9401bf7 ldr x23, [sp,#48]
ffff8000113a137c: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a1380: d65f03c0 ret
ffff8000113a1384 <synchronize_net>:
{
ffff8000113a1384: a9bf7bfd stp x29, x30, [sp,#-16]!
ffff8000113a1388: 910003fd mov x29, sp
ffff8000113a138c: aa1e03e0 mov x0, x30
ffff8000113a1390: 94000000 bl 0 <_mcount>
ffff8000113a1390: R_AARCH64_CALL26 _mcount
might_sleep();
ffff8000113a1394: 94000000 bl 0 <_cond_resched>
ffff8000113a1394: R_AARCH64_CALL26 _cond_resched
if (rtnl_is_locked())
ffff8000113a1398: 94000000 bl 0 <rtnl_is_locked>
ffff8000113a1398: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113a139c: 35000080 cbnz w0, ffff8000113a13ac <synchronize_net+0x28>
synchronize_rcu();
ffff8000113a13a0: 94000000 bl 0 <synchronize_rcu>
ffff8000113a13a0: R_AARCH64_CALL26 synchronize_rcu
}
ffff8000113a13a4: a8c17bfd ldp x29, x30, [sp],#16
ffff8000113a13a8: d65f03c0 ret
synchronize_rcu_expedited();
ffff8000113a13ac: 94000000 bl 0 <synchronize_rcu_expedited>
ffff8000113a13ac: R_AARCH64_CALL26 synchronize_rcu_expedited
}
ffff8000113a13b0: a8c17bfd ldp x29, x30, [sp],#16
ffff8000113a13b4: d65f03c0 ret
ffff8000113a13b8 <netdev_rx_handler_unregister>:
{
ffff8000113a13b8: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a13bc: 910003fd mov x29, sp
ffff8000113a13c0: f9000bf3 str x19, [sp,#16]
ffff8000113a13c4: aa0003f3 mov x19, x0
ffff8000113a13c8: aa1e03e0 mov x0, x30
ffff8000113a13cc: 94000000 bl 0 <_mcount>
ffff8000113a13cc: R_AARCH64_CALL26 _mcount
ASSERT_RTNL();
ffff8000113a13d0: 94000000 bl 0 <rtnl_is_locked>
ffff8000113a13d0: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113a13d4: 340000e0 cbz w0, ffff8000113a13f0 <netdev_rx_handler_unregister+0x38>
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a13d8: f901a27f str xzr, [x19,#832]
synchronize_net();
ffff8000113a13dc: 94000000 bl ffff8000113a1384 <synchronize_net>
ffff8000113a13dc: R_AARCH64_CALL26 synchronize_net
ffff8000113a13e0: f901a67f str xzr, [x19,#840]
}
ffff8000113a13e4: f9400bf3 ldr x19, [sp,#16]
ffff8000113a13e8: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a13ec: d65f03c0 ret
ASSERT_RTNL();
ffff8000113a13f0: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113a13f0: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113a13f4: 91000063 add x3, x3, #0x0
ffff8000113a13f4: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113a13f8: 39403460 ldrb w0, [x3,#13]
ffff8000113a13fc: 35fffee0 cbnz w0, ffff8000113a13d8 <netdev_rx_handler_unregister+0x20>
ffff8000113a1400: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a1400: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113a1404: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a1404: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113a1408: 52800024 mov w4, #0x1 // #1
ffff8000113a140c: 91000000 add x0, x0, #0x0
ffff8000113a140c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113a1410: 91000021 add x1, x1, #0x0
ffff8000113a1410: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113a1414: 528269e2 mov w2, #0x134f // #4943
ffff8000113a1418: 39003464 strb w4, [x3,#13]
ffff8000113a141c: 94000000 bl 0 <__warn_printk>
ffff8000113a141c: R_AARCH64_CALL26 __warn_printk
ffff8000113a1420: d4210000 brk #0x800
ffff8000113a1424: 17ffffed b ffff8000113a13d8 <netdev_rx_handler_unregister+0x20>
ffff8000113a1428 <net_rps_send_ipi>:
{
ffff8000113a1428: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a142c: 910003fd mov x29, sp
ffff8000113a1430: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a1434: f90013f5 str x21, [sp,#32]
ffff8000113a1438: 90000015 adrp x21, 0 <__cpu_online_mask>
ffff8000113a1438: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113a143c: aa0003f3 mov x19, x0
ffff8000113a1440: aa1e03e0 mov x0, x30
ffff8000113a1444: 94000000 bl 0 <_mcount>
ffff8000113a1444: R_AARCH64_CALL26 _mcount
ffff8000113a1448: 910002b5 add x21, x21, #0x0
ffff8000113a1448: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
while (remsd) {
ffff8000113a144c: b4000233 cbz x19, ffff8000113a1490 <net_rps_send_ipi+0x68>
if (cpu_online(remsd->cpu))
ffff8000113a1450: b940ea60 ldr w0, [x19,#232]
struct softnet_data *next = remsd->rps_ipi_next;
ffff8000113a1454: f9407274 ldr x20, [x19,#224]
ffff8000113a1458: 1100fc01 add w1, w0, #0x3f
ffff8000113a145c: 6b1f001f cmp w0, wzr
ffff8000113a1460: 1a80b021 csel w1, w1, w0, lt
ffff8000113a1464: 13067c21 asr w1, w1, #6
ffff8000113a1468: 937d7c21 sbfiz x1, x1, #3, #32
ffff8000113a146c: f8756821 ldr x1, [x1,x21]
ffff8000113a1470: 9ac02421 lsr x1, x1, x0
if (cpu_online(remsd->cpu))
ffff8000113a1474: 37000081 tbnz w1, #0, ffff8000113a1484 <net_rps_send_ipi+0x5c>
while (remsd) {
ffff8000113a1478: b40000d4 cbz x20, ffff8000113a1490 <net_rps_send_ipi+0x68>
ffff8000113a147c: aa1403f3 mov x19, x20
ffff8000113a1480: 17fffff4 b ffff8000113a1450 <net_rps_send_ipi+0x28>
smp_call_function_single_async(remsd->cpu, &remsd->csd);
ffff8000113a1484: 91030261 add x1, x19, #0xc0
ffff8000113a1488: 94000000 bl 0 <smp_call_function_single_async>
ffff8000113a1488: R_AARCH64_CALL26 smp_call_function_single_async
while (remsd) {
ffff8000113a148c: b5ffff94 cbnz x20, ffff8000113a147c <net_rps_send_ipi+0x54>
}
ffff8000113a1490: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a1494: f94013f5 ldr x21, [sp,#32]
ffff8000113a1498: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a149c: d65f03c0 ret
ffff8000113a14a0 <skb_gro_reset_offset>:
{
ffff8000113a14a0: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a14a4: 910003fd mov x29, sp
ffff8000113a14a8: f9000bf3 str x19, [sp,#16]
ffff8000113a14ac: aa0003f3 mov x19, x0
ffff8000113a14b0: aa1e03e0 mov x0, x30
ffff8000113a14b4: 94000000 bl 0 <_mcount>
ffff8000113a14b4: R_AARCH64_CALL26 _mcount
if (!skb_headlen(skb) && pinfo->nr_frags &&
ffff8000113a14b8: b9407262 ldr w2, [x19,#112]
ffff8000113a14bc: b9407661 ldr w1, [x19,#116]
NAPI_GRO_CB(skb)->data_offset = 0;
ffff8000113a14c0: b900367f str wzr, [x19,#52]
NAPI_GRO_CB(skb)->frag0 = NULL;
ffff8000113a14c4: f900167f str xzr, [x19,#40]
NAPI_GRO_CB(skb)->frag0_len = 0;
ffff8000113a14c8: b900327f str wzr, [x19,#48]
if (!skb_headlen(skb) && pinfo->nr_frags &&
ffff8000113a14cc: 6b01005f cmp w2, w1
static void skb_gro_reset_offset(struct sk_buff *skb)
ffff8000113a14d0: b940be63 ldr w3, [x19,#188]
ffff8000113a14d4: f9406264 ldr x4, [x19,#192]
if (!skb_headlen(skb) && pinfo->nr_frags &&
ffff8000113a14d8: 54000080 b.eq ffff8000113a14e8 <skb_gro_reset_offset+0x48>
}
ffff8000113a14dc: f9400bf3 ldr x19, [sp,#16]
ffff8000113a14e0: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a14e4: d65f03c0 ret
return skb->head + skb->end;
ffff8000113a14e8: 8b234081 add x1, x4, w3, uxtw
if (!skb_headlen(skb) && pinfo->nr_frags &&
ffff8000113a14ec: 39400822 ldrb w2, [x1,#2]
ffff8000113a14f0: 34ffff62 cbz w2, ffff8000113a14dc <skb_gro_reset_offset+0x3c>
*/
#include <linux/vmstat.h>
static __always_inline void *lowmem_page_address(const struct page *page)
{
return page_to_virt(page);
ffff8000113a14f4: f9401824 ldr x4, [x1,#48]
ffff8000113a14f8: d2a00402 mov x2, #0x200000 // #2097152
ffff8000113a14fc: f2c00402 movk x2, #0x20, lsl #32
ffff8000113a1500: 8b020082 add x2, x4, x2
ffff8000113a1504: d2ffffe5 mov x5, #0xffff000000000000 // #-281474976710656
return page_address(skb_frag_page(frag)) + skb_frag_off(frag);
ffff8000113a1508: b9403c24 ldr w4, [x1,#60]
ffff8000113a150c: d346fc42 lsr x2, x2, #6
ffff8000113a1510: 8b0240a2 add x2, x5, x2, lsl #16
ffff8000113a1514: 8b040042 add x2, x2, x4
NAPI_GRO_CB(skb)->frag0 = skb_frag_address(frag0);
ffff8000113a1518: f9001662 str x2, [x19,#40]
NAPI_GRO_CB(skb)->frag0_len = min_t(unsigned int,
ffff8000113a151c: b940ba62 ldr w2, [x19,#184]
ffff8000113a1520: b9403821 ldr w1, [x1,#56]
ffff8000113a1524: 4b020063 sub w3, w3, w2
ffff8000113a1528: 6b03003f cmp w1, w3
ffff8000113a152c: 1a839023 csel w3, w1, w3, ls
ffff8000113a1530: b9003263 str w3, [x19,#48]
}
ffff8000113a1534: f9400bf3 ldr x19, [sp,#16]
ffff8000113a1538: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a153c: d65f03c0 ret
ffff8000113a1540 <is_skb_forwardable>:
{
ffff8000113a1540: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a1544: 910003fd mov x29, sp
ffff8000113a1548: f9000bf3 str x19, [sp,#16]
ffff8000113a154c: aa0003f3 mov x19, x0
ffff8000113a1550: aa1e03e0 mov x0, x30
ffff8000113a1554: f90017a1 str x1, [x29,#40]
ffff8000113a1558: 94000000 bl 0 <_mcount>
ffff8000113a1558: R_AARCH64_CALL26 _mcount
if (!(dev->flags & IFF_UP))
ffff8000113a155c: b9422a62 ldr w2, [x19,#552]
return false;
ffff8000113a1560: 52800000 mov w0, #0x0 // #0
if (!(dev->flags & IFF_UP))
ffff8000113a1564: f94017a1 ldr x1, [x29,#40]
ffff8000113a1568: 360001e2 tbz w2, #0, ffff8000113a15a4 <is_skb_forwardable+0x64>
len = dev->mtu + dev->hard_header_len + VLAN_HLEN;
ffff8000113a156c: b9423a62 ldr w2, [x19,#568]
ffff8000113a1570: 79448e63 ldrh w3, [x19,#582]
if (skb->len <= len)
ffff8000113a1574: b9407020 ldr w0, [x1,#112]
len = dev->mtu + dev->hard_header_len + VLAN_HLEN;
ffff8000113a1578: 11001042 add w2, w2, #0x4
ffff8000113a157c: 0b030042 add w2, w2, w3
if (skb->len <= len)
ffff8000113a1580: 6b00005f cmp w2, w0
return true;
ffff8000113a1584: 52800020 mov w0, #0x1 // #1
if (skb->len <= len)
ffff8000113a1588: 540000e2 b.cs ffff8000113a15a4 <is_skb_forwardable+0x64>
return skb->head + skb->end;
ffff8000113a158c: b940bc20 ldr w0, [x1,#188]
return csum_fold(csum_partial(csum_start, plen, partial));
}
static inline bool skb_is_gso(const struct sk_buff *skb)
{
return skb_shinfo(skb)->gso_size;
ffff8000113a1590: f9406021 ldr x1, [x1,#192]
ffff8000113a1594: 8b000020 add x0, x1, x0
if (skb_is_gso(skb))
ffff8000113a1598: 79400800 ldrh w0, [x0,#4]
ffff8000113a159c: 6b1f001f cmp w0, wzr
ffff8000113a15a0: 1a9f07e0 cset w0, ne
}
ffff8000113a15a4: f9400bf3 ldr x19, [sp,#16]
ffff8000113a15a8: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a15ac: d65f03c0 ret
ffff8000113a15b0 <dev_valid_name>:
{
ffff8000113a15b0: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a15b4: 910003fd mov x29, sp
ffff8000113a15b8: f9000bf3 str x19, [sp,#16]
ffff8000113a15bc: aa0003f3 mov x19, x0
ffff8000113a15c0: aa1e03e0 mov x0, x30
ffff8000113a15c4: 94000000 bl 0 <_mcount>
ffff8000113a15c4: R_AARCH64_CALL26 _mcount
if (*name == '\0')
ffff8000113a15c8: 39400260 ldrb w0, [x19]
ffff8000113a15cc: 350000a0 cbnz w0, ffff8000113a15e0 <dev_valid_name+0x30>
return false;
ffff8000113a15d0: 52800000 mov w0, #0x0 // #0
}
ffff8000113a15d4: f9400bf3 ldr x19, [sp,#16]
ffff8000113a15d8: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a15dc: d65f03c0 ret
__kernel_size_t ret = __real_strnlen(p, maxlen < p_size ? maxlen : p_size);
ffff8000113a15e0: aa1303e0 mov x0, x19
ffff8000113a15e4: d2800201 mov x1, #0x10 // #16
ffff8000113a15e8: 94000000 bl 0 <strnlen>
ffff8000113a15e8: R_AARCH64_CALL26 strnlen
if (p_size <= ret && maxlen != ret)
ffff8000113a15ec: b100041f cmn x0, #0x1
ffff8000113a15f0: 54000480 b.eq ffff8000113a1680 <dev_valid_name+0xd0>
if (strnlen(name, IFNAMSIZ) == IFNAMSIZ)
ffff8000113a15f4: f100401f cmp x0, #0x10
ffff8000113a15f8: 54fffec0 b.eq ffff8000113a15d0 <dev_valid_name+0x20>
if (!strcmp(name, ".") || !strcmp(name, ".."))
ffff8000113a15fc: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a15fc: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x148
ffff8000113a1600: aa1303e0 mov x0, x19
ffff8000113a1604: 91000021 add x1, x1, #0x0
ffff8000113a1604: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x148
ffff8000113a1608: 94000000 bl 0 <strcmp>
ffff8000113a1608: R_AARCH64_CALL26 strcmp
ffff8000113a160c: 34fffe20 cbz w0, ffff8000113a15d0 <dev_valid_name+0x20>
ffff8000113a1610: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a1610: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x150
ffff8000113a1614: aa1303e0 mov x0, x19
ffff8000113a1618: 91000021 add x1, x1, #0x0
ffff8000113a1618: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x150
ffff8000113a161c: 94000000 bl 0 <strcmp>
ffff8000113a161c: R_AARCH64_CALL26 strcmp
ffff8000113a1620: 34fffd80 cbz w0, ffff8000113a15d0 <dev_valid_name+0x20>
while (*name) {
ffff8000113a1624: 39400261 ldrb w1, [x19]
ffff8000113a1628: 34000281 cbz w1, ffff8000113a1678 <dev_valid_name+0xc8>
if (*name == '/' || *name == ':' || isspace(*name))
ffff8000113a162c: 7100e83f cmp w1, #0x3a
ffff8000113a1630: 54fffd00 b.eq ffff8000113a15d0 <dev_valid_name+0x20>
ffff8000113a1634: 7100bc3f cmp w1, #0x2f
ffff8000113a1638: 1a9f17e0 cset w0, eq
ffff8000113a163c: 35fffca0 cbnz w0, ffff8000113a15d0 <dev_valid_name+0x20>
ffff8000113a1640: 90000002 adrp x2, 0 <_ctype>
ffff8000113a1640: R_AARCH64_ADR_PREL_PG_HI21 _ctype
ffff8000113a1644: 91000042 add x2, x2, #0x0
ffff8000113a1644: R_AARCH64_ADD_ABS_LO12_NC _ctype
ffff8000113a1648: 3861c841 ldrb w1, [x2,w1,sxtw]
ffff8000113a164c: 36280121 tbz w1, #5, ffff8000113a1670 <dev_valid_name+0xc0>
ffff8000113a1650: 17ffffe1 b ffff8000113a15d4 <dev_valid_name+0x24>
ffff8000113a1654: 7100e83f cmp w1, #0x3a
ffff8000113a1658: 54fffbc0 b.eq ffff8000113a15d0 <dev_valid_name+0x20>
ffff8000113a165c: 7100bc3f cmp w1, #0x2f
ffff8000113a1660: 1a9f17e0 cset w0, eq
ffff8000113a1664: 35fffb60 cbnz w0, ffff8000113a15d0 <dev_valid_name+0x20>
ffff8000113a1668: 3861c841 ldrb w1, [x2,w1,sxtw]
ffff8000113a166c: 372ffb41 tbnz w1, #5, ffff8000113a15d4 <dev_valid_name+0x24>
while (*name) {
ffff8000113a1670: 38401e61 ldrb w1, [x19,#1]!
ffff8000113a1674: 35ffff01 cbnz w1, ffff8000113a1654 <dev_valid_name+0xa4>
return true;
ffff8000113a1678: 52800020 mov w0, #0x1 // #1
ffff8000113a167c: 17ffffd6 b ffff8000113a15d4 <dev_valid_name+0x24>
fortify_panic(__func__);
ffff8000113a1680: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a1680: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x90
ffff8000113a1684: 91000000 add x0, x0, #0x0
ffff8000113a1684: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x90
ffff8000113a1688: 91044000 add x0, x0, #0x110
ffff8000113a168c: 94000000 bl 0 <fortify_panic>
ffff8000113a168c: R_AARCH64_CALL26 fortify_panic
ffff8000113a1690 <dev_alloc_name_ns>:
{
ffff8000113a1690: a9b87bfd stp x29, x30, [sp,#-128]!
ffff8000113a1694: 910003fd mov x29, sp
ffff8000113a1698: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a169c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a16a0: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a16a4: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113a16a8: a90573fb stp x27, x28, [sp,#80]
ffff8000113a16ac: aa0003f8 mov x24, x0
ffff8000113a16b0: aa1e03e0 mov x0, x30
ffff8000113a16b4: 9000001a adrp x26, 0 <__stack_chk_guard>
ffff8000113a16b4: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a16b8: aa0103fb mov x27, x1
ffff8000113a16bc: aa0203f4 mov x20, x2
ffff8000113a16c0: 94000000 bl 0 <_mcount>
ffff8000113a16c0: R_AARCH64_CALL26 _mcount
ffff8000113a16c4: f9400340 ldr x0, [x26]
ffff8000113a16c4: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a16c8: f9003fa0 str x0, [x29,#120]
BUG_ON(!net);
ffff8000113a16cc: b4000eb8 cbz x24, ffff8000113a18a0 <dev_alloc_name_ns+0x210>
if (!dev_valid_name(name))
ffff8000113a16d0: aa1403e0 mov x0, x20
int i = 0;
ffff8000113a16d4: b90067bf str wzr, [x29,#100]
if (!dev_valid_name(name))
ffff8000113a16d8: 94000000 bl ffff8000113a15b0 <dev_valid_name>
ffff8000113a16d8: R_AARCH64_CALL26 dev_valid_name
ffff8000113a16dc: 53001c00 uxtb w0, w0
ffff8000113a16e0: 34000d20 cbz w0, ffff8000113a1884 <dev_alloc_name_ns+0x1f4>
p = strchr(name, '%');
ffff8000113a16e4: aa1403e0 mov x0, x20
ffff8000113a16e8: 528004a1 mov w1, #0x25 // #37
ffff8000113a16ec: 94000000 bl 0 <strchr>
ffff8000113a16ec: R_AARCH64_CALL26 strchr
ffff8000113a16f0: 9101a3b6 add x22, x29, #0x68
if (p) {
ffff8000113a16f4: b40007e0 cbz x0, ffff8000113a17f0 <dev_alloc_name_ns+0x160>
if (p[1] != 'd' || strchr(p + 2, '%'))
ffff8000113a16f8: 39400401 ldrb w1, [x0,#1]
ffff8000113a16fc: 7101903f cmp w1, #0x64
ffff8000113a1700: 54000c21 b.ne ffff8000113a1884 <dev_alloc_name_ns+0x1f4>
ffff8000113a1704: 91000800 add x0, x0, #0x2
ffff8000113a1708: 528004a1 mov w1, #0x25 // #37
ffff8000113a170c: 94000000 bl 0 <strchr>
ffff8000113a170c: R_AARCH64_CALL26 strchr
ffff8000113a1710: b5000ba0 cbnz x0, ffff8000113a1884 <dev_alloc_name_ns+0x1f4>
inuse = (unsigned long *) get_zeroed_page(GFP_ATOMIC);
ffff8000113a1714: 52814400 mov w0, #0xa20 // #2592
ffff8000113a1718: 94000000 bl 0 <get_zeroed_page>
ffff8000113a1718: R_AARCH64_CALL26 get_zeroed_page
ffff8000113a171c: aa0003f7 mov x23, x0
if (!inuse)
ffff8000113a1720: b4000ba0 cbz x0, ffff8000113a1894 <dev_alloc_name_ns+0x204>
for_each_netdev(net, d) {
ffff8000113a1724: aa1803f5 mov x21, x24
ffff8000113a1728: f8490eb3 ldr x19, [x21,#144]!
ffff8000113a172c: 9101a3b6 add x22, x29, #0x68
ffff8000113a1730: eb1302bf cmp x21, x19
ffff8000113a1734: d1012273 sub x19, x19, #0x48
ffff8000113a1738: 540004c0 b.eq ffff8000113a17d0 <dev_alloc_name_ns+0x140>
if (i < 0 || i >= max_netdevices)
ffff8000113a173c: 12bfff19 mov w25, #0x7ffff // #524287
*/
static inline void set_bit(unsigned int nr, volatile unsigned long *p)
{
p += BIT_WORD(nr);
atomic_long_or(BIT_MASK(nr), (atomic_long_t *)p);
ffff8000113a1740: d280003c mov x28, #0x1 // #1
ffff8000113a1744: 14000005 b ffff8000113a1758 <dev_alloc_name_ns+0xc8>
for_each_netdev(net, d) {
ffff8000113a1748: f9402673 ldr x19, [x19,#72]
ffff8000113a174c: eb1302bf cmp x21, x19
ffff8000113a1750: d1012273 sub x19, x19, #0x48
ffff8000113a1754: 540003e0 b.eq ffff8000113a17d0 <dev_alloc_name_ns+0x140>
if (!sscanf(d->name, name, &i))
ffff8000113a1758: aa1303e0 mov x0, x19
ffff8000113a175c: aa1403e1 mov x1, x20
ffff8000113a1760: 910193a2 add x2, x29, #0x64
ffff8000113a1764: 94000000 bl 0 <sscanf>
ffff8000113a1764: R_AARCH64_CALL26 sscanf
ffff8000113a1768: 34ffff00 cbz w0, ffff8000113a1748 <dev_alloc_name_ns+0xb8>
if (i < 0 || i >= max_netdevices)
ffff8000113a176c: b94067a3 ldr w3, [x29,#100]
ffff8000113a1770: 6b19007f cmp w3, w25
ffff8000113a1774: 54fffea8 b.hi ffff8000113a1748 <dev_alloc_name_ns+0xb8>
snprintf(buf, IFNAMSIZ, name, i);
ffff8000113a1778: aa1403e2 mov x2, x20
ffff8000113a177c: d2800201 mov x1, #0x10 // #16
ffff8000113a1780: aa1603e0 mov x0, x22
ffff8000113a1784: 94000000 bl 0 <snprintf>
ffff8000113a1784: R_AARCH64_CALL26 snprintf
if (!strncmp(buf, d->name, IFNAMSIZ))
ffff8000113a1788: aa1603e0 mov x0, x22
ffff8000113a178c: aa1303e1 mov x1, x19
ffff8000113a1790: d2800202 mov x2, #0x10 // #16
ffff8000113a1794: 94000000 bl 0 <strncmp>
ffff8000113a1794: R_AARCH64_CALL26 strncmp
ffff8000113a1798: 35fffd80 cbnz w0, ffff8000113a1748 <dev_alloc_name_ns+0xb8>
set_bit(i, inuse);
ffff8000113a179c: b94067a1 ldr w1, [x29,#100]
p += BIT_WORD(nr);
ffff8000113a17a0: d3467c20 ubfx x0, x1, #6, #26
ATOMIC64_OPS(or, orr, L)
ffff8000113a17a4: 8b000ee4 add x4, x23, x0, lsl #3
atomic_long_or(BIT_MASK(nr), (atomic_long_t *)p);
ffff8000113a17a8: 9ac12381 lsl x1, x28, x1
ffff8000113a17ac: f9800091 prfm pstl1strm, [x4]
ffff8000113a17b0: c85f7c82 ldxr x2, [x4]
ffff8000113a17b4: aa010042 orr x2, x2, x1
ffff8000113a17b8: c8037c82 stxr w3, x2, [x4]
ffff8000113a17bc: 35ffffa3 cbnz w3, ffff8000113a17b0 <dev_alloc_name_ns+0x120>
for_each_netdev(net, d) {
ffff8000113a17c0: f9402673 ldr x19, [x19,#72]
ffff8000113a17c4: eb1302bf cmp x21, x19
ffff8000113a17c8: d1012273 sub x19, x19, #0x48
ffff8000113a17cc: 54fffc61 b.ne ffff8000113a1758 <dev_alloc_name_ns+0xc8>
i = find_first_zero_bit(inuse, max_netdevices);
ffff8000113a17d0: d2a00101 mov x1, #0x80000 // #524288
ffff8000113a17d4: aa1703e0 mov x0, x23
ffff8000113a17d8: d2800002 mov x2, #0x0 // #0
ffff8000113a17dc: 94000000 bl 0 <find_next_zero_bit>
ffff8000113a17dc: R_AARCH64_CALL26 find_next_zero_bit
ffff8000113a17e0: b90067a0 str w0, [x29,#100]
free_page((unsigned long) inuse);
ffff8000113a17e4: 52800001 mov w1, #0x0 // #0
ffff8000113a17e8: aa1703e0 mov x0, x23
ffff8000113a17ec: 94000000 bl 0 <free_pages>
ffff8000113a17ec: R_AARCH64_CALL26 free_pages
snprintf(buf, IFNAMSIZ, name, i);
ffff8000113a17f0: b94067a3 ldr w3, [x29,#100]
ffff8000113a17f4: d2800201 mov x1, #0x10 // #16
ffff8000113a17f8: aa1403e2 mov x2, x20
ffff8000113a17fc: aa1603e0 mov x0, x22
ffff8000113a1800: 94000000 bl 0 <snprintf>
ffff8000113a1800: R_AARCH64_CALL26 snprintf
node_name = netdev_name_node_lookup(net, name);
ffff8000113a1804: aa1803e0 mov x0, x24
ffff8000113a1808: aa1603e1 mov x1, x22
ffff8000113a180c: 97fff799 bl ffff80001139f670 <netdev_name_node_lookup>
return node_name ? node_name->dev : NULL;
ffff8000113a1810: b4000060 cbz x0, ffff8000113a181c <dev_alloc_name_ns+0x18c>
if (!__dev_get_by_name(net, buf))
ffff8000113a1814: f9401000 ldr x0, [x0,#32]
ffff8000113a1818: b50003a0 cbnz x0, ffff8000113a188c <dev_alloc_name_ns+0x1fc>
return i;
ffff8000113a181c: b94067b4 ldr w20, [x29,#100]
if (ret >= 0)
ffff8000113a1820: 37f801b4 tbnz w20, #31, ffff8000113a1854 <dev_alloc_name_ns+0x1c4>
__kernel_size_t ret = __real_strnlen(p, maxlen < p_size ? maxlen : p_size);
ffff8000113a1824: aa1603e0 mov x0, x22
ffff8000113a1828: d2800201 mov x1, #0x10 // #16
ffff8000113a182c: 94000000 bl 0 <strnlen>
ffff8000113a182c: R_AARCH64_CALL26 strnlen
if (p_size <= ret && maxlen != ret)
ffff8000113a1830: f100401f cmp x0, #0x10
__kernel_size_t ret = __real_strnlen(p, maxlen < p_size ? maxlen : p_size);
ffff8000113a1834: aa0003f3 mov x19, x0
if (p_size <= ret && maxlen != ret)
ffff8000113a1838: 54000368 b.hi ffff8000113a18a4 <dev_alloc_name_ns+0x214>
if (p_size <= ret)
ffff8000113a183c: 540003c0 b.eq ffff8000113a18b4 <dev_alloc_name_ns+0x224>
__builtin_memcpy(p, q, len);
ffff8000113a1840: aa1b03e0 mov x0, x27
ffff8000113a1844: aa1603e1 mov x1, x22
ffff8000113a1848: aa1303e2 mov x2, x19
ffff8000113a184c: 94000000 bl 0 <memcpy>
ffff8000113a184c: R_AARCH64_CALL26 memcpy
p[len] = '\0';
ffff8000113a1850: 38336b7f strb wzr, [x27,x19]
}
ffff8000113a1854: f9403fa2 ldr x2, [x29,#120]
ffff8000113a1858: f9400341 ldr x1, [x26]
ffff8000113a1858: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a185c: 2a1403e0 mov w0, w20
ffff8000113a1860: eb01005f cmp x2, x1
ffff8000113a1864: 540001c1 b.ne ffff8000113a189c <dev_alloc_name_ns+0x20c>
ffff8000113a1868: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a186c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a1870: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a1874: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a1878: a94573fb ldp x27, x28, [sp,#80]
ffff8000113a187c: a8c87bfd ldp x29, x30, [sp],#128
ffff8000113a1880: d65f03c0 ret
return -EINVAL;
ffff8000113a1884: 128002b4 mov w20, #0xffffffea // #-22
ffff8000113a1888: 17fffff3 b ffff8000113a1854 <dev_alloc_name_ns+0x1c4>
return -ENFILE;
ffff8000113a188c: 128002d4 mov w20, #0xffffffe9 // #-23
ffff8000113a1890: 17fffff1 b ffff8000113a1854 <dev_alloc_name_ns+0x1c4>
return -ENOMEM;
ffff8000113a1894: 12800174 mov w20, #0xfffffff4 // #-12
ffff8000113a1898: 17ffffef b ffff8000113a1854 <dev_alloc_name_ns+0x1c4>
}
ffff8000113a189c: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a189c: R_AARCH64_CALL26 __stack_chk_fail
BUG_ON(!net);
ffff8000113a18a0: d4210000 brk #0x800
fortify_panic(__func__);
ffff8000113a18a4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a18a4: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x90
ffff8000113a18a8: 91000000 add x0, x0, #0x0
ffff8000113a18a8: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x90
ffff8000113a18ac: 91044000 add x0, x0, #0x110
ffff8000113a18b0: 94000000 bl 0 <fortify_panic>
ffff8000113a18b0: R_AARCH64_CALL26 fortify_panic
fortify_panic(__func__);
ffff8000113a18b4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a18b4: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113a18b8: 91000000 add x0, x0, #0x0
ffff8000113a18b8: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113a18bc: 91002000 add x0, x0, #0x8
ffff8000113a18c0: 94000000 bl 0 <fortify_panic>
ffff8000113a18c0: R_AARCH64_CALL26 fortify_panic
ffff8000113a18c4 <dev_alloc_name>:
{
ffff8000113a18c4: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a18c8: 910003fd mov x29, sp
ffff8000113a18cc: f9000bf3 str x19, [sp,#16]
ffff8000113a18d0: aa0003f3 mov x19, x0
ffff8000113a18d4: aa1e03e0 mov x0, x30
ffff8000113a18d8: f90017a1 str x1, [x29,#40]
ffff8000113a18dc: 94000000 bl 0 <_mcount>
ffff8000113a18dc: R_AARCH64_CALL26 _mcount
return dev_alloc_name_ns(dev_net(dev), dev, name);
ffff8000113a18e0: f94017a2 ldr x2, [x29,#40]
ffff8000113a18e4: f9427a60 ldr x0, [x19,#1264]
ffff8000113a18e8: aa1303e1 mov x1, x19
ffff8000113a18ec: 97ffff69 bl ffff8000113a1690 <dev_alloc_name_ns>
}
ffff8000113a18f0: f9400bf3 ldr x19, [sp,#16]
ffff8000113a18f4: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a18f8: d65f03c0 ret
ffff8000113a18fc <__list_del_entry>:
{
ffff8000113a18fc: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a1900: 910003fd mov x29, sp
ffff8000113a1904: f9000bf3 str x19, [sp,#16]
ffff8000113a1908: aa0003f3 mov x19, x0
if (!__list_del_entry_valid(entry))
ffff8000113a190c: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113a190c: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113a1910: 53001c00 uxtb w0, w0
ffff8000113a1914: 340000a0 cbz w0, ffff8000113a1928 <__list_del_entry+0x2c>
__list_del(entry->prev, entry->next);
ffff8000113a1918: f9400660 ldr x0, [x19,#8]
ffff8000113a191c: f9400261 ldr x1, [x19]
next->prev = prev;
ffff8000113a1920: f9000420 str x0, [x1,#8]
ffff8000113a1924: f9000001 str x1, [x0]
}
ffff8000113a1928: f9400bf3 ldr x19, [sp,#16]
ffff8000113a192c: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a1930: d65f03c0 ret
ffff8000113a1934 <netdev_exit>:
define_netdev_printk_level(netdev_warn, KERN_WARNING);
define_netdev_printk_level(netdev_notice, KERN_NOTICE);
define_netdev_printk_level(netdev_info, KERN_INFO);
static void __net_exit netdev_exit(struct net *net)
{
ffff8000113a1934: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a1938: 910003fd mov x29, sp
ffff8000113a193c: f9000bf3 str x19, [sp,#16]
ffff8000113a1940: aa0003f3 mov x19, x0
ffff8000113a1944: aa1e03e0 mov x0, x30
ffff8000113a1948: 94000000 bl 0 <_mcount>
ffff8000113a1948: R_AARCH64_CALL26 _mcount
kfree(net->dev_name_head);
ffff8000113a194c: f9409660 ldr x0, [x19,#296]
ffff8000113a1950: 94000000 bl 0 <kfree>
ffff8000113a1950: R_AARCH64_CALL26 kfree
kfree(net->dev_index_head);
ffff8000113a1954: f9409a60 ldr x0, [x19,#304]
ffff8000113a1958: 94000000 bl 0 <kfree>
ffff8000113a1958: R_AARCH64_CALL26 kfree
if (net != &init_net)
ffff8000113a195c: 90000000 adrp x0, 0 <init_net>
ffff8000113a195c: R_AARCH64_ADR_PREL_PG_HI21 init_net
ffff8000113a1960: 91000000 add x0, x0, #0x0
ffff8000113a1960: R_AARCH64_ADD_ABS_LO12_NC init_net
ffff8000113a1964: eb00027f cmp x19, x0
ffff8000113a1968: 54000080 b.eq ffff8000113a1978 <netdev_exit+0x44>
__READ_ONCE_SIZE;
ffff8000113a196c: f8490e60 ldr x0, [x19,#144]!
WARN_ON_ONCE(!list_empty(&net->dev_base_head));
ffff8000113a1970: eb00027f cmp x19, x0
ffff8000113a1974: 54000081 b.ne ffff8000113a1984 <netdev_exit+0x50>
}
ffff8000113a1978: f9400bf3 ldr x19, [sp,#16]
ffff8000113a197c: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a1980: d65f03c0 ret
WARN_ON_ONCE(!list_empty(&net->dev_base_head));
ffff8000113a1984: d4210000 brk #0x800
ffff8000113a1988: 17fffffc b ffff8000113a1978 <netdev_exit+0x44>
ffff8000113a198c <netdev_name.part.103>:
static inline const char *netdev_name(const struct net_device *dev)
ffff8000113a198c: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a1990: 910003fd mov x29, sp
if (!dev->name[0] || strchr(dev->name, '%'))
ffff8000113a1994: 528004a1 mov w1, #0x25 // #37
static inline const char *netdev_name(const struct net_device *dev)
ffff8000113a1998: f9000bf3 str x19, [sp,#16]
ffff8000113a199c: aa0003f3 mov x19, x0
if (!dev->name[0] || strchr(dev->name, '%'))
ffff8000113a19a0: 94000000 bl 0 <strchr>
ffff8000113a19a0: R_AARCH64_CALL26 strchr
ffff8000113a19a4: b40000c0 cbz x0, ffff8000113a19bc <netdev_name.part.103+0x30>
return "(unnamed net_device)";
ffff8000113a19a8: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a19a8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x158
ffff8000113a19ac: 91000000 add x0, x0, #0x0
ffff8000113a19ac: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x158
}
ffff8000113a19b0: f9400bf3 ldr x19, [sp,#16]
ffff8000113a19b4: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a19b8: d65f03c0 ret
return dev->name;
ffff8000113a19bc: aa1303e0 mov x0, x19
}
ffff8000113a19c0: f9400bf3 ldr x19, [sp,#16]
ffff8000113a19c4: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a19c8: d65f03c0 ret
ffff8000113a19cc <skb_checksum_help>:
{
ffff8000113a19cc: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a19d0: 910003fd mov x29, sp
ffff8000113a19d4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a19d8: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a19dc: aa0003f3 mov x19, x0
ffff8000113a19e0: aa1e03e0 mov x0, x30
ffff8000113a19e4: 94000000 bl 0 <_mcount>
ffff8000113a19e4: R_AARCH64_CALL26 _mcount
if (skb->ip_summed == CHECKSUM_COMPLETE)
ffff8000113a19e8: 39420260 ldrb w0, [x19,#128]
ffff8000113a19ec: d3451800 ubfx x0, x0, #5, #2
ffff8000113a19f0: 7100081f cmp w0, #0x2
ffff8000113a19f4: 54000600 b.eq ffff8000113a1ab4 <skb_checksum_help+0xe8>
int skb_checksum_help(struct sk_buff *skb)
ffff8000113a19f8: f9406274 ldr x20, [x19,#192]
return skb->head + skb->end;
ffff8000113a19fc: b940be60 ldr w0, [x19,#188]
ffff8000113a1a00: 8b000280 add x0, x20, x0
if (unlikely(skb_shinfo(skb)->gso_size)) {
ffff8000113a1a04: 79400801 ldrh w1, [x0,#4]
ffff8000113a1a08: 350007a1 cbnz w1, ffff8000113a1afc <skb_checksum_help+0x130>
static inline bool skb_has_shared_frag(const struct sk_buff *skb)
ffff8000113a1a0c: b9407661 ldr w1, [x19,#116]
return skb_is_nonlinear(skb) &&
ffff8000113a1a10: 35000621 cbnz w1, ffff8000113a1ad4 <skb_checksum_help+0x108>
return skb->data - skb->head;
ffff8000113a1a14: f9406663 ldr x3, [x19,#200]
return skb->csum_start - skb_headroom(skb);
ffff8000113a1a18: 79411260 ldrh w0, [x19,#136]
int skb_checksum_help(struct sk_buff *skb)
ffff8000113a1a1c: b9407262 ldr w2, [x19,#112]
return skb->data - skb->head;
ffff8000113a1a20: cb140074 sub x20, x3, x20
return skb->csum_start - skb_headroom(skb);
ffff8000113a1a24: 4b140014 sub w20, w0, w20
return skb->len - skb->data_len;
ffff8000113a1a28: 4b010041 sub w1, w2, w1
BUG_ON(offset >= skb_headlen(skb));
ffff8000113a1a2c: 6b01029f cmp w20, w1
ffff8000113a1a30: 54000702 b.cs ffff8000113a1b10 <skb_checksum_help+0x144>
csum = skb_checksum(skb, offset, skb->len - offset, 0);
ffff8000113a1a34: 2a1403e1 mov w1, w20
ffff8000113a1a38: 4b140042 sub w2, w2, w20
ffff8000113a1a3c: 52800003 mov w3, #0x0 // #0
ffff8000113a1a40: aa1303e0 mov x0, x19
ffff8000113a1a44: 94000000 bl 0 <skb_checksum>
ffff8000113a1a44: R_AARCH64_CALL26 skb_checksum
offset += skb->csum_offset;
ffff8000113a1a48: 79411661 ldrh w1, [x19,#138]
ffff8000113a1a4c: b9407263 ldr w3, [x19,#112]
ffff8000113a1a50: 0b140034 add w20, w1, w20
ffff8000113a1a54: b9407661 ldr w1, [x19,#116]
BUG_ON(offset + sizeof(__sum16) > skb_headlen(skb));
ffff8000113a1a58: 93407e95 sxtw x21, w20
ffff8000113a1a5c: 91000aa2 add x2, x21, #0x2
ffff8000113a1a60: 4b010061 sub w1, w3, w1
ffff8000113a1a64: eb01005f cmp x2, x1
csum = skb_checksum(skb, offset, skb->len - offset, 0);
ffff8000113a1a68: 2a0003f6 mov w22, w0
BUG_ON(offset + sizeof(__sum16) > skb_headlen(skb));
ffff8000113a1a6c: 54000508 b.hi ffff8000113a1b0c <skb_checksum_help+0x140>
ret = skb_ensure_writable(skb, offset + sizeof(__sum16));
ffff8000113a1a70: aa1303e0 mov x0, x19
ffff8000113a1a74: 11000a81 add w1, w20, #0x2
ffff8000113a1a78: 94000000 bl 0 <skb_ensure_writable>
ffff8000113a1a78: R_AARCH64_CALL26 skb_ensure_writable
if (ret)
ffff8000113a1a7c: 340000a0 cbz w0, ffff8000113a1a90 <skb_checksum_help+0xc4>
}
ffff8000113a1a80: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a1a84: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a1a88: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a1a8c: d65f03c0 ret
__u32 len, __u8 proto, __wsum sum);
static inline __sum16 csum_fold(__wsum csum)
{
u32 sum = (__force u32)csum;
sum += (sum >> 16) | (sum << 16);
ffff8000113a1a90: 139642c0 ror w0, w22, #16
ffff8000113a1a94: 0b160016 add w22, w0, w22
return ~(__force __sum16)(sum >> 16);
ffff8000113a1a98: 2a7643f6 mvn w22, w22, lsr #16
ffff8000113a1a9c: 53003ed6 uxth w22, w22
*(__sum16 *)(skb->data + offset) = csum_fold(csum) ?: CSUM_MANGLED_0;
ffff8000113a1aa0: f9406660 ldr x0, [x19,#200]
ffff8000113a1aa4: 6b1f02df cmp w22, wzr
ffff8000113a1aa8: 529fffe1 mov w1, #0xffff // #65535
ffff8000113a1aac: 1a8112d6 csel w22, w22, w1, ne
ffff8000113a1ab0: 78356816 strh w22, [x0,x21]
skb->ip_summed = CHECKSUM_NONE;
ffff8000113a1ab4: 39420261 ldrb w1, [x19,#128]
ffff8000113a1ab8: 52800000 mov w0, #0x0 // #0
ffff8000113a1abc: 12197421 and w1, w1, #0xffffff9f
ffff8000113a1ac0: 39020261 strb w1, [x19,#128]
}
ffff8000113a1ac4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a1ac8: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a1acc: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a1ad0: d65f03c0 ret
skb_shinfo(skb)->tx_flags & SKBTX_SHARED_FRAG;
ffff8000113a1ad4: 39400c00 ldrb w0, [x0,#3]
return skb_is_nonlinear(skb) &&
ffff8000113a1ad8: 362ff9e0 tbz w0, #5, ffff8000113a1a14 <skb_checksum_help+0x48>
return __pskb_pull_tail(skb, skb->data_len) ? 0 : -ENOMEM;
ffff8000113a1adc: aa1303e0 mov x0, x19
ffff8000113a1ae0: 94000000 bl 0 <__pskb_pull_tail>
ffff8000113a1ae0: R_AARCH64_CALL26 __pskb_pull_tail
ffff8000113a1ae4: b4000080 cbz x0, ffff8000113a1af4 <skb_checksum_help+0x128>
ffff8000113a1ae8: b9407661 ldr w1, [x19,#116]
ffff8000113a1aec: f9406274 ldr x20, [x19,#192]
ffff8000113a1af0: 17ffffc9 b ffff8000113a1a14 <skb_checksum_help+0x48>
ffff8000113a1af4: 12800160 mov w0, #0xfffffff4 // #-12
ffff8000113a1af8: 17ffffe2 b ffff8000113a1a80 <skb_checksum_help+0xb4>
skb_warn_bad_offload(skb);
ffff8000113a1afc: aa1303e0 mov x0, x19
ffff8000113a1b00: 94000000 bl ffff80001139e37c <__my_cpu_offset>
ffff8000113a1b00: R_AARCH64_CALL26 .text.unlikely+0xa4
return -EINVAL;
ffff8000113a1b04: 128002a0 mov w0, #0xffffffea // #-22
ffff8000113a1b08: 17ffffde b ffff8000113a1a80 <skb_checksum_help+0xb4>
BUG_ON(offset + sizeof(__sum16) > skb_headlen(skb));
ffff8000113a1b0c: d4210000 brk #0x800
BUG_ON(offset >= skb_headlen(skb));
ffff8000113a1b10: d4210000 brk #0x800
ffff8000113a1b14 <dev_get_valid_name>:
{
ffff8000113a1b14: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a1b18: 910003fd mov x29, sp
ffff8000113a1b1c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a1b20: f90013f5 str x21, [sp,#32]
ffff8000113a1b24: aa0003f4 mov x20, x0
ffff8000113a1b28: aa1e03e0 mov x0, x30
ffff8000113a1b2c: aa0103f5 mov x21, x1
ffff8000113a1b30: aa0203f3 mov x19, x2
ffff8000113a1b34: 94000000 bl 0 <_mcount>
ffff8000113a1b34: R_AARCH64_CALL26 _mcount
BUG_ON(!net);
ffff8000113a1b38: b4000514 cbz x20, ffff8000113a1bd8 <dev_get_valid_name+0xc4>
if (!dev_valid_name(name))
ffff8000113a1b3c: aa1303e0 mov x0, x19
ffff8000113a1b40: 94000000 bl ffff8000113a15b0 <dev_valid_name>
ffff8000113a1b40: R_AARCH64_CALL26 dev_valid_name
ffff8000113a1b44: 53001c00 uxtb w0, w0
ffff8000113a1b48: 340003c0 cbz w0, ffff8000113a1bc0 <dev_get_valid_name+0xac>
if (strchr(name, '%'))
ffff8000113a1b4c: aa1303e0 mov x0, x19
ffff8000113a1b50: 528004a1 mov w1, #0x25 // #37
ffff8000113a1b54: 94000000 bl 0 <strchr>
ffff8000113a1b54: R_AARCH64_CALL26 strchr
ffff8000113a1b58: b4000120 cbz x0, ffff8000113a1b7c <dev_get_valid_name+0x68>
return dev_alloc_name_ns(net, dev, name);
ffff8000113a1b5c: aa1403e0 mov x0, x20
ffff8000113a1b60: aa1503e1 mov x1, x21
ffff8000113a1b64: aa1303e2 mov x2, x19
ffff8000113a1b68: 97fffeca bl ffff8000113a1690 <dev_alloc_name_ns>
}
ffff8000113a1b6c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a1b70: f94013f5 ldr x21, [sp,#32]
ffff8000113a1b74: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a1b78: d65f03c0 ret
node_name = netdev_name_node_lookup(net, name);
ffff8000113a1b7c: aa1403e0 mov x0, x20
ffff8000113a1b80: aa1303e1 mov x1, x19
ffff8000113a1b84: 97fff6bb bl ffff80001139f670 <netdev_name_node_lookup>
return node_name ? node_name->dev : NULL;
ffff8000113a1b88: b4000060 cbz x0, ffff8000113a1b94 <dev_get_valid_name+0x80>
else if (__dev_get_by_name(net, name))
ffff8000113a1b8c: f9401000 ldr x0, [x0,#32]
ffff8000113a1b90: b50001c0 cbnz x0, ffff8000113a1bc8 <dev_get_valid_name+0xb4>
else if (dev->name != name)
ffff8000113a1b94: eb15027f cmp x19, x21
ffff8000113a1b98: 540001c0 b.eq ffff8000113a1bd0 <dev_get_valid_name+0xbc>
return __real_strlcpy(p, q, size);
ffff8000113a1b9c: aa1303e1 mov x1, x19
ffff8000113a1ba0: aa1503e0 mov x0, x21
ffff8000113a1ba4: d2800202 mov x2, #0x10 // #16
ffff8000113a1ba8: 94000000 bl 0 <strlcpy>
ffff8000113a1ba8: R_AARCH64_CALL26 strlcpy
return 0;
ffff8000113a1bac: 52800000 mov w0, #0x0 // #0
}
ffff8000113a1bb0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a1bb4: f94013f5 ldr x21, [sp,#32]
ffff8000113a1bb8: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a1bbc: d65f03c0 ret
return -EINVAL;
ffff8000113a1bc0: 128002a0 mov w0, #0xffffffea // #-22
ffff8000113a1bc4: 17ffffea b ffff8000113a1b6c <dev_get_valid_name+0x58>
return -EEXIST;
ffff8000113a1bc8: 12800200 mov w0, #0xffffffef // #-17
ffff8000113a1bcc: 17ffffe8 b ffff8000113a1b6c <dev_get_valid_name+0x58>
return 0;
ffff8000113a1bd0: 52800000 mov w0, #0x0 // #0
ffff8000113a1bd4: 17ffffe6 b ffff8000113a1b6c <dev_get_valid_name+0x58>
BUG_ON(!net);
ffff8000113a1bd8: d4210000 brk #0x800
ffff8000113a1bdc <remove_xps_queue_cpu.isra.105>:
static bool remove_xps_queue_cpu(struct net_device *dev,
ffff8000113a1bdc: a9b97bfd stp x29, x30, [sp,#-112]!
ffff8000113a1be0: 910003fd mov x29, sp
ffff8000113a1be4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a1be8: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a1bec: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a1bf0: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113a1bf4: a90573fb stp x27, x28, [sp,#80]
ffff8000113a1bf8: 13003c1b sxth w27, w0
ffff8000113a1bfc: aa1e03e0 mov x0, x30
ffff8000113a1c00: f90033a2 str x2, [x29,#96]
ffff8000113a1c04: aa0103f5 mov x21, x1
ffff8000113a1c08: 53003c7c uxth w28, w3
ffff8000113a1c0c: 53003c98 uxth w24, w4
ffff8000113a1c10: 94000000 bl 0 <_mcount>
ffff8000113a1c10: R_AARCH64_CALL26 _mcount
int num_tc = dev->num_tc ? : 1;
ffff8000113a1c14: f94033a2 ldr x2, [x29,#96]
ffff8000113a1c18: 3500053b cbnz w27, ffff8000113a1cbc <remove_xps_queue_cpu.isra.105+0xe0>
ffff8000113a1c1c: 2a1b03f9 mov w25, w27
ffff8000113a1c20: 5280003b mov w27, #0x1 // #1
ffff8000113a1c24: 2a1903f9 mov w25, w25
for (tci = cpu * num_tc; num_tc--; tci++) {
ffff8000113a1c28: d2800016 mov x22, #0x0 // #0
ffff8000113a1c2c: 91000739 add x25, x25, #0x1
ffff8000113a1c30: 1b027f7b mul w27, w27, w2
ffff8000113a1c34: 5100071a sub w26, w24, #0x1
ffff8000113a1c38: f90037b9 str x25, [x29,#104]
bool active = false;
ffff8000113a1c3c: 2a1603f7 mov w23, w22
ffff8000113a1c40: 0b160374 add w20, w27, w22
for (i = count, j = offset; i--; j++) {
ffff8000113a1c44: 2a1c03f3 mov w19, w28
ffff8000113a1c48: 2a1a03f9 mov w25, w26
ffff8000113a1c4c: 350000d8 cbnz w24, ffff8000113a1c64 <remove_xps_queue_cpu.isra.105+0x88>
ffff8000113a1c50: 14000019 b ffff8000113a1cb4 <remove_xps_queue_cpu.isra.105+0xd8>
ffff8000113a1c54: 51000739 sub w25, w25, #0x1
ffff8000113a1c58: 3100073f cmn w25, #0x1
ffff8000113a1c5c: 53003e73 uxth w19, w19
ffff8000113a1c60: 540002a0 b.eq ffff8000113a1cb4 <remove_xps_queue_cpu.isra.105+0xd8>
if (!remove_xps_queue(dev_maps, tci, j))
ffff8000113a1c64: 2a1303e2 mov w2, w19
ffff8000113a1c68: aa1503e0 mov x0, x21
ffff8000113a1c6c: 2a1403e1 mov w1, w20
ffff8000113a1c70: 97fff8eb bl ffff8000113a001c <remove_xps_queue>
ffff8000113a1c74: 53001c00 uxtb w0, w0
ffff8000113a1c78: 11000673 add w19, w19, #0x1
ffff8000113a1c7c: 35fffec0 cbnz w0, ffff8000113a1c54 <remove_xps_queue_cpu.isra.105+0x78>
ffff8000113a1c80: 2a597ef7 orr w23, w23, w25, lsr #31
for (tci = cpu * num_tc; num_tc--; tci++) {
ffff8000113a1c84: f94037a0 ldr x0, [x29,#104]
ffff8000113a1c88: 910006d6 add x22, x22, #0x1
ffff8000113a1c8c: eb0002df cmp x22, x0
ffff8000113a1c90: 54fffd81 b.ne ffff8000113a1c40 <remove_xps_queue_cpu.isra.105+0x64>
}
ffff8000113a1c94: 2a1703e0 mov w0, w23
ffff8000113a1c98: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a1c9c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a1ca0: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a1ca4: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a1ca8: a94573fb ldp x27, x28, [sp,#80]
ffff8000113a1cac: a8c77bfd ldp x29, x30, [sp],#112
ffff8000113a1cb0: d65f03c0 ret
if (!remove_xps_queue(dev_maps, tci, j))
ffff8000113a1cb4: 52800037 mov w23, #0x1 // #1
ffff8000113a1cb8: 17fffff3 b ffff8000113a1c84 <remove_xps_queue_cpu.isra.105+0xa8>
ffff8000113a1cbc: 51000779 sub w25, w27, #0x1
ffff8000113a1cc0: 17ffffd9 b ffff8000113a1c24 <remove_xps_queue_cpu.isra.105+0x48>
ffff8000113a1cc4 <netdev_state_change>:
{
ffff8000113a1cc4: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a1cc8: 910003fd mov x29, sp
ffff8000113a1ccc: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a1cd0: aa0003f4 mov x20, x0
ffff8000113a1cd4: aa1e03e0 mov x0, x30
ffff8000113a1cd8: 94000000 bl 0 <_mcount>
ffff8000113a1cd8: R_AARCH64_CALL26 _mcount
ffff8000113a1cdc: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff8000113a1cdc: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a1ce0: f9400261 ldr x1, [x19]
ffff8000113a1ce0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
if (dev->flags & IFF_UP) {
ffff8000113a1ce4: b9422a80 ldr w0, [x20,#552]
{
ffff8000113a1ce8: f9001fa1 str x1, [x29,#56]
if (dev->flags & IFF_UP) {
ffff8000113a1cec: 36000180 tbz w0, #0, ffff8000113a1d1c <netdev_state_change+0x58>
struct netdev_notifier_change_info change_info = {
ffff8000113a1cf0: a9027fbf stp xzr, xzr, [x29,#32]
call_netdevice_notifiers_info(NETDEV_CHANGE,
ffff8000113a1cf4: 910083a1 add x1, x29, #0x20
ffff8000113a1cf8: d2800080 mov x0, #0x4 // #4
struct netdev_notifier_change_info change_info = {
ffff8000113a1cfc: f9001bbf str xzr, [x29,#48]
ffff8000113a1d00: f90013b4 str x20, [x29,#32]
call_netdevice_notifiers_info(NETDEV_CHANGE,
ffff8000113a1d04: 97fff8fd bl ffff8000113a00f8 <call_netdevice_notifiers_info>
rtmsg_ifinfo(RTM_NEWLINK, dev, 0, GFP_KERNEL);
ffff8000113a1d08: 52800200 mov w0, #0x10 // #16
ffff8000113a1d0c: aa1403e1 mov x1, x20
ffff8000113a1d10: 52800002 mov w2, #0x0 // #0
ffff8000113a1d14: 52819803 mov w3, #0xcc0 // #3264
ffff8000113a1d18: 94000000 bl 0 <rtmsg_ifinfo>
ffff8000113a1d18: R_AARCH64_CALL26 rtmsg_ifinfo
}
ffff8000113a1d1c: f9401fa1 ldr x1, [x29,#56]
ffff8000113a1d20: f9400260 ldr x0, [x19]
ffff8000113a1d20: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a1d24: eb00003f cmp x1, x0
ffff8000113a1d28: 54000081 b.ne ffff8000113a1d38 <netdev_state_change+0x74>
ffff8000113a1d2c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a1d30: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a1d34: d65f03c0 ret
ffff8000113a1d38: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a1d38: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a1d3c <dev_set_mac_address>:
{
ffff8000113a1d3c: a9b97bfd stp x29, x30, [sp,#-112]!
ffff8000113a1d40: 910003fd mov x29, sp
ffff8000113a1d44: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a1d48: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a1d4c: f9001bf7 str x23, [sp,#48]
ffff8000113a1d50: aa0003f3 mov x19, x0
ffff8000113a1d54: aa1e03e0 mov x0, x30
ffff8000113a1d58: aa0103f5 mov x21, x1
ffff8000113a1d5c: f90027a2 str x2, [x29,#72]
ffff8000113a1d60: 90000016 adrp x22, 0 <__stack_chk_guard>
ffff8000113a1d60: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a1d64: 94000000 bl 0 <_mcount>
ffff8000113a1d64: R_AARCH64_CALL26 _mcount
const struct net_device_ops *ops = dev->netdev_ops;
ffff8000113a1d68: f940fa77 ldr x23, [x19,#496]
{
ffff8000113a1d6c: f94002c1 ldr x1, [x22]
ffff8000113a1d6c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
if (!ops->ndo_set_mac_address)
ffff8000113a1d70: f94026e0 ldr x0, [x23,#72]
{
ffff8000113a1d74: f90037a1 str x1, [x29,#104]
if (!ops->ndo_set_mac_address)
ffff8000113a1d78: f94027a2 ldr x2, [x29,#72]
ffff8000113a1d7c: b4000560 cbz x0, ffff8000113a1e28 <dev_set_mac_address+0xec>
if (sa->sa_family != dev->type)
ffff8000113a1d80: 794002a1 ldrh w1, [x21]
ffff8000113a1d84: 79448a60 ldrh w0, [x19,#580]
ffff8000113a1d88: 6b00003f cmp w1, w0
ffff8000113a1d8c: 54000461 b.ne ffff8000113a1e18 <dev_set_mac_address+0xdc>
ffff8000113a1d90: f9402260 ldr x0, [x19,#64]
if (!netif_device_present(dev))
ffff8000113a1d94: 36080460 tbz w0, #1, ffff8000113a1e20 <dev_set_mac_address+0xe4>
err = dev_pre_changeaddr_notify(dev, sa->sa_data, extack);
ffff8000113a1d98: aa1303e0 mov x0, x19
ffff8000113a1d9c: 91000aa1 add x1, x21, #0x2
ffff8000113a1da0: 94000000 bl ffff8000113a0380 <dev_pre_changeaddr_notify>
ffff8000113a1da0: R_AARCH64_CALL26 dev_pre_changeaddr_notify
ffff8000113a1da4: 2a0003f4 mov w20, w0
if (err)
ffff8000113a1da8: 34000160 cbz w0, ffff8000113a1dd4 <dev_set_mac_address+0x98>
}
ffff8000113a1dac: f94037a2 ldr x2, [x29,#104]
ffff8000113a1db0: f94002c1 ldr x1, [x22]
ffff8000113a1db0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a1db4: 2a1403e0 mov w0, w20
ffff8000113a1db8: eb01005f cmp x2, x1
ffff8000113a1dbc: 540003a1 b.ne ffff8000113a1e30 <dev_set_mac_address+0xf4>
ffff8000113a1dc0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a1dc4: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a1dc8: f9401bf7 ldr x23, [sp,#48]
ffff8000113a1dcc: a8c77bfd ldp x29, x30, [sp],#112
ffff8000113a1dd0: d65f03c0 ret
err = ops->ndo_set_mac_address(dev, sa);
ffff8000113a1dd4: f94026e2 ldr x2, [x23,#72]
ffff8000113a1dd8: aa1303e0 mov x0, x19
ffff8000113a1ddc: aa1503e1 mov x1, x21
ffff8000113a1de0: d63f0040 blr x2
ffff8000113a1de4: 2a0003f4 mov w20, w0
if (err)
ffff8000113a1de8: 35fffe20 cbnz w0, ffff8000113a1dac <dev_set_mac_address+0x70>
dev->addr_assign_type = NET_ADDR_SET;
ffff8000113a1dec: 52800060 mov w0, #0x3 // #3
return call_netdevice_notifiers_info(val, &info);
ffff8000113a1df0: 910163a1 add x1, x29, #0x58
dev->addr_assign_type = NET_ADDR_SET;
ffff8000113a1df4: 3909ba60 strb w0, [x19,#622]
return call_netdevice_notifiers_info(val, &info);
ffff8000113a1df8: d2800100 mov x0, #0x8 // #8
struct netdev_notifier_info info = {
ffff8000113a1dfc: f9002fb3 str x19, [x29,#88]
ffff8000113a1e00: f90033bf str xzr, [x29,#96]
return call_netdevice_notifiers_info(val, &info);
ffff8000113a1e04: 97fff8bd bl ffff8000113a00f8 <call_netdevice_notifiers_info>
add_device_randomness(dev->dev_addr, dev->addr_len);
ffff8000113a1e08: f9418e60 ldr x0, [x19,#792]
ffff8000113a1e0c: 3949be61 ldrb w1, [x19,#623]
ffff8000113a1e10: 94000000 bl 0 <add_device_randomness>
ffff8000113a1e10: R_AARCH64_CALL26 add_device_randomness
ffff8000113a1e14: 17ffffe6 b ffff8000113a1dac <dev_set_mac_address+0x70>
return -EINVAL;
ffff8000113a1e18: 128002b4 mov w20, #0xffffffea // #-22
ffff8000113a1e1c: 17ffffe4 b ffff8000113a1dac <dev_set_mac_address+0x70>
return -ENODEV;
ffff8000113a1e20: 12800254 mov w20, #0xffffffed // #-19
ffff8000113a1e24: 17ffffe2 b ffff8000113a1dac <dev_set_mac_address+0x70>
return -EOPNOTSUPP;
ffff8000113a1e28: 12800bd4 mov w20, #0xffffffa1 // #-95
ffff8000113a1e2c: 17ffffe0 b ffff8000113a1dac <dev_set_mac_address+0x70>
}
ffff8000113a1e30: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a1e30: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a1e34 <__unregister_netdevice_notifier_net>:
{
ffff8000113a1e34: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a1e38: 910003fd mov x29, sp
ffff8000113a1e3c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a1e40: f90013f5 str x21, [sp,#32]
ffff8000113a1e44: aa0003f4 mov x20, x0
ffff8000113a1e48: aa1e03e0 mov x0, x30
ffff8000113a1e4c: aa0103f5 mov x21, x1
ffff8000113a1e50: 94000000 bl 0 <_mcount>
ffff8000113a1e50: R_AARCH64_CALL26 _mcount
err = raw_notifier_chain_unregister(&net->netdev_chain, nb);
ffff8000113a1e54: 9104e280 add x0, x20, #0x138
ffff8000113a1e58: aa1503e1 mov x1, x21
ffff8000113a1e5c: 94000000 bl 0 <raw_notifier_chain_unregister>
ffff8000113a1e5c: R_AARCH64_CALL26 raw_notifier_chain_unregister
if (err)
ffff8000113a1e60: 350001a0 cbnz w0, ffff8000113a1e94 <__unregister_netdevice_notifier_net+0x60>
for_each_netdev(net, dev)
ffff8000113a1e64: f8490e93 ldr x19, [x20,#144]!
ffff8000113a1e68: eb13029f cmp x20, x19
ffff8000113a1e6c: d1012273 sub x19, x19, #0x48
ffff8000113a1e70: 54000100 b.eq ffff8000113a1e90 <__unregister_netdevice_notifier_net+0x5c>
call_netdevice_unregister_notifiers(nb, dev);
ffff8000113a1e74: aa1303e1 mov x1, x19
ffff8000113a1e78: aa1503e0 mov x0, x21
ffff8000113a1e7c: 97fff1b1 bl ffff80001139e540 <call_netdevice_unregister_notifiers>
for_each_netdev(net, dev)
ffff8000113a1e80: f9402673 ldr x19, [x19,#72]
ffff8000113a1e84: eb13029f cmp x20, x19
ffff8000113a1e88: d1012273 sub x19, x19, #0x48
ffff8000113a1e8c: 54ffff41 b.ne ffff8000113a1e74 <__unregister_netdevice_notifier_net+0x40>
ffff8000113a1e90: 52800000 mov w0, #0x0 // #0
}
ffff8000113a1e94: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a1e98: f94013f5 ldr x21, [sp,#32]
ffff8000113a1e9c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a1ea0: d65f03c0 ret
ffff8000113a1ea4 <unregister_netdevice_notifier_net>:
{
ffff8000113a1ea4: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a1ea8: 910003fd mov x29, sp
ffff8000113a1eac: f9000bf3 str x19, [sp,#16]
ffff8000113a1eb0: aa0003f3 mov x19, x0
ffff8000113a1eb4: aa1e03e0 mov x0, x30
ffff8000113a1eb8: f90017a1 str x1, [x29,#40]
ffff8000113a1ebc: 94000000 bl 0 <_mcount>
ffff8000113a1ebc: R_AARCH64_CALL26 _mcount
rtnl_lock();
ffff8000113a1ec0: 94000000 bl 0 <rtnl_lock>
ffff8000113a1ec0: R_AARCH64_CALL26 rtnl_lock
err = __unregister_netdevice_notifier_net(net, nb);
ffff8000113a1ec4: f94017a1 ldr x1, [x29,#40]
ffff8000113a1ec8: aa1303e0 mov x0, x19
ffff8000113a1ecc: 97ffffda bl ffff8000113a1e34 <__unregister_netdevice_notifier_net>
rtnl_unlock();
ffff8000113a1ed0: f90017a0 str x0, [x29,#40]
ffff8000113a1ed4: 94000000 bl 0 <rtnl_unlock>
ffff8000113a1ed4: R_AARCH64_CALL26 rtnl_unlock
}
ffff8000113a1ed8: f94017a0 ldr x0, [x29,#40]
ffff8000113a1edc: f9400bf3 ldr x19, [sp,#16]
ffff8000113a1ee0: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a1ee4: d65f03c0 ret
ffff8000113a1ee8 <netdev_rx_csum_fault>:
{
ffff8000113a1ee8: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a1eec: 910003fd mov x29, sp
ffff8000113a1ef0: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a1ef4: aa0003f3 mov x19, x0
ffff8000113a1ef8: aa1e03e0 mov x0, x30
ffff8000113a1efc: aa0103f4 mov x20, x1
ffff8000113a1f00: 94000000 bl 0 <_mcount>
ffff8000113a1f00: R_AARCH64_CALL26 _mcount
if (net_ratelimit()) {
ffff8000113a1f04: 94000000 bl 0 <net_ratelimit>
ffff8000113a1f04: R_AARCH64_CALL26 net_ratelimit
ffff8000113a1f08: 35000080 cbnz w0, ffff8000113a1f18 <netdev_rx_csum_fault+0x30>
}
ffff8000113a1f0c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a1f10: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a1f14: d65f03c0 ret
pr_err("%s: hw csum failure\n", dev ? dev->name : "<unknown>");
ffff8000113a1f18: b4000193 cbz x19, ffff8000113a1f48 <netdev_rx_csum_fault+0x60>
ffff8000113a1f1c: aa1303e1 mov x1, x19
ffff8000113a1f20: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a1f20: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x210
ffff8000113a1f24: 91000000 add x0, x0, #0x0
ffff8000113a1f24: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x210
ffff8000113a1f28: 94000000 bl 0 <printk>
ffff8000113a1f28: R_AARCH64_CALL26 printk
skb_dump(KERN_ERR, skb, true);
ffff8000113a1f2c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a1f2c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x1e8
ffff8000113a1f30: 91000000 add x0, x0, #0x0
ffff8000113a1f30: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x1e8
ffff8000113a1f34: aa1403e1 mov x1, x20
ffff8000113a1f38: 52800022 mov w2, #0x1 // #1
ffff8000113a1f3c: 94000000 bl 0 <skb_dump>
ffff8000113a1f3c: R_AARCH64_CALL26 skb_dump
dump_stack();
ffff8000113a1f40: 94000000 bl 0 <dump_stack>
ffff8000113a1f40: R_AARCH64_CALL26 dump_stack
ffff8000113a1f44: 17fffff2 b ffff8000113a1f0c <netdev_rx_csum_fault+0x24>
pr_err("%s: hw csum failure\n", dev ? dev->name : "<unknown>");
ffff8000113a1f48: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a1f48: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x200
ffff8000113a1f4c: 91000021 add x1, x1, #0x0
ffff8000113a1f4c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x200
ffff8000113a1f50: 17fffff4 b ffff8000113a1f20 <netdev_rx_csum_fault+0x38>
ffff8000113a1f54 <__skb_gro_checksum_complete>:
{
ffff8000113a1f54: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a1f58: 910003fd mov x29, sp
ffff8000113a1f5c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a1f60: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a1f64: aa0003f4 mov x20, x0
return NAPI_GRO_CB(skb)->data_offset;
ffff8000113a1f68: 9100a013 add x19, x0, #0x28
ffff8000113a1f6c: aa1e03e0 mov x0, x30
ffff8000113a1f70: 94000000 bl 0 <_mcount>
ffff8000113a1f70: R_AARCH64_CALL26 _mcount
ffff8000113a1f74: b9400e61 ldr w1, [x19,#12]
return skb->len - NAPI_GRO_CB(skb)->data_offset;
ffff8000113a1f78: b9407282 ldr w2, [x20,#112]
wsum = skb_checksum(skb, skb_gro_offset(skb), skb_gro_len(skb), 0);
ffff8000113a1f7c: aa1403e0 mov x0, x20
ffff8000113a1f80: 4b010042 sub w2, w2, w1
ffff8000113a1f84: 52800003 mov w3, #0x0 // #0
ffff8000113a1f88: 94000000 bl 0 <skb_checksum>
ffff8000113a1f88: R_AARCH64_CALL26 skb_checksum
#ifndef HAVE_ARCH_CSUM_ADD
static inline __wsum csum_add(__wsum csum, __wsum addend)
{
u32 res = (__force u32)csum;
res += (__force u32)addend;
ffff8000113a1f8c: b9402676 ldr w22, [x19,#36]
ffff8000113a1f90: 2a0003f5 mov w21, w0
ffff8000113a1f94: 0b160016 add w22, w0, w22
return (__force __wsum)(res + (res < (__force u32)addend));
ffff8000113a1f98: 6b16001f cmp w0, w22
ffff8000113a1f9c: 1a9696d6 cinc w22, w22, hi
sum += (sum >> 16) | (sum << 16);
ffff8000113a1fa0: 139642c0 ror w0, w22, #16
ffff8000113a1fa4: 0b160016 add w22, w0, w22
return ~(__force __sum16)(sum >> 16);
ffff8000113a1fa8: 2a7643f6 mvn w22, w22, lsr #16
ffff8000113a1fac: 53003ed6 uxth w22, w22
if (likely(!sum)) {
ffff8000113a1fb0: 350000b6 cbnz w22, ffff8000113a1fc4 <__skb_gro_checksum_complete+0x70>
if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE) &&
ffff8000113a1fb4: 39420280 ldrb w0, [x20,#128]
ffff8000113a1fb8: d3451800 ubfx x0, x0, #5, #2
ffff8000113a1fbc: 7100081f cmp w0, #0x2
ffff8000113a1fc0: 54000140 b.eq ffff8000113a1fe8 <__skb_gro_checksum_complete+0x94>
NAPI_GRO_CB(skb)->csum_valid = 1;
ffff8000113a1fc4: 39408a60 ldrb w0, [x19,#34]
NAPI_GRO_CB(skb)->csum = wsum;
ffff8000113a1fc8: b9002675 str w21, [x19,#36]
NAPI_GRO_CB(skb)->csum_valid = 1;
ffff8000113a1fcc: 321e0000 orr w0, w0, #0x4
ffff8000113a1fd0: 39008a60 strb w0, [x19,#34]
}
ffff8000113a1fd4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a1fd8: 2a1603e0 mov w0, w22
ffff8000113a1fdc: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a1fe0: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a1fe4: d65f03c0 ret
!skb->csum_complete_sw)
ffff8000113a1fe8: 39420a80 ldrb w0, [x20,#130]
if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE) &&
ffff8000113a1fec: 370ffec0 tbnz w0, #1, ffff8000113a1fc4 <__skb_gro_checksum_complete+0x70>
netdev_rx_csum_fault(skb->dev, skb);
ffff8000113a1ff0: f9400a80 ldr x0, [x20,#16]
ffff8000113a1ff4: aa1403e1 mov x1, x20
ffff8000113a1ff8: 94000000 bl ffff8000113a1ee8 <netdev_rx_csum_fault>
ffff8000113a1ff8: R_AARCH64_CALL26 netdev_rx_csum_fault
ffff8000113a1ffc: 17fffff2 b ffff8000113a1fc4 <__skb_gro_checksum_complete+0x70>
ffff8000113a2000 <napi_get_frags>:
{
ffff8000113a2000: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a2004: 910003fd mov x29, sp
ffff8000113a2008: f9000bf3 str x19, [sp,#16]
ffff8000113a200c: aa0003f3 mov x19, x0
ffff8000113a2010: aa1e03e0 mov x0, x30
ffff8000113a2014: 94000000 bl 0 <_mcount>
ffff8000113a2014: R_AARCH64_CALL26 _mcount
struct sk_buff *skb = napi->skb;
ffff8000113a2018: f9408260 ldr x0, [x19,#256]
if (!skb) {
ffff8000113a201c: b4000080 cbz x0, ffff8000113a202c <napi_get_frags+0x2c>
}
ffff8000113a2020: f9400bf3 ldr x19, [sp,#16]
ffff8000113a2024: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a2028: d65f03c0 ret
return __napi_alloc_skb(napi, length, GFP_ATOMIC);
ffff8000113a202c: aa1303e0 mov x0, x19
ffff8000113a2030: 52802601 mov w1, #0x130 // #304
ffff8000113a2034: 52814402 mov w2, #0xa20 // #2592
ffff8000113a2038: 94000000 bl 0 <__napi_alloc_skb>
ffff8000113a2038: R_AARCH64_CALL26 __napi_alloc_skb
if (skb) {
ffff8000113a203c: b4ffff20 cbz x0, ffff8000113a2020 <napi_get_frags+0x20>
struct sk_buff *napi_get_frags(struct napi_struct *napi)
ffff8000113a2040: b9418261 ldr w1, [x19,#384]
napi->skb = skb;
ffff8000113a2044: f9008260 str x0, [x19,#256]
/* used in the NIC receive handler to mark the skb */
static inline void skb_mark_napi_id(struct sk_buff *skb,
struct napi_struct *napi)
{
#ifdef CONFIG_NET_RX_BUSY_POLL
skb->napi_id = napi->napi_id;
ffff8000113a2048: b9009c01 str w1, [x0,#156]
ffff8000113a204c: 17fffff5 b ffff8000113a2020 <napi_get_frags+0x20>
ffff8000113a2050 <__dev_forward_skb>:
{
ffff8000113a2050: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a2054: 910003fd mov x29, sp
ffff8000113a2058: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a205c: aa0003f4 mov x20, x0
ffff8000113a2060: aa0103f3 mov x19, x1
ffff8000113a2064: aa1e03e0 mov x0, x30
ffff8000113a2068: 94000000 bl 0 <_mcount>
ffff8000113a2068: R_AARCH64_CALL26 _mcount
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113a206c: b40000d3 cbz x19, ffff8000113a2084 <__dev_forward_skb+0x34>
return skb->head + skb->end;
ffff8000113a2070: f9406261 ldr x1, [x19,#192]
ffff8000113a2074: b940be60 ldr w0, [x19,#188]
ffff8000113a2078: 8b000020 add x0, x1, x0
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113a207c: 39400c01 ldrb w1, [x0,#3]
ffff8000113a2080: 37180341 tbnz w1, #3, ffff8000113a20e8 <__dev_forward_skb+0x98>
unlikely(!is_skb_forwardable(dev, skb))) {
ffff8000113a2084: aa1403e0 mov x0, x20
ffff8000113a2088: aa1303e1 mov x1, x19
ffff8000113a208c: 94000000 bl ffff8000113a1540 <is_skb_forwardable>
ffff8000113a208c: R_AARCH64_CALL26 is_skb_forwardable
ffff8000113a2090: 53001c00 uxtb w0, w0
if (skb_orphan_frags(skb, GFP_ATOMIC) ||
ffff8000113a2094: 34000420 cbz w0, ffff8000113a2118 <__dev_forward_skb+0xc8>
skb_scrub_packet(skb, true);
ffff8000113a2098: aa1303e0 mov x0, x19
ffff8000113a209c: 52800021 mov w1, #0x1 // #1
ffff8000113a20a0: 94000000 bl 0 <skb_scrub_packet>
ffff8000113a20a0: R_AARCH64_CALL26 skb_scrub_packet
skb->protocol = eth_type_trans(skb, dev);
ffff8000113a20a4: aa1403e1 mov x1, x20
ffff8000113a20a8: aa1303e0 mov x0, x19
skb->priority = 0;
ffff8000113a20ac: b9008e7f str wzr, [x19,#140]
ffff8000113a20b0: 94000000 bl 0 <eth_type_trans>
ffff8000113a20b0: R_AARCH64_CALL26 eth_type_trans
if (skb->ip_summed == CHECKSUM_COMPLETE)
ffff8000113a20b4: 39420262 ldrb w2, [x19,#128]
ffff8000113a20b8: 79016260 strh w0, [x19,#176]
ffff8000113a20bc: d3451841 ubfx x1, x2, #5, #2
ffff8000113a20c0: 7100083f cmp w1, #0x2
#define _LINUX_IF_ETHER_H
#include <linux/skbuff.h>
#include <uapi/linux/if_ether.h>
static inline struct ethhdr *eth_hdr(const struct sk_buff *skb)
ffff8000113a20c4: 79416e60 ldrh w0, [x19,#182]
ffff8000113a20c8: f9406263 ldr x3, [x19,#192]
ffff8000113a20cc: 540004e0 b.eq ffff8000113a2168 <__dev_forward_skb+0x118>
else if (skb->ip_summed == CHECKSUM_PARTIAL &&
ffff8000113a20d0: 71000c3f cmp w1, #0x3
return 0;
ffff8000113a20d4: 52800000 mov w0, #0x0 // #0
ffff8000113a20d8: 54000340 b.eq ffff8000113a2140 <__dev_forward_skb+0xf0>
}
ffff8000113a20dc: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a20e0: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a20e4: d65f03c0 ret
return is_zcopy ? skb_uarg(skb) : NULL;
ffff8000113a20e8: f9401400 ldr x0, [x0,#40]
if (likely(!skb_zcopy(skb)))
ffff8000113a20ec: b4fffcc0 cbz x0, ffff8000113a2084 <__dev_forward_skb+0x34>
if (!skb_zcopy_is_nouarg(skb) &&
ffff8000113a20f0: 370000c0 tbnz w0, #0, ffff8000113a2108 <__dev_forward_skb+0xb8>
ffff8000113a20f4: f9400001 ldr x1, [x0]
ffff8000113a20f8: 90000000 adrp x0, 0 <sock_zerocopy_callback>
ffff8000113a20f8: R_AARCH64_ADR_PREL_PG_HI21 sock_zerocopy_callback
ffff8000113a20fc: 91000000 add x0, x0, #0x0
ffff8000113a20fc: R_AARCH64_ADD_ABS_LO12_NC sock_zerocopy_callback
ffff8000113a2100: eb00003f cmp x1, x0
ffff8000113a2104: 54fffc00 b.eq ffff8000113a2084 <__dev_forward_skb+0x34>
return skb_copy_ubufs(skb, gfp_mask);
ffff8000113a2108: aa1303e0 mov x0, x19
ffff8000113a210c: 52814401 mov w1, #0xa20 // #2592
ffff8000113a2110: 94000000 bl 0 <skb_copy_ubufs>
ffff8000113a2110: R_AARCH64_CALL26 skb_copy_ubufs
if (skb_orphan_frags(skb, GFP_ATOMIC) ||
ffff8000113a2114: 34fffb80 cbz w0, ffff8000113a2084 <__dev_forward_skb+0x34>
ATOMIC64_OPS(add, add, I)
ffff8000113a2118: 91070282 add x2, x20, #0x1c0
ffff8000113a211c: f9800051 prfm pstl1strm, [x2]
ffff8000113a2120: c85f7c40 ldxr x0, [x2]
ffff8000113a2124: 91000400 add x0, x0, #0x1
ffff8000113a2128: c8017c40 stxr w1, x0, [x2]
ffff8000113a212c: 35ffffa1 cbnz w1, ffff8000113a2120 <__dev_forward_skb+0xd0>
kfree_skb(skb);
ffff8000113a2130: aa1303e0 mov x0, x19
ffff8000113a2134: 94000000 bl 0 <kfree_skb>
ffff8000113a2134: R_AARCH64_CALL26 kfree_skb
return NET_RX_DROP;
ffff8000113a2138: 52800020 mov w0, #0x1 // #1
ffff8000113a213c: 17ffffe8 b ffff8000113a20dc <__dev_forward_skb+0x8c>
return skb->csum_start - skb_headroom(skb);
ffff8000113a2140: 79411264 ldrh w4, [x19,#136]
return skb->data - skb->head;
ffff8000113a2144: f9406661 ldr x1, [x19,#200]
return skb->csum_start - skb_headroom(skb);
ffff8000113a2148: 4b010081 sub w1, w4, w1
else if (skb->ip_summed == CHECKSUM_PARTIAL &&
ffff8000113a214c: 2b03003f cmn w1, w3
ffff8000113a2150: 54fffc65 b.pl ffff8000113a20dc <__dev_forward_skb+0x8c>
skb->ip_summed = CHECKSUM_NONE;
ffff8000113a2154: 12197442 and w2, w2, #0xffffff9f
ffff8000113a2158: 39020262 strb w2, [x19,#128]
ffff8000113a215c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a2160: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a2164: d65f03c0 ret
skb->csum = csum_block_sub(skb->csum,
ffff8000113a2168: 528001c1 mov w1, #0xe // #14
ffff8000113a216c: 8b202060 add x0, x3, w0, uxth
ffff8000113a2170: 52800002 mov w2, #0x0 // #0
ffff8000113a2174: b9408a74 ldr w20, [x19,#136]
ffff8000113a2178: 94000000 bl 0 <csum_partial>
ffff8000113a2178: R_AARCH64_CALL26 csum_partial
}
static inline __wsum
csum_block_sub(__wsum csum, __wsum csum2, int offset)
{
return csum_block_add(csum, ~csum2, offset);
ffff8000113a217c: 2a2003e0 mvn w0, w0
res += (__force u32)addend;
ffff8000113a2180: 0b140001 add w1, w0, w20
return (__force __wsum)(res + (res < (__force u32)addend));
ffff8000113a2184: 6b01001f cmp w0, w1
ffff8000113a2188: 1a819421 cinc w1, w1, hi
ffff8000113a218c: b9008a61 str w1, [x19,#136]
return 0;
ffff8000113a2190: 52800000 mov w0, #0x0 // #0
ffff8000113a2194: 17ffffd2 b ffff8000113a20dc <__dev_forward_skb+0x8c>
ffff8000113a2198 <netdev_create_hash>:
{
ffff8000113a2198: a9bf7bfd stp x29, x30, [sp,#-16]!
ffff8000113a219c: 910003fd mov x29, sp
ffff8000113a21a0: aa1e03e0 mov x0, x30
ffff8000113a21a4: 94000000 bl 0 <_mcount>
ffff8000113a21a4: R_AARCH64_CALL26 _mcount
ffff8000113a21a8: 90000000 adrp x0, 0 <kmalloc_caches>
ffff8000113a21a8: R_AARCH64_ADR_PREL_PG_HI21 kmalloc_caches+0x58
ffff8000113a21ac: f9400000 ldr x0, [x0]
ffff8000113a21ac: R_AARCH64_LDST64_ABS_LO12_NC kmalloc_caches+0x58
ffff8000113a21b0: 52819801 mov w1, #0xcc0 // #3264
ffff8000113a21b4: d2810002 mov x2, #0x800 // #2048
ffff8000113a21b8: 94000000 bl 0 <kmem_cache_alloc_trace>
ffff8000113a21b8: R_AARCH64_CALL26 kmem_cache_alloc_trace
if (hash != NULL)
ffff8000113a21bc: d2800001 mov x1, #0x0 // #0
ffff8000113a21c0: b40000a0 cbz x0, ffff8000113a21d4 <netdev_create_hash+0x3c>
INIT_HLIST_HEAD(&hash[i]);
ffff8000113a21c4: f821681f str xzr, [x0,x1]
ffff8000113a21c8: 91002021 add x1, x1, #0x8
for (i = 0; i < NETDEV_HASHENTRIES; i++)
ffff8000113a21cc: f120003f cmp x1, #0x800
ffff8000113a21d0: 54ffffa1 b.ne ffff8000113a21c4 <netdev_create_hash+0x2c>
}
ffff8000113a21d4: a8c17bfd ldp x29, x30, [sp],#16
ffff8000113a21d8: d65f03c0 ret
ffff8000113a21dc <netdev_init>:
{
ffff8000113a21dc: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a21e0: 910003fd mov x29, sp
ffff8000113a21e4: f9000bf3 str x19, [sp,#16]
ffff8000113a21e8: aa0003f3 mov x19, x0
ffff8000113a21ec: aa1e03e0 mov x0, x30
ffff8000113a21f0: 94000000 bl 0 <_mcount>
ffff8000113a21f0: R_AARCH64_CALL26 _mcount
if (net != &init_net)
ffff8000113a21f4: 90000000 adrp x0, 0 <init_net>
ffff8000113a21f4: R_AARCH64_ADR_PREL_PG_HI21 init_net
ffff8000113a21f8: 91000000 add x0, x0, #0x0
ffff8000113a21f8: R_AARCH64_ADD_ABS_LO12_NC init_net
ffff8000113a21fc: eb00027f cmp x19, x0
ffff8000113a2200: 54000080 b.eq ffff8000113a2210 <netdev_init+0x34>
INIT_LIST_HEAD(&net->dev_base_head);
ffff8000113a2204: 91024260 add x0, x19, #0x90
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a2208: f9004a60 str x0, [x19,#144]
list->prev = list;
ffff8000113a220c: f9004e60 str x0, [x19,#152]
net->dev_name_head = netdev_create_hash();
ffff8000113a2210: 97ffffe2 bl ffff8000113a2198 <netdev_create_hash>
ffff8000113a2214: f9009660 str x0, [x19,#296]
if (net->dev_name_head == NULL)
ffff8000113a2218: b4000120 cbz x0, ffff8000113a223c <netdev_init+0x60>
net->dev_index_head = netdev_create_hash();
ffff8000113a221c: 97ffffdf bl ffff8000113a2198 <netdev_create_hash>
ffff8000113a2220: f9009a60 str x0, [x19,#304]
if (net->dev_index_head == NULL)
ffff8000113a2224: b4000100 cbz x0, ffff8000113a2244 <netdev_init+0x68>
RAW_INIT_NOTIFIER_HEAD(&net->netdev_chain);
ffff8000113a2228: f9009e7f str xzr, [x19,#312]
return 0;
ffff8000113a222c: 52800000 mov w0, #0x0 // #0
}
ffff8000113a2230: f9400bf3 ldr x19, [sp,#16]
ffff8000113a2234: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a2238: d65f03c0 ret
return -ENOMEM;
ffff8000113a223c: 12800160 mov w0, #0xfffffff4 // #-12
ffff8000113a2240: 17fffffc b ffff8000113a2230 <netdev_init+0x54>
kfree(net->dev_name_head);
ffff8000113a2244: f9409660 ldr x0, [x19,#296]
ffff8000113a2248: 94000000 bl 0 <kfree>
ffff8000113a2248: R_AARCH64_CALL26 kfree
return -ENOMEM;
ffff8000113a224c: 12800160 mov w0, #0xfffffff4 // #-12
ffff8000113a2250: 17fffff8 b ffff8000113a2230 <netdev_init+0x54>
ffff8000113a2254 <__netdev_walk_all_lower_dev.constprop.156>:
static int __netdev_walk_all_lower_dev(struct net_device *dev,
ffff8000113a2254: a9b27bfd stp x29, x30, [sp,#-224]!
ffff8000113a2258: 910003fd mov x29, sp
ffff8000113a225c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a2260: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a2264: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a2268: aa0003f6 mov x22, x0
ffff8000113a226c: aa1e03e0 mov x0, x30
ffff8000113a2270: 94000000 bl 0 <_mcount>
ffff8000113a2270: R_AARCH64_CALL26 _mcount
ffff8000113a2274: 90000018 adrp x24, 0 <__stack_chk_guard>
ffff8000113a2274: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a2278: f9400300 ldr x0, [x24]
ffff8000113a2278: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
iter = &dev->adj_list.lower;
ffff8000113a227c: 9102e2d3 add x19, x22, #0xb8
static int __netdev_walk_all_lower_dev(struct net_device *dev,
ffff8000113a2280: f9006fa0 str x0, [x29,#216]
iter = &dev->adj_list.lower;
ffff8000113a2284: aa1303e3 mov x3, x19
now = dev;
ffff8000113a2288: aa1603f4 mov x20, x22
int ret, cur = 0;
ffff8000113a228c: 52800015 mov w21, #0x0 // #0
niter = iter_stack[cur];
ffff8000113a2290: 910243b7 add x23, x29, #0x90
lower = list_entry((*iter)->next, struct netdev_adjacent, list);
ffff8000113a2294: f9400261 ldr x1, [x19]
if (&lower->list == &dev->adj_list.lower)
ffff8000113a2298: eb03003f cmp x1, x3
ffff8000113a229c: aa0103f3 mov x19, x1
ffff8000113a22a0: 540002c0 b.eq ffff8000113a22f8 <__netdev_walk_all_lower_dev.constprop.156+0xa4>
return lower->dev;
ffff8000113a22a4: f85e8022 ldur x2, [x1,#-24]
*ignore = lower->ignore;
ffff8000113a22a8: 385f1021 ldurb w1, [x1,#-15]
if (!ldev)
ffff8000113a22ac: b4000262 cbz x2, ffff8000113a22f8 <__netdev_walk_all_lower_dev.constprop.156+0xa4>
if (ignore)
ffff8000113a22b0: 35ffff21 cbnz w1, ffff8000113a2294 <__netdev_walk_all_lower_dev.constprop.156+0x40>
dev_stack[cur] = now;
ffff8000113a22b4: 910123a0 add x0, x29, #0x48
ffff8000113a22b8: f835d814 str x20, [x0,w21,sxtw #3]
iter_stack[cur++] = iter;
ffff8000113a22bc: f835daf3 str x19, [x23,w21,sxtw #3]
return lower->dev;
ffff8000113a22c0: aa0203f4 mov x20, x2
niter = &ldev->adj_list.lower;
ffff8000113a22c4: 9102e053 add x19, x2, #0xb8
iter_stack[cur++] = iter;
ffff8000113a22c8: 110006b5 add w21, w21, #0x1
if (now != dev) {
ffff8000113a22cc: eb1402df cmp x22, x20
ffff8000113a22d0: 540000a0 b.eq ffff8000113a22e4 <__netdev_walk_all_lower_dev.constprop.156+0x90>
ret = fn(now, data);
ffff8000113a22d4: aa1403e0 mov x0, x20
ffff8000113a22d8: d2800001 mov x1, #0x0 // #0
ffff8000113a22dc: 97fff33d bl ffff80001139efd0 <__netdev_update_upper_level>
if (ret)
ffff8000113a22e0: 350001a0 cbnz w0, ffff8000113a2314 <__netdev_walk_all_lower_dev.constprop.156+0xc0>
lower = list_entry((*iter)->next, struct netdev_adjacent, list);
ffff8000113a22e4: f9400261 ldr x1, [x19]
ffff8000113a22e8: 9102e283 add x3, x20, #0xb8
if (&lower->list == &dev->adj_list.lower)
ffff8000113a22ec: eb03003f cmp x1, x3
ffff8000113a22f0: aa0103f3 mov x19, x1
ffff8000113a22f4: 54fffd81 b.ne ffff8000113a22a4 <__netdev_walk_all_lower_dev.constprop.156+0x50>
if (!cur)
ffff8000113a22f8: 340000d5 cbz w21, ffff8000113a2310 <__netdev_walk_all_lower_dev.constprop.156+0xbc>
next = dev_stack[--cur];
ffff8000113a22fc: 510006b5 sub w21, w21, #0x1
ffff8000113a2300: 910123a0 add x0, x29, #0x48
ffff8000113a2304: f875d814 ldr x20, [x0,w21,sxtw #3]
niter = iter_stack[cur];
ffff8000113a2308: f875daf3 ldr x19, [x23,w21,sxtw #3]
ffff8000113a230c: 17fffff0 b ffff8000113a22cc <__netdev_walk_all_lower_dev.constprop.156+0x78>
return 0;
ffff8000113a2310: 2a1503e0 mov w0, w21
}
ffff8000113a2314: f9406fa2 ldr x2, [x29,#216]
ffff8000113a2318: f9400301 ldr x1, [x24]
ffff8000113a2318: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a231c: eb01005f cmp x2, x1
ffff8000113a2320: 540000c1 b.ne ffff8000113a2338 <__netdev_walk_all_lower_dev.constprop.156+0xe4>
ffff8000113a2324: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a2328: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a232c: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a2330: a8ce7bfd ldp x29, x30, [sp],#224
ffff8000113a2334: d65f03c0 ret
ffff8000113a2338: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a2338: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a233c <netif_tx_stop_all_queues>:
{
ffff8000113a233c: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a2340: 910003fd mov x29, sp
ffff8000113a2344: f9000bf3 str x19, [sp,#16]
ffff8000113a2348: aa0003f3 mov x19, x0
ffff8000113a234c: aa1e03e0 mov x0, x30
ffff8000113a2350: 94000000 bl 0 <_mcount>
ffff8000113a2350: R_AARCH64_CALL26 _mcount
for (i = 0; i < dev->num_tx_queues; i++) {
ffff8000113a2354: b943ca60 ldr w0, [x19,#968]
ffff8000113a2358: 52800002 mov w2, #0x0 // #0
return &dev->_tx[index];
ffff8000113a235c: 52802803 mov w3, #0x140 // #320
ffff8000113a2360: 340001c0 cbz w0, ffff8000113a2398 <netif_tx_stop_all_queues+0x5c>
ffff8000113a2364: f941e261 ldr x1, [x19,#960]
ffff8000113a2368: 9ba37c40 umull x0, w2, w3
ffff8000113a236c: 8b000021 add x1, x1, x0
ATOMIC64_OPS(or, orr, L)
ffff8000113a2370: 91024025 add x5, x1, #0x90
ffff8000113a2374: f98000b1 prfm pstl1strm, [x5]
ffff8000113a2378: c85f7ca0 ldxr x0, [x5]
ffff8000113a237c: b2400000 orr x0, x0, #0x1
ffff8000113a2380: c8047ca0 stxr w4, x0, [x5]
ffff8000113a2384: 35ffffa4 cbnz w4, ffff8000113a2378 <netif_tx_stop_all_queues+0x3c>
ffff8000113a2388: b943ca60 ldr w0, [x19,#968]
ffff8000113a238c: 11000442 add w2, w2, #0x1
ffff8000113a2390: 6b02001f cmp w0, w2
ffff8000113a2394: 54fffe88 b.hi ffff8000113a2364 <netif_tx_stop_all_queues+0x28>
}
ffff8000113a2398: f9400bf3 ldr x19, [sp,#16]
ffff8000113a239c: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a23a0: d65f03c0 ret
ffff8000113a23a4 <rps_may_expire_flow>:
{
ffff8000113a23a4: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a23a8: 910003fd mov x29, sp
ffff8000113a23ac: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a23b0: f90013f5 str x21, [sp,#32]
ffff8000113a23b4: aa0003f3 mov x19, x0
ffff8000113a23b8: aa1e03e0 mov x0, x30
ffff8000113a23bc: 53003c34 uxth w20, w1
ffff8000113a23c0: 53003c75 uxth w21, w3
ffff8000113a23c4: f9001fa2 str x2, [x29,#56]
ffff8000113a23c8: 94000000 bl 0 <_mcount>
ffff8000113a23c8: R_AARCH64_CALL26 _mcount
struct netdev_rx_queue *rxqueue = dev->_rx + rxq_index;
ffff8000113a23cc: f9419260 ldr x0, [x19,#800]
ffff8000113a23d0: d3783e94 ubfiz x20, x20, #8, #16
ffff8000113a23d4: 8b140014 add x20, x0, x20
__READ_ONCE_SIZE;
ffff8000113a23d8: f9400681 ldr x1, [x20,#8]
if (flow_table && flow_id <= flow_table->mask) {
ffff8000113a23dc: f9401fa2 ldr x2, [x29,#56]
ffff8000113a23e0: b40004c1 cbz x1, ffff8000113a2478 <rps_may_expire_flow+0xd4>
ffff8000113a23e4: b9400024 ldr w4, [x1]
bool expire = true;
ffff8000113a23e8: 52800020 mov w0, #0x1 // #1
if (flow_table && flow_id <= flow_table->mask) {
ffff8000113a23ec: 6b02009f cmp w4, w2
ffff8000113a23f0: 54000143 b.cc ffff8000113a2418 <rps_may_expire_flow+0x74>
rflow = &flow_table->flows[flow_id];
ffff8000113a23f4: 2a0203e2 mov w2, w2
ffff8000113a23f8: 91000842 add x2, x2, #0x2
ffff8000113a23fc: 8b020c21 add x1, x1, x2, lsl #3
if (rflow->filter == filter_id && cpu < nr_cpu_ids &&
ffff8000113a2400: 79401423 ldrh w3, [x1,#10]
rflow = &flow_table->flows[flow_id];
ffff8000113a2404: 91002022 add x2, x1, #0x8
ffff8000113a2408: 79401021 ldrh w1, [x1,#8]
if (rflow->filter == filter_id && cpu < nr_cpu_ids &&
ffff8000113a240c: 6b15007f cmp w3, w21
ffff8000113a2410: 53003c21 uxth w1, w1
ffff8000113a2414: 540000a0 b.eq ffff8000113a2428 <rps_may_expire_flow+0x84>
}
ffff8000113a2418: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a241c: f94013f5 ldr x21, [sp,#32]
ffff8000113a2420: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a2424: d65f03c0 ret
if (rflow->filter == filter_id && cpu < nr_cpu_ids &&
ffff8000113a2428: 90000003 adrp x3, 0 <nr_cpu_ids>
ffff8000113a2428: R_AARCH64_ADR_PREL_PG_HI21 nr_cpu_ids
ffff8000113a242c: b9400063 ldr w3, [x3]
ffff8000113a242c: R_AARCH64_LDST32_ABS_LO12_NC nr_cpu_ids
ffff8000113a2430: 6b03003f cmp w1, w3
ffff8000113a2434: 54ffff22 b.cs ffff8000113a2418 <rps_may_expire_flow+0x74>
((int)(per_cpu(softnet_data, cpu).input_queue_head -
ffff8000113a2438: 90000000 adrp x0, 0 <__per_cpu_offset>
ffff8000113a2438: R_AARCH64_ADR_PREL_PG_HI21 __per_cpu_offset
ffff8000113a243c: 91000000 add x0, x0, #0x0
ffff8000113a243c: R_AARCH64_ADD_ABS_LO12_NC __per_cpu_offset
ffff8000113a2440: f8615801 ldr x1, [x0,w1,uxtw #3]
ffff8000113a2444: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a2444: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
ffff8000113a2448: 91000000 add x0, x0, #0x0
ffff8000113a2448: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a244c: 8b010000 add x0, x0, x1
ffff8000113a2450: b9408001 ldr w1, [x0,#128]
ffff8000113a2454: b9400440 ldr w0, [x2,#4]
(int)(10 * flow_table->mask)))
ffff8000113a2458: 0b040884 add w4, w4, w4, lsl #2
((int)(per_cpu(softnet_data, cpu).input_queue_head -
ffff8000113a245c: 4b000020 sub w0, w1, w0
if (rflow->filter == filter_id && cpu < nr_cpu_ids &&
ffff8000113a2460: 6b04041f cmp w0, w4, lsl #1
ffff8000113a2464: 1a9fb7e0 cset w0, ge
}
ffff8000113a2468: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a246c: f94013f5 ldr x21, [sp,#32]
ffff8000113a2470: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a2474: d65f03c0 ret
bool expire = true;
ffff8000113a2478: 52800020 mov w0, #0x1 // #1
}
ffff8000113a247c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a2480: f94013f5 ldr x21, [sp,#32]
ffff8000113a2484: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a2488: d65f03c0 ret
ffff8000113a248c <netdev_pick_tx>:
{
ffff8000113a248c: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a2490: 910003fd mov x29, sp
ffff8000113a2494: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a2498: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a249c: f9001bf7 str x23, [sp,#48]
ffff8000113a24a0: aa0103f6 mov x22, x1
ffff8000113a24a4: aa0003f4 mov x20, x0
ffff8000113a24a8: aa1e03e0 mov x0, x30
ffff8000113a24ac: aa0203f5 mov x21, x2
ffff8000113a24b0: 94000000 bl 0 <_mcount>
ffff8000113a24b0: R_AARCH64_CALL26 _mcount
struct sock *sk = skb->sk;
ffff8000113a24b4: f9400ed3 ldr x19, [x22,#24]
sk->sk_tx_queue_mapping = NO_QUEUE_MAPPING;
}
static inline int sk_tx_queue_get(const struct sock *sk)
{
if (sk && sk->sk_tx_queue_mapping != NO_QUEUE_MAPPING)
ffff8000113a24b8: b4000993 cbz x19, ffff8000113a25e8 <netdev_pick_tx+0x15c>
ffff8000113a24bc: 7940f277 ldrh w23, [x19,#120]
ffff8000113a24c0: 529fffe0 mov w0, #0xffff // #65535
return sk->sk_tx_queue_mapping;
ffff8000113a24c4: 6b0002ff cmp w23, w0
ffff8000113a24c8: 5a9f12f7 csinv w23, w23, wzr, ne
sb_dev = sb_dev ? : dev;
ffff8000113a24cc: eb1f02bf cmp x21, xzr
ffff8000113a24d0: 9a9412b5 csel x21, x21, x20, ne
if (queue_index < 0 || skb->ooo_okay ||
ffff8000113a24d4: 310006ff cmn w23, #0x1
ffff8000113a24d8: 54000060 b.eq ffff8000113a24e4 <netdev_pick_tx+0x58>
ffff8000113a24dc: 394202c0 ldrb w0, [x22,#128]
ffff8000113a24e0: 36380560 tbz w0, #7, ffff8000113a258c <netdev_pick_tx+0x100>
ffff8000113a24e4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a24e4: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a24e8: 91000000 add x0, x0, #0x0
ffff8000113a24e8: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a24ec: b9493801 ldr w1, [x0,#2360]
static_key_initialized = true;
}
static __always_inline bool static_key_false(struct static_key *key)
{
if (unlikely(static_key_count(key) > 0))
ffff8000113a24f0: 6b1f003f cmp w1, wzr
ffff8000113a24f4: 5400096c b.gt ffff8000113a2620 <netdev_pick_tx+0x194>
if (dev->num_tc) {
ffff8000113a24f8: 79d09280 ldrsh w0, [x20,#2120]
u16 qcount = dev->real_num_tx_queues;
ffff8000113a24fc: b943ce81 ldr w1, [x20,#972]
if (dev->num_tc) {
ffff8000113a2500: 35000580 cbnz w0, ffff8000113a25b0 <netdev_pick_tx+0x124>
u16 qcount = dev->real_num_tx_queues;
ffff8000113a2504: 53003c35 uxth w21, w1
u16 qoffset = 0;
ffff8000113a2508: 2a0003f4 mov w20, w0
struct sk_buff *skb)
ffff8000113a250c: 7940fac2 ldrh w2, [x22,#124]
if (skb_rx_queue_recorded(skb)) {
ffff8000113a2510: 34000702 cbz w2, ffff8000113a25f0 <netdev_pick_tx+0x164>
return skb->queue_mapping - 1;
ffff8000113a2514: 51000442 sub w2, w2, #0x1
hash = skb_get_rx_queue(skb);
ffff8000113a2518: 53003c42 uxth w2, w2
hash -= qoffset;
ffff8000113a251c: 6b14005f cmp w2, w20
ffff8000113a2520: 4b140040 sub w0, w2, w20
ffff8000113a2524: 1a822002 csel w2, w0, w2, cs
while (unlikely(hash >= qcount))
ffff8000113a2528: 6b0202bf cmp w21, w2
ffff8000113a252c: 54000b89 b.ls ffff8000113a269c <netdev_pick_tx+0x210>
return hash + qoffset;
ffff8000113a2530: 0b020280 add w0, w20, w2
ffff8000113a2534: 53003c00 uxth w0, w0
if (queue_index != new_index && sk &&
ffff8000113a2538: 6b17001f cmp w0, w23
ffff8000113a253c: 540004a0 b.eq ffff8000113a25d0 <netdev_pick_tx+0x144>
ffff8000113a2540: b4000493 cbz x19, ffff8000113a25d0 <netdev_pick_tx+0x144>
/* This helper checks if a socket is a full socket,
* ie _not_ a timewait or request socket.
*/
static inline bool sk_fullsock(const struct sock *sk)
{
return (1 << sk->sk_state) & ~(TCPF_TIME_WAIT | TCPF_NEW_SYN_RECV);
ffff8000113a2544: 39404a61 ldrb w1, [x19,#18]
ffff8000113a2548: 52800022 mov w2, #0x1 // #1
ffff8000113a254c: 1ac12042 lsl w2, w2, w1
ffff8000113a2550: 12820801 mov w1, #0xffffefbf // #-4161
ffff8000113a2554: 6a01005f tst w2, w1
ffff8000113a2558: 540003c0 b.eq ffff8000113a25d0 <netdev_pick_tx+0x144>
ffff8000113a255c: f9409e61 ldr x1, [x19,#312]
if (WARN_ON_ONCE((unsigned short)tx_queue >= USHRT_MAX))
ffff8000113a2560: 53003c00 uxth w0, w0
sk_fullsock(sk) &&
ffff8000113a2564: b40000a1 cbz x1, ffff8000113a2578 <netdev_pick_tx+0xec>
ffff8000113a2568: 529fffe1 mov w1, #0xffff // #65535
ffff8000113a256c: 6b01001f cmp w0, w1
ffff8000113a2570: 54000920 b.eq ffff8000113a2694 <netdev_pick_tx+0x208>
sk->sk_tx_queue_mapping = tx_queue;
ffff8000113a2574: 7900f260 strh w0, [x19,#120]
}
ffff8000113a2578: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a257c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a2580: f9401bf7 ldr x23, [sp,#48]
ffff8000113a2584: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a2588: d65f03c0 ret
if (queue_index < 0 || skb->ooo_okay ||
ffff8000113a258c: b943ce80 ldr w0, [x20,#972]
ffff8000113a2590: 6b0002ff cmp w23, w0
ffff8000113a2594: 54fffa82 b.cs ffff8000113a24e4 <netdev_pick_tx+0x58>
ffff8000113a2598: 53003ee0 uxth w0, w23
}
ffff8000113a259c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a25a0: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a25a4: f9401bf7 ldr x23, [sp,#48]
ffff8000113a25a8: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a25ac: d65f03c0 ret
return dev->prio_tc_map[prio & TC_BITMASK];
ffff8000113a25b0: b9408ec0 ldr w0, [x22,#140]
ffff8000113a25b4: 92400c00 and x0, x0, #0xf
ffff8000113a25b8: 8b000294 add x20, x20, x0
ffff8000113a25bc: 39622a80 ldrb w0, [x20,#2186]
ffff8000113a25c0: 8b000ab5 add x21, x21, x0, lsl #2
qoffset = sb_dev->tc_to_txq[tc].offset;
ffff8000113a25c4: 79509ab4 ldrh w20, [x21,#2124]
qcount = sb_dev->tc_to_txq[tc].count;
ffff8000113a25c8: 795096b5 ldrh w21, [x21,#2122]
ffff8000113a25cc: 17ffffd0 b ffff8000113a250c <netdev_pick_tx+0x80>
ffff8000113a25d0: 53003c00 uxth w0, w0
}
ffff8000113a25d4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a25d8: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a25dc: f9401bf7 ldr x23, [sp,#48]
ffff8000113a25e0: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a25e4: d65f03c0 ret
return -1;
ffff8000113a25e8: 12800017 mov w23, #0xffffffff // #-1
ffff8000113a25ec: 17ffffb8 b ffff8000113a24cc <netdev_pick_tx+0x40>
if (!skb->l4_hash && !skb->sw_hash)
ffff8000113a25f0: 394206c0 ldrb w0, [x22,#129]
ffff8000113a25f4: 12000400 and w0, w0, #0x3
ffff8000113a25f8: 340000e0 cbz w0, ffff8000113a2614 <netdev_pick_tx+0x188>
return skb->hash;
ffff8000113a25fc: b94096c0 ldr w0, [x22,#148]
ffff8000113a2600: 9bb57c00 umull x0, w0, w21
ffff8000113a2604: d360fc00 lsr x0, x0, #32
return (u16) reciprocal_scale(skb_get_hash(skb), qcount) + qoffset;
ffff8000113a2608: 0b000280 add w0, w20, w0
ffff8000113a260c: 53003c00 uxth w0, w0
ffff8000113a2610: 17ffffca b ffff8000113a2538 <netdev_pick_tx+0xac>
__skb_get_hash(skb);
ffff8000113a2614: aa1603e0 mov x0, x22
ffff8000113a2618: 94000000 bl 0 <__skb_get_hash>
ffff8000113a2618: R_AARCH64_CALL26 __skb_get_hash
ffff8000113a261c: 17fffff8 b ffff8000113a25fc <netdev_pick_tx+0x170>
ffff8000113a2620: b9494001 ldr w1, [x0,#2368]
ffff8000113a2624: 12800000 mov w0, #0xffffffff // #-1
ffff8000113a2628: 6b1f003f cmp w1, wzr
ffff8000113a262c: 5400014c b.gt ffff8000113a2654 <netdev_pick_tx+0x1c8>
ffff8000113a2630: f941f6a2 ldr x2, [x21,#1000]
if (dev_maps) {
ffff8000113a2634: b40000c2 cbz x2, ffff8000113a264c <netdev_pick_tx+0x1c0>
unsigned int tci = skb->sender_cpu - 1;
ffff8000113a2638: b9409ec3 ldr w3, [x22,#156]
queue_index = __get_xps_queue_idx(dev, skb, dev_maps,
ffff8000113a263c: aa1403e0 mov x0, x20
ffff8000113a2640: aa1603e1 mov x1, x22
ffff8000113a2644: 51000463 sub w3, w3, #0x1
ffff8000113a2648: 97fff95e bl ffff8000113a0bc0 <__get_xps_queue_idx>
if (new_index < 0)
ffff8000113a264c: 36fff760 tbz w0, #31, ffff8000113a2538 <netdev_pick_tx+0xac>
ffff8000113a2650: 17ffffaa b ffff8000113a24f8 <netdev_pick_tx+0x6c>
ffff8000113a2654: f941faa2 ldr x2, [x21,#1008]
if (dev_maps) {
ffff8000113a2658: b4fffec2 cbz x2, ffff8000113a2630 <netdev_pick_tx+0x1a4>
if (sk && sk->sk_rx_queue_mapping != NO_QUEUE_MAPPING)
ffff8000113a265c: b4fffeb3 cbz x19, ffff8000113a2630 <netdev_pick_tx+0x1a4>
ffff8000113a2660: 7940f663 ldrh w3, [x19,#122]
ffff8000113a2664: 529fffe1 mov w1, #0xffff // #65535
ffff8000113a2668: 6b01007f cmp w3, w1
ffff8000113a266c: 54fffe20 b.eq ffff8000113a2630 <netdev_pick_tx+0x1a4>
if (tci >= 0 && tci < dev->num_rx_queues)
ffff8000113a2670: b9432a81 ldr w1, [x20,#808]
ffff8000113a2674: 6b01007f cmp w3, w1
ffff8000113a2678: 54fffdc2 b.cs ffff8000113a2630 <netdev_pick_tx+0x1a4>
queue_index = __get_xps_queue_idx(dev, skb, dev_maps,
ffff8000113a267c: aa1603e1 mov x1, x22
ffff8000113a2680: aa1403e0 mov x0, x20
ffff8000113a2684: 97fff94f bl ffff8000113a0bc0 <__get_xps_queue_idx>
if (queue_index < 0) {
ffff8000113a2688: 37fffd40 tbnz w0, #31, ffff8000113a2630 <netdev_pick_tx+0x1a4>
if (new_index < 0)
ffff8000113a268c: 36fff560 tbz w0, #31, ffff8000113a2538 <netdev_pick_tx+0xac>
ffff8000113a2690: 17ffff9a b ffff8000113a24f8 <netdev_pick_tx+0x6c>
if (WARN_ON_ONCE((unsigned short)tx_queue >= USHRT_MAX))
ffff8000113a2694: d4210000 brk #0x800
ffff8000113a2698: 17ffffb8 b ffff8000113a2578 <netdev_pick_tx+0xec>
hash -= qcount;
ffff8000113a269c: 4b150042 sub w2, w2, w21
while (unlikely(hash >= qcount))
ffff8000113a26a0: 6b15005f cmp w2, w21
ffff8000113a26a4: 54fff463 b.cc ffff8000113a2530 <netdev_pick_tx+0xa4>
ffff8000113a26a8: 17fffffd b ffff8000113a269c <netdev_pick_tx+0x210>
ffff8000113a26ac <napi_schedule_prep>:
{
ffff8000113a26ac: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a26b0: 910003fd mov x29, sp
ffff8000113a26b4: f9000bf3 str x19, [sp,#16]
ffff8000113a26b8: aa0003f3 mov x19, x0
ffff8000113a26bc: aa1e03e0 mov x0, x30
ffff8000113a26c0: 94000000 bl 0 <_mcount>
ffff8000113a26c0: R_AARCH64_CALL26 _mcount
ffff8000113a26c4: f9400a61 ldr x1, [x19,#16]
new = val | NAPIF_STATE_SCHED;
ffff8000113a26c8: b2400022 orr x2, x1, #0x1
new |= (val & NAPIF_STATE_SCHED) / NAPIF_STATE_SCHED *
ffff8000113a26cc: 92400020 and x0, x1, #0x1
ffff8000113a26d0: aa000442 orr x2, x2, x0, lsl #1
if (unlikely(val & NAPIF_STATE_DISABLE))
ffff8000113a26d4: 371001e1 tbnz w1, #2, ffff8000113a2710 <napi_schedule_prep+0x64>
__CMPXCHG_CASE(w, , rel_, 32, , , l, "memory", K)
__CMPXCHG_CASE( , , rel_, 64, , , l, "memory", L)
__CMPXCHG_CASE(w, b, mb_, 8, dmb ish, , l, "memory", K)
__CMPXCHG_CASE(w, h, mb_, 16, dmb ish, , l, "memory", K)
__CMPXCHG_CASE(w, , mb_, 32, dmb ish, , l, "memory", K)
__CMPXCHG_CASE( , , mb_, 64, dmb ish, , l, "memory", L)
ffff8000113a26d8: 91004265 add x5, x19, #0x10
ffff8000113a26dc: f98000b1 prfm pstl1strm, [x5]
ffff8000113a26e0: c85f7ca3 ldxr x3, [x5]
ffff8000113a26e4: ca010064 eor x4, x3, x1
ffff8000113a26e8: b5000084 cbnz x4, ffff8000113a26f8 <napi_schedule_prep+0x4c>
ffff8000113a26ec: c804fca2 stlxr w4, x2, [x5]
ffff8000113a26f0: 35ffff84 cbnz w4, ffff8000113a26e0 <napi_schedule_prep+0x34>
ffff8000113a26f4: d5033bbf dmb ish
} while (cmpxchg(&n->state, val, new) != val);
ffff8000113a26f8: eb03003f cmp x1, x3
ffff8000113a26fc: 54fffe41 b.ne ffff8000113a26c4 <napi_schedule_prep+0x18>
return !(val & NAPIF_STATE_SCHED);
ffff8000113a2700: 52000000 eor w0, w0, #0x1
}
ffff8000113a2704: f9400bf3 ldr x19, [sp,#16]
ffff8000113a2708: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a270c: d65f03c0 ret
return false;
ffff8000113a2710: 52800000 mov w0, #0x0 // #0
ffff8000113a2714: 17fffffc b ffff8000113a2704 <napi_schedule_prep+0x58>
ffff8000113a2718 <netdev_txq_to_tc>:
{
ffff8000113a2718: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a271c: 910003fd mov x29, sp
ffff8000113a2720: f9000bf3 str x19, [sp,#16]
ffff8000113a2724: aa0003f3 mov x19, x0
ffff8000113a2728: aa1e03e0 mov x0, x30
ffff8000113a272c: f90017a1 str x1, [x29,#40]
ffff8000113a2730: 94000000 bl 0 <_mcount>
ffff8000113a2730: R_AARCH64_CALL26 _mcount
if (dev->num_tc) {
ffff8000113a2734: 79d09262 ldrsh w2, [x19,#2120]
return 0;
ffff8000113a2738: 52800000 mov w0, #0x0 // #0
if (dev->num_tc) {
ffff8000113a273c: f94017a1 ldr x1, [x29,#40]
ffff8000113a2740: 340001a2 cbz w2, ffff8000113a2774 <netdev_txq_to_tc+0x5c>
struct netdev_tc_txq *tc = &dev->tc_to_txq[0];
ffff8000113a2744: 91212a62 add x2, x19, #0x84a
ffff8000113a2748: 91222a65 add x5, x19, #0x88a
if ((txq - tc->offset) < tc->count)
ffff8000113a274c: 79400444 ldrh w4, [x2,#2]
ffff8000113a2750: 79400043 ldrh w3, [x2]
ffff8000113a2754: 4b040024 sub w4, w1, w4
ffff8000113a2758: 6b03009f cmp w4, w3
for (i = 0; i < TC_MAX_QUEUE; i++, tc++) {
ffff8000113a275c: 91001042 add x2, x2, #0x4
if ((txq - tc->offset) < tc->count)
ffff8000113a2760: 540000a3 b.cc ffff8000113a2774 <netdev_txq_to_tc+0x5c>
for (i = 0; i < TC_MAX_QUEUE; i++, tc++) {
ffff8000113a2764: eb05005f cmp x2, x5
ffff8000113a2768: 11000400 add w0, w0, #0x1
ffff8000113a276c: 54ffff01 b.ne ffff8000113a274c <netdev_txq_to_tc+0x34>
return -1;
ffff8000113a2770: 12800000 mov w0, #0xffffffff // #-1
}
ffff8000113a2774: f9400bf3 ldr x19, [sp,#16]
ffff8000113a2778: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a277c: d65f03c0 ret
ffff8000113a2780 <napi_skb_free_stolen_head>:
{
ffff8000113a2780: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a2784: 910003fd mov x29, sp
ffff8000113a2788: f9000bf3 str x19, [sp,#16]
ffff8000113a278c: aa0003f3 mov x19, x0
ffff8000113a2790: aa1e03e0 mov x0, x30
ffff8000113a2794: 94000000 bl 0 <_mcount>
ffff8000113a2794: R_AARCH64_CALL26 _mcount
*
* Drops dst reference count if a reference was taken.
*/
static inline void skb_dst_drop(struct sk_buff *skb)
{
if (skb->_skb_refdst) {
ffff8000113a2798: f9402e60 ldr x0, [x19,#88]
ffff8000113a279c: b4000060 cbz x0, ffff8000113a27a8 <napi_skb_free_stolen_head+0x28>
if (!(refdst & SKB_DST_NOREF))
ffff8000113a27a0: 360001a0 tbz w0, #0, ffff8000113a27d4 <napi_skb_free_stolen_head+0x54>
refdst_drop(skb->_skb_refdst);
skb->_skb_refdst = 0UL;
ffff8000113a27a4: f9002e7f str xzr, [x19,#88]
if (skb->active_extensions)
ffff8000113a27a8: 3941fe60 ldrb w0, [x19,#127]
ffff8000113a27ac: 34000060 cbz w0, ffff8000113a27b8 <napi_skb_free_stolen_head+0x38>
__skb_ext_put(skb->extensions);
ffff8000113a27b0: f9406e60 ldr x0, [x19,#216]
ffff8000113a27b4: 94000000 bl 0 <__skb_ext_put>
ffff8000113a27b4: R_AARCH64_CALL26 __skb_ext_put
kmem_cache_free(skbuff_head_cache, skb);
ffff8000113a27b8: 90000000 adrp x0, 0 <skbuff_head_cache>
ffff8000113a27b8: R_AARCH64_ADR_PREL_PG_HI21 skbuff_head_cache
ffff8000113a27bc: f9400000 ldr x0, [x0]
ffff8000113a27bc: R_AARCH64_LDST64_ABS_LO12_NC skbuff_head_cache
ffff8000113a27c0: aa1303e1 mov x1, x19
ffff8000113a27c4: 94000000 bl 0 <kmem_cache_free>
ffff8000113a27c4: R_AARCH64_CALL26 kmem_cache_free
}
ffff8000113a27c8: f9400bf3 ldr x19, [sp,#16]
ffff8000113a27cc: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a27d0: d65f03c0 ret
dst_release((struct dst_entry *)(refdst & SKB_DST_PTRMASK));
ffff8000113a27d4: 927ff800 and x0, x0, #0xfffffffffffffffe
ffff8000113a27d8: 94000000 bl 0 <dst_release>
ffff8000113a27d8: R_AARCH64_CALL26 dst_release
ffff8000113a27dc: 17fffff2 b ffff8000113a27a4 <napi_skb_free_stolen_head+0x24>
ffff8000113a27e0 <napi_reuse_skb.isra.123>:
static void napi_reuse_skb(struct napi_struct *napi, struct sk_buff *skb)
ffff8000113a27e0: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a27e4: 910003fd mov x29, sp
ffff8000113a27e8: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a27ec: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a27f0: aa0203f3 mov x19, x2
ffff8000113a27f4: aa0003f6 mov x22, x0
ffff8000113a27f8: aa1e03e0 mov x0, x30
ffff8000113a27fc: aa0103f5 mov x21, x1
ffff8000113a2800: 94000000 bl 0 <_mcount>
ffff8000113a2800: R_AARCH64_CALL26 _mcount
if (unlikely(skb->pfmemalloc)) {
ffff8000113a2804: 3941fa74 ldrb w20, [x19,#126]
ffff8000113a2808: d3461a94 ubfx x20, x20, #6, #1
ffff8000113a280c: 53001e82 uxtb w2, w20
ffff8000113a2810: 35000582 cbnz w2, ffff8000113a28c0 <napi_reuse_skb.isra.123+0xe0>
static void napi_reuse_skb(struct napi_struct *napi, struct sk_buff *skb)
ffff8000113a2814: b9407664 ldr w4, [x19,#116]
return skb->len - skb->data_len;
ffff8000113a2818: b9407266 ldr w6, [x19,#112]
return skb->data += len;
ffff8000113a281c: f9406660 ldr x0, [x19,#200]
ffff8000113a2820: f9406263 ldr x3, [x19,#192]
ffff8000113a2824: 4b0400c6 sub w6, w6, w4
ffff8000113a2828: 8b060006 add x6, x0, x6
skb->tail += len;
ffff8000113a282c: b940ba61 ldr w1, [x19,#184]
*
* Clears the VLAN information from @skb
*/
static inline void __vlan_hwaccel_clear_tag(struct sk_buff *skb)
{
skb->vlan_present = 0;
ffff8000113a2830: 39420a60 ldrb w0, [x19,#130]
skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN - skb_headroom(skb));
ffff8000113a2834: 4b060065 sub w5, w3, w6
ffff8000113a2838: 110100a5 add w5, w5, #0x40
skb->data += len;
ffff8000113a283c: 8b25c0c6 add x6, x6, w5, sxtw
ffff8000113a2840: 121f7800 and w0, w0, #0xfffffffe
skb->tail += len;
ffff8000113a2844: 0b050025 add w5, w1, w5
skb->pkt_type = PACKET_HOST;
ffff8000113a2848: 39420267 ldrb w7, [x19,#128]
skb->encapsulation = 0;
ffff8000113a284c: 39420661 ldrb w1, [x19,#129]
skb->len -= len;
ffff8000113a2850: b9007264 str w4, [x19,#112]
ffff8000113a2854: 39020a60 strb w0, [x19,#130]
skb->data += len;
ffff8000113a2858: f9006666 str x6, [x19,#200]
skb->tail += len;
ffff8000113a285c: b900ba65 str w5, [x19,#184]
skb->dev = napi->dev;
ffff8000113a2860: f94002c5 ldr x5, [x22]
return skb->head + skb->end;
ffff8000113a2864: b940be60 ldr w0, [x19,#188]
skb->encapsulation = 0;
ffff8000113a2868: 121a7821 and w1, w1, #0xffffffdf
skb->pkt_type = PACKET_HOST;
ffff8000113a286c: 121d70e4 and w4, w7, #0xfffffff8
skb->encapsulation = 0;
ffff8000113a2870: 39020661 strb w1, [x19,#129]
skb_shinfo(skb)->gso_type = 0;
ffff8000113a2874: 8b000063 add x3, x3, x0
skb->dev = napi->dev;
ffff8000113a2878: f9000a65 str x5, [x19,#16]
skb->skb_iif = 0;
ffff8000113a287c: b9009262 str w2, [x19,#144]
skb->pkt_type = PACKET_HOST;
ffff8000113a2880: 39020264 strb w4, [x19,#128]
skb_shinfo(skb)->gso_type = 0;
ffff8000113a2884: b9001862 str w2, [x3,#24]
skb->truesize = SKB_TRUESIZE(skb_end_offset(skb));
ffff8000113a2888: b940be61 ldr w1, [x19,#188]
if (unlikely(skb->active_extensions)) {
ffff8000113a288c: 3941fe60 ldrb w0, [x19,#127]
ffff8000113a2890: 11090021 add w1, w1, #0x240
ffff8000113a2894: b900d261 str w1, [x19,#208]
ffff8000113a2898: 350000c0 cbnz w0, ffff8000113a28b0 <napi_reuse_skb.isra.123+0xd0>
napi->skb = skb;
ffff8000113a289c: f90002b3 str x19, [x21]
}
ffff8000113a28a0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a28a4: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a28a8: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a28ac: d65f03c0 ret
__skb_ext_put(skb->extensions);
ffff8000113a28b0: f9406e60 ldr x0, [x19,#216]
ffff8000113a28b4: 94000000 bl 0 <__skb_ext_put>
ffff8000113a28b4: R_AARCH64_CALL26 __skb_ext_put
skb->active_extensions = 0;
ffff8000113a28b8: 3901fe74 strb w20, [x19,#127]
ffff8000113a28bc: 17fffff8 b ffff8000113a289c <napi_reuse_skb.isra.123+0xbc>
consume_skb(skb);
ffff8000113a28c0: aa1303e0 mov x0, x19
ffff8000113a28c4: 94000000 bl 0 <consume_skb>
ffff8000113a28c4: R_AARCH64_CALL26 consume_skb
ffff8000113a28c8: 17fffff6 b ffff8000113a28a0 <napi_reuse_skb.isra.123+0xc0>
ffff8000113a28cc <dev_add_pack>:
{
ffff8000113a28cc: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a28d0: 910003fd mov x29, sp
ffff8000113a28d4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a28d8: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a28dc: f9001bf7 str x23, [sp,#48]
ffff8000113a28e0: aa0003f3 mov x19, x0
ffff8000113a28e4: aa1e03e0 mov x0, x30
ffff8000113a28e8: 94000000 bl 0 <_mcount>
ffff8000113a28e8: R_AARCH64_CALL26 _mcount
void dev_add_pack(struct packet_type *pt)
ffff8000113a28ec: 79400260 ldrh w0, [x19]
ffff8000113a28f0: f9400674 ldr x20, [x19,#8]
if (pt->type == htons(ETH_P_ALL))
ffff8000113a28f4: 710c001f cmp w0, #0x300
ffff8000113a28f8: 54000480 b.eq ffff8000113a2988 <dev_add_pack+0xbc>
return pt->dev ? &pt->dev->ptype_specific :
ffff8000113a28fc: b40004d4 cbz x20, ffff8000113a2994 <dev_add_pack+0xc8>
ffff8000113a2900: 91026294 add x20, x20, #0x98
__CMPXCHG_CASE(w, , acq_, 32, , a, , "memory", K)
ffff8000113a2904: 90000017 adrp x23, ffff80001139e37c <__my_cpu_offset>
ffff8000113a2904: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a2908: 910002e0 add x0, x23, #0x0
ffff8000113a2908: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a290c: 52800023 mov w3, #0x1 // #1
ffff8000113a2910: d2800002 mov x2, #0x0 // #0
ffff8000113a2914: 910c6005 add x5, x0, #0x318
ffff8000113a2918: f98000b1 prfm pstl1strm, [x5]
ffff8000113a291c: 885ffca1 ldaxr w1, [x5]
ffff8000113a2920: 4a020024 eor w4, w1, w2
ffff8000113a2924: 35000064 cbnz w4, ffff8000113a2930 <dev_add_pack+0x64>
ffff8000113a2928: 88047ca3 stxr w4, w3, [x5]
ffff8000113a292c: 35ffff84 cbnz w4, ffff8000113a291c <dev_add_pack+0x50>
static inline bool
atomic_try_cmpxchg_acquire(atomic_t *v, int *old, int new)
{
int r, o = *old;
r = atomic_cmpxchg_acquire(v, o, new);
if (unlikely(r != o))
ffff8000113a2930: 35000481 cbnz w1, ffff8000113a29c0 <dev_add_pack+0xf4>
* the _rcu list-traversal primitives, such as
* list_for_each_entry_rcu().
*/
static inline void list_add_rcu(struct list_head *new, struct list_head *head)
{
__list_add_rcu(new, head, head->next);
ffff8000113a2934: f9400295 ldr x21, [x20]
list_add_rcu(&pt->list, head);
ffff8000113a2938: 9100c276 add x22, x19, #0x30
if (!__list_add_valid(new, prev, next))
ffff8000113a293c: aa1603e0 mov x0, x22
ffff8000113a2940: aa1403e1 mov x1, x20
ffff8000113a2944: aa1503e2 mov x2, x21
ffff8000113a2948: 94000000 bl 0 <__list_add_valid>
ffff8000113a2948: R_AARCH64_CALL26 __list_add_valid
ffff8000113a294c: 53001c00 uxtb w0, w0
ffff8000113a2950: 340000a0 cbz w0, ffff8000113a2964 <dev_add_pack+0x98>
new->next = next;
ffff8000113a2954: f9001a75 str x21, [x19,#48]
new->prev = prev;
ffff8000113a2958: f9001e74 str x20, [x19,#56]
rcu_assign_pointer(list_next_rcu(prev), new);
ffff8000113a295c: c89ffe96 stlr x22, [x20]
next->prev = new;
ffff8000113a2960: f90006b6 str x22, [x21,#8]
static __always_inline void queued_spin_unlock(struct qspinlock *lock)
{
/*
* unlock() needs release semantics:
*/
smp_store_release(&lock->locked, 0);
ffff8000113a2964: 910002f7 add x23, x23, #0x0
ffff8000113a2964: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a2968: 52800000 mov w0, #0x0 // #0
ffff8000113a296c: 910c62f7 add x23, x23, #0x318
ffff8000113a2970: 089ffee0 stlrb w0, [x23]
}
ffff8000113a2974: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a2978: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a297c: f9401bf7 ldr x23, [sp,#48]
ffff8000113a2980: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a2984: d65f03c0 ret
return pt->dev ? &pt->dev->ptype_all : &ptype_all;
ffff8000113a2988: b4000154 cbz x20, ffff8000113a29b0 <dev_add_pack+0xe4>
ffff8000113a298c: 91022294 add x20, x20, #0x88
ffff8000113a2990: 17ffffdd b ffff8000113a2904 <dev_add_pack+0x38>
return pt->dev ? &pt->dev->ptype_specific :
ffff8000113a2994: 90000014 adrp x20, ffff80001139e37c <__my_cpu_offset>
ffff8000113a2994: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a2998: 5ac00400 rev16 w0, w0
ffff8000113a299c: 91000294 add x20, x20, #0x0
ffff8000113a299c: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a29a0: d37c0c00 ubfiz x0, x0, #4, #4
ffff8000113a29a4: 9120c294 add x20, x20, #0x830
ffff8000113a29a8: 8b000294 add x20, x20, x0
ffff8000113a29ac: 17ffffd6 b ffff8000113a2904 <dev_add_pack+0x38>
return pt->dev ? &pt->dev->ptype_all : &ptype_all;
ffff8000113a29b0: 90000014 adrp x20, ffff80001139e37c <__my_cpu_offset>
ffff8000113a29b0: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a29b4: 91000294 add x20, x20, #0x0
ffff8000113a29b4: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a29b8: 91200294 add x20, x20, #0x800
ffff8000113a29bc: 17ffffd2 b ffff8000113a2904 <dev_add_pack+0x38>
queued_spin_lock_slowpath(lock, val);
ffff8000113a29c0: 910c6000 add x0, x0, #0x318
ffff8000113a29c4: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113a29c4: R_AARCH64_CALL26 queued_spin_lock_slowpath
ffff8000113a29c8: 17ffffdb b ffff8000113a2934 <dev_add_pack+0x68>
ffff8000113a29cc <netif_device_detach>:
{
ffff8000113a29cc: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a29d0: 910003fd mov x29, sp
ffff8000113a29d4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a29d8: aa0003f3 mov x19, x0
ffff8000113a29dc: aa1e03e0 mov x0, x30
ffff8000113a29e0: 94000000 bl 0 <_mcount>
ffff8000113a29e0: R_AARCH64_CALL26 _mcount
ffff8000113a29e4: 90000014 adrp x20, 0 <__stack_chk_guard>
ffff8000113a29e4: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a29e8: f9400280 ldr x0, [x20]
ffff8000113a29e8: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a29ec: f90017a0 str x0, [x29,#40]
ffff8000113a29f0: f9402260 ldr x0, [x19,#64]
{
long old;
unsigned long mask = BIT_MASK(nr);
p += BIT_WORD(nr);
if (!(READ_ONCE(*p) & mask))
ffff8000113a29f4: 36080180 tbz w0, #1, ffff8000113a2a24 <netif_device_detach+0x58>
ATOMIC64_OPS(andnot, bic, )
ffff8000113a29f8: d2800040 mov x0, #0x2 // #2
ffff8000113a29fc: 91010264 add x4, x19, #0x40
ffff8000113a2a00: f9800091 prfm pstl1strm, [x4]
ffff8000113a2a04: c85f7c81 ldxr x1, [x4]
ffff8000113a2a08: 8a200022 bic x2, x1, x0
ffff8000113a2a0c: c803fc82 stlxr w3, x2, [x4]
ffff8000113a2a10: 35ffffa3 cbnz w3, ffff8000113a2a04 <netif_device_detach+0x38>
ffff8000113a2a14: d5033bbf dmb ish
if (test_and_clear_bit(__LINK_STATE_PRESENT, &dev->state) &&
ffff8000113a2a18: 36080061 tbz w1, #1, ffff8000113a2a24 <netif_device_detach+0x58>
ffff8000113a2a1c: f9402260 ldr x0, [x19,#64]
ffff8000113a2a20: 37000100 tbnz w0, #0, ffff8000113a2a40 <netif_device_detach+0x74>
}
ffff8000113a2a24: f94017a1 ldr x1, [x29,#40]
ffff8000113a2a28: f9400280 ldr x0, [x20]
ffff8000113a2a28: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a2a2c: eb00003f cmp x1, x0
ffff8000113a2a30: 540000e1 b.ne ffff8000113a2a4c <netif_device_detach+0x80>
ffff8000113a2a34: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a2a38: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a2a3c: d65f03c0 ret
netif_tx_stop_all_queues(dev);
ffff8000113a2a40: aa1303e0 mov x0, x19
ffff8000113a2a44: 94000000 bl ffff8000113a233c <netif_tx_stop_all_queues>
ffff8000113a2a44: R_AARCH64_CALL26 netif_tx_stop_all_queues
ffff8000113a2a48: 17fffff7 b ffff8000113a2a24 <netif_device_detach+0x58>
}
ffff8000113a2a4c: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a2a4c: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a2a50 <napi_hash_del>:
{
ffff8000113a2a50: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a2a54: 910003fd mov x29, sp
ffff8000113a2a58: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a2a5c: f90013f5 str x21, [sp,#32]
ffff8000113a2a60: aa0003f3 mov x19, x0
ffff8000113a2a64: aa1e03e0 mov x0, x30
ffff8000113a2a68: 94000000 bl 0 <_mcount>
ffff8000113a2a68: R_AARCH64_CALL26 _mcount
ffff8000113a2a6c: 90000015 adrp x21, 0 <__stack_chk_guard>
ffff8000113a2a6c: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a2a70: f94002a0 ldr x0, [x21]
ffff8000113a2a70: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a2a74: f9001fa0 str x0, [x29,#56]
__CMPXCHG_CASE(w, , acq_, 32, , a, , "memory", K)
ffff8000113a2a78: 90000014 adrp x20, ffff80001139e37c <__my_cpu_offset>
ffff8000113a2a78: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a2a7c: 91000280 add x0, x20, #0x0
ffff8000113a2a7c: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a2a80: 52800023 mov w3, #0x1 // #1
ffff8000113a2a84: d2800002 mov x2, #0x0 // #0
ffff8000113a2a88: 910c8005 add x5, x0, #0x320
ffff8000113a2a8c: f98000b1 prfm pstl1strm, [x5]
ffff8000113a2a90: 885ffca1 ldaxr w1, [x5]
ffff8000113a2a94: 4a020024 eor w4, w1, w2
ffff8000113a2a98: 35000064 cbnz w4, ffff8000113a2aa4 <napi_hash_del+0x54>
ffff8000113a2a9c: 88047ca3 stxr w4, w3, [x5]
ffff8000113a2aa0: 35ffff84 cbnz w4, ffff8000113a2a90 <napi_hash_del+0x40>
ffff8000113a2aa4: 35000481 cbnz w1, ffff8000113a2b34 <napi_hash_del+0xe4>
ffff8000113a2aa8: f9400a60 ldr x0, [x19,#16]
ffff8000113a2aac: 362003e0 tbz w0, #4, ffff8000113a2b28 <napi_hash_del+0xd8>
ATOMIC64_OPS(andnot, bic, )
ffff8000113a2ab0: d2800200 mov x0, #0x10 // #16
ffff8000113a2ab4: 8b000264 add x4, x19, x0
ffff8000113a2ab8: f9800091 prfm pstl1strm, [x4]
ffff8000113a2abc: c85f7c81 ldxr x1, [x4]
ffff8000113a2ac0: 8a200022 bic x2, x1, x0
ffff8000113a2ac4: c803fc82 stlxr w3, x2, [x4]
ffff8000113a2ac8: 35ffffa3 cbnz w3, ffff8000113a2abc <napi_hash_del+0x6c>
ffff8000113a2acc: d5033bbf dmb ish
if (test_and_clear_bit(NAPI_STATE_HASHED, &napi->state)) {
ffff8000113a2ad0: 362002c1 tbz w1, #4, ffff8000113a2b28 <napi_hash_del+0xd8>
return !READ_ONCE(h->first);
}
static inline void __hlist_del(struct hlist_node *n)
{
struct hlist_node *next = n->next;
ffff8000113a2ad4: f940ba60 ldr x0, [x19,#368]
struct hlist_node **pprev = n->pprev;
ffff8000113a2ad8: f940be61 ldr x1, [x19,#376]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a2adc: f9000020 str x0, [x1]
WRITE_ONCE(*pprev, next);
if (next)
ffff8000113a2ae0: b4000040 cbz x0, ffff8000113a2ae8 <napi_hash_del+0x98>
ffff8000113a2ae4: f9000401 str x1, [x0,#8]
ffff8000113a2ae8: d2802440 mov x0, #0x122 // #290
ffff8000113a2aec: f2fbd5a0 movk x0, #0xdead, lsl #48
ffff8000113a2af0: f900be60 str x0, [x19,#376]
rcu_sync_needed = true;
ffff8000113a2af4: 52800020 mov w0, #0x1 // #1
smp_store_release(&lock->locked, 0);
ffff8000113a2af8: 91000294 add x20, x20, #0x0
ffff8000113a2af8: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a2afc: 52800001 mov w1, #0x0 // #0
ffff8000113a2b00: 910c8294 add x20, x20, #0x320
ffff8000113a2b04: 089ffe81 stlrb w1, [x20]
}
ffff8000113a2b08: f9401fa2 ldr x2, [x29,#56]
ffff8000113a2b0c: f94002a1 ldr x1, [x21]
ffff8000113a2b0c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a2b10: eb01005f cmp x2, x1
ffff8000113a2b14: 540000e1 b.ne ffff8000113a2b30 <napi_hash_del+0xe0>
ffff8000113a2b18: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a2b1c: f94013f5 ldr x21, [sp,#32]
ffff8000113a2b20: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a2b24: d65f03c0 ret
bool rcu_sync_needed = false;
ffff8000113a2b28: 52800000 mov w0, #0x0 // #0
ffff8000113a2b2c: 17fffff3 b ffff8000113a2af8 <napi_hash_del+0xa8>
}
ffff8000113a2b30: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a2b30: R_AARCH64_CALL26 __stack_chk_fail
queued_spin_lock_slowpath(lock, val);
ffff8000113a2b34: 910c8000 add x0, x0, #0x320
ffff8000113a2b38: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113a2b38: R_AARCH64_CALL26 queued_spin_lock_slowpath
ffff8000113a2b3c: 17ffffdb b ffff8000113a2aa8 <napi_hash_del+0x58>
ffff8000113a2b40 <dev_add_offload>:
{
ffff8000113a2b40: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a2b44: 910003fd mov x29, sp
ffff8000113a2b48: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a2b4c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a2b50: f9001bf7 str x23, [sp,#48]
ffff8000113a2b54: aa0003f4 mov x20, x0
ffff8000113a2b58: aa1e03e0 mov x0, x30
ffff8000113a2b5c: 94000000 bl 0 <_mcount>
ffff8000113a2b5c: R_AARCH64_CALL26 _mcount
__CMPXCHG_CASE(w, , acq_, 32, , a, , "memory", K)
ffff8000113a2b60: 90000017 adrp x23, ffff80001139e37c <__my_cpu_offset>
ffff8000113a2b60: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a2b64: 910002e2 add x2, x23, #0x0
ffff8000113a2b64: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a2b68: 52800023 mov w3, #0x1 // #1
ffff8000113a2b6c: d2800000 mov x0, #0x0 // #0
ffff8000113a2b70: 910ca045 add x5, x2, #0x328
ffff8000113a2b74: f98000b1 prfm pstl1strm, [x5]
ffff8000113a2b78: 885ffca1 ldaxr w1, [x5]
ffff8000113a2b7c: 4a000024 eor w4, w1, w0
ffff8000113a2b80: 35000064 cbnz w4, ffff8000113a2b8c <dev_add_offload+0x4c>
ffff8000113a2b84: 88047ca3 stxr w4, w3, [x5]
ffff8000113a2b88: 35ffff84 cbnz w4, ffff8000113a2b78 <dev_add_offload+0x38>
ffff8000113a2b8c: 35000541 cbnz w1, ffff8000113a2c34 <dev_add_offload+0xf4>
list_for_each_entry(elem, &offload_base, list) {
ffff8000113a2b90: 90000004 adrp x4, ffff80001139e37c <__my_cpu_offset>
ffff8000113a2b90: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a2b94: 91000084 add x4, x4, #0x0
ffff8000113a2b94: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a2b98: f9440880 ldr x0, [x4,#2064]
ffff8000113a2b9c: 91204084 add x4, x4, #0x810
ffff8000113a2ba0: eb00009f cmp x4, x0
ffff8000113a2ba4: d1008002 sub x2, x0, #0x20
ffff8000113a2ba8: 540001a0 b.eq ffff8000113a2bdc <dev_add_offload+0x9c>
if (po->priority < elem->priority)
ffff8000113a2bac: 79400683 ldrh w3, [x20,#2]
ffff8000113a2bb0: 785e2000 ldurh w0, [x0,#-30]
ffff8000113a2bb4: 6b03001f cmp w0, w3
ffff8000113a2bb8: 540000a9 b.ls ffff8000113a2bcc <dev_add_offload+0x8c>
ffff8000113a2bbc: 14000008 b ffff8000113a2bdc <dev_add_offload+0x9c>
ffff8000113a2bc0: 785e2021 ldurh w1, [x1,#-30]
ffff8000113a2bc4: 6b03003f cmp w1, w3
ffff8000113a2bc8: 540000a8 b.hi ffff8000113a2bdc <dev_add_offload+0x9c>
list_for_each_entry(elem, &offload_base, list) {
ffff8000113a2bcc: f9401041 ldr x1, [x2,#32]
ffff8000113a2bd0: eb01009f cmp x4, x1
ffff8000113a2bd4: d1008022 sub x2, x1, #0x20
ffff8000113a2bd8: 54ffff41 b.ne ffff8000113a2bc0 <dev_add_offload+0x80>
list_add_rcu(&po->list, elem->list.prev);
ffff8000113a2bdc: f9401453 ldr x19, [x2,#40]
ffff8000113a2be0: 91008296 add x22, x20, #0x20
__list_add_rcu(new, head, head->next);
ffff8000113a2be4: f9400275 ldr x21, [x19]
if (!__list_add_valid(new, prev, next))
ffff8000113a2be8: aa1603e0 mov x0, x22
ffff8000113a2bec: aa1303e1 mov x1, x19
ffff8000113a2bf0: aa1503e2 mov x2, x21
ffff8000113a2bf4: 94000000 bl 0 <__list_add_valid>
ffff8000113a2bf4: R_AARCH64_CALL26 __list_add_valid
ffff8000113a2bf8: 53001c00 uxtb w0, w0
ffff8000113a2bfc: 340000a0 cbz w0, ffff8000113a2c10 <dev_add_offload+0xd0>
new->next = next;
ffff8000113a2c00: f9001295 str x21, [x20,#32]
new->prev = prev;
ffff8000113a2c04: f9001693 str x19, [x20,#40]
rcu_assign_pointer(list_next_rcu(prev), new);
ffff8000113a2c08: c89ffe76 stlr x22, [x19]
next->prev = new;
ffff8000113a2c0c: f90006b6 str x22, [x21,#8]
smp_store_release(&lock->locked, 0);
ffff8000113a2c10: 910002f7 add x23, x23, #0x0
ffff8000113a2c10: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a2c14: 52800000 mov w0, #0x0 // #0
ffff8000113a2c18: 910ca2f7 add x23, x23, #0x328
ffff8000113a2c1c: 089ffee0 stlrb w0, [x23]
}
ffff8000113a2c20: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a2c24: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a2c28: f9401bf7 ldr x23, [sp,#48]
ffff8000113a2c2c: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a2c30: d65f03c0 ret
queued_spin_lock_slowpath(lock, val);
ffff8000113a2c34: 910ca040 add x0, x2, #0x328
ffff8000113a2c38: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113a2c38: R_AARCH64_CALL26 queued_spin_lock_slowpath
ffff8000113a2c3c: 17ffffd5 b ffff8000113a2b90 <dev_add_offload+0x50>
ffff8000113a2c40 <dev_fill_metadata_dst>:
{
ffff8000113a2c40: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a2c44: 910003fd mov x29, sp
ffff8000113a2c48: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a2c4c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a2c50: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a2c54: aa0003f3 mov x19, x0
ffff8000113a2c58: aa1e03e0 mov x0, x30
ffff8000113a2c5c: aa0103f5 mov x21, x1
ffff8000113a2c60: 94000000 bl 0 <_mcount>
ffff8000113a2c60: R_AARCH64_CALL26 _mcount
if (!dev->netdev_ops || !dev->netdev_ops->ndo_fill_metadata_dst)
ffff8000113a2c64: f940fa60 ldr x0, [x19,#496]
ffff8000113a2c68: b4000a00 cbz x0, ffff8000113a2da8 <dev_fill_metadata_dst+0x168>
ffff8000113a2c6c: f9411c00 ldr x0, [x0,#568]
ffff8000113a2c70: b40009c0 cbz x0, ffff8000113a2da8 <dev_fill_metadata_dst+0x168>
return (struct dst_entry *)(skb->_skb_refdst & SKB_DST_PTRMASK);
ffff8000113a2c74: f9402eb4 ldr x20, [x21,#88]
ffff8000113a2c78: 927ffa94 and x20, x20, #0xfffffffffffffffe
static inline struct metadata_dst *skb_metadata_dst(const struct sk_buff *skb)
{
struct metadata_dst *md_dst = (struct metadata_dst *) skb_dst(skb);
if (md_dst && md_dst->dst.flags & DST_METADATA)
ffff8000113a2c7c: b4000074 cbz x20, ffff8000113a2c88 <dev_fill_metadata_dst+0x48>
ffff8000113a2c80: 79407280 ldrh w0, [x20,#56]
ffff8000113a2c84: 373800e0 tbnz w0, #7, ffff8000113a2ca0 <dev_fill_metadata_dst+0x60>
return -ENOMEM;
ffff8000113a2c88: 12800160 mov w0, #0xfffffff4 // #-12
}
ffff8000113a2c8c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a2c90: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a2c94: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a2c98: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a2c9c: d65f03c0 ret
{
struct metadata_dst *md_dst = skb_metadata_dst(skb);
int md_size;
struct metadata_dst *new_md;
if (!md_dst || md_dst->type != METADATA_IP_TUNNEL)
ffff8000113a2ca0: b9407281 ldr w1, [x20,#112]
ffff8000113a2ca4: 35ffff21 cbnz w1, ffff8000113a2c88 <dev_fill_metadata_dst+0x48>
return ERR_PTR(-EINVAL);
md_size = md_dst->u.tun_info.options_len;
ffff8000113a2ca8: 39430298 ldrb w24, [x20,#192]
new_md = metadata_dst_alloc(md_size, METADATA_IP_TUNNEL, GFP_ATOMIC);
ffff8000113a2cac: 52814402 mov w2, #0xa20 // #2592
ffff8000113a2cb0: 2a1803e0 mov w0, w24
ffff8000113a2cb4: 94000000 bl 0 <metadata_dst_alloc>
ffff8000113a2cb4: R_AARCH64_CALL26 metadata_dst_alloc
ffff8000113a2cb8: aa0003f6 mov x22, x0
if (!new_md)
ffff8000113a2cbc: b4fffe60 cbz x0, ffff8000113a2c88 <dev_fill_metadata_dst+0x48>
return __builtin_memcpy(p, q, size);
ffff8000113a2cc0: 9101e017 add x23, x0, #0x78
return ERR_PTR(-ENOMEM);
memcpy(&new_md->u.tun_info, &md_dst->u.tun_info,
ffff8000113a2cc4: 53001f02 uxtb w2, w24
ffff8000113a2cc8: aa1703e0 mov x0, x23
ffff8000113a2ccc: 9101e281 add x1, x20, #0x78
ffff8000113a2cd0: 91014042 add x2, x2, #0x50
ffff8000113a2cd4: 94000000 bl 0 <memcpy>
ffff8000113a2cd4: R_AARCH64_CALL26 memcpy
if (skb->_skb_refdst) {
ffff8000113a2cd8: f9402ea0 ldr x0, [x21,#88]
ffff8000113a2cdc: b4000060 cbz x0, ffff8000113a2ce8 <dev_fill_metadata_dst+0xa8>
if (!(refdst & SKB_DST_NOREF))
ffff8000113a2ce0: 360003e0 tbz w0, #0, ffff8000113a2d5c <dev_fill_metadata_dst+0x11c>
skb->_skb_refdst = 0UL;
ffff8000113a2ce4: f9002ebf str xzr, [x21,#88]
__READ_ONCE_SIZE;
ffff8000113a2ce8: b94042c0 ldr w0, [x22,#64]
atomic_fetch_add_unless(atomic_t *v, int a, int u)
{
int c = atomic_read(v);
do {
if (unlikely(c == u))
ffff8000113a2cec: 340005a0 cbz w0, ffff8000113a2da0 <dev_fill_metadata_dst+0x160>
#if !defined(arch_atomic_cmpxchg_relaxed) || defined(arch_atomic_cmpxchg)
static inline int
atomic_cmpxchg(atomic_t *v, int old, int new)
{
kasan_check_write(v, sizeof(*v));
return arch_atomic_cmpxchg(v, old, new);
ffff8000113a2cf0: 910102c2 add x2, x22, #0x40
__CMPXCHG_CASE(rel_, 16)
__CMPXCHG_CASE(rel_, 32)
__CMPXCHG_CASE(rel_, 64)
__CMPXCHG_CASE(mb_, 8)
__CMPXCHG_CASE(mb_, 16)
__CMPXCHG_CASE(mb_, 32)
ffff8000113a2cf4: 2a0003e1 mov w1, w0
break;
} while (!atomic_try_cmpxchg(v, &c, c + a));
ffff8000113a2cf8: 11000403 add w3, w0, #0x1
ffff8000113a2cfc: f9800051 prfm pstl1strm, [x2]
ffff8000113a2d00: 885f7c46 ldxr w6, [x2]
ffff8000113a2d04: 4a0100c4 eor w4, w6, w1
ffff8000113a2d08: 35000084 cbnz w4, ffff8000113a2d18 <dev_fill_metadata_dst+0xd8>
ffff8000113a2d0c: 8804fc43 stlxr w4, w3, [x2]
ffff8000113a2d10: 35ffff84 cbnz w4, ffff8000113a2d00 <dev_fill_metadata_dst+0xc0>
ffff8000113a2d14: d5033bbf dmb ish
if (unlikely(r != o))
ffff8000113a2d18: 6b06001f cmp w0, w6
ffff8000113a2d1c: 540003c1 b.ne ffff8000113a2d94 <dev_fill_metadata_dst+0x154>
skb->_skb_refdst = (unsigned long)dst;
ffff8000113a2d20: f9002eb6 str x22, [x21,#88]
static inline struct ip_tunnel_info *skb_tunnel_info_unclone(struct sk_buff *skb)
{
struct metadata_dst *dst;
dst = tun_dst_unclone(skb);
if (IS_ERR(dst))
ffff8000113a2d24: b14006df cmn x22, #0x1, lsl #12
ffff8000113a2d28: 54fffb08 b.hi ffff8000113a2c88 <dev_fill_metadata_dst+0x48>
if (unlikely(!(info->mode & IP_TUNNEL_INFO_TX)))
ffff8000113a2d2c: 394126e0 ldrb w0, [x23,#73]
ffff8000113a2d30: 360003c0 tbz w0, #0, ffff8000113a2da8 <dev_fill_metadata_dst+0x168>
return dev->netdev_ops->ndo_fill_metadata_dst(dev, skb);
ffff8000113a2d34: f940fa61 ldr x1, [x19,#496]
ffff8000113a2d38: aa1303e0 mov x0, x19
ffff8000113a2d3c: f9411c22 ldr x2, [x1,#568]
ffff8000113a2d40: aa1503e1 mov x1, x21
ffff8000113a2d44: d63f0040 blr x2
}
ffff8000113a2d48: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a2d4c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a2d50: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a2d54: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a2d58: d65f03c0 ret
dst_release((struct dst_entry *)(refdst & SKB_DST_PTRMASK));
ffff8000113a2d5c: 927ff800 and x0, x0, #0xfffffffffffffffe
ffff8000113a2d60: 94000000 bl 0 <dst_release>
ffff8000113a2d60: R_AARCH64_CALL26 dst_release
skb->_skb_refdst = 0UL;
ffff8000113a2d64: f9002ebf str xzr, [x21,#88]
ffff8000113a2d68: 17ffffe0 b ffff8000113a2ce8 <dev_fill_metadata_dst+0xa8>
__CMPXCHG_CASE(w, , mb_, 32, dmb ish, , l, "memory", K)
ffff8000113a2d6c: f9800051 prfm pstl1strm, [x2]
ffff8000113a2d70: 885f7c45 ldxr w5, [x2]
ffff8000113a2d74: 4a0400a7 eor w7, w5, w4
ffff8000113a2d78: 35000087 cbnz w7, ffff8000113a2d88 <dev_fill_metadata_dst+0x148>
ffff8000113a2d7c: 8807fc43 stlxr w7, w3, [x2]
ffff8000113a2d80: 35ffff87 cbnz w7, ffff8000113a2d70 <dev_fill_metadata_dst+0x130>
ffff8000113a2d84: d5033bbf dmb ish
ffff8000113a2d88: 6b0500df cmp w6, w5
ffff8000113a2d8c: 54fffca0 b.eq ffff8000113a2d20 <dev_fill_metadata_dst+0xe0>
ffff8000113a2d90: 2a0503e6 mov w6, w5
ffff8000113a2d94: 2a0603e4 mov w4, w6
} while (!atomic_try_cmpxchg(v, &c, c + a));
ffff8000113a2d98: 110004c3 add w3, w6, #0x1
if (unlikely(c == u))
ffff8000113a2d9c: 35fffe86 cbnz w6, ffff8000113a2d6c <dev_fill_metadata_dst+0x12c>
WARN_ON(atomic_inc_not_zero(&dst->__refcnt) == 0);
ffff8000113a2da0: d4210000 brk #0x800
ffff8000113a2da4: 17ffffdf b ffff8000113a2d20 <dev_fill_metadata_dst+0xe0>
return -EINVAL;
ffff8000113a2da8: 128002a0 mov w0, #0xffffffea // #-22
ffff8000113a2dac: 17ffffb8 b ffff8000113a2c8c <dev_fill_metadata_dst+0x4c>
ffff8000113a2db0 <register_netdevice_notifier_dev_net>:
{
ffff8000113a2db0: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a2db4: 910003fd mov x29, sp
ffff8000113a2db8: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a2dbc: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a2dc0: f9001bf7 str x23, [sp,#48]
ffff8000113a2dc4: aa0003f3 mov x19, x0
ffff8000113a2dc8: aa1e03e0 mov x0, x30
ffff8000113a2dcc: aa0103f6 mov x22, x1
ffff8000113a2dd0: aa0203f5 mov x21, x2
ffff8000113a2dd4: 94000000 bl 0 <_mcount>
ffff8000113a2dd4: R_AARCH64_CALL26 _mcount
rtnl_lock();
ffff8000113a2dd8: 94000000 bl 0 <rtnl_lock>
ffff8000113a2dd8: R_AARCH64_CALL26 rtnl_lock
err = __register_netdevice_notifier_net(dev_net(dev), nb, false);
ffff8000113a2ddc: f9427a60 ldr x0, [x19,#1264]
ffff8000113a2de0: aa1603e1 mov x1, x22
ffff8000113a2de4: 52800002 mov w2, #0x0 // #0
ffff8000113a2de8: 97fff674 bl ffff8000113a07b8 <__register_netdevice_notifier_net>
ffff8000113a2dec: 2a0003f4 mov w20, w0
if (!err) {
ffff8000113a2df0: 34000100 cbz w0, ffff8000113a2e10 <register_netdevice_notifier_dev_net+0x60>
rtnl_unlock();
ffff8000113a2df4: 94000000 bl 0 <rtnl_unlock>
ffff8000113a2df4: R_AARCH64_CALL26 rtnl_unlock
}
ffff8000113a2df8: 2a1403e0 mov w0, w20
ffff8000113a2dfc: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a2e00: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a2e04: f9401bf7 ldr x23, [sp,#48]
ffff8000113a2e08: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a2e0c: d65f03c0 ret
nn->nb = nb;
ffff8000113a2e10: f9000ab6 str x22, [x21,#16]
__list_add(new, head, head->next);
ffff8000113a2e14: f9446276 ldr x22, [x19,#2240]
list_add(&nn->list, &dev->net_notifier_list);
ffff8000113a2e18: 91230277 add x23, x19, #0x8c0
if (!__list_add_valid(new, prev, next))
ffff8000113a2e1c: aa1503e0 mov x0, x21
ffff8000113a2e20: aa1703e1 mov x1, x23
ffff8000113a2e24: aa1603e2 mov x2, x22
ffff8000113a2e28: 94000000 bl 0 <__list_add_valid>
ffff8000113a2e28: R_AARCH64_CALL26 __list_add_valid
ffff8000113a2e2c: 53001c00 uxtb w0, w0
ffff8000113a2e30: 34fffe20 cbz w0, ffff8000113a2df4 <register_netdevice_notifier_dev_net+0x44>
next->prev = new;
ffff8000113a2e34: f90006d5 str x21, [x22,#8]
new->prev = prev;
ffff8000113a2e38: f90006b7 str x23, [x21,#8]
new->next = next;
ffff8000113a2e3c: f90002b6 str x22, [x21]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a2e40: f9046275 str x21, [x19,#2240]
rtnl_unlock();
ffff8000113a2e44: 94000000 bl 0 <rtnl_unlock>
ffff8000113a2e44: R_AARCH64_CALL26 rtnl_unlock
}
ffff8000113a2e48: 2a1403e0 mov w0, w20
ffff8000113a2e4c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a2e50: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a2e54: f9401bf7 ldr x23, [sp,#48]
ffff8000113a2e58: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a2e5c: d65f03c0 ret
ffff8000113a2e60 <deliver_skb>:
{
ffff8000113a2e60: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a2e64: 910003fd mov x29, sp
ffff8000113a2e68: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a2e6c: aa0203e3 mov x3, x2
ffff8000113a2e70: aa0003f3 mov x19, x0
ffff8000113a2e74: aa0103f4 mov x20, x1
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113a2e78: b40000c0 cbz x0, ffff8000113a2e90 <deliver_skb+0x30>
return skb->head + skb->end;
ffff8000113a2e7c: f9406002 ldr x2, [x0,#192]
ffff8000113a2e80: b940bc01 ldr w1, [x0,#188]
ffff8000113a2e84: 8b010041 add x1, x2, x1
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113a2e88: 39400c22 ldrb w2, [x1,#3]
ffff8000113a2e8c: 371802c2 tbnz w2, #3, ffff8000113a2ee4 <deliver_skb+0x84>
refcount_inc(&skb->users);
ffff8000113a2e90: 91035260 add x0, x19, #0xd4
ATOMIC_OPS(add, add, I)
ffff8000113a2e94: f9800011 prfm pstl1strm, [x0]
ffff8000113a2e98: 885f7c01 ldxr w1, [x0]
ffff8000113a2e9c: 11000422 add w2, w1, #0x1
ffff8000113a2ea0: 88047c02 stxr w4, w2, [x0]
ffff8000113a2ea4: 35ffffa4 cbnz w4, ffff8000113a2e98 <deliver_skb+0x38>
*/
static inline void refcount_add(int i, refcount_t *r)
{
int old = atomic_fetch_add_relaxed(i, &r->refs);
if (unlikely(!old))
ffff8000113a2ea8: 6b1f003f cmp w1, wzr
ffff8000113a2eac: 54000380 b.eq ffff8000113a2f1c <deliver_skb+0xbc>
refcount_warn_saturate(r, REFCOUNT_ADD_UAF);
else if (unlikely(old < 0 || old + i < 0))
ffff8000113a2eb0: 540002cb b.lt ffff8000113a2f08 <deliver_skb+0xa8>
ffff8000113a2eb4: 3100043f cmn w1, #0x1
ffff8000113a2eb8: 54000284 b.mi ffff8000113a2f08 <deliver_skb+0xa8>
return pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
ffff8000113a2ebc: f9400a84 ldr x4, [x20,#16]
ffff8000113a2ec0: f9400a61 ldr x1, [x19,#16]
ffff8000113a2ec4: aa1303e0 mov x0, x19
ffff8000113a2ec8: aa1403e2 mov x2, x20
ffff8000113a2ecc: d63f0080 blr x4
ffff8000113a2ed0: 2a0003e4 mov w4, w0
}
ffff8000113a2ed4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a2ed8: 2a0403e0 mov w0, w4
ffff8000113a2edc: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a2ee0: d65f03c0 ret
if (likely(!skb_zcopy(skb)))
ffff8000113a2ee4: f9401421 ldr x1, [x1,#40]
ffff8000113a2ee8: b4fffd41 cbz x1, ffff8000113a2e90 <deliver_skb+0x30>
return skb_copy_ubufs(skb, gfp_mask);
ffff8000113a2eec: 52814401 mov w1, #0xa20 // #2592
ffff8000113a2ef0: f90017a3 str x3, [x29,#40]
ffff8000113a2ef4: 94000000 bl 0 <skb_copy_ubufs>
ffff8000113a2ef4: R_AARCH64_CALL26 skb_copy_ubufs
return -ENOMEM;
ffff8000113a2ef8: 12800164 mov w4, #0xfffffff4 // #-12
if (unlikely(skb_orphan_frags_rx(skb, GFP_ATOMIC)))
ffff8000113a2efc: f94017a3 ldr x3, [x29,#40]
ffff8000113a2f00: 35fffea0 cbnz w0, ffff8000113a2ed4 <deliver_skb+0x74>
ffff8000113a2f04: 17ffffe3 b ffff8000113a2e90 <deliver_skb+0x30>
refcount_warn_saturate(r, REFCOUNT_ADD_OVF);
ffff8000113a2f08: 52800021 mov w1, #0x1 // #1
ffff8000113a2f0c: f90017a3 str x3, [x29,#40]
ffff8000113a2f10: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113a2f10: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113a2f14: f94017a3 ldr x3, [x29,#40]
ffff8000113a2f18: 17ffffe9 b ffff8000113a2ebc <deliver_skb+0x5c>
refcount_warn_saturate(r, REFCOUNT_ADD_UAF);
ffff8000113a2f1c: 52800041 mov w1, #0x2 // #2
ffff8000113a2f20: f90017a3 str x3, [x29,#40]
ffff8000113a2f24: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113a2f24: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113a2f28: f94017a3 ldr x3, [x29,#40]
ffff8000113a2f2c: 17ffffe4 b ffff8000113a2ebc <deliver_skb+0x5c>
ffff8000113a2f30 <rps_trigger_softirq>:
{
ffff8000113a2f30: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a2f34: 910003fd mov x29, sp
ffff8000113a2f38: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a2f3c: f90013f5 str x21, [sp,#32]
ffff8000113a2f40: aa0003f3 mov x19, x0
ffff8000113a2f44: aa1e03e0 mov x0, x30
ffff8000113a2f48: 94000000 bl 0 <_mcount>
ffff8000113a2f48: R_AARCH64_CALL26 _mcount
__list_add(new, head->prev, head);
ffff8000113a2f4c: f9400675 ldr x21, [x19,#8]
list_add_tail(&napi->poll_list, &sd->poll_list);
ffff8000113a2f50: 91044274 add x20, x19, #0x110
if (!__list_add_valid(new, prev, next))
ffff8000113a2f54: aa1403e0 mov x0, x20
ffff8000113a2f58: aa1503e1 mov x1, x21
ffff8000113a2f5c: aa1303e2 mov x2, x19
ffff8000113a2f60: 94000000 bl 0 <__list_add_valid>
ffff8000113a2f60: R_AARCH64_CALL26 __list_add_valid
ffff8000113a2f64: 53001c00 uxtb w0, w0
ffff8000113a2f68: 340000a0 cbz w0, ffff8000113a2f7c <rps_trigger_softirq+0x4c>
next->prev = new;
ffff8000113a2f6c: f9000674 str x20, [x19,#8]
new->next = next;
ffff8000113a2f70: f9008a73 str x19, [x19,#272]
new->prev = prev;
ffff8000113a2f74: f9008e75 str x21, [x19,#280]
ffff8000113a2f78: f90002b4 str x20, [x21]
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
ffff8000113a2f7c: 52800060 mov w0, #0x3 // #3
ffff8000113a2f80: 94000000 bl 0 <__raise_softirq_irqoff>
ffff8000113a2f80: R_AARCH64_CALL26 __raise_softirq_irqoff
sd->received_rps++;
ffff8000113a2f84: b9403260 ldr w0, [x19,#48]
ffff8000113a2f88: 11000400 add w0, w0, #0x1
ffff8000113a2f8c: b9003260 str w0, [x19,#48]
}
ffff8000113a2f90: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a2f94: f94013f5 ldr x21, [sp,#32]
ffff8000113a2f98: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a2f9c: d65f03c0 ret
ffff8000113a2fa0 <netdev_name_node_add>:
{
ffff8000113a2fa0: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a2fa4: 910003fd mov x29, sp
ffff8000113a2fa8: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a2fac: f90013f5 str x21, [sp,#32]
ffff8000113a2fb0: aa0103f3 mov x19, x1
ffff8000113a2fb4: aa0003f5 mov x21, x0
ffff8000113a2fb8: aa1e03e0 mov x0, x30
ffff8000113a2fbc: 94000000 bl 0 <_mcount>
ffff8000113a2fbc: R_AARCH64_CALL26 _mcount
hlist_add_head_rcu(&name_node->hlist,
ffff8000113a2fc0: f9401674 ldr x20, [x19,#40]
__kernel_size_t ret = __real_strnlen(p, maxlen < p_size ? maxlen : p_size);
ffff8000113a2fc4: d2800201 mov x1, #0x10 // #16
ffff8000113a2fc8: aa1403e0 mov x0, x20
ffff8000113a2fcc: 94000000 bl 0 <strnlen>
ffff8000113a2fcc: R_AARCH64_CALL26 strnlen
if (p_size <= ret && maxlen != ret)
ffff8000113a2fd0: b100041f cmn x0, #0x1
__kernel_size_t ret = __real_strnlen(p, maxlen < p_size ? maxlen : p_size);
ffff8000113a2fd4: aa0003e2 mov x2, x0
if (p_size <= ret && maxlen != ret)
ffff8000113a2fd8: 540002a0 b.eq ffff8000113a302c <netdev_name_node_add+0x8c>
unsigned int hash = full_name_hash(net, name, strnlen(name, IFNAMSIZ));
ffff8000113a2fdc: aa1403e1 mov x1, x20
ffff8000113a2fe0: aa1503e0 mov x0, x21
ffff8000113a2fe4: 94000000 bl 0 <full_name_hash>
ffff8000113a2fe4: R_AARCH64_CALL26 full_name_hash
ffff8000113a2fe8: 5290c8e1 mov w1, #0x8647 // #34375
ffff8000113a2fec: 72ac3901 movk w1, #0x61c8, lsl #16
ffff8000113a2ff0: 1b017c00 mul w0, w0, w1
return &net->dev_name_head[hash_32(hash, NETDEV_HASHBITS)];
ffff8000113a2ff4: f94096a2 ldr x2, [x21,#296]
ffff8000113a2ff8: d3587c00 ubfx x0, x0, #24, #8
ffff8000113a2ffc: d37df000 lsl x0, x0, #3
* list-traversal primitive must be guarded by rcu_read_lock().
*/
static inline void hlist_add_head_rcu(struct hlist_node *n,
struct hlist_head *h)
{
struct hlist_node *first = h->first;
ffff8000113a3000: f8606841 ldr x1, [x2,x0]
ffff8000113a3004: 8b000040 add x0, x2, x0
n->next = first;
ffff8000113a3008: f9000261 str x1, [x19]
ffff8000113a300c: f9000660 str x0, [x19,#8]
WRITE_ONCE(n->pprev, &h->first);
rcu_assign_pointer(hlist_first_rcu(h), n);
ffff8000113a3010: c89ffc13 stlr x19, [x0]
if (first)
ffff8000113a3014: b4000041 cbz x1, ffff8000113a301c <netdev_name_node_add+0x7c>
ffff8000113a3018: f9000433 str x19, [x1,#8]
}
ffff8000113a301c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a3020: f94013f5 ldr x21, [sp,#32]
ffff8000113a3024: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a3028: d65f03c0 ret
fortify_panic(__func__);
ffff8000113a302c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a302c: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x90
ffff8000113a3030: 91000000 add x0, x0, #0x0
ffff8000113a3030: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x90
ffff8000113a3034: 91044000 add x0, x0, #0x110
ffff8000113a3038: 94000000 bl 0 <fortify_panic>
ffff8000113a3038: R_AARCH64_CALL26 fortify_panic
ffff8000113a303c <napi_disable>:
{
ffff8000113a303c: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a3040: 910003fd mov x29, sp
ffff8000113a3044: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a3048: f90013f5 str x21, [sp,#32]
ffff8000113a304c: aa0003f4 mov x20, x0
ffff8000113a3050: aa1e03e0 mov x0, x30
ffff8000113a3054: 94000000 bl 0 <_mcount>
ffff8000113a3054: R_AARCH64_CALL26 _mcount
ffff8000113a3058: 90000015 adrp x21, 0 <__stack_chk_guard>
ffff8000113a3058: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a305c: f94002a0 ldr x0, [x21]
ffff8000113a305c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
p += BIT_WORD(nr);
ffff8000113a3060: 91004293 add x19, x20, #0x10
ffff8000113a3064: f9001fa0 str x0, [x29,#56]
might_sleep();
ffff8000113a3068: 94000000 bl 0 <_cond_resched>
ffff8000113a3068: R_AARCH64_CALL26 _cond_resched
ATOMIC64_OPS(or, orr, L)
ffff8000113a306c: f9800271 prfm pstl1strm, [x19]
ffff8000113a3070: c85f7e60 ldxr x0, [x19]
ffff8000113a3074: b27e0000 orr x0, x0, #0x4
ffff8000113a3078: c8017e60 stxr w1, x0, [x19]
ffff8000113a307c: 35ffffa1 cbnz w1, ffff8000113a3070 <napi_disable+0x34>
ffff8000113a3080: 14000003 b ffff8000113a308c <napi_disable+0x50>
msleep(1);
ffff8000113a3084: 52800020 mov w0, #0x1 // #1
ffff8000113a3088: 94000000 bl 0 <msleep>
ffff8000113a3088: R_AARCH64_CALL26 msleep
__READ_ONCE_SIZE;
ffff8000113a308c: f9400a80 ldr x0, [x20,#16]
if (READ_ONCE(*p) & mask)
ffff8000113a3090: 3707ffa0 tbnz w0, #0, ffff8000113a3084 <napi_disable+0x48>
ffff8000113a3094: f9800271 prfm pstl1strm, [x19]
ffff8000113a3098: c85f7e60 ldxr x0, [x19]
ffff8000113a309c: b2400001 orr x1, x0, #0x1
ffff8000113a30a0: c802fe61 stlxr w2, x1, [x19]
ffff8000113a30a4: 35ffffa2 cbnz w2, ffff8000113a3098 <napi_disable+0x5c>
ffff8000113a30a8: d5033bbf dmb ish
while (test_and_set_bit(NAPI_STATE_SCHED, &n->state))
ffff8000113a30ac: 3707fec0 tbnz w0, #0, ffff8000113a3084 <napi_disable+0x48>
ffff8000113a30b0: f9400a80 ldr x0, [x20,#16]
ffff8000113a30b4: 361800a0 tbz w0, #3, ffff8000113a30c8 <napi_disable+0x8c>
msleep(1);
ffff8000113a30b8: 52800020 mov w0, #0x1 // #1
ffff8000113a30bc: 94000000 bl 0 <msleep>
ffff8000113a30bc: R_AARCH64_CALL26 msleep
ffff8000113a30c0: f9400a80 ldr x0, [x20,#16]
ffff8000113a30c4: 371fffa0 tbnz w0, #3, ffff8000113a30b8 <napi_disable+0x7c>
ffff8000113a30c8: f9800271 prfm pstl1strm, [x19]
ffff8000113a30cc: c85f7e60 ldxr x0, [x19]
ffff8000113a30d0: b27d0001 orr x1, x0, #0x8
ffff8000113a30d4: c802fe61 stlxr w2, x1, [x19]
ffff8000113a30d8: 35ffffa2 cbnz w2, ffff8000113a30cc <napi_disable+0x90>
ffff8000113a30dc: d5033bbf dmb ish
while (test_and_set_bit(NAPI_STATE_NPSVC, &n->state))
ffff8000113a30e0: 371ffec0 tbnz w0, #3, ffff8000113a30b8 <napi_disable+0x7c>
hrtimer_cancel(&n->timer);
ffff8000113a30e4: 91048280 add x0, x20, #0x120
ffff8000113a30e8: 94000000 bl 0 <hrtimer_cancel>
ffff8000113a30e8: R_AARCH64_CALL26 hrtimer_cancel
ATOMIC64_OPS(andnot, bic, )
ffff8000113a30ec: d2800080 mov x0, #0x4 // #4
ffff8000113a30f0: 91004284 add x4, x20, #0x10
ffff8000113a30f4: f9800091 prfm pstl1strm, [x4]
ffff8000113a30f8: c85f7c81 ldxr x1, [x4]
ffff8000113a30fc: 8a200021 bic x1, x1, x0
ffff8000113a3100: c8027c81 stxr w2, x1, [x4]
ffff8000113a3104: 35ffffa2 cbnz w2, ffff8000113a30f8 <napi_disable+0xbc>
}
ffff8000113a3108: f9401fa1 ldr x1, [x29,#56]
ffff8000113a310c: f94002a0 ldr x0, [x21]
ffff8000113a310c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a3110: eb00003f cmp x1, x0
ffff8000113a3114: 540000a1 b.ne ffff8000113a3128 <napi_disable+0xec>
ffff8000113a3118: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a311c: f94013f5 ldr x21, [sp,#32]
ffff8000113a3120: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a3124: d65f03c0 ret
ffff8000113a3128: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a3128: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a312c <__netdev_name_node_alt_destroy>:
{
ffff8000113a312c: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a3130: 910003fd mov x29, sp
ffff8000113a3134: f9000bf3 str x19, [sp,#16]
ffff8000113a3138: aa0003f3 mov x19, x0
ffff8000113a313c: aa1e03e0 mov x0, x30
ffff8000113a3140: 94000000 bl 0 <_mcount>
ffff8000113a3140: R_AARCH64_CALL26 _mcount
if (!__list_del_entry_valid(entry))
ffff8000113a3144: 91004260 add x0, x19, #0x10
ffff8000113a3148: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113a3148: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113a314c: 53001c00 uxtb w0, w0
ffff8000113a3150: 340000a0 cbz w0, ffff8000113a3164 <__netdev_name_node_alt_destroy+0x38>
__list_del(entry->prev, entry->next);
ffff8000113a3154: f9400e60 ldr x0, [x19,#24]
ffff8000113a3158: f9400a61 ldr x1, [x19,#16]
next->prev = prev;
ffff8000113a315c: f9000420 str x0, [x1,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a3160: f9000001 str x1, [x0]
entry->next = LIST_POISON1;
ffff8000113a3164: d2802002 mov x2, #0x100 // #256
entry->prev = LIST_POISON2;
ffff8000113a3168: d2802441 mov x1, #0x122 // #290
entry->next = LIST_POISON1;
ffff8000113a316c: f2fbd5a2 movk x2, #0xdead, lsl #48
entry->prev = LIST_POISON2;
ffff8000113a3170: f2fbd5a1 movk x1, #0xdead, lsl #48
struct hlist_node *next = n->next;
ffff8000113a3174: f9400260 ldr x0, [x19]
struct hlist_node **pprev = n->pprev;
ffff8000113a3178: f9400663 ldr x3, [x19,#8]
entry->next = LIST_POISON1;
ffff8000113a317c: f9000a62 str x2, [x19,#16]
entry->prev = LIST_POISON2;
ffff8000113a3180: f9000e61 str x1, [x19,#24]
ffff8000113a3184: f9000060 str x0, [x3]
if (next)
ffff8000113a3188: b4000040 cbz x0, ffff8000113a3190 <__netdev_name_node_alt_destroy+0x64>
ffff8000113a318c: f9000403 str x3, [x0,#8]
ffff8000113a3190: d2802441 mov x1, #0x122 // #290
ffff8000113a3194: f2fbd5a1 movk x1, #0xdead, lsl #48
kfree(name_node->name);
ffff8000113a3198: f9401660 ldr x0, [x19,#40]
ffff8000113a319c: f9000661 str x1, [x19,#8]
ffff8000113a31a0: 94000000 bl 0 <kfree>
ffff8000113a31a0: R_AARCH64_CALL26 kfree
kfree(name_node);
ffff8000113a31a4: aa1303e0 mov x0, x19
ffff8000113a31a8: 94000000 bl 0 <kfree>
ffff8000113a31a8: R_AARCH64_CALL26 kfree
}
ffff8000113a31ac: f9400bf3 ldr x19, [sp,#16]
ffff8000113a31b0: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a31b4: d65f03c0 ret
ffff8000113a31b8 <netdev_name_node_alt_destroy>:
{
ffff8000113a31b8: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a31bc: 910003fd mov x29, sp
ffff8000113a31c0: f9000bf3 str x19, [sp,#16]
ffff8000113a31c4: aa0003f3 mov x19, x0
ffff8000113a31c8: aa1e03e0 mov x0, x30
ffff8000113a31cc: f90017a1 str x1, [x29,#40]
ffff8000113a31d0: 94000000 bl 0 <_mcount>
ffff8000113a31d0: R_AARCH64_CALL26 _mcount
name_node = netdev_name_node_lookup(net, name);
ffff8000113a31d4: f9427a60 ldr x0, [x19,#1264]
ffff8000113a31d8: f94017a1 ldr x1, [x29,#40]
ffff8000113a31dc: 97fff125 bl ffff80001139f670 <netdev_name_node_lookup>
if (!name_node)
ffff8000113a31e0: b4000200 cbz x0, ffff8000113a3220 <netdev_name_node_alt_destroy+0x68>
if (name_node == dev->name_node || name_node->dev != dev)
ffff8000113a31e4: f9400a62 ldr x2, [x19,#16]
ffff8000113a31e8: eb00005f cmp x2, x0
ffff8000113a31ec: 54000120 b.eq ffff8000113a3210 <netdev_name_node_alt_destroy+0x58>
ffff8000113a31f0: f9401001 ldr x1, [x0,#32]
ffff8000113a31f4: eb13003f cmp x1, x19
ffff8000113a31f8: 540000c1 b.ne ffff8000113a3210 <netdev_name_node_alt_destroy+0x58>
__netdev_name_node_alt_destroy(name_node);
ffff8000113a31fc: 97ffffcc bl ffff8000113a312c <__netdev_name_node_alt_destroy>
return 0;
ffff8000113a3200: 52800000 mov w0, #0x0 // #0
}
ffff8000113a3204: f9400bf3 ldr x19, [sp,#16]
ffff8000113a3208: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a320c: d65f03c0 ret
ffff8000113a3210: f9400bf3 ldr x19, [sp,#16]
return -EINVAL;
ffff8000113a3214: 128002a0 mov w0, #0xffffffea // #-22
}
ffff8000113a3218: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a321c: d65f03c0 ret
return -ENOENT;
ffff8000113a3220: 12800020 mov w0, #0xfffffffe // #-2
ffff8000113a3224: 17fffff8 b ffff8000113a3204 <netdev_name_node_alt_destroy+0x4c>
ffff8000113a3228 <netdev_name_node_alt_create>:
{
ffff8000113a3228: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a322c: 910003fd mov x29, sp
ffff8000113a3230: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a3234: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a3238: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a323c: aa0003f4 mov x20, x0
ffff8000113a3240: aa1e03e0 mov x0, x30
ffff8000113a3244: aa0103f3 mov x19, x1
ffff8000113a3248: 94000000 bl 0 <_mcount>
ffff8000113a3248: R_AARCH64_CALL26 _mcount
ffff8000113a324c: f9427a95 ldr x21, [x20,#1264]
name_node = netdev_name_node_lookup(net, name);
ffff8000113a3250: aa1303e1 mov x1, x19
ffff8000113a3254: aa1503e0 mov x0, x21
ffff8000113a3258: 97fff106 bl ffff80001139f670 <netdev_name_node_lookup>
ffff8000113a325c: aa0003f6 mov x22, x0
if (name_node)
ffff8000113a3260: b50003a0 cbnz x0, ffff8000113a32d4 <netdev_name_node_alt_create+0xac>
name_node = netdev_name_node_alloc(dev, name);
ffff8000113a3264: aa1303e1 mov x1, x19
ffff8000113a3268: aa1403e0 mov x0, x20
ffff8000113a326c: 97fff135 bl ffff80001139f740 <netdev_name_node_alloc>
ffff8000113a3270: aa0003f3 mov x19, x0
if (!name_node)
ffff8000113a3274: b40003c0 cbz x0, ffff8000113a32ec <netdev_name_node_alt_create+0xc4>
netdev_name_node_add(net, name_node);
ffff8000113a3278: aa1503e0 mov x0, x21
ffff8000113a327c: aa1303e1 mov x1, x19
ffff8000113a3280: 97ffff48 bl ffff8000113a2fa0 <netdev_name_node_add>
list_add_tail(&name_node->list, &dev->name_node->list);
ffff8000113a3284: f9400a94 ldr x20, [x20,#16]
ffff8000113a3288: 91004277 add x23, x19, #0x10
__list_add(new, head->prev, head);
ffff8000113a328c: f9400e95 ldr x21, [x20,#24]
ffff8000113a3290: 91004298 add x24, x20, #0x10
if (!__list_add_valid(new, prev, next))
ffff8000113a3294: aa1503e1 mov x1, x21
ffff8000113a3298: aa1703e0 mov x0, x23
ffff8000113a329c: aa1803e2 mov x2, x24
ffff8000113a32a0: 94000000 bl 0 <__list_add_valid>
ffff8000113a32a0: R_AARCH64_CALL26 __list_add_valid
ffff8000113a32a4: 53001c01 uxtb w1, w0
return 0;
ffff8000113a32a8: 2a1603e0 mov w0, w22
ffff8000113a32ac: 340000a1 cbz w1, ffff8000113a32c0 <netdev_name_node_alt_create+0x98>
next->prev = new;
ffff8000113a32b0: f9000e97 str x23, [x20,#24]
new->next = next;
ffff8000113a32b4: f9000a78 str x24, [x19,#16]
new->prev = prev;
ffff8000113a32b8: f9000e75 str x21, [x19,#24]
ffff8000113a32bc: f90002b7 str x23, [x21]
}
ffff8000113a32c0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a32c4: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a32c8: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a32cc: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a32d0: d65f03c0 ret
return -EEXIST;
ffff8000113a32d4: 12800200 mov w0, #0xffffffef // #-17
}
ffff8000113a32d8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a32dc: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a32e0: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a32e4: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a32e8: d65f03c0 ret
return -ENOMEM;
ffff8000113a32ec: 12800160 mov w0, #0xfffffff4 // #-12
ffff8000113a32f0: 17fffff4 b ffff8000113a32c0 <netdev_name_node_alt_create+0x98>
ffff8000113a32f4 <unregister_netdevice_notifier_dev_net>:
{
ffff8000113a32f4: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a32f8: 910003fd mov x29, sp
ffff8000113a32fc: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a3300: aa0003f4 mov x20, x0
ffff8000113a3304: aa1e03e0 mov x0, x30
ffff8000113a3308: aa0203f3 mov x19, x2
ffff8000113a330c: f90017a1 str x1, [x29,#40]
ffff8000113a3310: 94000000 bl 0 <_mcount>
ffff8000113a3310: R_AARCH64_CALL26 _mcount
rtnl_lock();
ffff8000113a3314: 94000000 bl 0 <rtnl_lock>
ffff8000113a3314: R_AARCH64_CALL26 rtnl_lock
if (!__list_del_entry_valid(entry))
ffff8000113a3318: aa1303e0 mov x0, x19
ffff8000113a331c: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113a331c: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113a3320: 53001c00 uxtb w0, w0
ffff8000113a3324: f94017a1 ldr x1, [x29,#40]
ffff8000113a3328: 340000a0 cbz w0, ffff8000113a333c <unregister_netdevice_notifier_dev_net+0x48>
__list_del(entry->prev, entry->next);
ffff8000113a332c: f9400660 ldr x0, [x19,#8]
ffff8000113a3330: f9400262 ldr x2, [x19]
next->prev = prev;
ffff8000113a3334: f9000440 str x0, [x2,#8]
ffff8000113a3338: f9000002 str x2, [x0]
entry->next = LIST_POISON1;
ffff8000113a333c: d2802003 mov x3, #0x100 // #256
entry->prev = LIST_POISON2;
ffff8000113a3340: d2802442 mov x2, #0x122 // #290
entry->next = LIST_POISON1;
ffff8000113a3344: f2fbd5a3 movk x3, #0xdead, lsl #48
entry->prev = LIST_POISON2;
ffff8000113a3348: f2fbd5a2 movk x2, #0xdead, lsl #48
entry->next = LIST_POISON1;
ffff8000113a334c: f9000263 str x3, [x19]
entry->prev = LIST_POISON2;
ffff8000113a3350: f9000662 str x2, [x19,#8]
err = __unregister_netdevice_notifier_net(dev_net(dev), nb);
ffff8000113a3354: f9427a80 ldr x0, [x20,#1264]
ffff8000113a3358: 97fffab7 bl ffff8000113a1e34 <__unregister_netdevice_notifier_net>
rtnl_unlock();
ffff8000113a335c: f90017a0 str x0, [x29,#40]
ffff8000113a3360: 94000000 bl 0 <rtnl_unlock>
ffff8000113a3360: R_AARCH64_CALL26 rtnl_unlock
}
ffff8000113a3364: f94017a0 ldr x0, [x29,#40]
ffff8000113a3368: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a336c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a3370: d65f03c0 ret
ffff8000113a3374 <list_netdevice>:
{
ffff8000113a3374: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113a3378: 910003fd mov x29, sp
ffff8000113a337c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a3380: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a3384: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a3388: f90023f9 str x25, [sp,#64]
ffff8000113a338c: aa0003f3 mov x19, x0
ffff8000113a3390: aa1e03e0 mov x0, x30
ffff8000113a3394: aa1e03f7 mov x23, x30
ffff8000113a3398: 94000000 bl 0 <_mcount>
ffff8000113a3398: R_AARCH64_CALL26 _mcount
ffff8000113a339c: f9427a74 ldr x20, [x19,#1264]
ASSERT_RTNL();
ffff8000113a33a0: 94000000 bl 0 <rtnl_is_locked>
ffff8000113a33a0: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113a33a4: 340007a0 cbz w0, ffff8000113a3498 <list_netdevice+0x124>
*/
static __always_inline struct task_struct *get_current(void)
{
unsigned long sp_el0;
asm ("mrs %0, sp_el0" : "=r" (sp_el0));
ffff8000113a33a8: d5384100 mrs x0, sp_el0
__READ_ONCE_SIZE;
ffff8000113a33ac: b9401801 ldr w1, [x0,#24]
}
static inline void __preempt_count_add(int val)
{
u32 pc = READ_ONCE(current_thread_info()->preempt.count);
pc += val;
ffff8000113a33b0: 11080021 add w1, w1, #0x200
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff8000113a33b4: b9001801 str w1, [x0,#24]
__CMPXCHG_CASE(w, , acq_, 32, , a, , "memory", K)
ffff8000113a33b8: 90000018 adrp x24, ffff80001139e37c <__my_cpu_offset>
ffff8000113a33b8: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a33bc: 91000301 add x1, x24, #0x0
ffff8000113a33bc: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a33c0: 910cc020 add x0, x1, #0x330
ffff8000113a33c4: 52801fe3 mov w3, #0xff // #255
ffff8000113a33c8: d2800002 mov x2, #0x0 // #0
ffff8000113a33cc: f9800011 prfm pstl1strm, [x0]
ffff8000113a33d0: 885ffc04 ldaxr w4, [x0]
ffff8000113a33d4: 4a020085 eor w5, w4, w2
ffff8000113a33d8: 35000065 cbnz w5, ffff8000113a33e4 <list_netdevice+0x70>
ffff8000113a33dc: 88057c03 stxr w5, w3, [x0]
ffff8000113a33e0: 35ffff85 cbnz w5, ffff8000113a33d0 <list_netdevice+0x5c>
*/
static inline void queued_write_lock(struct qrwlock *lock)
{
u32 cnts = 0;
/* Optimize for the unfair lock case where the fair flag is 0. */
if (likely(atomic_try_cmpxchg_acquire(&lock->cnts, &cnts, _QW_LOCKED)))
ffff8000113a33e4: 35000764 cbnz w4, ffff8000113a34d0 <list_netdevice+0x15c>
__list_add_rcu(new, head->prev, head);
ffff8000113a33e8: f9404e96 ldr x22, [x20,#152]
list_add_tail_rcu(&dev->dev_list, &net->dev_base_head);
ffff8000113a33ec: 91012275 add x21, x19, #0x48
ffff8000113a33f0: 91024299 add x25, x20, #0x90
if (!__list_add_valid(new, prev, next))
ffff8000113a33f4: aa1503e0 mov x0, x21
ffff8000113a33f8: aa1603e1 mov x1, x22
ffff8000113a33fc: aa1903e2 mov x2, x25
ffff8000113a3400: 94000000 bl 0 <__list_add_valid>
ffff8000113a3400: R_AARCH64_CALL26 __list_add_valid
ffff8000113a3404: 53001c00 uxtb w0, w0
ffff8000113a3408: 340000a0 cbz w0, ffff8000113a341c <list_netdevice+0xa8>
new->next = next;
ffff8000113a340c: f9002679 str x25, [x19,#72]
new->prev = prev;
ffff8000113a3410: f90006b6 str x22, [x21,#8]
rcu_assign_pointer(list_next_rcu(prev), new);
ffff8000113a3414: c89ffed5 stlr x21, [x22]
next->prev = new;
ffff8000113a3418: f9004e95 str x21, [x20,#152]
netdev_name_node_add(net, dev->name_node);
ffff8000113a341c: f9400a61 ldr x1, [x19,#16]
ffff8000113a3420: aa1403e0 mov x0, x20
ffff8000113a3424: 97fffedf bl ffff8000113a2fa0 <netdev_name_node_add>
return &net->dev_index_head[ifindex & (NETDEV_HASHENTRIES - 1)];
ffff8000113a3428: 39440260 ldrb w0, [x19,#256]
ffff8000113a342c: f9409a82 ldr x2, [x20,#304]
ffff8000113a3430: d37df000 lsl x0, x0, #3
struct hlist_node *first = h->first;
ffff8000113a3434: f8606841 ldr x1, [x2,x0]
ffff8000113a3438: 8b000040 add x0, x2, x0
n->next = first;
ffff8000113a343c: f901ca61 str x1, [x19,#912]
ffff8000113a3440: 910e4262 add x2, x19, #0x390
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a3444: f901ce60 str x0, [x19,#920]
rcu_assign_pointer(hlist_first_rcu(h), n);
ffff8000113a3448: c89ffc02 stlr x2, [x0]
if (first)
ffff8000113a344c: b4000041 cbz x1, ffff8000113a3454 <list_netdevice+0xe0>
ffff8000113a3450: f9000422 str x2, [x1,#8]
* queued_write_unlock - release write lock of a queue rwlock
* @lock : Pointer to queue rwlock structure
*/
static inline void queued_write_unlock(struct qrwlock *lock)
{
smp_store_release(&lock->wlocked, 0);
ffff8000113a3454: 91000318 add x24, x24, #0x0
ffff8000113a3454: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a3458: 52800000 mov w0, #0x0 // #0
ffff8000113a345c: 910cc318 add x24, x24, #0x330
ffff8000113a3460: 089fff00 stlrb w0, [x24]
static inline void __raw_write_unlock_bh(rwlock_t *lock)
{
rwlock_release(&lock->dep_map, _RET_IP_);
do_raw_write_unlock(lock);
__local_bh_enable_ip(_RET_IP_, SOFTIRQ_LOCK_OFFSET);
ffff8000113a3464: 52804001 mov w1, #0x200 // #512
ffff8000113a3468: aa1703e0 mov x0, x23
ffff8000113a346c: 94000000 bl 0 <__local_bh_enable_ip>
ffff8000113a346c: R_AARCH64_CALL26 __local_bh_enable_ip
ffff8000113a3470: b9401281 ldr w1, [x20,#16]
while (++net->dev_base_seq == 0)
ffff8000113a3474: 31000421 adds w1, w1, #0x1
ffff8000113a3478: 54ffffe0 b.eq ffff8000113a3474 <list_netdevice+0x100>
ffff8000113a347c: b9001281 str w1, [x20,#16]
}
ffff8000113a3480: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a3484: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a3488: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a348c: f94023f9 ldr x25, [sp,#64]
ffff8000113a3490: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113a3494: d65f03c0 ret
ASSERT_RTNL();
ffff8000113a3498: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3498: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113a349c: 91000063 add x3, x3, #0x0
ffff8000113a349c: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113a34a0: 39403860 ldrb w0, [x3,#14]
ffff8000113a34a4: 35fff820 cbnz w0, ffff8000113a33a8 <list_netdevice+0x34>
ffff8000113a34a8: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a34a8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113a34ac: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a34ac: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113a34b0: 52800024 mov w4, #0x1 // #1
ffff8000113a34b4: 91000000 add x0, x0, #0x0
ffff8000113a34b4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113a34b8: 91000021 add x1, x1, #0x0
ffff8000113a34b8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113a34bc: 52802cc2 mov w2, #0x166 // #358
ffff8000113a34c0: 39003864 strb w4, [x3,#14]
ffff8000113a34c4: 94000000 bl 0 <__warn_printk>
ffff8000113a34c4: R_AARCH64_CALL26 __warn_printk
ffff8000113a34c8: d4210000 brk #0x800
ffff8000113a34cc: 17ffffb7 b ffff8000113a33a8 <list_netdevice+0x34>
queued_write_lock_slowpath(lock);
ffff8000113a34d0: 94000000 bl 0 <queued_write_lock_slowpath>
ffff8000113a34d0: R_AARCH64_CALL26 queued_write_lock_slowpath
ffff8000113a34d4: 17ffffc5 b ffff8000113a33e8 <list_netdevice+0x74>
ffff8000113a34d8 <net_dec_ingress_queue>:
{
ffff8000113a34d8: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a34dc: 910003fd mov x29, sp
ffff8000113a34e0: f9000bf3 str x19, [sp,#16]
ffff8000113a34e4: aa1e03e0 mov x0, x30
ffff8000113a34e8: 94000000 bl 0 <_mcount>
ffff8000113a34e8: R_AARCH64_CALL26 _mcount
atomic_inc(&key->enabled);
}
static inline void static_key_slow_dec(struct static_key *key)
{
STATIC_KEY_CHECK_USE(key);
ffff8000113a34ec: 90000000 adrp x0, 0 <static_key_initialized>
ffff8000113a34ec: R_AARCH64_ADR_PREL_PG_HI21 static_key_initialized
ffff8000113a34f0: 39400000 ldrb w0, [x0]
ffff8000113a34f0: R_AARCH64_LDST8_ABS_LO12_NC static_key_initialized
ffff8000113a34f4: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff8000113a34f4: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a34f8: 34000180 cbz w0, ffff8000113a3528 <net_dec_ingress_queue+0x50>
ATOMIC_OPS(sub, sub, J)
ffff8000113a34fc: 91000260 add x0, x19, #0x0
ffff8000113a34fc: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a3500: 52800021 mov w1, #0x1 // #1
ffff8000113a3504: 910ce004 add x4, x0, #0x338
ffff8000113a3508: f9800091 prfm pstl1strm, [x4]
ffff8000113a350c: 885f7c82 ldxr w2, [x4]
ffff8000113a3510: 4b010042 sub w2, w2, w1
ffff8000113a3514: 88037c82 stxr w3, w2, [x4]
ffff8000113a3518: 35ffffa3 cbnz w3, ffff8000113a350c <net_dec_ingress_queue+0x34>
}
ffff8000113a351c: f9400bf3 ldr x19, [sp,#16]
ffff8000113a3520: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a3524: d65f03c0 ret
ffff8000113a3528: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3528: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113a352c: 91000262 add x2, x19, #0x0
ffff8000113a352c: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a3530: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3530: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x238
ffff8000113a3534: 91000021 add x1, x1, #0x0
ffff8000113a3534: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113a3538: 91000000 add x0, x0, #0x0
ffff8000113a3538: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x238
ffff8000113a353c: 91004021 add x1, x1, #0x10
ffff8000113a3540: 910ce042 add x2, x2, #0x338
ffff8000113a3544: 94000000 bl 0 <__warn_printk>
ffff8000113a3544: R_AARCH64_CALL26 __warn_printk
ffff8000113a3548: d4210000 brk #0x800
ffff8000113a354c: 17ffffec b ffff8000113a34fc <net_dec_ingress_queue+0x24>
ffff8000113a3550 <net_dec_egress_queue>:
{
ffff8000113a3550: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a3554: 910003fd mov x29, sp
ffff8000113a3558: f9000bf3 str x19, [sp,#16]
ffff8000113a355c: aa1e03e0 mov x0, x30
ffff8000113a3560: 94000000 bl 0 <_mcount>
ffff8000113a3560: R_AARCH64_CALL26 _mcount
ffff8000113a3564: 90000000 adrp x0, 0 <static_key_initialized>
ffff8000113a3564: R_AARCH64_ADR_PREL_PG_HI21 static_key_initialized
ffff8000113a3568: 39400000 ldrb w0, [x0]
ffff8000113a3568: R_AARCH64_LDST8_ABS_LO12_NC static_key_initialized
ffff8000113a356c: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff8000113a356c: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a3570: 34000180 cbz w0, ffff8000113a35a0 <net_dec_egress_queue+0x50>
ffff8000113a3574: 91000260 add x0, x19, #0x0
ffff8000113a3574: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a3578: 52800021 mov w1, #0x1 // #1
ffff8000113a357c: 910d0004 add x4, x0, #0x340
ffff8000113a3580: f9800091 prfm pstl1strm, [x4]
ffff8000113a3584: 885f7c82 ldxr w2, [x4]
ffff8000113a3588: 4b010042 sub w2, w2, w1
ffff8000113a358c: 88037c82 stxr w3, w2, [x4]
ffff8000113a3590: 35ffffa3 cbnz w3, ffff8000113a3584 <net_dec_egress_queue+0x34>
}
ffff8000113a3594: f9400bf3 ldr x19, [sp,#16]
ffff8000113a3598: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a359c: d65f03c0 ret
ffff8000113a35a0: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a35a0: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113a35a4: 91000262 add x2, x19, #0x0
ffff8000113a35a4: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a35a8: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a35a8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x238
ffff8000113a35ac: 91000021 add x1, x1, #0x0
ffff8000113a35ac: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113a35b0: 91000000 add x0, x0, #0x0
ffff8000113a35b0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x238
ffff8000113a35b4: 91004021 add x1, x1, #0x10
ffff8000113a35b8: 910d0042 add x2, x2, #0x340
ffff8000113a35bc: 94000000 bl 0 <__warn_printk>
ffff8000113a35bc: R_AARCH64_CALL26 __warn_printk
ffff8000113a35c0: d4210000 brk #0x800
ffff8000113a35c4: 17ffffec b ffff8000113a3574 <net_dec_egress_queue+0x24>
ffff8000113a35c8 <net_disable_timestamp>:
{
ffff8000113a35c8: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a35cc: 910003fd mov x29, sp
ffff8000113a35d0: f9000bf3 str x19, [sp,#16]
ffff8000113a35d4: aa1e03e0 mov x0, x30
ffff8000113a35d8: 94000000 bl 0 <_mcount>
ffff8000113a35d8: R_AARCH64_CALL26 _mcount
ffff8000113a35dc: 90000000 adrp x0, 0 <static_key_initialized>
ffff8000113a35dc: R_AARCH64_ADR_PREL_PG_HI21 static_key_initialized
ffff8000113a35e0: 39400000 ldrb w0, [x0]
ffff8000113a35e0: R_AARCH64_LDST8_ABS_LO12_NC static_key_initialized
ffff8000113a35e4: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff8000113a35e4: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a35e8: 34000180 cbz w0, ffff8000113a3618 <net_disable_timestamp+0x50>
ffff8000113a35ec: 91000260 add x0, x19, #0x0
ffff8000113a35ec: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a35f0: 52800021 mov w1, #0x1 // #1
ffff8000113a35f4: 910d2004 add x4, x0, #0x348
ffff8000113a35f8: f9800091 prfm pstl1strm, [x4]
ffff8000113a35fc: 885f7c82 ldxr w2, [x4]
ffff8000113a3600: 4b010042 sub w2, w2, w1
ffff8000113a3604: 88037c82 stxr w3, w2, [x4]
ffff8000113a3608: 35ffffa3 cbnz w3, ffff8000113a35fc <net_disable_timestamp+0x34>
}
ffff8000113a360c: f9400bf3 ldr x19, [sp,#16]
ffff8000113a3610: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a3614: d65f03c0 ret
ffff8000113a3618: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3618: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113a361c: 91000262 add x2, x19, #0x0
ffff8000113a361c: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a3620: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3620: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x238
ffff8000113a3624: 91000021 add x1, x1, #0x0
ffff8000113a3624: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113a3628: 91000000 add x0, x0, #0x0
ffff8000113a3628: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x238
ffff8000113a362c: 91004021 add x1, x1, #0x10
ffff8000113a3630: 910d2042 add x2, x2, #0x348
ffff8000113a3634: 94000000 bl 0 <__warn_printk>
ffff8000113a3634: R_AARCH64_CALL26 __warn_printk
ffff8000113a3638: d4210000 brk #0x800
ffff8000113a363c: 17ffffec b ffff8000113a35ec <net_disable_timestamp+0x24>
ffff8000113a3640 <net_inc_ingress_queue>:
{
ffff8000113a3640: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a3644: 910003fd mov x29, sp
ffff8000113a3648: f9000bf3 str x19, [sp,#16]
ffff8000113a364c: aa1e03e0 mov x0, x30
ffff8000113a3650: 94000000 bl 0 <_mcount>
ffff8000113a3650: R_AARCH64_CALL26 _mcount
STATIC_KEY_CHECK_USE(key);
ffff8000113a3654: 90000000 adrp x0, 0 <static_key_initialized>
ffff8000113a3654: R_AARCH64_ADR_PREL_PG_HI21 static_key_initialized
ffff8000113a3658: 39400000 ldrb w0, [x0]
ffff8000113a3658: R_AARCH64_LDST8_ABS_LO12_NC static_key_initialized
ffff8000113a365c: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff8000113a365c: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a3660: 34000160 cbz w0, ffff8000113a368c <net_inc_ingress_queue+0x4c>
ATOMIC_OPS(add, add, I)
ffff8000113a3664: 91000260 add x0, x19, #0x0
ffff8000113a3664: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a3668: 910ce003 add x3, x0, #0x338
ffff8000113a366c: f9800071 prfm pstl1strm, [x3]
ffff8000113a3670: 885f7c61 ldxr w1, [x3]
ffff8000113a3674: 11000421 add w1, w1, #0x1
ffff8000113a3678: 88027c61 stxr w2, w1, [x3]
ffff8000113a367c: 35ffffa2 cbnz w2, ffff8000113a3670 <net_inc_ingress_queue+0x30>
}
ffff8000113a3680: f9400bf3 ldr x19, [sp,#16]
ffff8000113a3684: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a3688: d65f03c0 ret
ffff8000113a368c: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a368c: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113a3690: 91000262 add x2, x19, #0x0
ffff8000113a3690: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a3694: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3694: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x238
ffff8000113a3698: 91000021 add x1, x1, #0x0
ffff8000113a3698: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113a369c: 91000000 add x0, x0, #0x0
ffff8000113a369c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x238
ffff8000113a36a0: 9100a021 add x1, x1, #0x28
ffff8000113a36a4: 910ce042 add x2, x2, #0x338
ffff8000113a36a8: 94000000 bl 0 <__warn_printk>
ffff8000113a36a8: R_AARCH64_CALL26 __warn_printk
ffff8000113a36ac: d4210000 brk #0x800
ffff8000113a36b0: 17ffffed b ffff8000113a3664 <net_inc_ingress_queue+0x24>
ffff8000113a36b4 <net_inc_egress_queue>:
{
ffff8000113a36b4: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a36b8: 910003fd mov x29, sp
ffff8000113a36bc: f9000bf3 str x19, [sp,#16]
ffff8000113a36c0: aa1e03e0 mov x0, x30
ffff8000113a36c4: 94000000 bl 0 <_mcount>
ffff8000113a36c4: R_AARCH64_CALL26 _mcount
ffff8000113a36c8: 90000000 adrp x0, 0 <static_key_initialized>
ffff8000113a36c8: R_AARCH64_ADR_PREL_PG_HI21 static_key_initialized
ffff8000113a36cc: 39400000 ldrb w0, [x0]
ffff8000113a36cc: R_AARCH64_LDST8_ABS_LO12_NC static_key_initialized
ffff8000113a36d0: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff8000113a36d0: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a36d4: 34000160 cbz w0, ffff8000113a3700 <net_inc_egress_queue+0x4c>
ffff8000113a36d8: 91000260 add x0, x19, #0x0
ffff8000113a36d8: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a36dc: 910d0003 add x3, x0, #0x340
ffff8000113a36e0: f9800071 prfm pstl1strm, [x3]
ffff8000113a36e4: 885f7c61 ldxr w1, [x3]
ffff8000113a36e8: 11000421 add w1, w1, #0x1
ffff8000113a36ec: 88027c61 stxr w2, w1, [x3]
ffff8000113a36f0: 35ffffa2 cbnz w2, ffff8000113a36e4 <net_inc_egress_queue+0x30>
}
ffff8000113a36f4: f9400bf3 ldr x19, [sp,#16]
ffff8000113a36f8: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a36fc: d65f03c0 ret
ffff8000113a3700: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3700: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113a3704: 91000262 add x2, x19, #0x0
ffff8000113a3704: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a3708: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3708: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x238
ffff8000113a370c: 91000021 add x1, x1, #0x0
ffff8000113a370c: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113a3710: 91000000 add x0, x0, #0x0
ffff8000113a3710: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x238
ffff8000113a3714: 9100a021 add x1, x1, #0x28
ffff8000113a3718: 910d0042 add x2, x2, #0x340
ffff8000113a371c: 94000000 bl 0 <__warn_printk>
ffff8000113a371c: R_AARCH64_CALL26 __warn_printk
ffff8000113a3720: d4210000 brk #0x800
ffff8000113a3724: 17ffffed b ffff8000113a36d8 <net_inc_egress_queue+0x24>
ffff8000113a3728 <net_enable_timestamp>:
{
ffff8000113a3728: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a372c: 910003fd mov x29, sp
ffff8000113a3730: f9000bf3 str x19, [sp,#16]
ffff8000113a3734: aa1e03e0 mov x0, x30
ffff8000113a3738: 94000000 bl 0 <_mcount>
ffff8000113a3738: R_AARCH64_CALL26 _mcount
ffff8000113a373c: 90000000 adrp x0, 0 <static_key_initialized>
ffff8000113a373c: R_AARCH64_ADR_PREL_PG_HI21 static_key_initialized
ffff8000113a3740: 39400000 ldrb w0, [x0]
ffff8000113a3740: R_AARCH64_LDST8_ABS_LO12_NC static_key_initialized
ffff8000113a3744: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3744: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a3748: 34000160 cbz w0, ffff8000113a3774 <net_enable_timestamp+0x4c>
ffff8000113a374c: 91000260 add x0, x19, #0x0
ffff8000113a374c: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a3750: 910d2003 add x3, x0, #0x348
ffff8000113a3754: f9800071 prfm pstl1strm, [x3]
ffff8000113a3758: 885f7c61 ldxr w1, [x3]
ffff8000113a375c: 11000421 add w1, w1, #0x1
ffff8000113a3760: 88027c61 stxr w2, w1, [x3]
ffff8000113a3764: 35ffffa2 cbnz w2, ffff8000113a3758 <net_enable_timestamp+0x30>
}
ffff8000113a3768: f9400bf3 ldr x19, [sp,#16]
ffff8000113a376c: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a3770: d65f03c0 ret
ffff8000113a3774: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3774: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113a3778: 91000262 add x2, x19, #0x0
ffff8000113a3778: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a377c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a377c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x238
ffff8000113a3780: 91000021 add x1, x1, #0x0
ffff8000113a3780: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113a3784: 91000000 add x0, x0, #0x0
ffff8000113a3784: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x238
ffff8000113a3788: 9100a021 add x1, x1, #0x28
ffff8000113a378c: 910d2042 add x2, x2, #0x348
ffff8000113a3790: 94000000 bl 0 <__warn_printk>
ffff8000113a3790: R_AARCH64_CALL26 __warn_printk
ffff8000113a3794: d4210000 brk #0x800
ffff8000113a3798: 17ffffed b ffff8000113a374c <net_enable_timestamp+0x24>
ffff8000113a379c <netif_stacked_transfer_operstate>:
{
ffff8000113a379c: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a37a0: 910003fd mov x29, sp
ffff8000113a37a4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a37a8: f90013f5 str x21, [sp,#32]
ffff8000113a37ac: aa0003f5 mov x21, x0
ffff8000113a37b0: aa1e03e0 mov x0, x30
ffff8000113a37b4: aa0103f3 mov x19, x1
ffff8000113a37b8: 90000014 adrp x20, 0 <__stack_chk_guard>
ffff8000113a37b8: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a37bc: 94000000 bl 0 <_mcount>
ffff8000113a37bc: R_AARCH64_CALL26 _mcount
ffff8000113a37c0: f9400281 ldr x1, [x20]
ffff8000113a37c0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
if (rootdev->operstate == IF_OPER_DORMANT)
ffff8000113a37c4: 3948d2a0 ldrb w0, [x21,#564]
{
ffff8000113a37c8: f9001fa1 str x1, [x29,#56]
if (rootdev->operstate == IF_OPER_DORMANT)
ffff8000113a37cc: 7100141f cmp w0, #0x5
__READ_ONCE_SIZE;
ffff8000113a37d0: f9402260 ldr x0, [x19,#64]
ffff8000113a37d4: 54000380 b.eq ffff8000113a3844 <netif_stacked_transfer_operstate+0xa8>
if (!(READ_ONCE(*p) & mask))
ffff8000113a37d8: 36200180 tbz w0, #4, ffff8000113a3808 <netif_stacked_transfer_operstate+0x6c>
ATOMIC64_OPS(andnot, bic, )
ffff8000113a37dc: d2800200 mov x0, #0x10 // #16
ffff8000113a37e0: 91010264 add x4, x19, #0x40
ffff8000113a37e4: f9800091 prfm pstl1strm, [x4]
ffff8000113a37e8: c85f7c81 ldxr x1, [x4]
ffff8000113a37ec: 8a200022 bic x2, x1, x0
ffff8000113a37f0: c803fc82 stlxr w3, x2, [x4]
ffff8000113a37f4: 35ffffa3 cbnz w3, ffff8000113a37e8 <netif_stacked_transfer_operstate+0x4c>
ffff8000113a37f8: d5033bbf dmb ish
if (test_and_clear_bit(__LINK_STATE_DORMANT, &dev->state))
ffff8000113a37fc: 36200061 tbz w1, #4, ffff8000113a3808 <netif_stacked_transfer_operstate+0x6c>
linkwatch_fire_event(dev);
ffff8000113a3800: aa1303e0 mov x0, x19
ffff8000113a3804: 94000000 bl 0 <linkwatch_fire_event>
ffff8000113a3804: R_AARCH64_CALL26 linkwatch_fire_event
ffff8000113a3808: f94022a0 ldr x0, [x21,#64]
if (netif_carrier_ok(rootdev))
ffff8000113a380c: 36100160 tbz w0, #2, ffff8000113a3838 <netif_stacked_transfer_operstate+0x9c>
netif_carrier_off(dev);
ffff8000113a3810: aa1303e0 mov x0, x19
ffff8000113a3814: 94000000 bl 0 <netif_carrier_off>
ffff8000113a3814: R_AARCH64_CALL26 netif_carrier_off
}
ffff8000113a3818: f9401fa1 ldr x1, [x29,#56]
ffff8000113a381c: f9400280 ldr x0, [x20]
ffff8000113a381c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a3820: eb00003f cmp x1, x0
ffff8000113a3824: 54000241 b.ne ffff8000113a386c <netif_stacked_transfer_operstate+0xd0>
ffff8000113a3828: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a382c: f94013f5 ldr x21, [sp,#32]
ffff8000113a3830: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a3834: d65f03c0 ret
netif_carrier_on(dev);
ffff8000113a3838: aa1303e0 mov x0, x19
ffff8000113a383c: 94000000 bl 0 <netif_carrier_on>
ffff8000113a383c: R_AARCH64_CALL26 netif_carrier_on
ffff8000113a3840: 17fffff6 b ffff8000113a3818 <netif_stacked_transfer_operstate+0x7c>
if (READ_ONCE(*p) & mask)
ffff8000113a3844: 3727fe20 tbnz w0, #4, ffff8000113a3808 <netif_stacked_transfer_operstate+0x6c>
ATOMIC64_OPS(or, orr, L)
ffff8000113a3848: 91010263 add x3, x19, #0x40
ffff8000113a384c: f9800071 prfm pstl1strm, [x3]
ffff8000113a3850: c85f7c60 ldxr x0, [x3]
ffff8000113a3854: b27c0001 orr x1, x0, #0x10
ffff8000113a3858: c802fc61 stlxr w2, x1, [x3]
ffff8000113a385c: 35ffffa2 cbnz w2, ffff8000113a3850 <netif_stacked_transfer_operstate+0xb4>
ffff8000113a3860: d5033bbf dmb ish
if (!test_and_set_bit(__LINK_STATE_DORMANT, &dev->state))
ffff8000113a3864: 3627fce0 tbz w0, #4, ffff8000113a3800 <netif_stacked_transfer_operstate+0x64>
ffff8000113a3868: 17ffffe8 b ffff8000113a3808 <netif_stacked_transfer_operstate+0x6c>
}
ffff8000113a386c: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a386c: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a3870 <unlist_netdevice>:
{
ffff8000113a3870: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a3874: 910003fd mov x29, sp
ffff8000113a3878: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a387c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a3880: aa0003f3 mov x19, x0
ffff8000113a3884: aa1e03e0 mov x0, x30
ffff8000113a3888: aa1e03f5 mov x21, x30
ffff8000113a388c: 94000000 bl 0 <_mcount>
ffff8000113a388c: R_AARCH64_CALL26 _mcount
ASSERT_RTNL();
ffff8000113a3890: 94000000 bl 0 <rtnl_is_locked>
ffff8000113a3890: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113a3894: 340007c0 cbz w0, ffff8000113a398c <unlist_netdevice+0x11c>
ffff8000113a3898: d5384100 mrs x0, sp_el0
ffff8000113a389c: b9401801 ldr w1, [x0,#24]
ffff8000113a38a0: 11080021 add w1, w1, #0x200
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff8000113a38a4: b9001801 str w1, [x0,#24]
__CMPXCHG_CASE(w, , acq_, 32, , a, , "memory", K)
ffff8000113a38a8: 90000016 adrp x22, ffff80001139e37c <__my_cpu_offset>
ffff8000113a38a8: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a38ac: 910002c1 add x1, x22, #0x0
ffff8000113a38ac: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a38b0: 910cc020 add x0, x1, #0x330
ffff8000113a38b4: 52801fe3 mov w3, #0xff // #255
ffff8000113a38b8: d2800002 mov x2, #0x0 // #0
ffff8000113a38bc: f9800011 prfm pstl1strm, [x0]
ffff8000113a38c0: 885ffc04 ldaxr w4, [x0]
ffff8000113a38c4: 4a020085 eor w5, w4, w2
ffff8000113a38c8: 35000065 cbnz w5, ffff8000113a38d4 <unlist_netdevice+0x64>
ffff8000113a38cc: 88057c03 stxr w5, w3, [x0]
ffff8000113a38d0: 35ffff85 cbnz w5, ffff8000113a38c0 <unlist_netdevice+0x50>
if (likely(atomic_try_cmpxchg_acquire(&lock->cnts, &cnts, _QW_LOCKED)))
ffff8000113a38d4: 35000784 cbnz w4, ffff8000113a39c4 <unlist_netdevice+0x154>
list_del_rcu(&dev->dev_list);
ffff8000113a38d8: 91012274 add x20, x19, #0x48
if (!__list_del_entry_valid(entry))
ffff8000113a38dc: aa1403e0 mov x0, x20
ffff8000113a38e0: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113a38e0: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113a38e4: 53001c00 uxtb w0, w0
ffff8000113a38e8: 340000a0 cbz w0, ffff8000113a38fc <unlist_netdevice+0x8c>
__list_del(entry->prev, entry->next);
ffff8000113a38ec: f9400680 ldr x0, [x20,#8]
ffff8000113a38f0: f9402661 ldr x1, [x19,#72]
next->prev = prev;
ffff8000113a38f4: f9000420 str x0, [x1,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a38f8: f9000001 str x1, [x0]
entry->prev = LIST_POISON2;
ffff8000113a38fc: d2802440 mov x0, #0x122 // #290
ffff8000113a3900: f2fbd5a0 movk x0, #0xdead, lsl #48
ffff8000113a3904: f9000680 str x0, [x20,#8]
netdev_name_node_del(dev->name_node);
ffff8000113a3908: f9400a61 ldr x1, [x19,#16]
struct hlist_node *next = n->next;
ffff8000113a390c: f9400022 ldr x2, [x1]
struct hlist_node **pprev = n->pprev;
ffff8000113a3910: f9400420 ldr x0, [x1,#8]
ffff8000113a3914: f9000002 str x2, [x0]
if (next)
ffff8000113a3918: b4000042 cbz x2, ffff8000113a3920 <unlist_netdevice+0xb0>
ffff8000113a391c: f9000440 str x0, [x2,#8]
ffff8000113a3920: d2802440 mov x0, #0x122 // #290
ffff8000113a3924: f2fbd5a0 movk x0, #0xdead, lsl #48
ffff8000113a3928: f9000420 str x0, [x1,#8]
struct hlist_node *next = n->next;
ffff8000113a392c: f941ca61 ldr x1, [x19,#912]
struct hlist_node **pprev = n->pprev;
ffff8000113a3930: f941ce60 ldr x0, [x19,#920]
ffff8000113a3934: f9000001 str x1, [x0]
if (next)
ffff8000113a3938: b4000041 cbz x1, ffff8000113a3940 <unlist_netdevice+0xd0>
ffff8000113a393c: f9000420 str x0, [x1,#8]
ffff8000113a3940: d2802440 mov x0, #0x122 // #290
ffff8000113a3944: f2fbd5a0 movk x0, #0xdead, lsl #48
smp_store_release(&lock->wlocked, 0);
ffff8000113a3948: 910002d6 add x22, x22, #0x0
ffff8000113a3948: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a394c: f901ce60 str x0, [x19,#920]
ffff8000113a3950: 910cc2d6 add x22, x22, #0x330
ffff8000113a3954: 52800000 mov w0, #0x0 // #0
ffff8000113a3958: 089ffec0 stlrb w0, [x22]
ffff8000113a395c: 52804001 mov w1, #0x200 // #512
ffff8000113a3960: aa1503e0 mov x0, x21
ffff8000113a3964: 94000000 bl 0 <__local_bh_enable_ip>
ffff8000113a3964: R_AARCH64_CALL26 __local_bh_enable_ip
ffff8000113a3968: f9427a61 ldr x1, [x19,#1264]
ffff8000113a396c: b9401020 ldr w0, [x1,#16]
while (++net->dev_base_seq == 0)
ffff8000113a3970: 31000400 adds w0, w0, #0x1
ffff8000113a3974: 54ffffe0 b.eq ffff8000113a3970 <unlist_netdevice+0x100>
ffff8000113a3978: b9001020 str w0, [x1,#16]
}
ffff8000113a397c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a3980: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a3984: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a3988: d65f03c0 ret
ASSERT_RTNL();
ffff8000113a398c: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113a398c: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113a3990: 91000063 add x3, x3, #0x0
ffff8000113a3990: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113a3994: 39403c60 ldrb w0, [x3,#15]
ffff8000113a3998: 35fff800 cbnz w0, ffff8000113a3898 <unlist_netdevice+0x28>
ffff8000113a399c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a399c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113a39a0: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a39a0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113a39a4: 52800024 mov w4, #0x1 // #1
ffff8000113a39a8: 91000000 add x0, x0, #0x0
ffff8000113a39a8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113a39ac: 91000021 add x1, x1, #0x0
ffff8000113a39ac: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113a39b0: 52802ee2 mov w2, #0x177 // #375
ffff8000113a39b4: 39003c64 strb w4, [x3,#15]
ffff8000113a39b8: 94000000 bl 0 <__warn_printk>
ffff8000113a39b8: R_AARCH64_CALL26 __warn_printk
ffff8000113a39bc: d4210000 brk #0x800
ffff8000113a39c0: 17ffffb6 b ffff8000113a3898 <unlist_netdevice+0x28>
queued_write_lock_slowpath(lock);
ffff8000113a39c4: 94000000 bl 0 <queued_write_lock_slowpath>
ffff8000113a39c4: R_AARCH64_CALL26 queued_write_lock_slowpath
ffff8000113a39c8: 17ffffc4 b ffff8000113a38d8 <unlist_netdevice+0x68>
ffff8000113a39cc <__dev_remove_pack>:
{
ffff8000113a39cc: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a39d0: 910003fd mov x29, sp
ffff8000113a39d4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a39d8: f90013f5 str x21, [sp,#32]
ffff8000113a39dc: aa0003f3 mov x19, x0
ffff8000113a39e0: aa1e03e0 mov x0, x30
ffff8000113a39e4: 94000000 bl 0 <_mcount>
ffff8000113a39e4: R_AARCH64_CALL26 _mcount
void __dev_remove_pack(struct packet_type *pt)
ffff8000113a39e8: 79400260 ldrh w0, [x19]
ffff8000113a39ec: f9400674 ldr x20, [x19,#8]
if (pt->type == htons(ETH_P_ALL))
ffff8000113a39f0: 710c001f cmp w0, #0x300
ffff8000113a39f4: 540005a0 b.eq ffff8000113a3aa8 <__dev_remove_pack+0xdc>
return pt->dev ? &pt->dev->ptype_specific :
ffff8000113a39f8: b40005f4 cbz x20, ffff8000113a3ab4 <__dev_remove_pack+0xe8>
ffff8000113a39fc: 91026294 add x20, x20, #0x98
ffff8000113a3a00: 90000015 adrp x21, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3a00: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a3a04: 910002a0 add x0, x21, #0x0
ffff8000113a3a04: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a3a08: 52800023 mov w3, #0x1 // #1
ffff8000113a3a0c: d2800002 mov x2, #0x0 // #0
ffff8000113a3a10: 910c6005 add x5, x0, #0x318
ffff8000113a3a14: f98000b1 prfm pstl1strm, [x5]
ffff8000113a3a18: 885ffca1 ldaxr w1, [x5]
ffff8000113a3a1c: 4a020024 eor w4, w1, w2
ffff8000113a3a20: 35000064 cbnz w4, ffff8000113a3a2c <__dev_remove_pack+0x60>
ffff8000113a3a24: 88047ca3 stxr w4, w3, [x5]
ffff8000113a3a28: 35ffff84 cbnz w4, ffff8000113a3a18 <__dev_remove_pack+0x4c>
if (unlikely(r != o))
ffff8000113a3a2c: 35000641 cbnz w1, ffff8000113a3af4 <__dev_remove_pack+0x128>
list_for_each_entry(pt1, head, list) {
ffff8000113a3a30: f9400282 ldr x2, [x20]
ffff8000113a3a34: eb02029f cmp x20, x2
ffff8000113a3a38: d100c042 sub x2, x2, #0x30
ffff8000113a3a3c: 540000c1 b.ne ffff8000113a3a54 <__dev_remove_pack+0x88>
ffff8000113a3a40: 14000028 b ffff8000113a3ae0 <__dev_remove_pack+0x114>
ffff8000113a3a44: f9401842 ldr x2, [x2,#48]
ffff8000113a3a48: eb02029f cmp x20, x2
ffff8000113a3a4c: d100c042 sub x2, x2, #0x30
ffff8000113a3a50: 54000480 b.eq ffff8000113a3ae0 <__dev_remove_pack+0x114>
if (pt == pt1) {
ffff8000113a3a54: eb02027f cmp x19, x2
ffff8000113a3a58: 54ffff61 b.ne ffff8000113a3a44 <__dev_remove_pack+0x78>
if (!__list_del_entry_valid(entry))
ffff8000113a3a5c: 9100c260 add x0, x19, #0x30
ffff8000113a3a60: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113a3a60: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113a3a64: 53001c00 uxtb w0, w0
ffff8000113a3a68: 340000a0 cbz w0, ffff8000113a3a7c <__dev_remove_pack+0xb0>
__list_del(entry->prev, entry->next);
ffff8000113a3a6c: f9401e60 ldr x0, [x19,#56]
ffff8000113a3a70: f9401a61 ldr x1, [x19,#48]
next->prev = prev;
ffff8000113a3a74: f9000420 str x0, [x1,#8]
ffff8000113a3a78: f9000001 str x1, [x0]
ffff8000113a3a7c: d2802440 mov x0, #0x122 // #290
ffff8000113a3a80: f2fbd5a0 movk x0, #0xdead, lsl #48
ffff8000113a3a84: f9001e60 str x0, [x19,#56]
smp_store_release(&lock->locked, 0);
ffff8000113a3a88: 910002b5 add x21, x21, #0x0
ffff8000113a3a88: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a3a8c: 52800000 mov w0, #0x0 // #0
ffff8000113a3a90: 910c62b5 add x21, x21, #0x318
ffff8000113a3a94: 089ffea0 stlrb w0, [x21]
}
ffff8000113a3a98: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a3a9c: f94013f5 ldr x21, [sp,#32]
ffff8000113a3aa0: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a3aa4: d65f03c0 ret
return pt->dev ? &pt->dev->ptype_all : &ptype_all;
ffff8000113a3aa8: b4000154 cbz x20, ffff8000113a3ad0 <__dev_remove_pack+0x104>
ffff8000113a3aac: 91022294 add x20, x20, #0x88
ffff8000113a3ab0: 17ffffd4 b ffff8000113a3a00 <__dev_remove_pack+0x34>
return pt->dev ? &pt->dev->ptype_specific :
ffff8000113a3ab4: 90000014 adrp x20, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3ab4: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a3ab8: 5ac00400 rev16 w0, w0
ffff8000113a3abc: 91000294 add x20, x20, #0x0
ffff8000113a3abc: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a3ac0: d37c0c00 ubfiz x0, x0, #4, #4
ffff8000113a3ac4: 9120c294 add x20, x20, #0x830
ffff8000113a3ac8: 8b000294 add x20, x20, x0
ffff8000113a3acc: 17ffffcd b ffff8000113a3a00 <__dev_remove_pack+0x34>
return pt->dev ? &pt->dev->ptype_all : &ptype_all;
ffff8000113a3ad0: 90000014 adrp x20, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3ad0: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a3ad4: 91000294 add x20, x20, #0x0
ffff8000113a3ad4: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a3ad8: 91200294 add x20, x20, #0x800
ffff8000113a3adc: 17ffffc9 b ffff8000113a3a00 <__dev_remove_pack+0x34>
pr_warn("dev_remove_pack: %p not found\n", pt);
ffff8000113a3ae0: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3ae0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x278
ffff8000113a3ae4: aa1303e1 mov x1, x19
ffff8000113a3ae8: 91000000 add x0, x0, #0x0
ffff8000113a3ae8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x278
ffff8000113a3aec: 94000000 bl 0 <printk>
ffff8000113a3aec: R_AARCH64_CALL26 printk
ffff8000113a3af0: 17ffffe6 b ffff8000113a3a88 <__dev_remove_pack+0xbc>
queued_spin_lock_slowpath(lock, val);
ffff8000113a3af4: 910c6000 add x0, x0, #0x318
ffff8000113a3af8: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113a3af8: R_AARCH64_CALL26 queued_spin_lock_slowpath
ffff8000113a3afc: 17ffffcd b ffff8000113a3a30 <__dev_remove_pack+0x64>
ffff8000113a3b00 <dev_remove_pack>:
{
ffff8000113a3b00: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a3b04: 910003fd mov x29, sp
ffff8000113a3b08: f9000bf3 str x19, [sp,#16]
ffff8000113a3b0c: aa0003f3 mov x19, x0
ffff8000113a3b10: aa1e03e0 mov x0, x30
ffff8000113a3b14: 94000000 bl 0 <_mcount>
ffff8000113a3b14: R_AARCH64_CALL26 _mcount
__dev_remove_pack(pt);
ffff8000113a3b18: aa1303e0 mov x0, x19
ffff8000113a3b1c: 94000000 bl ffff8000113a39cc <__dev_remove_pack>
ffff8000113a3b1c: R_AARCH64_CALL26 __dev_remove_pack
synchronize_net();
ffff8000113a3b20: 94000000 bl ffff8000113a1384 <synchronize_net>
ffff8000113a3b20: R_AARCH64_CALL26 synchronize_net
}
ffff8000113a3b24: f9400bf3 ldr x19, [sp,#16]
ffff8000113a3b28: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a3b2c: d65f03c0 ret
ffff8000113a3b30 <netdev_name_node_lookup_rcu>:
{
ffff8000113a3b30: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a3b34: 910003fd mov x29, sp
ffff8000113a3b38: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a3b3c: aa0003f3 mov x19, x0
ffff8000113a3b40: aa1e03e0 mov x0, x30
ffff8000113a3b44: aa0103f4 mov x20, x1
ffff8000113a3b48: 94000000 bl 0 <_mcount>
ffff8000113a3b48: R_AARCH64_CALL26 _mcount
__kernel_size_t ret = __real_strnlen(p, maxlen < p_size ? maxlen : p_size);
ffff8000113a3b4c: aa1403e0 mov x0, x20
ffff8000113a3b50: d2800201 mov x1, #0x10 // #16
ffff8000113a3b54: 94000000 bl 0 <strnlen>
ffff8000113a3b54: R_AARCH64_CALL26 strnlen
if (p_size <= ret && maxlen != ret)
ffff8000113a3b58: b100041f cmn x0, #0x1
__kernel_size_t ret = __real_strnlen(p, maxlen < p_size ? maxlen : p_size);
ffff8000113a3b5c: aa0003e2 mov x2, x0
if (p_size <= ret && maxlen != ret)
ffff8000113a3b60: 540002c0 b.eq ffff8000113a3bb8 <netdev_name_node_lookup_rcu+0x88>
unsigned int hash = full_name_hash(net, name, strnlen(name, IFNAMSIZ));
ffff8000113a3b64: aa1303e0 mov x0, x19
ffff8000113a3b68: aa1403e1 mov x1, x20
ffff8000113a3b6c: 94000000 bl 0 <full_name_hash>
ffff8000113a3b6c: R_AARCH64_CALL26 full_name_hash
ffff8000113a3b70: 5290c8e1 mov w1, #0x8647 // #34375
ffff8000113a3b74: 72ac3901 movk w1, #0x61c8, lsl #16
ffff8000113a3b78: 1b017c00 mul w0, w0, w1
return &net->dev_name_head[hash_32(hash, NETDEV_HASHBITS)];
ffff8000113a3b7c: d3587c01 ubfx x1, x0, #24, #8
ffff8000113a3b80: f9409660 ldr x0, [x19,#296]
ffff8000113a3b84: d37df021 lsl x1, x1, #3
__READ_ONCE_SIZE;
ffff8000113a3b88: f8616813 ldr x19, [x0,x1]
hlist_for_each_entry_rcu(name_node, head, hlist)
ffff8000113a3b8c: b40000f3 cbz x19, ffff8000113a3ba8 <netdev_name_node_lookup_rcu+0x78>
if (!strcmp(name_node->name, name))
ffff8000113a3b90: f9401660 ldr x0, [x19,#40]
ffff8000113a3b94: aa1403e1 mov x1, x20
ffff8000113a3b98: 94000000 bl 0 <strcmp>
ffff8000113a3b98: R_AARCH64_CALL26 strcmp
ffff8000113a3b9c: 34000060 cbz w0, ffff8000113a3ba8 <netdev_name_node_lookup_rcu+0x78>
ffff8000113a3ba0: f9400273 ldr x19, [x19]
hlist_for_each_entry_rcu(name_node, head, hlist)
ffff8000113a3ba4: b5ffff73 cbnz x19, ffff8000113a3b90 <netdev_name_node_lookup_rcu+0x60>
}
ffff8000113a3ba8: aa1303e0 mov x0, x19
ffff8000113a3bac: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a3bb0: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a3bb4: d65f03c0 ret
fortify_panic(__func__);
ffff8000113a3bb8: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3bb8: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x90
ffff8000113a3bbc: 91000000 add x0, x0, #0x0
ffff8000113a3bbc: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x90
ffff8000113a3bc0: 91044000 add x0, x0, #0x110
ffff8000113a3bc4: 94000000 bl 0 <fortify_panic>
ffff8000113a3bc4: R_AARCH64_CALL26 fortify_panic
ffff8000113a3bc8 <dev_get_by_name_rcu>:
{
ffff8000113a3bc8: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a3bcc: 910003fd mov x29, sp
ffff8000113a3bd0: f9000bf3 str x19, [sp,#16]
ffff8000113a3bd4: aa0003f3 mov x19, x0
ffff8000113a3bd8: aa1e03e0 mov x0, x30
ffff8000113a3bdc: f90017a1 str x1, [x29,#40]
ffff8000113a3be0: 94000000 bl 0 <_mcount>
ffff8000113a3be0: R_AARCH64_CALL26 _mcount
node_name = netdev_name_node_lookup_rcu(net, name);
ffff8000113a3be4: f94017a1 ldr x1, [x29,#40]
ffff8000113a3be8: aa1303e0 mov x0, x19
ffff8000113a3bec: 97ffffd1 bl ffff8000113a3b30 <netdev_name_node_lookup_rcu>
return node_name ? node_name->dev : NULL;
ffff8000113a3bf0: b4000040 cbz x0, ffff8000113a3bf8 <dev_get_by_name_rcu+0x30>
ffff8000113a3bf4: f9401000 ldr x0, [x0,#32]
}
ffff8000113a3bf8: f9400bf3 ldr x19, [sp,#16]
ffff8000113a3bfc: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a3c00: d65f03c0 ret
ffff8000113a3c04 <dev_remove_offload>:
{
ffff8000113a3c04: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a3c08: 910003fd mov x29, sp
ffff8000113a3c0c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a3c10: aa0003f3 mov x19, x0
ffff8000113a3c14: aa1e03e0 mov x0, x30
ffff8000113a3c18: 94000000 bl 0 <_mcount>
ffff8000113a3c18: R_AARCH64_CALL26 _mcount
ffff8000113a3c1c: 90000014 adrp x20, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3c1c: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a3c20: 91000280 add x0, x20, #0x0
ffff8000113a3c20: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a3c24: 52800023 mov w3, #0x1 // #1
ffff8000113a3c28: d2800002 mov x2, #0x0 // #0
ffff8000113a3c2c: 910ca005 add x5, x0, #0x328
ffff8000113a3c30: f98000b1 prfm pstl1strm, [x5]
ffff8000113a3c34: 885ffca1 ldaxr w1, [x5]
ffff8000113a3c38: 4a020024 eor w4, w1, w2
ffff8000113a3c3c: 35000064 cbnz w4, ffff8000113a3c48 <dev_remove_offload+0x44>
ffff8000113a3c40: 88047ca3 stxr w4, w3, [x5]
ffff8000113a3c44: 35ffff84 cbnz w4, ffff8000113a3c34 <dev_remove_offload+0x30>
ffff8000113a3c48: 350004e1 cbnz w1, ffff8000113a3ce4 <dev_remove_offload+0xe0>
list_for_each_entry(po1, head, list) {
ffff8000113a3c4c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3c4c: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a3c50: 91000000 add x0, x0, #0x0
ffff8000113a3c50: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a3c54: f9440802 ldr x2, [x0,#2064]
ffff8000113a3c58: 91204000 add x0, x0, #0x810
ffff8000113a3c5c: eb02001f cmp x0, x2
ffff8000113a3c60: d1008042 sub x2, x2, #0x20
ffff8000113a3c64: 540000c1 b.ne ffff8000113a3c7c <dev_remove_offload+0x78>
ffff8000113a3c68: 1400001a b ffff8000113a3cd0 <dev_remove_offload+0xcc>
ffff8000113a3c6c: f9401042 ldr x2, [x2,#32]
ffff8000113a3c70: eb02001f cmp x0, x2
ffff8000113a3c74: d1008042 sub x2, x2, #0x20
ffff8000113a3c78: 540002c0 b.eq ffff8000113a3cd0 <dev_remove_offload+0xcc>
if (po == po1) {
ffff8000113a3c7c: eb02027f cmp x19, x2
ffff8000113a3c80: 54ffff61 b.ne ffff8000113a3c6c <dev_remove_offload+0x68>
if (!__list_del_entry_valid(entry))
ffff8000113a3c84: 91008260 add x0, x19, #0x20
ffff8000113a3c88: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113a3c88: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113a3c8c: 53001c00 uxtb w0, w0
ffff8000113a3c90: 340000a0 cbz w0, ffff8000113a3ca4 <dev_remove_offload+0xa0>
__list_del(entry->prev, entry->next);
ffff8000113a3c94: f9401660 ldr x0, [x19,#40]
ffff8000113a3c98: f9401261 ldr x1, [x19,#32]
next->prev = prev;
ffff8000113a3c9c: f9000420 str x0, [x1,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a3ca0: f9000001 str x1, [x0]
ffff8000113a3ca4: d2802440 mov x0, #0x122 // #290
ffff8000113a3ca8: f2fbd5a0 movk x0, #0xdead, lsl #48
ffff8000113a3cac: f9001660 str x0, [x19,#40]
smp_store_release(&lock->locked, 0);
ffff8000113a3cb0: 91000294 add x20, x20, #0x0
ffff8000113a3cb0: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a3cb4: 52800000 mov w0, #0x0 // #0
ffff8000113a3cb8: 910ca294 add x20, x20, #0x328
ffff8000113a3cbc: 089ffe80 stlrb w0, [x20]
synchronize_net();
ffff8000113a3cc0: 94000000 bl ffff8000113a1384 <synchronize_net>
ffff8000113a3cc0: R_AARCH64_CALL26 synchronize_net
}
ffff8000113a3cc4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a3cc8: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a3ccc: d65f03c0 ret
pr_warn("dev_remove_offload: %p not found\n", po);
ffff8000113a3cd0: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a3cd0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x2a0
ffff8000113a3cd4: aa1303e1 mov x1, x19
ffff8000113a3cd8: 91000000 add x0, x0, #0x0
ffff8000113a3cd8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x2a0
ffff8000113a3cdc: 94000000 bl 0 <printk>
ffff8000113a3cdc: R_AARCH64_CALL26 printk
ffff8000113a3ce0: 17fffff4 b ffff8000113a3cb0 <dev_remove_offload+0xac>
queued_spin_lock_slowpath(lock, val);
ffff8000113a3ce4: 910ca000 add x0, x0, #0x328
ffff8000113a3ce8: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113a3ce8: R_AARCH64_CALL26 queued_spin_lock_slowpath
ffff8000113a3cec: 17ffffd8 b ffff8000113a3c4c <dev_remove_offload+0x48>
ffff8000113a3cf0 <dev_close_many>:
{
ffff8000113a3cf0: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff8000113a3cf4: 910003fd mov x29, sp
ffff8000113a3cf8: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a3cfc: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a3d00: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a3d04: aa0003f6 mov x22, x0
ffff8000113a3d08: aa1e03e0 mov x0, x30
ffff8000113a3d0c: 53001c37 uxtb w23, w1
ffff8000113a3d10: 94000000 bl 0 <_mcount>
ffff8000113a3d10: R_AARCH64_CALL26 _mcount
list_for_each_entry_safe(dev, tmp, head, close_list)
ffff8000113a3d14: f94002d3 ldr x19, [x22]
{
ffff8000113a3d18: 90000018 adrp x24, 0 <__stack_chk_guard>
ffff8000113a3d18: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a3d1c: f9400300 ldr x0, [x24]
ffff8000113a3d1c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
list_for_each_entry_safe(dev, tmp, head, close_list)
ffff8000113a3d20: aa1303f4 mov x20, x19
ffff8000113a3d24: f8588695 ldr x21, [x20],#-120
{
ffff8000113a3d28: f9002fa0 str x0, [x29,#88]
list_for_each_entry_safe(dev, tmp, head, close_list)
ffff8000113a3d2c: eb16027f cmp x19, x22
ffff8000113a3d30: d101e2b5 sub x21, x21, #0x78
ffff8000113a3d34: 54000121 b.ne ffff8000113a3d58 <dev_close_many+0x68>
ffff8000113a3d38: 1400001a b ffff8000113a3da0 <dev_close_many+0xb0>
ffff8000113a3d3c: aa1503f3 mov x19, x21
ffff8000113a3d40: f8478e60 ldr x0, [x19,#120]!
ffff8000113a3d44: eb16027f cmp x19, x22
ffff8000113a3d48: d101e000 sub x0, x0, #0x78
ffff8000113a3d4c: 540002a0 b.eq ffff8000113a3da0 <dev_close_many+0xb0>
ffff8000113a3d50: aa1503f4 mov x20, x21
ffff8000113a3d54: aa0003f5 mov x21, x0
if (!(dev->flags & IFF_UP))
ffff8000113a3d58: b9422a80 ldr w0, [x20,#552]
ffff8000113a3d5c: 3707ff00 tbnz w0, #0, ffff8000113a3d3c <dev_close_many+0x4c>
if (!__list_del_entry_valid(entry))
ffff8000113a3d60: aa1303e0 mov x0, x19
ffff8000113a3d64: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113a3d64: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113a3d68: 53001c00 uxtb w0, w0
ffff8000113a3d6c: 9101e281 add x1, x20, #0x78
ffff8000113a3d70: 340000a0 cbz w0, ffff8000113a3d84 <dev_close_many+0x94>
__list_del(entry->prev, entry->next);
ffff8000113a3d74: f9400420 ldr x0, [x1,#8]
ffff8000113a3d78: f9403e82 ldr x2, [x20,#120]
next->prev = prev;
ffff8000113a3d7c: f9000440 str x0, [x2,#8]
ffff8000113a3d80: f9000002 str x2, [x0]
ffff8000113a3d84: f9003e93 str x19, [x20,#120]
list->prev = list;
ffff8000113a3d88: f9000433 str x19, [x1,#8]
list_for_each_entry_safe(dev, tmp, head, close_list)
ffff8000113a3d8c: aa1503f3 mov x19, x21
ffff8000113a3d90: f8478e60 ldr x0, [x19,#120]!
ffff8000113a3d94: eb16027f cmp x19, x22
ffff8000113a3d98: d101e000 sub x0, x0, #0x78
ffff8000113a3d9c: 54fffda1 b.ne ffff8000113a3d50 <dev_close_many+0x60>
__dev_close_many(head);
ffff8000113a3da0: aa1603e0 mov x0, x22
ffff8000113a3da4: 97fff1b7 bl ffff8000113a0480 <__dev_close_many>
list_for_each_entry_safe(dev, tmp, head, close_list) {
ffff8000113a3da8: f94002d3 ldr x19, [x22]
ffff8000113a3dac: aa1303f4 mov x20, x19
ffff8000113a3db0: f8588695 ldr x21, [x20],#-120
ffff8000113a3db4: eb16027f cmp x19, x22
ffff8000113a3db8: d101e2b5 sub x21, x21, #0x78
ffff8000113a3dbc: 54000121 b.ne ffff8000113a3de0 <dev_close_many+0xf0>
ffff8000113a3dc0: 14000023 b ffff8000113a3e4c <dev_close_many+0x15c>
ffff8000113a3dc4: aa1503f3 mov x19, x21
ffff8000113a3dc8: f8478e60 ldr x0, [x19,#120]!
ffff8000113a3dcc: eb16027f cmp x19, x22
ffff8000113a3dd0: d101e000 sub x0, x0, #0x78
ffff8000113a3dd4: 540003c0 b.eq ffff8000113a3e4c <dev_close_many+0x15c>
ffff8000113a3dd8: aa1503f4 mov x20, x21
ffff8000113a3ddc: aa0003f5 mov x21, x0
rtmsg_ifinfo(RTM_NEWLINK, dev, IFF_UP|IFF_RUNNING, GFP_KERNEL);
ffff8000113a3de0: 52800200 mov w0, #0x10 // #16
ffff8000113a3de4: aa1403e1 mov x1, x20
ffff8000113a3de8: 52800822 mov w2, #0x41 // #65
ffff8000113a3dec: 52819803 mov w3, #0xcc0 // #3264
ffff8000113a3df0: 94000000 bl 0 <rtmsg_ifinfo>
ffff8000113a3df0: R_AARCH64_CALL26 rtmsg_ifinfo
return call_netdevice_notifiers_info(val, &info);
ffff8000113a3df4: d2800040 mov x0, #0x2 // #2
ffff8000113a3df8: 910123a1 add x1, x29, #0x48
struct netdev_notifier_info info = {
ffff8000113a3dfc: f90027b4 str x20, [x29,#72]
ffff8000113a3e00: f9002bbf str xzr, [x29,#80]
return call_netdevice_notifiers_info(val, &info);
ffff8000113a3e04: 97fff0bd bl ffff8000113a00f8 <call_netdevice_notifiers_info>
if (unlink)
ffff8000113a3e08: 34fffdf7 cbz w23, ffff8000113a3dc4 <dev_close_many+0xd4>
if (!__list_del_entry_valid(entry))
ffff8000113a3e0c: aa1303e0 mov x0, x19
ffff8000113a3e10: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113a3e10: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113a3e14: 53001c00 uxtb w0, w0
ffff8000113a3e18: 9101e281 add x1, x20, #0x78
ffff8000113a3e1c: 340000a0 cbz w0, ffff8000113a3e30 <dev_close_many+0x140>
__list_del(entry->prev, entry->next);
ffff8000113a3e20: f9400420 ldr x0, [x1,#8]
ffff8000113a3e24: f9403e82 ldr x2, [x20,#120]
next->prev = prev;
ffff8000113a3e28: f9000440 str x0, [x2,#8]
ffff8000113a3e2c: f9000002 str x2, [x0]
ffff8000113a3e30: f9003e93 str x19, [x20,#120]
list->prev = list;
ffff8000113a3e34: f9000433 str x19, [x1,#8]
list_for_each_entry_safe(dev, tmp, head, close_list) {
ffff8000113a3e38: aa1503f3 mov x19, x21
ffff8000113a3e3c: f8478e60 ldr x0, [x19,#120]!
ffff8000113a3e40: eb16027f cmp x19, x22
ffff8000113a3e44: d101e000 sub x0, x0, #0x78
ffff8000113a3e48: 54fffc81 b.ne ffff8000113a3dd8 <dev_close_many+0xe8>
}
ffff8000113a3e4c: f9402fa1 ldr x1, [x29,#88]
ffff8000113a3e50: f9400300 ldr x0, [x24]
ffff8000113a3e50: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a3e54: eb00003f cmp x1, x0
ffff8000113a3e58: 540000c1 b.ne ffff8000113a3e70 <dev_close_many+0x180>
ffff8000113a3e5c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a3e60: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a3e64: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a3e68: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113a3e6c: d65f03c0 ret
ffff8000113a3e70: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a3e70: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a3e74 <dev_close.part.108>:
void dev_close(struct net_device *dev)
ffff8000113a3e74: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113a3e78: 910003fd mov x29, sp
ffff8000113a3e7c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a3e80: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a3e84: aa0003f6 mov x22, x0
ffff8000113a3e88: aa1e03e0 mov x0, x30
ffff8000113a3e8c: 94000000 bl 0 <_mcount>
ffff8000113a3e8c: R_AARCH64_CALL26 _mcount
ffff8000113a3e90: 90000015 adrp x21, 0 <__stack_chk_guard>
ffff8000113a3e90: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
LIST_HEAD(single);
ffff8000113a3e94: 9100e3b3 add x19, x29, #0x38
void dev_close(struct net_device *dev)
ffff8000113a3e98: f94002a3 ldr x3, [x21]
ffff8000113a3e98: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
list_add(&dev->close_list, &single);
ffff8000113a3e9c: 9101e2d4 add x20, x22, #0x78
if (!__list_add_valid(new, prev, next))
ffff8000113a3ea0: aa1403e0 mov x0, x20
ffff8000113a3ea4: aa1303e1 mov x1, x19
ffff8000113a3ea8: aa1303e2 mov x2, x19
void dev_close(struct net_device *dev)
ffff8000113a3eac: f90027a3 str x3, [x29,#72]
LIST_HEAD(single);
ffff8000113a3eb0: f9001fb3 str x19, [x29,#56]
ffff8000113a3eb4: f90023b3 str x19, [x29,#64]
ffff8000113a3eb8: 94000000 bl 0 <__list_add_valid>
ffff8000113a3eb8: R_AARCH64_CALL26 __list_add_valid
ffff8000113a3ebc: 53001c00 uxtb w0, w0
ffff8000113a3ec0: 340000a0 cbz w0, ffff8000113a3ed4 <dev_close.part.108+0x60>
new->next = next;
ffff8000113a3ec4: f9003ed3 str x19, [x22,#120]
next->prev = new;
ffff8000113a3ec8: f90023b4 str x20, [x29,#64]
new->prev = prev;
ffff8000113a3ecc: f90042d3 str x19, [x22,#128]
ffff8000113a3ed0: f9001fb4 str x20, [x29,#56]
dev_close_many(&single, true);
ffff8000113a3ed4: 52800021 mov w1, #0x1 // #1
ffff8000113a3ed8: aa1303e0 mov x0, x19
ffff8000113a3edc: 94000000 bl ffff8000113a3cf0 <dev_close_many>
ffff8000113a3edc: R_AARCH64_CALL26 dev_close_many
if (!__list_del_entry_valid(entry))
ffff8000113a3ee0: aa1303e0 mov x0, x19
ffff8000113a3ee4: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113a3ee4: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113a3ee8: 53001c00 uxtb w0, w0
ffff8000113a3eec: 340000a0 cbz w0, ffff8000113a3f00 <dev_close.part.108+0x8c>
__list_del(entry->prev, entry->next);
ffff8000113a3ef0: f94023a0 ldr x0, [x29,#64]
ffff8000113a3ef4: f9401fa1 ldr x1, [x29,#56]
next->prev = prev;
ffff8000113a3ef8: f9000420 str x0, [x1,#8]
ffff8000113a3efc: f9000001 str x1, [x0]
}
ffff8000113a3f00: f94027a1 ldr x1, [x29,#72]
ffff8000113a3f04: f94002a0 ldr x0, [x21]
ffff8000113a3f04: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a3f08: eb00003f cmp x1, x0
ffff8000113a3f0c: 540000a1 b.ne ffff8000113a3f20 <dev_close.part.108+0xac>
ffff8000113a3f10: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a3f14: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a3f18: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113a3f1c: d65f03c0 ret
ffff8000113a3f20: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a3f20: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a3f24 <dev_close>:
{
ffff8000113a3f24: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a3f28: 910003fd mov x29, sp
ffff8000113a3f2c: f9000bf3 str x19, [sp,#16]
ffff8000113a3f30: aa0003f3 mov x19, x0
ffff8000113a3f34: aa1e03e0 mov x0, x30
ffff8000113a3f38: 94000000 bl 0 <_mcount>
ffff8000113a3f38: R_AARCH64_CALL26 _mcount
if (dev->flags & IFF_UP) {
ffff8000113a3f3c: b9422a60 ldr w0, [x19,#552]
ffff8000113a3f40: 36000060 tbz w0, #0, ffff8000113a3f4c <dev_close+0x28>
ffff8000113a3f44: aa1303e0 mov x0, x19
ffff8000113a3f48: 97ffffcb bl ffff8000113a3e74 <dev_close.part.108>
}
ffff8000113a3f4c: f9400bf3 ldr x19, [sp,#16]
ffff8000113a3f50: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a3f54: d65f03c0 ret
ffff8000113a3f58 <dev_change_net_namespace>:
{
ffff8000113a3f58: a9b87bfd stp x29, x30, [sp,#-128]!
ffff8000113a3f5c: 910003fd mov x29, sp
ffff8000113a3f60: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a3f64: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a3f68: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a3f6c: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113a3f70: a90573fb stp x27, x28, [sp,#80]
ffff8000113a3f74: aa0003f4 mov x20, x0
ffff8000113a3f78: aa1e03e0 mov x0, x30
ffff8000113a3f7c: 90000017 adrp x23, 0 <__stack_chk_guard>
ffff8000113a3f7c: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a3f80: aa0103f6 mov x22, x1
ffff8000113a3f84: aa0203f3 mov x19, x2
ffff8000113a3f88: 94000000 bl 0 <_mcount>
ffff8000113a3f88: R_AARCH64_CALL26 _mcount
ffff8000113a3f8c: f94002e0 ldr x0, [x23]
ffff8000113a3f8c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a3f90: f9427a98 ldr x24, [x20,#1264]
ffff8000113a3f94: f9003fa0 str x0, [x29,#120]
ASSERT_RTNL();
ffff8000113a3f98: 94000000 bl 0 <rtnl_is_locked>
ffff8000113a3f98: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113a3f9c: 34001b20 cbz w0, ffff8000113a4300 <dev_change_net_namespace+0x3a8>
if (dev->features & NETIF_F_NETNS_LOCAL)
ffff8000113a3fa0: f9406680 ldr x0, [x20,#200]
ffff8000113a3fa4: 92730000 and x0, x0, #0x2000
ffff8000113a3fa8: b50019e0 cbnz x0, ffff8000113a42e4 <dev_change_net_namespace+0x38c>
if (dev->reg_state != NETREG_REGISTERED)
ffff8000113a3fac: 39536281 ldrb w1, [x20,#1240]
ffff8000113a3fb0: 7100043f cmp w1, #0x1
ffff8000113a3fb4: 54001981 b.ne ffff8000113a42e4 <dev_change_net_namespace+0x38c>
if (net_eq(net_old, net))
ffff8000113a3fb8: eb1802df cmp x22, x24
ffff8000113a3fbc: 54001300 b.eq ffff8000113a421c <dev_change_net_namespace+0x2c4>
node_name = netdev_name_node_lookup(net, name);
ffff8000113a3fc0: aa1603e0 mov x0, x22
ffff8000113a3fc4: aa1403e1 mov x1, x20
ffff8000113a3fc8: 97ffedaa bl ffff80001139f670 <netdev_name_node_lookup>
return node_name ? node_name->dev : NULL;
ffff8000113a3fcc: b4000120 cbz x0, ffff8000113a3ff0 <dev_change_net_namespace+0x98>
if (__dev_get_by_name(net, dev->name)) {
ffff8000113a3fd0: f9401000 ldr x0, [x0,#32]
ffff8000113a3fd4: b40000e0 cbz x0, ffff8000113a3ff0 <dev_change_net_namespace+0x98>
if (!pat)
ffff8000113a3fd8: b40018b3 cbz x19, ffff8000113a42ec <dev_change_net_namespace+0x394>
err = dev_get_valid_name(net, dev, pat);
ffff8000113a3fdc: aa1403e1 mov x1, x20
ffff8000113a3fe0: aa1603e0 mov x0, x22
ffff8000113a3fe4: aa1303e2 mov x2, x19
ffff8000113a3fe8: 97fff6cb bl ffff8000113a1b14 <dev_get_valid_name>
if (err < 0)
ffff8000113a3fec: 37f81180 tbnz w0, #31, ffff8000113a421c <dev_change_net_namespace+0x2c4>
if (dev->flags & IFF_UP) {
ffff8000113a3ff0: b9422a80 ldr w0, [x20,#552]
ffff8000113a3ff4: 37001720 tbnz w0, #0, ffff8000113a42d8 <dev_change_net_namespace+0x380>
unlist_netdevice(dev);
ffff8000113a3ff8: aa1403e0 mov x0, x20
ffff8000113a3ffc: 97fffe1d bl ffff8000113a3870 <unlist_netdevice>
synchronize_net();
ffff8000113a4000: 94000000 bl ffff8000113a1384 <synchronize_net>
ffff8000113a4000: R_AARCH64_CALL26 synchronize_net
dev_shutdown(dev);
ffff8000113a4004: aa1403e0 mov x0, x20
ffff8000113a4008: 94000000 bl 0 <dev_shutdown>
ffff8000113a4008: R_AARCH64_CALL26 dev_shutdown
return call_netdevice_notifiers_info(val, &info);
ffff8000113a400c: 9101a3a1 add x1, x29, #0x68
ffff8000113a4010: d28000c0 mov x0, #0x6 // #6
struct netdev_notifier_info info = {
ffff8000113a4014: f90037b4 str x20, [x29,#104]
ffff8000113a4018: f9003bbf str xzr, [x29,#112]
return call_netdevice_notifiers_info(val, &info);
ffff8000113a401c: 97fff037 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
rcu_barrier();
ffff8000113a4020: 94000000 bl 0 <rcu_barrier>
ffff8000113a4020: R_AARCH64_CALL26 rcu_barrier
new_nsid = peernet2id_alloc(dev_net(dev), net, GFP_KERNEL);
ffff8000113a4024: f9427a80 ldr x0, [x20,#1264]
ffff8000113a4028: aa1603e1 mov x1, x22
ffff8000113a402c: 52819802 mov w2, #0xcc0 // #3264
ffff8000113a4030: 94000000 bl 0 <peernet2id_alloc>
ffff8000113a4030: R_AARCH64_CALL26 peernet2id_alloc
if (__dev_get_by_index(net, dev->ifindex))
ffff8000113a4034: b9410299 ldr w25, [x20,#256]
hlist_for_each_entry(dev, head, index_hlist)
ffff8000113a4038: f9409ac1 ldr x1, [x22,#304]
new_nsid = peernet2id_alloc(dev_net(dev), net, GFP_KERNEL);
ffff8000113a403c: b90067a0 str w0, [x29,#100]
return &net->dev_index_head[ifindex & (NETDEV_HASHENTRIES - 1)];
ffff8000113a4040: d37d1f20 ubfiz x0, x25, #3, #8
hlist_for_each_entry(dev, head, index_hlist)
ffff8000113a4044: f8606823 ldr x3, [x1,x0]
ffff8000113a4048: b4000043 cbz x3, ffff8000113a4050 <dev_change_net_namespace+0xf8>
ffff8000113a404c: d10e4063 sub x3, x3, #0x390
ffff8000113a4050: b40000c3 cbz x3, ffff8000113a4068 <dev_change_net_namespace+0x110>
if (dev->ifindex == ifindex)
ffff8000113a4054: b9410060 ldr w0, [x3,#256]
ffff8000113a4058: 6b00033f cmp w25, w0
ffff8000113a405c: 54001360 b.eq ffff8000113a42c8 <dev_change_net_namespace+0x370>
hlist_for_each_entry(dev, head, index_hlist)
ffff8000113a4060: f941c863 ldr x3, [x3,#912]
ffff8000113a4064: b5ffff43 cbnz x3, ffff8000113a404c <dev_change_net_namespace+0xf4>
rtmsg_ifinfo_newnet(RTM_DELLINK, dev, ~0U, GFP_KERNEL, &new_nsid,
ffff8000113a4068: aa1403e1 mov x1, x20
ffff8000113a406c: 12800002 mov w2, #0xffffffff // #-1
ffff8000113a4070: 52819803 mov w3, #0xcc0 // #3264
ffff8000113a4074: 910193a4 add x4, x29, #0x64
ffff8000113a4078: 2a1903e5 mov w5, w25
ffff8000113a407c: 52800220 mov w0, #0x11 // #17
ffff8000113a4080: 94000000 bl 0 <rtmsg_ifinfo_newnet>
ffff8000113a4080: R_AARCH64_CALL26 rtmsg_ifinfo_newnet
dev_uc_flush(dev);
ffff8000113a4084: aa1403e0 mov x0, x20
ffff8000113a4088: 94000000 bl 0 <dev_uc_flush>
ffff8000113a4088: R_AARCH64_CALL26 dev_uc_flush
dev_mc_flush(dev);
ffff8000113a408c: aa1403e0 mov x0, x20
ffff8000113a4090: 94000000 bl 0 <dev_mc_flush>
ffff8000113a4090: R_AARCH64_CALL26 dev_mc_flush
kobject_uevent(&dev->dev.kobj, KOBJ_REMOVE);
ffff8000113a4094: 9114429a add x26, x20, #0x510
list_for_each_entry(iter, &dev->adj_list.upper, list) {
ffff8000113a4098: aa1403fb mov x27, x20
kobject_uevent(&dev->dev.kobj, KOBJ_REMOVE);
ffff8000113a409c: aa1a03e0 mov x0, x26
ffff8000113a40a0: 52800021 mov w1, #0x1 // #1
ffff8000113a40a4: 94000000 bl 0 <kobject_uevent>
ffff8000113a40a4: R_AARCH64_CALL26 kobject_uevent
list_for_each_entry(iter, &dev->adj_list.upper, list) {
ffff8000113a40a8: f84a8f73 ldr x19, [x27,#168]!
ffff8000113a40ac: f9427a9c ldr x28, [x20,#1264]
ffff8000113a40b0: eb13037f cmp x27, x19
ffff8000113a40b4: d1006273 sub x19, x19, #0x18
ffff8000113a40b8: 54000120 b.eq ffff8000113a40dc <dev_change_net_namespace+0x184>
if (!net_eq(net, dev_net(iter->dev)))
ffff8000113a40bc: f9400260 ldr x0, [x19]
ffff8000113a40c0: f9427801 ldr x1, [x0,#1264]
ffff8000113a40c4: eb01039f cmp x28, x1
ffff8000113a40c8: 54000f00 b.eq ffff8000113a42a8 <dev_change_net_namespace+0x350>
list_for_each_entry(iter, &dev->adj_list.upper, list) {
ffff8000113a40cc: f9400e73 ldr x19, [x19,#24]
ffff8000113a40d0: eb13037f cmp x27, x19
ffff8000113a40d4: d1006273 sub x19, x19, #0x18
ffff8000113a40d8: 54ffff21 b.ne ffff8000113a40bc <dev_change_net_namespace+0x164>
list_for_each_entry(iter, &dev->adj_list.lower, list) {
ffff8000113a40dc: aa1403f5 mov x21, x20
ffff8000113a40e0: f84b8eb3 ldr x19, [x21,#184]!
ffff8000113a40e4: eb1302bf cmp x21, x19
ffff8000113a40e8: d1006273 sub x19, x19, #0x18
ffff8000113a40ec: 54000120 b.eq ffff8000113a4110 <dev_change_net_namespace+0x1b8>
if (!net_eq(net, dev_net(iter->dev)))
ffff8000113a40f0: f9400260 ldr x0, [x19]
ffff8000113a40f4: f9427801 ldr x1, [x0,#1264]
ffff8000113a40f8: eb01039f cmp x28, x1
ffff8000113a40fc: 54000c60 b.eq ffff8000113a4288 <dev_change_net_namespace+0x330>
list_for_each_entry(iter, &dev->adj_list.lower, list) {
ffff8000113a4100: f9400e73 ldr x19, [x19,#24]
ffff8000113a4104: eb1302bf cmp x21, x19
ffff8000113a4108: d1006273 sub x19, x19, #0x18
ffff8000113a410c: 54ffff21 b.ne ffff8000113a40f0 <dev_change_net_namespace+0x198>
list_for_each_entry(nn, &dev->net_notifier_list, list) {
ffff8000113a4110: f9446293 ldr x19, [x20,#2240]
ffff8000113a4114: 9123029c add x28, x20, #0x8c0
ffff8000113a4118: eb1c027f cmp x19, x28
ffff8000113a411c: 54000160 b.eq ffff8000113a4148 <dev_change_net_namespace+0x1f0>
__unregister_netdevice_notifier_net(dev_net(dev), nn->nb);
ffff8000113a4120: f9400a61 ldr x1, [x19,#16]
ffff8000113a4124: f9427a80 ldr x0, [x20,#1264]
ffff8000113a4128: 97fff743 bl ffff8000113a1e34 <__unregister_netdevice_notifier_net>
__register_netdevice_notifier_net(net, nn->nb, true);
ffff8000113a412c: f9400a61 ldr x1, [x19,#16]
ffff8000113a4130: aa1603e0 mov x0, x22
ffff8000113a4134: 52800022 mov w2, #0x1 // #1
ffff8000113a4138: 97fff1a0 bl ffff8000113a07b8 <__register_netdevice_notifier_net>
list_for_each_entry(nn, &dev->net_notifier_list, list) {
ffff8000113a413c: f9400273 ldr x19, [x19]
ffff8000113a4140: eb13039f cmp x28, x19
ffff8000113a4144: 54fffee1 b.ne ffff8000113a4120 <dev_change_net_namespace+0x1c8>
dev->ifindex = new_ifindex;
ffff8000113a4148: b9010299 str w25, [x20,#256]
pnet->net = net;
ffff8000113a414c: f9027a96 str x22, [x20,#1264]
kobject_uevent(&dev->dev.kobj, KOBJ_ADD);
ffff8000113a4150: aa1a03e0 mov x0, x26
ffff8000113a4154: 52800001 mov w1, #0x0 // #0
ffff8000113a4158: 94000000 bl 0 <kobject_uevent>
ffff8000113a4158: R_AARCH64_CALL26 kobject_uevent
list_for_each_entry(iter, &dev->adj_list.upper, list) {
ffff8000113a415c: f9405693 ldr x19, [x20,#168]
return pnet->net;
ffff8000113a4160: f9427a99 ldr x25, [x20,#1264]
ffff8000113a4164: eb13037f cmp x27, x19
ffff8000113a4168: d1006273 sub x19, x19, #0x18
ffff8000113a416c: 54000120 b.eq ffff8000113a4190 <dev_change_net_namespace+0x238>
if (!net_eq(net, dev_net(iter->dev)))
ffff8000113a4170: f9400260 ldr x0, [x19]
ffff8000113a4174: f9427801 ldr x1, [x0,#1264]
ffff8000113a4178: eb01033f cmp x25, x1
ffff8000113a417c: 54000760 b.eq ffff8000113a4268 <dev_change_net_namespace+0x310>
list_for_each_entry(iter, &dev->adj_list.upper, list) {
ffff8000113a4180: f9400e73 ldr x19, [x19,#24]
ffff8000113a4184: eb13037f cmp x27, x19
ffff8000113a4188: d1006273 sub x19, x19, #0x18
ffff8000113a418c: 54ffff21 b.ne ffff8000113a4170 <dev_change_net_namespace+0x218>
list_for_each_entry(iter, &dev->adj_list.lower, list) {
ffff8000113a4190: f9405e93 ldr x19, [x20,#184]
ffff8000113a4194: eb1302bf cmp x21, x19
ffff8000113a4198: d1006273 sub x19, x19, #0x18
ffff8000113a419c: 54000120 b.eq ffff8000113a41c0 <dev_change_net_namespace+0x268>
if (!net_eq(net, dev_net(iter->dev)))
ffff8000113a41a0: f9400260 ldr x0, [x19]
ffff8000113a41a4: f9427801 ldr x1, [x0,#1264]
ffff8000113a41a8: eb01033f cmp x25, x1
ffff8000113a41ac: 540004e0 b.eq ffff8000113a4248 <dev_change_net_namespace+0x2f0>
list_for_each_entry(iter, &dev->adj_list.lower, list) {
ffff8000113a41b0: f9400e73 ldr x19, [x19,#24]
ffff8000113a41b4: eb1302bf cmp x21, x19
ffff8000113a41b8: d1006273 sub x19, x19, #0x18
ffff8000113a41bc: 54ffff21 b.ne ffff8000113a41a0 <dev_change_net_namespace+0x248>
err = device_rename(&dev->dev, dev->name);
ffff8000113a41c0: aa1a03e0 mov x0, x26
ffff8000113a41c4: aa1403e1 mov x1, x20
ffff8000113a41c8: 94000000 bl 0 <device_rename>
ffff8000113a41c8: R_AARCH64_CALL26 device_rename
WARN_ON(err);
ffff8000113a41cc: 35000b60 cbnz w0, ffff8000113a4338 <dev_change_net_namespace+0x3e0>
err = netdev_change_owner(dev, net_old, net);
ffff8000113a41d0: aa1403e0 mov x0, x20
ffff8000113a41d4: aa1803e1 mov x1, x24
ffff8000113a41d8: aa1603e2 mov x2, x22
ffff8000113a41dc: 94000000 bl 0 <netdev_change_owner>
ffff8000113a41dc: R_AARCH64_CALL26 netdev_change_owner
WARN_ON(err);
ffff8000113a41e0: 350008c0 cbnz w0, ffff8000113a42f8 <dev_change_net_namespace+0x3a0>
list_netdevice(dev);
ffff8000113a41e4: aa1403e0 mov x0, x20
ffff8000113a41e8: 97fffc63 bl ffff8000113a3374 <list_netdevice>
return call_netdevice_notifiers_info(val, &info);
ffff8000113a41ec: 9101a3a1 add x1, x29, #0x68
ffff8000113a41f0: d28000a0 mov x0, #0x5 // #5
struct netdev_notifier_info info = {
ffff8000113a41f4: f90037b4 str x20, [x29,#104]
ffff8000113a41f8: f9003bbf str xzr, [x29,#112]
return call_netdevice_notifiers_info(val, &info);
ffff8000113a41fc: 97ffefbf bl ffff8000113a00f8 <call_netdevice_notifiers_info>
rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U, GFP_KERNEL);
ffff8000113a4200: 52800200 mov w0, #0x10 // #16
ffff8000113a4204: aa1403e1 mov x1, x20
ffff8000113a4208: 12800002 mov w2, #0xffffffff // #-1
ffff8000113a420c: 52819803 mov w3, #0xcc0 // #3264
ffff8000113a4210: 94000000 bl 0 <rtmsg_ifinfo>
ffff8000113a4210: R_AARCH64_CALL26 rtmsg_ifinfo
synchronize_net();
ffff8000113a4214: 94000000 bl ffff8000113a1384 <synchronize_net>
ffff8000113a4214: R_AARCH64_CALL26 synchronize_net
err = 0;
ffff8000113a4218: 52800000 mov w0, #0x0 // #0
}
ffff8000113a421c: f9403fa2 ldr x2, [x29,#120]
ffff8000113a4220: f94002e1 ldr x1, [x23]
ffff8000113a4220: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a4224: eb01005f cmp x2, x1
ffff8000113a4228: 54000661 b.ne ffff8000113a42f4 <dev_change_net_namespace+0x39c>
ffff8000113a422c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a4230: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a4234: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a4238: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a423c: a94573fb ldp x27, x28, [sp,#80]
ffff8000113a4240: a8c87bfd ldp x29, x30, [sp],#128
ffff8000113a4244: d65f03c0 ret
netdev_adjacent_sysfs_add(iter->dev, dev,
ffff8000113a4248: aa1403e1 mov x1, x20
ffff8000113a424c: 9102a002 add x2, x0, #0xa8
ffff8000113a4250: 97fff32e bl ffff8000113a0f08 <netdev_adjacent_sysfs_add>
netdev_adjacent_sysfs_add(dev, iter->dev,
ffff8000113a4254: f9400261 ldr x1, [x19]
ffff8000113a4258: aa1403e0 mov x0, x20
ffff8000113a425c: aa1503e2 mov x2, x21
ffff8000113a4260: 97fff32a bl ffff8000113a0f08 <netdev_adjacent_sysfs_add>
ffff8000113a4264: 17ffffd3 b ffff8000113a41b0 <dev_change_net_namespace+0x258>
netdev_adjacent_sysfs_add(iter->dev, dev,
ffff8000113a4268: aa1403e1 mov x1, x20
ffff8000113a426c: 9102e002 add x2, x0, #0xb8
ffff8000113a4270: 97fff326 bl ffff8000113a0f08 <netdev_adjacent_sysfs_add>
netdev_adjacent_sysfs_add(dev, iter->dev,
ffff8000113a4274: f9400261 ldr x1, [x19]
ffff8000113a4278: aa1403e0 mov x0, x20
ffff8000113a427c: aa1b03e2 mov x2, x27
ffff8000113a4280: 97fff322 bl ffff8000113a0f08 <netdev_adjacent_sysfs_add>
ffff8000113a4284: 17ffffbf b ffff8000113a4180 <dev_change_net_namespace+0x228>
netdev_adjacent_sysfs_del(iter->dev, dev->name,
ffff8000113a4288: aa1403e1 mov x1, x20
ffff8000113a428c: 9102a002 add x2, x0, #0xa8
ffff8000113a4290: 97fff343 bl ffff8000113a0f9c <netdev_adjacent_sysfs_del>
netdev_adjacent_sysfs_del(dev, iter->dev->name,
ffff8000113a4294: f9400261 ldr x1, [x19]
ffff8000113a4298: aa1403e0 mov x0, x20
ffff8000113a429c: aa1503e2 mov x2, x21
ffff8000113a42a0: 97fff33f bl ffff8000113a0f9c <netdev_adjacent_sysfs_del>
ffff8000113a42a4: 17ffff97 b ffff8000113a4100 <dev_change_net_namespace+0x1a8>
netdev_adjacent_sysfs_del(iter->dev, dev->name,
ffff8000113a42a8: aa1403e1 mov x1, x20
ffff8000113a42ac: 9102e002 add x2, x0, #0xb8
ffff8000113a42b0: 97fff33b bl ffff8000113a0f9c <netdev_adjacent_sysfs_del>
netdev_adjacent_sysfs_del(dev, iter->dev->name,
ffff8000113a42b4: f9400261 ldr x1, [x19]
ffff8000113a42b8: aa1403e0 mov x0, x20
ffff8000113a42bc: aa1b03e2 mov x2, x27
ffff8000113a42c0: 97fff337 bl ffff8000113a0f9c <netdev_adjacent_sysfs_del>
ffff8000113a42c4: 17ffff82 b ffff8000113a40cc <dev_change_net_namespace+0x174>
new_ifindex = dev_new_index(net);
ffff8000113a42c8: aa1603e0 mov x0, x22
ffff8000113a42cc: 97ffec6e bl ffff80001139f484 <dev_new_index>
ffff8000113a42d0: 2a0003f9 mov w25, w0
ffff8000113a42d4: 17ffff65 b ffff8000113a4068 <dev_change_net_namespace+0x110>
ffff8000113a42d8: aa1403e0 mov x0, x20
ffff8000113a42dc: 97fffee6 bl ffff8000113a3e74 <dev_close.part.108>
ffff8000113a42e0: 17ffff46 b ffff8000113a3ff8 <dev_change_net_namespace+0xa0>
err = -EINVAL;
ffff8000113a42e4: 128002a0 mov w0, #0xffffffea // #-22
ffff8000113a42e8: 17ffffcd b ffff8000113a421c <dev_change_net_namespace+0x2c4>
err = -EEXIST;
ffff8000113a42ec: 12800200 mov w0, #0xffffffef // #-17
ffff8000113a42f0: 17ffffcb b ffff8000113a421c <dev_change_net_namespace+0x2c4>
}
ffff8000113a42f4: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a42f4: R_AARCH64_CALL26 __stack_chk_fail
WARN_ON(err);
ffff8000113a42f8: d4210000 brk #0x800
ffff8000113a42fc: 17ffffba b ffff8000113a41e4 <dev_change_net_namespace+0x28c>
ASSERT_RTNL();
ffff8000113a4300: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4300: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113a4304: 91000063 add x3, x3, #0x0
ffff8000113a4304: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113a4308: 39404060 ldrb w0, [x3,#16]
ffff8000113a430c: 35ffe4a0 cbnz w0, ffff8000113a3fa0 <dev_change_net_namespace+0x48>
ffff8000113a4310: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4310: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113a4314: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4314: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113a4318: 52800024 mov w4, #0x1 // #1
ffff8000113a431c: 91000000 add x0, x0, #0x0
ffff8000113a431c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113a4320: 91000021 add x1, x1, #0x0
ffff8000113a4320: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113a4324: 5284e642 mov w2, #0x2732 // #10034
ffff8000113a4328: 39004064 strb w4, [x3,#16]
ffff8000113a432c: 94000000 bl 0 <__warn_printk>
ffff8000113a432c: R_AARCH64_CALL26 __warn_printk
ffff8000113a4330: d4210000 brk #0x800
ffff8000113a4334: 17ffff1b b ffff8000113a3fa0 <dev_change_net_namespace+0x48>
WARN_ON(err);
ffff8000113a4338: d4210000 brk #0x800
ffff8000113a433c: 17ffffa5 b ffff8000113a41d0 <dev_change_net_namespace+0x278>
ffff8000113a4340 <default_device_exit>:
.init = netdev_init,
.exit = netdev_exit,
};
static void __net_exit default_device_exit(struct net *net)
{
ffff8000113a4340: a9b97bfd stp x29, x30, [sp,#-112]!
ffff8000113a4344: 910003fd mov x29, sp
ffff8000113a4348: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a434c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a4350: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a4354: f90023f9 str x25, [sp,#64]
ffff8000113a4358: aa0003f9 mov x25, x0
ffff8000113a435c: aa1e03e0 mov x0, x30
ffff8000113a4360: 94000000 bl 0 <_mcount>
ffff8000113a4360: R_AARCH64_CALL26 _mcount
ffff8000113a4364: 90000015 adrp x21, 0 <__stack_chk_guard>
ffff8000113a4364: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a4368: f94002a0 ldr x0, [x21]
ffff8000113a4368: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a436c: f90037a0 str x0, [x29,#104]
struct net_device *dev, *aux;
/*
* Push all migratable network devices back to the
* initial network namespace
*/
rtnl_lock();
ffff8000113a4370: 94000000 bl 0 <rtnl_lock>
ffff8000113a4370: R_AARCH64_CALL26 rtnl_lock
for_each_netdev_safe(net, dev, aux) {
ffff8000113a4374: f8490f20 ldr x0, [x25,#144]!
ffff8000113a4378: aa0003f4 mov x20, x0
ffff8000113a437c: f85b8693 ldr x19, [x20],#-72
ffff8000113a4380: eb00033f cmp x25, x0
ffff8000113a4384: d1012273 sub x19, x19, #0x48
ffff8000113a4388: 54000260 b.eq ffff8000113a43d4 <default_device_exit+0x94>
/* Leave virtual devices for the generic cleanup */
if (dev->rtnl_link_ops)
continue;
/* Push remaining network devices to init_net */
snprintf(fb_name, IFNAMSIZ, "dev%d", dev->ifindex);
ffff8000113a438c: 90000017 adrp x23, ffff80001139e37c <__my_cpu_offset>
ffff8000113a438c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x2c8
node_name = netdev_name_node_lookup(net, name);
ffff8000113a4390: 90000016 adrp x22, 0 <init_net>
ffff8000113a4390: R_AARCH64_ADR_PREL_PG_HI21 init_net
if (__dev_get_by_name(&init_net, fb_name))
snprintf(fb_name, IFNAMSIZ, "dev%%d");
ffff8000113a4394: 90000018 adrp x24, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4394: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x2d0
snprintf(fb_name, IFNAMSIZ, "dev%d", dev->ifindex);
ffff8000113a4398: 910002f7 add x23, x23, #0x0
ffff8000113a4398: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x2c8
node_name = netdev_name_node_lookup(net, name);
ffff8000113a439c: 910002d6 add x22, x22, #0x0
ffff8000113a439c: R_AARCH64_ADD_ABS_LO12_NC init_net
snprintf(fb_name, IFNAMSIZ, "dev%%d");
ffff8000113a43a0: 91000318 add x24, x24, #0x0
ffff8000113a43a0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x2d0
ffff8000113a43a4: 14000003 b ffff8000113a43b0 <default_device_exit+0x70>
ffff8000113a43a8: aa1303f4 mov x20, x19
for_each_netdev_safe(net, dev, aux) {
ffff8000113a43ac: aa0403f3 mov x19, x4
if (dev->features & NETIF_F_NETNS_LOCAL)
ffff8000113a43b0: f9406683 ldr x3, [x20,#200]
ffff8000113a43b4: 37680063 tbnz w3, #13, ffff8000113a43c0 <default_device_exit+0x80>
if (dev->rtnl_link_ops)
ffff8000113a43b8: f9441a80 ldr x0, [x20,#2096]
ffff8000113a43bc: b4000220 cbz x0, ffff8000113a4400 <default_device_exit+0xc0>
for_each_netdev_safe(net, dev, aux) {
ffff8000113a43c0: aa1303e3 mov x3, x19
ffff8000113a43c4: f8448c64 ldr x4, [x3,#72]!
ffff8000113a43c8: eb03033f cmp x25, x3
ffff8000113a43cc: d1012084 sub x4, x4, #0x48
ffff8000113a43d0: 54fffec1 b.ne ffff8000113a43a8 <default_device_exit+0x68>
pr_emerg("%s: failed to move %s to init_net: %d\n",
__func__, dev->name, err);
BUG();
}
}
rtnl_unlock();
ffff8000113a43d4: 94000000 bl 0 <rtnl_unlock>
ffff8000113a43d4: R_AARCH64_CALL26 rtnl_unlock
}
ffff8000113a43d8: f94037a1 ldr x1, [x29,#104]
ffff8000113a43dc: f94002a0 ldr x0, [x21]
ffff8000113a43dc: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a43e0: eb00003f cmp x1, x0
ffff8000113a43e4: 54000481 b.ne ffff8000113a4474 <default_device_exit+0x134>
ffff8000113a43e8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a43ec: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a43f0: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a43f4: f94023f9 ldr x25, [sp,#64]
ffff8000113a43f8: a8c77bfd ldp x29, x30, [sp],#112
ffff8000113a43fc: d65f03c0 ret
snprintf(fb_name, IFNAMSIZ, "dev%d", dev->ifindex);
ffff8000113a4400: b9410283 ldr w3, [x20,#256]
ffff8000113a4404: d2800201 mov x1, #0x10 // #16
ffff8000113a4408: aa1703e2 mov x2, x23
ffff8000113a440c: 910163a0 add x0, x29, #0x58
ffff8000113a4410: 94000000 bl 0 <snprintf>
ffff8000113a4410: R_AARCH64_CALL26 snprintf
node_name = netdev_name_node_lookup(net, name);
ffff8000113a4414: aa1603e0 mov x0, x22
ffff8000113a4418: 910163a1 add x1, x29, #0x58
ffff8000113a441c: 97ffec95 bl ffff80001139f670 <netdev_name_node_lookup>
return node_name ? node_name->dev : NULL;
ffff8000113a4420: b40000e0 cbz x0, ffff8000113a443c <default_device_exit+0xfc>
if (__dev_get_by_name(&init_net, fb_name))
ffff8000113a4424: f9401000 ldr x0, [x0,#32]
ffff8000113a4428: b40000a0 cbz x0, ffff8000113a443c <default_device_exit+0xfc>
snprintf(fb_name, IFNAMSIZ, "dev%%d");
ffff8000113a442c: 910163a0 add x0, x29, #0x58
ffff8000113a4430: d2800201 mov x1, #0x10 // #16
ffff8000113a4434: aa1803e2 mov x2, x24
ffff8000113a4438: 94000000 bl 0 <snprintf>
ffff8000113a4438: R_AARCH64_CALL26 snprintf
err = dev_change_net_namespace(dev, &init_net, fb_name);
ffff8000113a443c: aa1403e0 mov x0, x20
ffff8000113a4440: aa1603e1 mov x1, x22
ffff8000113a4444: 910163a2 add x2, x29, #0x58
ffff8000113a4448: 94000000 bl ffff8000113a3f58 <dev_change_net_namespace>
ffff8000113a4448: R_AARCH64_CALL26 dev_change_net_namespace
ffff8000113a444c: 2a0003e3 mov w3, w0
if (err) {
ffff8000113a4450: 34fffb80 cbz w0, ffff8000113a43c0 <default_device_exit+0x80>
pr_emerg("%s: failed to move %s to init_net: %d\n",
ffff8000113a4454: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4454: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113a4458: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4458: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x2d8
ffff8000113a445c: 91000021 add x1, x1, #0x0
ffff8000113a445c: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113a4460: 91010021 add x1, x1, #0x40
ffff8000113a4464: aa1403e2 mov x2, x20
ffff8000113a4468: 91000000 add x0, x0, #0x0
ffff8000113a4468: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x2d8
ffff8000113a446c: 94000000 bl 0 <printk>
ffff8000113a446c: R_AARCH64_CALL26 printk
BUG();
ffff8000113a4470: d4210000 brk #0x800
}
ffff8000113a4474: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a4474: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a4478 <netif_napi_add>:
{
ffff8000113a4478: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113a447c: 910003fd mov x29, sp
ffff8000113a4480: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a4484: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a4488: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a448c: aa0003f5 mov x21, x0
ffff8000113a4490: aa1e03e0 mov x0, x30
ffff8000113a4494: aa0103f3 mov x19, x1
ffff8000113a4498: aa0203f7 mov x23, x2
ffff8000113a449c: 2a0303f6 mov w22, w3
ffff8000113a44a0: 90000014 adrp x20, 0 <__stack_chk_guard>
ffff8000113a44a0: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a44a4: 94000000 bl 0 <_mcount>
ffff8000113a44a4: R_AARCH64_CALL26 _mcount
ffff8000113a44a8: f9400280 ldr x0, [x20]
ffff8000113a44a8: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
list->prev = list;
ffff8000113a44ac: f9000673 str x19, [x19,#8]
ffff8000113a44b0: f90027a0 str x0, [x29,#72]
ffff8000113a44b4: f9000273 str x19, [x19]
hrtimer_init(&napi->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_PINNED);
ffff8000113a44b8: 91048260 add x0, x19, #0x120
ffff8000113a44bc: 52800021 mov w1, #0x1 // #1
ffff8000113a44c0: 52800062 mov w2, #0x3 // #3
ffff8000113a44c4: 94000000 bl 0 <hrtimer_init>
ffff8000113a44c4: R_AARCH64_CALL26 hrtimer_init
napi->timer.function = napi_watchdog;
ffff8000113a44c8: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a44c8: R_AARCH64_ADR_PREL_PG_HI21 .text+0x73f8
ffff8000113a44cc: 91000000 add x0, x0, #0x0
ffff8000113a44cc: R_AARCH64_ADD_ABS_LO12_NC .text+0x73f8
ffff8000113a44d0: f900a660 str x0, [x19,#328]
ffff8000113a44d4: 91010265 add x5, x19, #0x40
for (i = 0; i < GRO_HASH_BUCKETS; i++) {
ffff8000113a44d8: 52800006 mov w6, #0x0 // #0
ffff8000113a44dc: 110004c6 add w6, w6, #0x1
ffff8000113a44e0: f90000a5 str x5, [x5]
ffff8000113a44e4: f90004a5 str x5, [x5,#8]
napi->gro_hash[i].count = 0;
ffff8000113a44e8: b90010bf str wzr, [x5,#16]
for (i = 0; i < GRO_HASH_BUCKETS; i++) {
ffff8000113a44ec: 710020df cmp w6, #0x8
ffff8000113a44f0: 910060a5 add x5, x5, #0x18
ffff8000113a44f4: 54ffff41 b.ne ffff8000113a44dc <netif_napi_add+0x64>
INIT_LIST_HEAD(&napi->rx_list);
ffff8000113a44f8: 91042260 add x0, x19, #0x108
napi->gro_bitmask = 0;
ffff8000113a44fc: f900127f str xzr, [x19,#32]
napi->skb = NULL;
ffff8000113a4500: f900827f str xzr, [x19,#256]
ffff8000113a4504: f9008660 str x0, [x19,#264]
ffff8000113a4508: f9000400 str x0, [x0,#8]
napi->rx_count = 0;
ffff8000113a450c: b9011a7f str wzr, [x19,#280]
napi->poll = poll;
ffff8000113a4510: f9001677 str x23, [x19,#40]
if (weight > NAPI_POLL_WEIGHT)
ffff8000113a4514: 710102df cmp w22, #0x40
ffff8000113a4518: 540000ad b.le ffff8000113a452c <netif_napi_add+0xb4>
netdev_err_once(dev, "%s() called with weight %d\n", __func__,
ffff8000113a451c: 90000005 adrp x5, ffff80001139e37c <__my_cpu_offset>
ffff8000113a451c: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a4520: 910000a5 add x5, x5, #0x0
ffff8000113a4520: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a4524: 396510a0 ldrb w0, [x5,#2372]
ffff8000113a4528: 34000ca0 cbz w0, ffff8000113a46bc <netif_napi_add+0x244>
napi->weight = weight;
ffff8000113a452c: b9001a76 str w22, [x19,#24]
__list_add(new, head, head->next);
ffff8000113a4530: f9402eb7 ldr x23, [x21,#88]
list_add(&napi->dev_list, &dev->napi_list);
ffff8000113a4534: 91058276 add x22, x19, #0x160
ffff8000113a4538: 910162b8 add x24, x21, #0x58
if (!__list_add_valid(new, prev, next))
ffff8000113a453c: aa1603e0 mov x0, x22
ffff8000113a4540: aa1803e1 mov x1, x24
ffff8000113a4544: aa1703e2 mov x2, x23
ffff8000113a4548: 94000000 bl 0 <__list_add_valid>
ffff8000113a4548: R_AARCH64_CALL26 __list_add_valid
ffff8000113a454c: 53001c00 uxtb w0, w0
ffff8000113a4550: 340000a0 cbz w0, ffff8000113a4564 <netif_napi_add+0xec>
next->prev = new;
ffff8000113a4554: f90006f6 str x22, [x23,#8]
new->next = next;
ffff8000113a4558: f900b277 str x23, [x19,#352]
new->prev = prev;
ffff8000113a455c: f900b678 str x24, [x19,#360]
ffff8000113a4560: f9002eb6 str x22, [x21,#88]
napi->poll_owner = -1;
ffff8000113a4564: 12800000 mov w0, #0xffffffff // #-1
ATOMIC64_OPS(or, orr, L)
ffff8000113a4568: 91004262 add x2, x19, #0x10
napi->dev = dev;
ffff8000113a456c: f9001e75 str x21, [x19,#56]
napi->poll_owner = -1;
ffff8000113a4570: b9003260 str w0, [x19,#48]
ffff8000113a4574: aa0203e3 mov x3, x2
ffff8000113a4578: f9800051 prfm pstl1strm, [x2]
ffff8000113a457c: c85f7c40 ldxr x0, [x2]
ffff8000113a4580: b2400000 orr x0, x0, #0x1
ffff8000113a4584: c8017c40 stxr w1, x0, [x2]
ffff8000113a4588: 35ffffa1 cbnz w1, ffff8000113a457c <netif_napi_add+0x104>
ffff8000113a458c: f9400a60 ldr x0, [x19,#16]
if (test_bit(NAPI_STATE_NO_BUSY_POLL, &napi->state) ||
ffff8000113a4590: 36280140 tbz w0, #5, ffff8000113a45b8 <netif_napi_add+0x140>
}
ffff8000113a4594: f94027a1 ldr x1, [x29,#72]
ffff8000113a4598: f9400280 ldr x0, [x20]
ffff8000113a4598: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a459c: eb00003f cmp x1, x0
ffff8000113a45a0: 54000a81 b.ne ffff8000113a46f0 <netif_napi_add+0x278>
ffff8000113a45a4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a45a8: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a45ac: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a45b0: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113a45b4: d65f03c0 ret
__READ_ONCE_SIZE;
ffff8000113a45b8: f9400a60 ldr x0, [x19,#16]
ffff8000113a45bc: 3727fec0 tbnz w0, #4, ffff8000113a4594 <netif_napi_add+0x11c>
ffff8000113a45c0: f9800071 prfm pstl1strm, [x3]
ffff8000113a45c4: c85f7c62 ldxr x2, [x3]
ffff8000113a45c8: b27c0040 orr x0, x2, #0x10
ffff8000113a45cc: c801fc60 stlxr w1, x0, [x3]
ffff8000113a45d0: 35ffffa1 cbnz w1, ffff8000113a45c4 <netif_napi_add+0x14c>
ffff8000113a45d4: d5033bbf dmb ish
return !!(old & mask);
ffff8000113a45d8: 927c0042 and x2, x2, #0x10
if (test_bit(NAPI_STATE_NO_BUSY_POLL, &napi->state) ||
ffff8000113a45dc: b5fffdc2 cbnz x2, ffff8000113a4594 <netif_napi_add+0x11c>
__CMPXCHG_CASE(w, , acq_, 32, , a, , "memory", K)
ffff8000113a45e0: 90000015 adrp x21, ffff80001139e37c <__my_cpu_offset>
ffff8000113a45e0: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a45e4: 910002a0 add x0, x21, #0x0
ffff8000113a45e4: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a45e8: 52800023 mov w3, #0x1 // #1
ffff8000113a45ec: 910c8005 add x5, x0, #0x320
ffff8000113a45f0: f98000b1 prfm pstl1strm, [x5]
ffff8000113a45f4: 885ffca1 ldaxr w1, [x5]
ffff8000113a45f8: 4a020024 eor w4, w1, w2
ffff8000113a45fc: 35000064 cbnz w4, ffff8000113a4608 <netif_napi_add+0x190>
ffff8000113a4600: 88047ca3 stxr w4, w3, [x5]
ffff8000113a4604: 35ffff84 cbnz w4, ffff8000113a45f4 <netif_napi_add+0x17c>
ffff8000113a4608: 35000541 cbnz w1, ffff8000113a46b0 <netif_napi_add+0x238>
ffff8000113a460c: 90000004 adrp x4, ffff80001139e37c <__my_cpu_offset>
ffff8000113a460c: R_AARCH64_ADR_PREL_PG_HI21 .data
ffff8000113a4610: 91000080 add x0, x4, #0x0
ffff8000113a4610: R_AARCH64_ADD_ABS_LO12_NC .data
ffff8000113a4614: 90000005 adrp x5, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4614: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a4618: b9408803 ldr w3, [x0,#136]
hlist_for_each_entry_rcu(napi, &napi_hash[hash], napi_hash_node)
ffff8000113a461c: 910000a6 add x6, x5, #0x0
ffff8000113a461c: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
if (unlikely(++napi_gen_id < MIN_NAPI_ID))
ffff8000113a4620: 11000463 add w3, w3, #0x1
ffff8000113a4624: 7140047f cmp w3, #0x1, lsl #12
ffff8000113a4628: 54000669 b.ls ffff8000113a46f4 <netif_napi_add+0x27c>
ffff8000113a462c: 12001c61 and w1, w3, #0xff
hlist_for_each_entry_rcu(napi, &napi_hash[hash], napi_hash_node)
ffff8000113a4630: 2a0103e1 mov w1, w1
ffff8000113a4634: d37df020 lsl x0, x1, #3
ffff8000113a4638: f86068c0 ldr x0, [x6,x0]
ffff8000113a463c: b4000040 cbz x0, ffff8000113a4644 <netif_napi_add+0x1cc>
ffff8000113a4640: d105c000 sub x0, x0, #0x170
ffff8000113a4644: b4000300 cbz x0, ffff8000113a46a4 <netif_napi_add+0x22c>
if (napi->napi_id == napi_id)
ffff8000113a4648: b9418002 ldr w2, [x0,#384]
ffff8000113a464c: 6b03005f cmp w2, w3
ffff8000113a4650: 54fffe80 b.eq ffff8000113a4620 <netif_napi_add+0x1a8>
ffff8000113a4654: f940b800 ldr x0, [x0,#368]
hlist_for_each_entry_rcu(napi, &napi_hash[hash], napi_hash_node)
ffff8000113a4658: b5ffff40 cbnz x0, ffff8000113a4640 <netif_napi_add+0x1c8>
ffff8000113a465c: 91000080 add x0, x4, #0x0
ffff8000113a465c: R_AARCH64_ADD_ABS_LO12_NC .data
ffff8000113a4660: b9008803 str w3, [x0,#136]
hlist_add_head_rcu(&napi->napi_hash_node,
ffff8000113a4664: 910000a2 add x2, x5, #0x0
ffff8000113a4664: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a4668: d37df021 lsl x1, x1, #3
napi->napi_id = napi_gen_id;
ffff8000113a466c: b9018263 str w3, [x19,#384]
struct hlist_node *first = h->first;
ffff8000113a4670: f8616840 ldr x0, [x2,x1]
hlist_add_head_rcu(&napi->napi_hash_node,
ffff8000113a4674: 8b010041 add x1, x2, x1
n->next = first;
ffff8000113a4678: f900ba60 str x0, [x19,#368]
ffff8000113a467c: 9105c262 add x2, x19, #0x170
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a4680: f900be61 str x1, [x19,#376]
rcu_assign_pointer(hlist_first_rcu(h), n);
ffff8000113a4684: c89ffc22 stlr x2, [x1]
if (first)
ffff8000113a4688: b4000040 cbz x0, ffff8000113a4690 <netif_napi_add+0x218>
ffff8000113a468c: f9000402 str x2, [x0,#8]
smp_store_release(&lock->locked, 0);
ffff8000113a4690: 910002b5 add x21, x21, #0x0
ffff8000113a4690: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a4694: 52800000 mov w0, #0x0 // #0
ffff8000113a4698: 910c82b5 add x21, x21, #0x320
ffff8000113a469c: 089ffea0 stlrb w0, [x21]
static inline void __raw_spin_unlock(raw_spinlock_t *lock)
{
spin_release(&lock->dep_map, _RET_IP_);
do_raw_spin_unlock(lock);
preempt_enable();
ffff8000113a46a0: 17ffffbd b ffff8000113a4594 <netif_napi_add+0x11c>
ffff8000113a46a4: 91000084 add x4, x4, #0x0
ffff8000113a46a4: R_AARCH64_ADD_ABS_LO12_NC .data
ffff8000113a46a8: b9008883 str w3, [x4,#136]
ffff8000113a46ac: 17ffffee b ffff8000113a4664 <netif_napi_add+0x1ec>
queued_spin_lock_slowpath(lock, val);
ffff8000113a46b0: 910c8000 add x0, x0, #0x320
ffff8000113a46b4: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113a46b4: R_AARCH64_CALL26 queued_spin_lock_slowpath
ffff8000113a46b8: 17ffffd5 b ffff8000113a460c <netif_napi_add+0x194>
netdev_err_once(dev, "%s() called with weight %d\n", __func__,
ffff8000113a46bc: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113a46bc: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113a46c0: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a46c0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x1e8
ffff8000113a46c4: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113a46c4: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x308
ffff8000113a46c8: 91000063 add x3, x3, #0x0
ffff8000113a46c8: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113a46cc: 52800026 mov w6, #0x1 // #1
ffff8000113a46d0: 91000000 add x0, x0, #0x0
ffff8000113a46d0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x1e8
ffff8000113a46d4: aa1503e1 mov x1, x21
ffff8000113a46d8: 91000042 add x2, x2, #0x0
ffff8000113a46d8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x308
ffff8000113a46dc: 91016063 add x3, x3, #0x58
ffff8000113a46e0: 2a1603e4 mov w4, w22
ffff8000113a46e4: 392510a6 strb w6, [x5,#2372]
ffff8000113a46e8: 94000000 bl ffff80001139e618 <call_netdevice_register_net_notifiers+0x28>
ffff8000113a46e8: R_AARCH64_CALL26 netdev_printk
ffff8000113a46ec: 17ffff90 b ffff8000113a452c <netif_napi_add+0xb4>
}
ffff8000113a46f0: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a46f0: R_AARCH64_CALL26 __stack_chk_fail
if (unlikely(++napi_gen_id < MIN_NAPI_ID))
ffff8000113a46f4: 52800021 mov w1, #0x1 // #1
ffff8000113a46f8: 52820023 mov w3, #0x1001 // #4097
ffff8000113a46fc: 17ffffcd b ffff8000113a4630 <netif_napi_add+0x1b8>
ffff8000113a4700 <reset_xps_maps>:
{
ffff8000113a4700: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a4704: 910003fd mov x29, sp
ffff8000113a4708: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a470c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a4710: aa0003f6 mov x22, x0
ffff8000113a4714: 53001c54 uxtb w20, w2
ffff8000113a4718: aa1e03e0 mov x0, x30
ffff8000113a471c: aa0103f3 mov x19, x1
ffff8000113a4720: 94000000 bl 0 <_mcount>
ffff8000113a4720: R_AARCH64_CALL26 _mcount
if (is_rxqs_map) {
ffff8000113a4724: 350002d4 cbnz w20, ffff8000113a477c <reset_xps_maps+0x7c>
ffff8000113a4728: f901f6df str xzr, [x22,#1000]
ffff8000113a472c: 90000015 adrp x21, 0 <static_key_initialized>
ffff8000113a472c: R_AARCH64_ADR_PREL_PG_HI21 static_key_initialized
ffff8000113a4730: 90000014 adrp x20, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4730: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
STATIC_KEY_CHECK_USE(key);
ffff8000113a4734: 394002a0 ldrb w0, [x21]
ffff8000113a4734: R_AARCH64_LDST8_ABS_LO12_NC static_key_initialized
ffff8000113a4738: 340003e0 cbz w0, ffff8000113a47b4 <reset_xps_maps+0xb4>
ATOMIC_OPS(sub, sub, J)
ffff8000113a473c: 91000282 add x2, x20, #0x0
ffff8000113a473c: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a4740: 52800023 mov w3, #0x1 // #1
ffff8000113a4744: 9124e044 add x4, x2, #0x938
ffff8000113a4748: f9800091 prfm pstl1strm, [x4]
ffff8000113a474c: 885f7c80 ldxr w0, [x4]
ffff8000113a4750: 4b030000 sub w0, w0, w3
ffff8000113a4754: 88017c80 stxr w1, w0, [x4]
ffff8000113a4758: 35ffffa1 cbnz w1, ffff8000113a474c <reset_xps_maps+0x4c>
kfree_rcu(dev_maps, rcu);
ffff8000113a475c: b4000093 cbz x19, ffff8000113a476c <reset_xps_maps+0x6c>
ffff8000113a4760: aa1303e0 mov x0, x19
ffff8000113a4764: d2800001 mov x1, #0x0 // #0
ffff8000113a4768: 94000000 bl 0 <kfree_call_rcu>
ffff8000113a4768: R_AARCH64_CALL26 kfree_call_rcu
}
ffff8000113a476c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a4770: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a4774: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a4778: d65f03c0 ret
ffff8000113a477c: 90000015 adrp x21, 0 <static_key_initialized>
ffff8000113a477c: R_AARCH64_ADR_PREL_PG_HI21 static_key_initialized
ffff8000113a4780: 394002a0 ldrb w0, [x21]
ffff8000113a4780: R_AARCH64_LDST8_ABS_LO12_NC static_key_initialized
ffff8000113a4784: 90000014 adrp x20, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4784: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a4788: 340002a0 cbz w0, ffff8000113a47dc <reset_xps_maps+0xdc>
ffff8000113a478c: 91000280 add x0, x20, #0x0
ffff8000113a478c: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a4790: 52800021 mov w1, #0x1 // #1
ffff8000113a4794: 91250004 add x4, x0, #0x940
ffff8000113a4798: f9800091 prfm pstl1strm, [x4]
ffff8000113a479c: 885f7c82 ldxr w2, [x4]
ffff8000113a47a0: 4b010042 sub w2, w2, w1
ffff8000113a47a4: 88037c82 stxr w3, w2, [x4]
ffff8000113a47a8: 35ffffa3 cbnz w3, ffff8000113a479c <reset_xps_maps+0x9c>
ffff8000113a47ac: f901fadf str xzr, [x22,#1008]
ffff8000113a47b0: 17ffffe1 b ffff8000113a4734 <reset_xps_maps+0x34>
ffff8000113a47b4: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a47b4: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113a47b8: 91000282 add x2, x20, #0x0
ffff8000113a47b8: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a47bc: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a47bc: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x238
ffff8000113a47c0: 91000021 add x1, x1, #0x0
ffff8000113a47c0: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113a47c4: 91000000 add x0, x0, #0x0
ffff8000113a47c4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x238
ffff8000113a47c8: 91004021 add x1, x1, #0x10
ffff8000113a47cc: 9124e042 add x2, x2, #0x938
ffff8000113a47d0: 94000000 bl 0 <__warn_printk>
ffff8000113a47d0: R_AARCH64_CALL26 __warn_printk
ffff8000113a47d4: d4210000 brk #0x800
ffff8000113a47d8: 17ffffd9 b ffff8000113a473c <reset_xps_maps+0x3c>
ffff8000113a47dc: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a47dc: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113a47e0: 91000282 add x2, x20, #0x0
ffff8000113a47e0: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a47e4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a47e4: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x238
ffff8000113a47e8: 91000021 add x1, x1, #0x0
ffff8000113a47e8: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113a47ec: 91000000 add x0, x0, #0x0
ffff8000113a47ec: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x238
ffff8000113a47f0: 91004021 add x1, x1, #0x10
ffff8000113a47f4: 91250042 add x2, x2, #0x940
ffff8000113a47f8: 94000000 bl 0 <__warn_printk>
ffff8000113a47f8: R_AARCH64_CALL26 __warn_printk
ffff8000113a47fc: d4210000 brk #0x800
ffff8000113a4800: 17ffffe3 b ffff8000113a478c <reset_xps_maps+0x8c>
ffff8000113a4804 <netif_reset_xps_queues>:
{
ffff8000113a4804: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff8000113a4808: 910003fd mov x29, sp
ffff8000113a480c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a4810: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a4814: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a4818: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113a481c: a90573fb stp x27, x28, [sp,#80]
__READ_ONCE_SIZE;
ffff8000113a4820: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4820: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a4824: aa0003f4 mov x20, x0
ffff8000113a4828: aa1e03e0 mov x0, x30
ffff8000113a482c: 53003c38 uxth w24, w1
ffff8000113a4830: 53003c57 uxth w23, w2
ffff8000113a4834: 91000273 add x19, x19, #0x0
ffff8000113a4834: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a4838: 94000000 bl 0 <_mcount>
ffff8000113a4838: R_AARCH64_CALL26 _mcount
ffff8000113a483c: b9493a60 ldr w0, [x19,#2360]
if (unlikely(static_key_count(key) > 0))
ffff8000113a4840: 6b1f001f cmp w0, wzr
ffff8000113a4844: 5400010c b.gt ffff8000113a4864 <netif_reset_xps_queues+0x60>
}
ffff8000113a4848: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a484c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a4850: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a4854: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a4858: a94573fb ldp x27, x28, [sp,#80]
ffff8000113a485c: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113a4860: d65f03c0 ret
cpus_read_lock();
ffff8000113a4864: 94000000 bl 0 <cpus_read_lock>
ffff8000113a4864: R_AARCH64_CALL26 cpus_read_lock
mutex_lock(&xps_map_mutex);
ffff8000113a4868: 9000001b adrp x27, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4868: R_AARCH64_ADR_PREL_PG_HI21 .data
ffff8000113a486c: 91000360 add x0, x27, #0x0
ffff8000113a486c: R_AARCH64_ADD_ABS_LO12_NC .data
ffff8000113a4870: 91024000 add x0, x0, #0x90
ffff8000113a4874: 94000000 bl 0 <mutex_lock>
ffff8000113a4874: R_AARCH64_CALL26 mutex_lock
ffff8000113a4878: b9494260 ldr w0, [x19,#2368]
ffff8000113a487c: 6b1f001f cmp w0, wzr
ffff8000113a4880: 5400090c b.gt ffff8000113a49a0 <netif_reset_xps_queues+0x19c>
dev_maps = xmap_dereference(dev->xps_cpus_map);
ffff8000113a4884: f941f699 ldr x25, [x20,#1000]
if (!dev_maps)
ffff8000113a4888: b40006f9 cbz x25, ffff8000113a4964 <netif_reset_xps_queues+0x160>
static __always_inline int bitmap_weight(const unsigned long *src, unsigned int nbits)
{
if (small_const_nbits(nbits))
return hweight_long(*src & BITMAP_LAST_WORD_MASK(nbits));
return __bitmap_weight(src, nbits);
ffff8000113a488c: 90000015 adrp x21, 0 <__cpu_possible_mask>
ffff8000113a488c: R_AARCH64_ADR_PREL_PG_HI21 __cpu_possible_mask
ffff8000113a4890: 910002b5 add x21, x21, #0x0
ffff8000113a4890: R_AARCH64_ADD_ABS_LO12_NC __cpu_possible_mask
ffff8000113a4894: aa1503e0 mov x0, x21
ffff8000113a4898: 52820001 mov w1, #0x1000 // #4096
ffff8000113a489c: 94000000 bl 0 <__bitmap_weight>
ffff8000113a489c: R_AARCH64_CALL26 __bitmap_weight
nr_ids = nr_cpu_ids;
ffff8000113a48a0: 90000001 adrp x1, 0 <nr_cpu_ids>
ffff8000113a48a0: R_AARCH64_ADR_PREL_PG_HI21 nr_cpu_ids
ffff8000113a48a4: b940003a ldr w26, [x1]
ffff8000113a48a4: R_AARCH64_LDST32_ABS_LO12_NC nr_cpu_ids
const unsigned long *possible_mask = NULL;
ffff8000113a48a8: 7100041f cmp w0, #0x1
ffff8000113a48ac: 9a9f82b5 csel x21, x21, xzr, hi
for (j = -1; j = netif_attrmask_next(j, mask, nr_ids),
ffff8000113a48b0: 12800013 mov w19, #0xffffffff // #-1
bool active = false;
ffff8000113a48b4: 52800016 mov w22, #0x0 // #0
return find_next_bit(srcp, nr_bits, n + 1);
ffff8000113a48b8: 2a1a03fc mov w28, w26
ffff8000113a48bc: 1400000d b ffff8000113a48f0 <netif_reset_xps_queues+0xec>
ffff8000113a48c0: 94000000 bl 0 <find_next_bit>
ffff8000113a48c0: R_AARCH64_CALL26 find_next_bit
for (j = -1; j = netif_attrmask_next(j, mask, nr_ids),
ffff8000113a48c4: 6b00035f cmp w26, w0
active |= remove_xps_queue_cpu(dev, dev_maps, j, offset,
ffff8000113a48c8: aa1903e1 mov x1, x25
ffff8000113a48cc: 2a1803e3 mov w3, w24
ffff8000113a48d0: 2a1703e4 mov w4, w23
for (j = -1; j = netif_attrmask_next(j, mask, nr_ids),
ffff8000113a48d4: 2a0003f3 mov w19, w0
active |= remove_xps_queue_cpu(dev, dev_maps, j, offset,
ffff8000113a48d8: 2a0003e2 mov w2, w0
for (j = -1; j = netif_attrmask_next(j, mask, nr_ids),
ffff8000113a48dc: 54000249 b.ls ffff8000113a4924 <netif_reset_xps_queues+0x120>
active |= remove_xps_queue_cpu(dev, dev_maps, j, offset,
ffff8000113a48e0: 79509280 ldrh w0, [x20,#2120]
ffff8000113a48e4: 97fff4be bl ffff8000113a1bdc <remove_xps_queue_cpu.isra.105>
ffff8000113a48e8: 53001c00 uxtb w0, w0
ffff8000113a48ec: 2a160016 orr w22, w0, w22
ffff8000113a48f0: 11000662 add w2, w19, #0x1
ffff8000113a48f4: aa1503e0 mov x0, x21
ffff8000113a48f8: aa1c03e1 mov x1, x28
ffff8000113a48fc: 93407c42 sxtw x2, w2
if (srcp)
ffff8000113a4900: b5fffe15 cbnz x21, ffff8000113a48c0 <netif_reset_xps_queues+0xbc>
return n + 1;
ffff8000113a4904: 11000660 add w0, w19, #0x1
for (j = -1; j = netif_attrmask_next(j, mask, nr_ids),
ffff8000113a4908: 6b00035f cmp w26, w0
active |= remove_xps_queue_cpu(dev, dev_maps, j, offset,
ffff8000113a490c: aa1903e1 mov x1, x25
ffff8000113a4910: 2a1803e3 mov w3, w24
ffff8000113a4914: 2a1703e4 mov w4, w23
for (j = -1; j = netif_attrmask_next(j, mask, nr_ids),
ffff8000113a4918: 2a0003f3 mov w19, w0
active |= remove_xps_queue_cpu(dev, dev_maps, j, offset,
ffff8000113a491c: 2a0003e2 mov w2, w0
for (j = -1; j = netif_attrmask_next(j, mask, nr_ids),
ffff8000113a4920: 54fffe08 b.hi ffff8000113a48e0 <netif_reset_xps_queues+0xdc>
if (!active)
ffff8000113a4924: 34000376 cbz w22, ffff8000113a4990 <netif_reset_xps_queues+0x18c>
for (i = offset + (count - 1); count--; i--) {
ffff8000113a4928: 510006e5 sub w5, w23, #0x1
ffff8000113a492c: 0b050301 add w1, w24, w5
ffff8000113a4930: 53003ca5 uxth w5, w5
ffff8000113a4934: 34000197 cbz w23, ffff8000113a4964 <netif_reset_xps_queues+0x160>
ffff8000113a4938: 2a2503e5 mvn w5, w5
ffff8000113a493c: 0b0100a5 add w5, w5, w1
return &dev->_tx[index];
ffff8000113a4940: 52802804 mov w4, #0x140 // #320
q->numa_node = node;
ffff8000113a4944: 12800003 mov w3, #0xffffffff // #-1
ffff8000113a4948: f941e282 ldr x2, [x20,#960]
return &dev->_tx[index];
ffff8000113a494c: 9ba47c20 umull x0, w1, w4
q->numa_node = node;
ffff8000113a4950: 8b000040 add x0, x2, x0
ffff8000113a4954: 51000421 sub w1, w1, #0x1
ffff8000113a4958: b9005803 str w3, [x0,#88]
ffff8000113a495c: 6b05003f cmp w1, w5
ffff8000113a4960: 54ffff41 b.ne ffff8000113a4948 <netif_reset_xps_queues+0x144>
mutex_unlock(&xps_map_mutex);
ffff8000113a4964: 91000360 add x0, x27, #0x0
ffff8000113a4964: R_AARCH64_ADD_ABS_LO12_NC .data
ffff8000113a4968: 91024000 add x0, x0, #0x90
ffff8000113a496c: 94000000 bl 0 <mutex_unlock>
ffff8000113a496c: R_AARCH64_CALL26 mutex_unlock
cpus_read_unlock();
ffff8000113a4970: 94000000 bl 0 <cpus_read_unlock>
ffff8000113a4970: R_AARCH64_CALL26 cpus_read_unlock
}
ffff8000113a4974: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a4978: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a497c: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a4980: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a4984: a94573fb ldp x27, x28, [sp,#80]
ffff8000113a4988: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113a498c: d65f03c0 ret
reset_xps_maps(dev, dev_maps, is_rxqs_map);
ffff8000113a4990: aa1403e0 mov x0, x20
ffff8000113a4994: 2a1603e2 mov w2, w22
ffff8000113a4998: 97ffff5a bl ffff8000113a4700 <reset_xps_maps>
ffff8000113a499c: 17ffffe3 b ffff8000113a4928 <netif_reset_xps_queues+0x124>
dev_maps = xmap_dereference(dev->xps_rxqs_map);
ffff8000113a49a0: f941fa99 ldr x25, [x20,#1008]
if (dev_maps) {
ffff8000113a49a4: b4fff719 cbz x25, ffff8000113a4884 <netif_reset_xps_queues+0x80>
nr_ids = dev->num_rx_queues;
ffff8000113a49a8: b9432a96 ldr w22, [x20,#808]
for (j = -1; j = netif_attrmask_next(j, mask, nr_ids),
ffff8000113a49ac: 52800013 mov w19, #0x0 // #0
bool active = false;
ffff8000113a49b0: 2a1303f5 mov w21, w19
for (j = -1; j = netif_attrmask_next(j, mask, nr_ids),
ffff8000113a49b4: 340001b6 cbz w22, ffff8000113a49e8 <netif_reset_xps_queues+0x1e4>
active |= remove_xps_queue_cpu(dev, dev_maps, j, offset,
ffff8000113a49b8: 79509280 ldrh w0, [x20,#2120]
ffff8000113a49bc: 2a1303e2 mov w2, w19
ffff8000113a49c0: aa1903e1 mov x1, x25
ffff8000113a49c4: 2a1803e3 mov w3, w24
ffff8000113a49c8: 2a1703e4 mov w4, w23
ffff8000113a49cc: 97fff484 bl ffff8000113a1bdc <remove_xps_queue_cpu.isra.105>
ffff8000113a49d0: 11000673 add w19, w19, #0x1
ffff8000113a49d4: 53001c00 uxtb w0, w0
for (j = -1; j = netif_attrmask_next(j, mask, nr_ids),
ffff8000113a49d8: 6b16027f cmp w19, w22
active |= remove_xps_queue_cpu(dev, dev_maps, j, offset,
ffff8000113a49dc: 2a0002b5 orr w21, w21, w0
for (j = -1; j = netif_attrmask_next(j, mask, nr_ids),
ffff8000113a49e0: 54fffec1 b.ne ffff8000113a49b8 <netif_reset_xps_queues+0x1b4>
if (!active)
ffff8000113a49e4: 35fff515 cbnz w21, ffff8000113a4884 <netif_reset_xps_queues+0x80>
reset_xps_maps(dev, dev_maps, is_rxqs_map);
ffff8000113a49e8: aa1403e0 mov x0, x20
ffff8000113a49ec: aa1903e1 mov x1, x25
ffff8000113a49f0: 52800022 mov w2, #0x1 // #1
ffff8000113a49f4: 97ffff43 bl ffff8000113a4700 <reset_xps_maps>
ffff8000113a49f8: 17ffffa3 b ffff8000113a4884 <netif_reset_xps_queues+0x80>
ffff8000113a49fc <netdev_unbind_sb_channel>:
{
ffff8000113a49fc: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a4a00: 910003fd mov x29, sp
ffff8000113a4a04: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a4a08: f90013f5 str x21, [sp,#32]
ffff8000113a4a0c: aa0003f5 mov x21, x0
ffff8000113a4a10: aa1e03e0 mov x0, x30
ffff8000113a4a14: aa0103f3 mov x19, x1
ffff8000113a4a18: 94000000 bl 0 <_mcount>
ffff8000113a4a18: R_AARCH64_CALL26 _mcount
struct netdev_queue *txq = &dev->_tx[dev->num_tx_queues];
ffff8000113a4a1c: b943cab4 ldr w20, [x21,#968]
ffff8000113a4a20: f941e2a3 ldr x3, [x21,#960]
netif_reset_xps_queues(dev, index, dev->num_tx_queues - index);
ffff8000113a4a24: 79479262 ldrh w2, [x19,#968]
struct netdev_queue *txq = &dev->_tx[dev->num_tx_queues];
ffff8000113a4a28: 52802800 mov w0, #0x140 // #320
ffff8000113a4a2c: 9ba07e94 umull x20, w20, w0
netif_reset_xps_queues(dev, index, dev->num_tx_queues - index);
ffff8000113a4a30: 52800001 mov w1, #0x0 // #0
ffff8000113a4a34: aa1303e0 mov x0, x19
struct netdev_queue *txq = &dev->_tx[dev->num_tx_queues];
ffff8000113a4a38: 8b140074 add x20, x3, x20
netif_reset_xps_queues(dev, index, dev->num_tx_queues - index);
ffff8000113a4a3c: 97ffff72 bl ffff8000113a4804 <netif_reset_xps_queues>
return __builtin_memset(p, c, size);
ffff8000113a4a40: 91212a60 add x0, x19, #0x84a
ffff8000113a4a44: a9007c1f stp xzr, xzr, [x0]
ffff8000113a4a48: a9017c1f stp xzr, xzr, [x0,#16]
ffff8000113a4a4c: a9027c1f stp xzr, xzr, [x0,#32]
ffff8000113a4a50: a9037c1f stp xzr, xzr, [x0,#48]
ffff8000113a4a54: 91222a60 add x0, x19, #0x88a
ffff8000113a4a58: a9007c1f stp xzr, xzr, [x0]
ffff8000113a4a5c: f941e2a1 ldr x1, [x21,#960]
ffff8000113a4a60: aa1403e2 mov x2, x20
ffff8000113a4a64: d1050285 sub x5, x20, #0x140
ffff8000113a4a68: cb140043 sub x3, x2, x20
while (txq-- != &dev->_tx[0]) {
ffff8000113a4a6c: eb02003f cmp x1, x2
ffff8000113a4a70: 8b050063 add x3, x3, x5
ffff8000113a4a74: 54000160 b.eq ffff8000113a4aa0 <netdev_unbind_sb_channel+0xa4>
if (txq->sb_dev == sb_dev)
ffff8000113a4a78: f9403864 ldr x4, [x3,#112]
ffff8000113a4a7c: d1050042 sub x2, x2, #0x140
ffff8000113a4a80: eb13009f cmp x4, x19
ffff8000113a4a84: 54ffff21 b.ne ffff8000113a4a68 <netdev_unbind_sb_channel+0x6c>
txq->sb_dev = NULL;
ffff8000113a4a88: f900387f str xzr, [x3,#112]
ffff8000113a4a8c: f941e2a1 ldr x1, [x21,#960]
ffff8000113a4a90: cb140043 sub x3, x2, x20
while (txq-- != &dev->_tx[0]) {
ffff8000113a4a94: eb02003f cmp x1, x2
ffff8000113a4a98: 8b050063 add x3, x3, x5
ffff8000113a4a9c: 54fffee1 b.ne ffff8000113a4a78 <netdev_unbind_sb_channel+0x7c>
}
ffff8000113a4aa0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a4aa4: f94013f5 ldr x21, [sp,#32]
ffff8000113a4aa8: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a4aac: d65f03c0 ret
ffff8000113a4ab0 <netdev_unbind_all_sb_channels>:
{
ffff8000113a4ab0: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a4ab4: 910003fd mov x29, sp
ffff8000113a4ab8: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a4abc: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a4ac0: aa0003f4 mov x20, x0
ffff8000113a4ac4: aa1e03e0 mov x0, x30
ffff8000113a4ac8: 94000000 bl 0 <_mcount>
ffff8000113a4ac8: R_AARCH64_CALL26 _mcount
struct netdev_queue *txq = &dev->_tx[dev->num_tx_queues];
ffff8000113a4acc: b943ca95 ldr w21, [x20,#968]
ffff8000113a4ad0: f941e283 ldr x3, [x20,#960]
ffff8000113a4ad4: 52802800 mov w0, #0x140 // #320
ffff8000113a4ad8: 9ba07eb5 umull x21, w21, w0
ffff8000113a4adc: 8b150075 add x21, x3, x21
ffff8000113a4ae0: aa1503e1 mov x1, x21
while (txq-- != &dev->_tx[0]) {
ffff8000113a4ae4: d1050033 sub x19, x1, #0x140
ffff8000113a4ae8: d10502b6 sub x22, x21, #0x140
ffff8000113a4aec: eb03003f cmp x1, x3
ffff8000113a4af0: cb150261 sub x1, x19, x21
netdev_unbind_sb_channel(dev, txq->sb_dev);
ffff8000113a4af4: aa1403e0 mov x0, x20
ffff8000113a4af8: 8b160021 add x1, x1, x22
while (txq-- != &dev->_tx[0]) {
ffff8000113a4afc: 540001a0 b.eq ffff8000113a4b30 <netdev_unbind_all_sb_channels+0x80>
if (txq->sb_dev)
ffff8000113a4b00: f940d822 ldr x2, [x1,#432]
netdev_unbind_sb_channel(dev, txq->sb_dev);
ffff8000113a4b04: aa0203e1 mov x1, x2
if (txq->sb_dev)
ffff8000113a4b08: b4000062 cbz x2, ffff8000113a4b14 <netdev_unbind_all_sb_channels+0x64>
netdev_unbind_sb_channel(dev, txq->sb_dev);
ffff8000113a4b0c: 94000000 bl ffff8000113a49fc <netdev_unbind_sb_channel>
ffff8000113a4b0c: R_AARCH64_CALL26 netdev_unbind_sb_channel
ffff8000113a4b10: f941e283 ldr x3, [x20,#960]
ffff8000113a4b14: aa1303e1 mov x1, x19
while (txq-- != &dev->_tx[0]) {
ffff8000113a4b18: d1050033 sub x19, x1, #0x140
ffff8000113a4b1c: eb03003f cmp x1, x3
ffff8000113a4b20: cb150261 sub x1, x19, x21
netdev_unbind_sb_channel(dev, txq->sb_dev);
ffff8000113a4b24: aa1403e0 mov x0, x20
ffff8000113a4b28: 8b160021 add x1, x1, x22
while (txq-- != &dev->_tx[0]) {
ffff8000113a4b2c: 54fffea1 b.ne ffff8000113a4b00 <netdev_unbind_all_sb_channels+0x50>
}
ffff8000113a4b30: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a4b34: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a4b38: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a4b3c: d65f03c0 ret
ffff8000113a4b40 <netdev_reset_tc>:
{
ffff8000113a4b40: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a4b44: 910003fd mov x29, sp
ffff8000113a4b48: f9000bf3 str x19, [sp,#16]
ffff8000113a4b4c: aa0003f3 mov x19, x0
ffff8000113a4b50: aa1e03e0 mov x0, x30
ffff8000113a4b54: 94000000 bl 0 <_mcount>
ffff8000113a4b54: R_AARCH64_CALL26 _mcount
netif_reset_xps_queues(dev, index, dev->num_tx_queues - index);
ffff8000113a4b58: 79479262 ldrh w2, [x19,#968]
ffff8000113a4b5c: aa1303e0 mov x0, x19
ffff8000113a4b60: 52800001 mov w1, #0x0 // #0
ffff8000113a4b64: 97ffff28 bl ffff8000113a4804 <netif_reset_xps_queues>
netdev_unbind_all_sb_channels(dev);
ffff8000113a4b68: aa1303e0 mov x0, x19
ffff8000113a4b6c: 97ffffd1 bl ffff8000113a4ab0 <netdev_unbind_all_sb_channels>
ffff8000113a4b70: 91212a60 add x0, x19, #0x84a
dev->num_tc = 0;
ffff8000113a4b74: 7910927f strh wzr, [x19,#2120]
ffff8000113a4b78: a9007c1f stp xzr, xzr, [x0]
ffff8000113a4b7c: a9017c1f stp xzr, xzr, [x0,#16]
ffff8000113a4b80: a9027c1f stp xzr, xzr, [x0,#32]
ffff8000113a4b84: a9037c1f stp xzr, xzr, [x0,#48]
ffff8000113a4b88: 91222a73 add x19, x19, #0x88a
ffff8000113a4b8c: a9007e7f stp xzr, xzr, [x19]
}
ffff8000113a4b90: f9400bf3 ldr x19, [sp,#16]
ffff8000113a4b94: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a4b98: d65f03c0 ret
ffff8000113a4b9c <netdev_set_num_tc>:
{
ffff8000113a4b9c: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a4ba0: 910003fd mov x29, sp
ffff8000113a4ba4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a4ba8: aa0003f3 mov x19, x0
ffff8000113a4bac: aa1e03e0 mov x0, x30
ffff8000113a4bb0: 53001c34 uxtb w20, w1
ffff8000113a4bb4: 94000000 bl 0 <_mcount>
ffff8000113a4bb4: R_AARCH64_CALL26 _mcount
if (num_tc > TC_MAX_QUEUE)
ffff8000113a4bb8: 7100429f cmp w20, #0x10
ffff8000113a4bbc: 54000188 b.hi ffff8000113a4bec <netdev_set_num_tc+0x50>
netif_reset_xps_queues(dev, index, dev->num_tx_queues - index);
ffff8000113a4bc0: 79479262 ldrh w2, [x19,#968]
ffff8000113a4bc4: 52800001 mov w1, #0x0 // #0
ffff8000113a4bc8: aa1303e0 mov x0, x19
ffff8000113a4bcc: 97ffff0e bl ffff8000113a4804 <netif_reset_xps_queues>
netdev_unbind_all_sb_channels(dev);
ffff8000113a4bd0: aa1303e0 mov x0, x19
ffff8000113a4bd4: 97ffffb7 bl ffff8000113a4ab0 <netdev_unbind_all_sb_channels>
return 0;
ffff8000113a4bd8: 52800000 mov w0, #0x0 // #0
dev->num_tc = num_tc;
ffff8000113a4bdc: 79109274 strh w20, [x19,#2120]
}
ffff8000113a4be0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a4be4: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a4be8: d65f03c0 ret
return -EINVAL;
ffff8000113a4bec: 128002a0 mov w0, #0xffffffea // #-22
ffff8000113a4bf0: 17fffffc b ffff8000113a4be0 <netdev_set_num_tc+0x44>
ffff8000113a4bf4 <netdev_set_tc_queue>:
{
ffff8000113a4bf4: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a4bf8: 910003fd mov x29, sp
ffff8000113a4bfc: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a4c00: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a4c04: aa0003f3 mov x19, x0
ffff8000113a4c08: aa1e03e0 mov x0, x30
ffff8000113a4c0c: 53001c34 uxtb w20, w1
ffff8000113a4c10: 53003c56 uxth w22, w2
ffff8000113a4c14: 53003c75 uxth w21, w3
ffff8000113a4c18: 94000000 bl 0 <_mcount>
ffff8000113a4c18: R_AARCH64_CALL26 _mcount
if (tc >= dev->num_tc)
ffff8000113a4c1c: 79d09260 ldrsh w0, [x19,#2120]
ffff8000113a4c20: 6b00029f cmp w20, w0
ffff8000113a4c24: 540001aa b.ge ffff8000113a4c58 <netdev_set_tc_queue+0x64>
netif_reset_xps_queues(dev, offset, count);
ffff8000113a4c28: aa1303e0 mov x0, x19
ffff8000113a4c2c: 2a1503e1 mov w1, w21
ffff8000113a4c30: 2a1603e2 mov w2, w22
ffff8000113a4c34: 97fffef4 bl ffff8000113a4804 <netif_reset_xps_queues>
ffff8000113a4c38: 8b340a73 add x19, x19, w20, uxtb #2
dev->tc_to_txq[tc].count = count;
ffff8000113a4c3c: 79109676 strh w22, [x19,#2122]
dev->tc_to_txq[tc].offset = offset;
ffff8000113a4c40: 79109a75 strh w21, [x19,#2124]
return 0;
ffff8000113a4c44: 52800000 mov w0, #0x0 // #0
}
ffff8000113a4c48: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a4c4c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a4c50: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a4c54: d65f03c0 ret
return -EINVAL;
ffff8000113a4c58: 128002a0 mov w0, #0xffffffea // #-22
ffff8000113a4c5c: 17fffffb b ffff8000113a4c48 <netdev_set_tc_queue+0x54>
ffff8000113a4c60 <netif_set_real_num_tx_queues>:
{
ffff8000113a4c60: a9b97bfd stp x29, x30, [sp,#-112]!
ffff8000113a4c64: 910003fd mov x29, sp
ffff8000113a4c68: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a4c6c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a4c70: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a4c74: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113a4c78: a90573fb stp x27, x28, [sp,#80]
ffff8000113a4c7c: aa0003f3 mov x19, x0
ffff8000113a4c80: 2a0103f4 mov w20, w1
ffff8000113a4c84: aa1e03e0 mov x0, x30
ffff8000113a4c88: aa1e03f5 mov x21, x30
ffff8000113a4c8c: 94000000 bl 0 <_mcount>
ffff8000113a4c8c: R_AARCH64_CALL26 _mcount
disabling = txq < dev->real_num_tx_queues;
ffff8000113a4c90: b943ce76 ldr w22, [x19,#972]
if (txq < 1 || txq > dev->num_tx_queues)
ffff8000113a4c94: 340009b4 cbz w20, ffff8000113a4dc8 <netif_set_real_num_tx_queues+0x168>
ffff8000113a4c98: b943ca60 ldr w0, [x19,#968]
ffff8000113a4c9c: 6b00029f cmp w20, w0
ffff8000113a4ca0: 54000948 b.hi ffff8000113a4dc8 <netif_set_real_num_tx_queues+0x168>
if (dev->reg_state == NETREG_REGISTERED ||
ffff8000113a4ca4: 39536260 ldrb w0, [x19,#1240]
ffff8000113a4ca8: 51000400 sub w0, w0, #0x1
ffff8000113a4cac: 53001c00 uxtb w0, w0
ffff8000113a4cb0: 7100041f cmp w0, #0x1
ffff8000113a4cb4: 54000149 b.ls ffff8000113a4cdc <netif_set_real_num_tx_queues+0x7c>
dev->real_num_tx_queues = txq;
ffff8000113a4cb8: b903ce74 str w20, [x19,#972]
return 0;
ffff8000113a4cbc: 52800000 mov w0, #0x0 // #0
}
ffff8000113a4cc0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a4cc4: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a4cc8: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a4ccc: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a4cd0: a94573fb ldp x27, x28, [sp,#80]
ffff8000113a4cd4: a8c77bfd ldp x29, x30, [sp],#112
ffff8000113a4cd8: d65f03c0 ret
ASSERT_RTNL();
ffff8000113a4cdc: 94000000 bl 0 <rtnl_is_locked>
ffff8000113a4cdc: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113a4ce0: 34000c40 cbz w0, ffff8000113a4e68 <netif_set_real_num_tx_queues+0x208>
rc = netdev_queue_update_kobjects(dev, dev->real_num_tx_queues,
ffff8000113a4ce4: b943ce61 ldr w1, [x19,#972]
ffff8000113a4ce8: aa1303e0 mov x0, x19
ffff8000113a4cec: 2a1403e2 mov w2, w20
ffff8000113a4cf0: 94000000 bl 0 <netdev_queue_update_kobjects>
ffff8000113a4cf0: R_AARCH64_CALL26 netdev_queue_update_kobjects
ffff8000113a4cf4: 2a0003f9 mov w25, w0
if (rc)
ffff8000113a4cf8: 35fffe59 cbnz w25, ffff8000113a4cc0 <netif_set_real_num_tx_queues+0x60>
if (dev->num_tc)
ffff8000113a4cfc: 79d09260 ldrsh w0, [x19,#2120]
ffff8000113a4d00: 35000680 cbnz w0, ffff8000113a4dd0 <netif_set_real_num_tx_queues+0x170>
dev->real_num_tx_queues = txq;
ffff8000113a4d04: b903ce74 str w20, [x19,#972]
if (disabling) {
ffff8000113a4d08: 6b1402df cmp w22, w20
return 0;
ffff8000113a4d0c: 52800000 mov w0, #0x0 // #0
if (disabling) {
ffff8000113a4d10: 54fffd89 b.ls ffff8000113a4cc0 <netif_set_real_num_tx_queues+0x60>
synchronize_net();
ffff8000113a4d14: f90037a0 str x0, [x29,#104]
ffff8000113a4d18: 94000000 bl ffff8000113a1384 <synchronize_net>
ffff8000113a4d18: R_AARCH64_CALL26 synchronize_net
/* Reset all TX qdiscs greater than index of a device. */
static inline void qdisc_reset_all_tx_gt(struct net_device *dev, unsigned int i)
{
struct Qdisc *qdisc;
for (; i < dev->num_tx_queues; i++) {
ffff8000113a4d1c: b943ca62 ldr w2, [x19,#968]
ffff8000113a4d20: f94037a0 ldr x0, [x29,#104]
ffff8000113a4d24: 6b02029f cmp w20, w2
ffff8000113a4d28: 54000442 b.cs ffff8000113a4db0 <netif_set_real_num_tx_queues+0x150>
ffff8000113a4d2c: 2a1403f7 mov w23, w20
return &dev->_tx[index];
ffff8000113a4d30: 5280281a mov w26, #0x140 // #320
__CMPXCHG_CASE(w, , acq_, 32, , a, , "memory", K)
ffff8000113a4d34: d2800019 mov x25, #0x0 // #0
ffff8000113a4d38: 52800038 mov w24, #0x1 // #1
smp_store_release(&lock->locked, 0);
ffff8000113a4d3c: 2a0003fb mov w27, w0
ffff8000113a4d40: d538411c mrs x28, sp_el0
qdisc = rtnl_dereference(netdev_get_tx_queue(dev, i)->qdisc);
ffff8000113a4d44: f941e261 ldr x1, [x19,#960]
ffff8000113a4d48: 9bba7ee0 umull x0, w23, w26
ffff8000113a4d4c: 8b000021 add x1, x1, x0
ffff8000113a4d50: f9400436 ldr x22, [x1,#8]
if (qdisc) {
ffff8000113a4d54: b4000296 cbz x22, ffff8000113a4da4 <netif_set_real_num_tx_queues+0x144>
ffff8000113a4d58: b9401b80 ldr w0, [x28,#24]
ffff8000113a4d5c: 11080000 add w0, w0, #0x200
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff8000113a4d60: b9001b80 str w0, [x28,#24]
extern void do_raw_spin_unlock(raw_spinlock_t *lock) __releases(lock);
#else
static inline void do_raw_spin_lock(raw_spinlock_t *lock) __acquires(lock)
{
__acquire(lock);
arch_spin_lock(&lock->raw_lock);
ffff8000113a4d64: 9102b2c0 add x0, x22, #0xac
ffff8000113a4d68: f9800011 prfm pstl1strm, [x0]
ffff8000113a4d6c: 885ffc01 ldaxr w1, [x0]
ffff8000113a4d70: 4a190022 eor w2, w1, w25
ffff8000113a4d74: 35000062 cbnz w2, ffff8000113a4d80 <netif_set_real_num_tx_queues+0x120>
ffff8000113a4d78: 88027c18 stxr w2, w24, [x0]
ffff8000113a4d7c: 35ffff82 cbnz w2, ffff8000113a4d6c <netif_set_real_num_tx_queues+0x10c>
ffff8000113a4d80: 35000661 cbnz w1, ffff8000113a4e4c <netif_set_real_num_tx_queues+0x1ec>
spin_lock_bh(qdisc_lock(qdisc));
qdisc_reset(qdisc);
ffff8000113a4d84: aa1603e0 mov x0, x22
ffff8000113a4d88: 94000000 bl 0 <qdisc_reset>
ffff8000113a4d88: R_AARCH64_CALL26 qdisc_reset
ffff8000113a4d8c: 9102b2d6 add x22, x22, #0xac
ffff8000113a4d90: 089ffedb stlrb w27, [x22]
static inline void __raw_spin_unlock_bh(raw_spinlock_t *lock)
{
spin_release(&lock->dep_map, _RET_IP_);
do_raw_spin_unlock(lock);
__local_bh_enable_ip(_RET_IP_, SOFTIRQ_LOCK_OFFSET);
ffff8000113a4d94: 52804001 mov w1, #0x200 // #512
ffff8000113a4d98: aa1503e0 mov x0, x21
ffff8000113a4d9c: 94000000 bl 0 <__local_bh_enable_ip>
ffff8000113a4d9c: R_AARCH64_CALL26 __local_bh_enable_ip
ffff8000113a4da0: b943ca62 ldr w2, [x19,#968]
for (; i < dev->num_tx_queues; i++) {
ffff8000113a4da4: 110006f7 add w23, w23, #0x1
ffff8000113a4da8: 6b0202ff cmp w23, w2
ffff8000113a4dac: 54fffcc3 b.cc ffff8000113a4d44 <netif_set_real_num_tx_queues+0xe4>
netif_reset_xps_queues_gt(dev, txq);
ffff8000113a4db0: 53003e81 uxth w1, w20
netif_reset_xps_queues(dev, index, dev->num_tx_queues - index);
ffff8000113a4db4: aa1303e0 mov x0, x19
ffff8000113a4db8: 4b010042 sub w2, w2, w1
ffff8000113a4dbc: 97fffe92 bl ffff8000113a4804 <netif_reset_xps_queues>
return 0;
ffff8000113a4dc0: 52800000 mov w0, #0x0 // #0
ffff8000113a4dc4: 17ffffbf b ffff8000113a4cc0 <netif_set_real_num_tx_queues+0x60>
return -EINVAL;
ffff8000113a4dc8: 128002a0 mov w0, #0xffffffea // #-22
ffff8000113a4dcc: 17ffffbd b ffff8000113a4cc0 <netif_set_real_num_tx_queues+0x60>
if (tc->offset + tc->count > txq) {
ffff8000113a4dd0: 79509a61 ldrh w1, [x19,#2124]
ffff8000113a4dd4: 79509660 ldrh w0, [x19,#2122]
ffff8000113a4dd8: aa1303f8 mov x24, x19
ffff8000113a4ddc: 0b000020 add w0, w1, w0
ffff8000113a4de0: 6b00029f cmp w20, w0
pr_warn("Number of in use tx queues changed. Priority %i to tc mapping %i is no longer valid. Setting map to 0\n",
ffff8000113a4de4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4de4: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x398
if (tc->offset + tc->count > txq) {
ffff8000113a4de8: 52800037 mov w23, #0x1 // #1
pr_warn("Number of in use tx queues changed. Priority %i to tc mapping %i is no longer valid. Setting map to 0\n",
ffff8000113a4dec: 9100001a add x26, x0, #0x0
ffff8000113a4dec: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x398
if (tc->offset + tc->count > txq) {
ffff8000113a4df0: 540000a2 b.cs ffff8000113a4e04 <netif_set_real_num_tx_queues+0x1a4>
ffff8000113a4df4: 14000018 b ffff8000113a4e54 <netif_set_real_num_tx_queues+0x1f4>
for (i = 1; i < TC_BITMASK + 1; i++) {
ffff8000113a4df8: 110006f7 add w23, w23, #0x1
ffff8000113a4dfc: 710042ff cmp w23, #0x10
ffff8000113a4e00: 54fff820 b.eq ffff8000113a4d04 <netif_set_real_num_tx_queues+0xa4>
return dev->prio_tc_map[prio & TC_BITMASK];
ffff8000113a4e04: 39622f02 ldrb w2, [x24,#2187]
ffff8000113a4e08: 91000718 add x24, x24, #0x1
tc = &dev->tc_to_txq[q];
ffff8000113a4e0c: 8b22ca61 add x1, x19, w2, sxtw #2
if (tc->offset + tc->count > txq) {
ffff8000113a4e10: 79509823 ldrh w3, [x1,#2124]
tc = &dev->tc_to_txq[q];
ffff8000113a4e14: 91210021 add x1, x1, #0x840
if (tc->offset + tc->count > txq) {
ffff8000113a4e18: 79401421 ldrh w1, [x1,#10]
ffff8000113a4e1c: 0b010061 add w1, w3, w1
ffff8000113a4e20: 6b01029f cmp w20, w1
ffff8000113a4e24: 54fffea2 b.cs ffff8000113a4df8 <netif_set_real_num_tx_queues+0x198>
pr_warn("Number of in use tx queues changed. Priority %i to tc mapping %i is no longer valid. Setting map to 0\n",
ffff8000113a4e28: 2a1703e1 mov w1, w23
ffff8000113a4e2c: aa1a03e0 mov x0, x26
ffff8000113a4e30: 94000000 bl 0 <printk>
ffff8000113a4e30: R_AARCH64_CALL26 printk
if (tc >= dev->num_tc)
ffff8000113a4e34: 79d09261 ldrsh w1, [x19,#2120]
dev->prio_tc_map[prio & TC_BITMASK] = tc & TC_BITMASK;
ffff8000113a4e38: 8b37c260 add x0, x19, w23, sxtw
if (tc >= dev->num_tc)
ffff8000113a4e3c: 6b1f003f cmp w1, wzr
ffff8000113a4e40: 54fffdcd b.le ffff8000113a4df8 <netif_set_real_num_tx_queues+0x198>
dev->prio_tc_map[prio & TC_BITMASK] = tc & TC_BITMASK;
ffff8000113a4e44: 3922281f strb wzr, [x0,#2186]
ffff8000113a4e48: 17ffffec b ffff8000113a4df8 <netif_set_real_num_tx_queues+0x198>
queued_spin_lock_slowpath(lock, val);
ffff8000113a4e4c: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113a4e4c: R_AARCH64_CALL26 queued_spin_lock_slowpath
ffff8000113a4e50: 17ffffcd b ffff8000113a4d84 <netif_set_real_num_tx_queues+0x124>
pr_warn("Number of in use tx queues changed invalidating tc mappings. Priority traffic classification disabled!\n");
ffff8000113a4e54: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4e54: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x328
ffff8000113a4e58: 91000000 add x0, x0, #0x0
ffff8000113a4e58: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x328
ffff8000113a4e5c: 94000000 bl 0 <printk>
ffff8000113a4e5c: R_AARCH64_CALL26 printk
dev->num_tc = 0;
ffff8000113a4e60: 79109279 strh w25, [x19,#2120]
ffff8000113a4e64: 17ffffa8 b ffff8000113a4d04 <netif_set_real_num_tx_queues+0xa4>
ASSERT_RTNL();
ffff8000113a4e68: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4e68: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113a4e6c: 91000063 add x3, x3, #0x0
ffff8000113a4e6c: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113a4e70: 39404460 ldrb w0, [x3,#17]
ffff8000113a4e74: 35fff380 cbnz w0, ffff8000113a4ce4 <netif_set_real_num_tx_queues+0x84>
ffff8000113a4e78: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4e78: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113a4e7c: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4e7c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113a4e80: 52800024 mov w4, #0x1 // #1
ffff8000113a4e84: 91000000 add x0, x0, #0x0
ffff8000113a4e84: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113a4e88: 91000021 add x1, x1, #0x0
ffff8000113a4e88: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113a4e8c: 52816662 mov w2, #0xb33 // #2867
ffff8000113a4e90: 39004464 strb w4, [x3,#17]
ffff8000113a4e94: 94000000 bl 0 <__warn_printk>
ffff8000113a4e94: R_AARCH64_CALL26 __warn_printk
ffff8000113a4e98: d4210000 brk #0x800
ffff8000113a4e9c: 17ffff92 b ffff8000113a4ce4 <netif_set_real_num_tx_queues+0x84>
ffff8000113a4ea0 <dev_queue_xmit_nit>:
{
ffff8000113a4ea0: a9b97bfd stp x29, x30, [sp,#-112]!
ffff8000113a4ea4: 910003fd mov x29, sp
ffff8000113a4ea8: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a4eac: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a4eb0: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a4eb4: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113a4eb8: a90573fb stp x27, x28, [sp,#80]
ffff8000113a4ebc: aa0003f5 mov x21, x0
ffff8000113a4ec0: aa1e03e0 mov x0, x30
ffff8000113a4ec4: aa0103f8 mov x24, x1
ffff8000113a4ec8: 94000000 bl 0 <_mcount>
ffff8000113a4ec8: R_AARCH64_CALL26 _mcount
struct list_head *ptype_list = &ptype_all;
ffff8000113a4ecc: 9000001b adrp x27, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4ecc: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a4ed0: 9100037b add x27, x27, #0x0
ffff8000113a4ed0: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a4ed4: 9120037b add x27, x27, #0x800
struct packet_type *pt_prev = NULL;
ffff8000113a4ed8: d280001c mov x28, #0x0 // #0
net_crit_ratelimited("protocol %04x is buggy, dev %s\n",
ffff8000113a4edc: 9000001a adrp x26, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4edc: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x408
struct sk_buff *skb2 = NULL;
ffff8000113a4ee0: aa1c03f4 mov x20, x28
__READ_ONCE_SIZE;
ffff8000113a4ee4: 90000019 adrp x25, ffff80001139e37c <__my_cpu_offset>
ffff8000113a4ee4: R_AARCH64_ADR_PREL_PG_HI21 .bss
net_crit_ratelimited("protocol %04x is buggy, dev %s\n",
ffff8000113a4ee8: 9100035a add x26, x26, #0x0
ffff8000113a4ee8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x408
if (ptype_list == &ptype_all) {
ffff8000113a4eec: aa1b03f7 mov x23, x27
ffff8000113a4ef0: f9400373 ldr x19, [x27]
list_for_each_entry_rcu(ptype, ptype_list, list) {
ffff8000113a4ef4: eb13037f cmp x27, x19
ffff8000113a4ef8: d100c273 sub x19, x19, #0x30
ffff8000113a4efc: 54000640 b.eq ffff8000113a4fc4 <dev_queue_xmit_nit+0x124>
skb2->pkt_type = PACKET_OUTGOING;
ffff8000113a4f00: 52800096 mov w22, #0x4 // #4
ffff8000113a4f04: 14000005 b ffff8000113a4f18 <dev_queue_xmit_nit+0x78>
ffff8000113a4f08: f9401a73 ldr x19, [x19,#48]
list_for_each_entry_rcu(ptype, ptype_list, list) {
ffff8000113a4f0c: eb13037f cmp x27, x19
ffff8000113a4f10: d100c273 sub x19, x19, #0x30
ffff8000113a4f14: 54000580 b.eq ffff8000113a4fc4 <dev_queue_xmit_nit+0x124>
if (ptype->ignore_outgoing)
ffff8000113a4f18: 39400a63 ldrb w3, [x19,#2]
ffff8000113a4f1c: 35ffff63 cbnz w3, ffff8000113a4f08 <dev_queue_xmit_nit+0x68>
if (!ptype->af_packet_priv || !skb->sk)
ffff8000113a4f20: f9401663 ldr x3, [x19,#40]
ffff8000113a4f24: b4000123 cbz x3, ffff8000113a4f48 <dev_queue_xmit_nit+0xa8>
ffff8000113a4f28: f9400ea1 ldr x1, [x21,#24]
ffff8000113a4f2c: b40000e1 cbz x1, ffff8000113a4f48 <dev_queue_xmit_nit+0xa8>
if (ptype->id_match)
ffff8000113a4f30: f9401264 ldr x4, [x19,#32]
ffff8000113a4f34: b4000504 cbz x4, ffff8000113a4fd4 <dev_queue_xmit_nit+0x134>
return ptype->id_match(ptype, skb->sk);
ffff8000113a4f38: aa1303e0 mov x0, x19
ffff8000113a4f3c: d63f0080 blr x4
ffff8000113a4f40: 53001c00 uxtb w0, w0
if (skb_loop_sk(ptype, skb))
ffff8000113a4f44: 35fffe20 cbnz w0, ffff8000113a4f08 <dev_queue_xmit_nit+0x68>
if (pt_prev) {
ffff8000113a4f48: b40004dc cbz x28, ffff8000113a4fe0 <dev_queue_xmit_nit+0x140>
deliver_skb(skb2, pt_prev, skb->dev);
ffff8000113a4f4c: f9400aa3 ldr x3, [x21,#16]
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113a4f50: b4000114 cbz x20, ffff8000113a4f70 <dev_queue_xmit_nit+0xd0>
return skb->head + skb->end;
ffff8000113a4f54: f9406281 ldr x1, [x20,#192]
ffff8000113a4f58: b940be80 ldr w0, [x20,#188]
ffff8000113a4f5c: 8b000020 add x0, x1, x0
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113a4f60: 39400c01 ldrb w1, [x0,#3]
ffff8000113a4f64: 36180061 tbz w1, #3, ffff8000113a4f70 <dev_queue_xmit_nit+0xd0>
if (likely(!skb_zcopy(skb)))
ffff8000113a4f68: f9401400 ldr x0, [x0,#40]
ffff8000113a4f6c: b5000f00 cbnz x0, ffff8000113a514c <dev_queue_xmit_nit+0x2ac>
refcount_inc(&skb->users);
ffff8000113a4f70: 91035280 add x0, x20, #0xd4
ATOMIC_OPS(add, add, I)
ffff8000113a4f74: f9800011 prfm pstl1strm, [x0]
ffff8000113a4f78: 885f7c01 ldxr w1, [x0]
ffff8000113a4f7c: 11000422 add w2, w1, #0x1
ffff8000113a4f80: 88047c02 stxr w4, w2, [x0]
ffff8000113a4f84: 35ffffa4 cbnz w4, ffff8000113a4f78 <dev_queue_xmit_nit+0xd8>
if (unlikely(!old))
ffff8000113a4f88: 6b1f003f cmp w1, wzr
ffff8000113a4f8c: 54000d60 b.eq ffff8000113a5138 <dev_queue_xmit_nit+0x298>
else if (unlikely(old < 0 || old + i < 0))
ffff8000113a4f90: 54000b4b b.lt ffff8000113a50f8 <dev_queue_xmit_nit+0x258>
ffff8000113a4f94: 3100043f cmn w1, #0x1
ffff8000113a4f98: 54000b04 b.mi ffff8000113a50f8 <dev_queue_xmit_nit+0x258>
return pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
ffff8000113a4f9c: f9400b84 ldr x4, [x28,#16]
ffff8000113a4fa0: f9400a81 ldr x1, [x20,#16]
ffff8000113a4fa4: aa1c03e2 mov x2, x28
ffff8000113a4fa8: aa1403e0 mov x0, x20
ffff8000113a4fac: d63f0080 blr x4
ffff8000113a4fb0: aa1303fc mov x28, x19
ffff8000113a4fb4: f9401a73 ldr x19, [x19,#48]
list_for_each_entry_rcu(ptype, ptype_list, list) {
ffff8000113a4fb8: eb13037f cmp x27, x19
ffff8000113a4fbc: d100c273 sub x19, x19, #0x30
ffff8000113a4fc0: 54fffac1 b.ne ffff8000113a4f18 <dev_queue_xmit_nit+0x78>
if (ptype_list == &ptype_all) {
ffff8000113a4fc4: eb17037f cmp x27, x23
ffff8000113a4fc8: 54000521 b.ne ffff8000113a506c <dev_queue_xmit_nit+0x1cc>
ptype_list = &dev->ptype_all;
ffff8000113a4fcc: 9102231b add x27, x24, #0x88
goto again;
ffff8000113a4fd0: 17ffffc8 b ffff8000113a4ef0 <dev_queue_xmit_nit+0x50>
else if ((struct sock *)ptype->af_packet_priv == skb->sk)
ffff8000113a4fd4: eb01007f cmp x3, x1
ffff8000113a4fd8: 54fff980 b.eq ffff8000113a4f08 <dev_queue_xmit_nit+0x68>
if (pt_prev) {
ffff8000113a4fdc: b5fffb9c cbnz x28, ffff8000113a4f4c <dev_queue_xmit_nit+0xac>
skb2 = skb_clone(skb, GFP_ATOMIC);
ffff8000113a4fe0: aa1503e0 mov x0, x21
ffff8000113a4fe4: 52814401 mov w1, #0xa20 // #2592
ffff8000113a4fe8: 94000000 bl 0 <skb_clone>
ffff8000113a4fe8: R_AARCH64_CALL26 skb_clone
ffff8000113a4fec: aa0003f4 mov x20, x0
if (!skb2)
ffff8000113a4ff0: b40005c0 cbz x0, ffff8000113a50a8 <dev_queue_xmit_nit+0x208>
ffff8000113a4ff4: 91000320 add x0, x25, #0x0
ffff8000113a4ff4: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a4ff8: b9434800 ldr w0, [x0,#840]
skb->tstamp = 0;
ffff8000113a4ffc: f900129c str x28, [x20,#32]
if (static_branch_unlikely(&netstamp_needed_key))
ffff8000113a5000: 6b1f001f cmp w0, wzr
ffff8000113a5004: 5400092c b.gt ffff8000113a5128 <dev_queue_xmit_nit+0x288>
skb->mac_header = skb->data - skb->head;
ffff8000113a5008: f9406681 ldr x1, [x20,#200]
ffff8000113a500c: f9406280 ldr x0, [x20,#192]
struct sk_buff *skb2 = NULL;
ffff8000113a5010: 79416a83 ldrh w3, [x20,#180]
ffff8000113a5014: cb000024 sub x4, x1, x0
return skb->head + skb->network_header;
ffff8000113a5018: 8b232002 add x2, x0, w3, uxth
skb->mac_header = skb->data - skb->head;
ffff8000113a501c: 79016e84 strh w4, [x20,#182]
if (skb_network_header(skb2) < skb2->data ||
ffff8000113a5020: eb02003f cmp x1, x2
ffff8000113a5024: 540000a8 b.hi ffff8000113a5038 <dev_queue_xmit_nit+0x198>
return skb->head + skb->tail;
ffff8000113a5028: b940ba81 ldr w1, [x20,#184]
ffff8000113a502c: 8b010000 add x0, x0, x1
ffff8000113a5030: eb00005f cmp x2, x0
ffff8000113a5034: 54000109 b.ls ffff8000113a5054 <dev_queue_xmit_nit+0x1b4>
net_crit_ratelimited("protocol %04x is buggy, dev %s\n",
ffff8000113a5038: 94000000 bl 0 <net_ratelimit>
ffff8000113a5038: R_AARCH64_CALL26 net_ratelimit
ffff8000113a503c: 35000680 cbnz w0, ffff8000113a510c <dev_queue_xmit_nit+0x26c>
skb->network_header = skb->data - skb->head;
ffff8000113a5040: f9406683 ldr x3, [x20,#200]
ffff8000113a5044: f9406280 ldr x0, [x20,#192]
ffff8000113a5048: cb000063 sub x3, x3, x0
ffff8000113a504c: 53003c63 uxth w3, w3
ffff8000113a5050: 79016a83 strh w3, [x20,#180]
skb2->pkt_type = PACKET_OUTGOING;
ffff8000113a5054: 39420280 ldrb w0, [x20,#128]
skb2->transport_header = skb2->network_header;
ffff8000113a5058: 79016683 strh w3, [x20,#178]
skb2->pkt_type = PACKET_OUTGOING;
ffff8000113a505c: 33000ac0 bfxil w0, w22, #0, #3
ffff8000113a5060: 39020280 strb w0, [x20,#128]
ffff8000113a5064: aa1303fc mov x28, x19
ffff8000113a5068: 17ffffa8 b ffff8000113a4f08 <dev_queue_xmit_nit+0x68>
if (pt_prev) {
ffff8000113a506c: b40001fc cbz x28, ffff8000113a50a8 <dev_queue_xmit_nit+0x208>
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113a5070: b40002b4 cbz x20, ffff8000113a50c4 <dev_queue_xmit_nit+0x224>
return skb->head + skb->end;
ffff8000113a5074: f9406281 ldr x1, [x20,#192]
ffff8000113a5078: b940be80 ldr w0, [x20,#188]
ffff8000113a507c: 8b000020 add x0, x1, x0
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113a5080: 39400c01 ldrb w1, [x0,#3]
ffff8000113a5084: 36180201 tbz w1, #3, ffff8000113a50c4 <dev_queue_xmit_nit+0x224>
if (likely(!skb_zcopy(skb)))
ffff8000113a5088: f9401400 ldr x0, [x0,#40]
ffff8000113a508c: b40001c0 cbz x0, ffff8000113a50c4 <dev_queue_xmit_nit+0x224>
return skb_copy_ubufs(skb, gfp_mask);
ffff8000113a5090: aa1403e0 mov x0, x20
ffff8000113a5094: 52814401 mov w1, #0xa20 // #2592
ffff8000113a5098: 94000000 bl 0 <skb_copy_ubufs>
ffff8000113a5098: R_AARCH64_CALL26 skb_copy_ubufs
if (!skb_orphan_frags_rx(skb2, GFP_ATOMIC))
ffff8000113a509c: 34000140 cbz w0, ffff8000113a50c4 <dev_queue_xmit_nit+0x224>
kfree_skb(skb2);
ffff8000113a50a0: aa1403e0 mov x0, x20
ffff8000113a50a4: 94000000 bl 0 <kfree_skb>
ffff8000113a50a4: R_AARCH64_CALL26 kfree_skb
}
ffff8000113a50a8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a50ac: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a50b0: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a50b4: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a50b8: a94573fb ldp x27, x28, [sp,#80]
ffff8000113a50bc: a8c77bfd ldp x29, x30, [sp],#112
ffff8000113a50c0: d65f03c0 ret
pt_prev->func(skb2, skb->dev, pt_prev, skb->dev);
ffff8000113a50c4: f9400aa1 ldr x1, [x21,#16]
ffff8000113a50c8: f9400b84 ldr x4, [x28,#16]
ffff8000113a50cc: aa1403e0 mov x0, x20
ffff8000113a50d0: aa1c03e2 mov x2, x28
ffff8000113a50d4: aa0103e3 mov x3, x1
ffff8000113a50d8: d63f0080 blr x4
}
ffff8000113a50dc: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a50e0: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a50e4: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a50e8: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a50ec: a94573fb ldp x27, x28, [sp,#80]
ffff8000113a50f0: a8c77bfd ldp x29, x30, [sp],#112
ffff8000113a50f4: d65f03c0 ret
refcount_warn_saturate(r, REFCOUNT_ADD_OVF);
ffff8000113a50f8: 52800021 mov w1, #0x1 // #1
ffff8000113a50fc: f90037a3 str x3, [x29,#104]
ffff8000113a5100: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113a5100: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113a5104: f94037a3 ldr x3, [x29,#104]
ffff8000113a5108: 17ffffa5 b ffff8000113a4f9c <dev_queue_xmit_nit+0xfc>
ffff8000113a510c: 79416281 ldrh w1, [x20,#176]
net_crit_ratelimited("protocol %04x is buggy, dev %s\n",
ffff8000113a5110: aa1a03e0 mov x0, x26
ffff8000113a5114: 5ac00421 rev16 w1, w1
ffff8000113a5118: 53003c21 uxth w1, w1
ffff8000113a511c: aa1803e2 mov x2, x24
ffff8000113a5120: 94000000 bl 0 <printk>
ffff8000113a5120: R_AARCH64_CALL26 printk
ffff8000113a5124: 17ffffc7 b ffff8000113a5040 <dev_queue_xmit_nit+0x1a0>
/**
* ktime_get_real - get the real (wall-) time in ktime_t format
*/
static inline ktime_t ktime_get_real(void)
{
return ktime_get_with_offset(TK_OFFS_REAL);
ffff8000113a5128: 2a1c03e0 mov w0, w28
ffff8000113a512c: 94000000 bl 0 <ktime_get_with_offset>
ffff8000113a512c: R_AARCH64_CALL26 ktime_get_with_offset
skb->tstamp = ktime_get_real();
ffff8000113a5130: f9001280 str x0, [x20,#32]
ffff8000113a5134: 17ffffb5 b ffff8000113a5008 <dev_queue_xmit_nit+0x168>
refcount_warn_saturate(r, REFCOUNT_ADD_UAF);
ffff8000113a5138: 52800041 mov w1, #0x2 // #2
ffff8000113a513c: f90037a3 str x3, [x29,#104]
ffff8000113a5140: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113a5140: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113a5144: f94037a3 ldr x3, [x29,#104]
ffff8000113a5148: 17ffff95 b ffff8000113a4f9c <dev_queue_xmit_nit+0xfc>
return skb_copy_ubufs(skb, gfp_mask);
ffff8000113a514c: aa1403e0 mov x0, x20
ffff8000113a5150: 52814401 mov w1, #0xa20 // #2592
ffff8000113a5154: f90037a3 str x3, [x29,#104]
ffff8000113a5158: 94000000 bl 0 <skb_copy_ubufs>
ffff8000113a5158: R_AARCH64_CALL26 skb_copy_ubufs
if (unlikely(skb_orphan_frags_rx(skb, GFP_ATOMIC)))
ffff8000113a515c: f94037a3 ldr x3, [x29,#104]
ffff8000113a5160: 34fff080 cbz w0, ffff8000113a4f70 <dev_queue_xmit_nit+0xd0>
ffff8000113a5164: aa1303fc mov x28, x19
ffff8000113a5168: 17ffff68 b ffff8000113a4f08 <dev_queue_xmit_nit+0x68>
ffff8000113a516c <dev_pick_tx_cpu_id>:
{
ffff8000113a516c: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a5170: 910003fd mov x29, sp
ffff8000113a5174: f9000bf3 str x19, [sp,#16]
ffff8000113a5178: aa0003f3 mov x19, x0
ffff8000113a517c: aa1e03e0 mov x0, x30
ffff8000113a5180: 94000000 bl 0 <_mcount>
ffff8000113a5180: R_AARCH64_CALL26 _mcount
return (u16)raw_smp_processor_id() % dev->real_num_tx_queues;
ffff8000113a5184: 90000001 adrp x1, 0 <cpu_number>
ffff8000113a5184: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113a5188: b943ce62 ldr w2, [x19,#972]
asm(ALTERNATIVE("mrs %0, tpidr_el1",
ffff8000113a518c: d538d080 mrs x0, tpidr_el1
ffff8000113a5190: 91000021 add x1, x1, #0x0
ffff8000113a5190: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a5194: 78616800 ldrh w0, [x0,x1]
}
ffff8000113a5198: f9400bf3 ldr x19, [sp,#16]
return (u16)raw_smp_processor_id() % dev->real_num_tx_queues;
ffff8000113a519c: 1ac20801 udiv w1, w0, w2
ffff8000113a51a0: 1b028020 msub w0, w1, w2, w0
}
ffff8000113a51a4: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a51a8: d65f03c0 ret
ffff8000113a51ac <netif_napi_del>:
{
ffff8000113a51ac: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a51b0: 910003fd mov x29, sp
ffff8000113a51b4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a51b8: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a51bc: aa0003f6 mov x22, x0
ffff8000113a51c0: aa1e03e0 mov x0, x30
ffff8000113a51c4: 94000000 bl 0 <_mcount>
ffff8000113a51c4: R_AARCH64_CALL26 _mcount
might_sleep();
ffff8000113a51c8: 94000000 bl 0 <_cond_resched>
ffff8000113a51c8: R_AARCH64_CALL26 _cond_resched
if (napi_hash_del(napi))
ffff8000113a51cc: aa1603e0 mov x0, x22
ffff8000113a51d0: 94000000 bl ffff8000113a2a50 <napi_hash_del>
ffff8000113a51d0: R_AARCH64_CALL26 napi_hash_del
ffff8000113a51d4: 53001c00 uxtb w0, w0
ffff8000113a51d8: 34000040 cbz w0, ffff8000113a51e0 <netif_napi_del+0x34>
synchronize_net();
ffff8000113a51dc: 94000000 bl ffff8000113a1384 <synchronize_net>
ffff8000113a51dc: R_AARCH64_CALL26 synchronize_net
list_del_init(&napi->dev_list);
ffff8000113a51e0: 910582d3 add x19, x22, #0x160
if (!__list_del_entry_valid(entry))
ffff8000113a51e4: aa1303e0 mov x0, x19
ffff8000113a51e8: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113a51e8: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113a51ec: 53001c00 uxtb w0, w0
ffff8000113a51f0: 340000a0 cbz w0, ffff8000113a5204 <netif_napi_del+0x58>
__list_del(entry->prev, entry->next);
ffff8000113a51f4: f9400660 ldr x0, [x19,#8]
ffff8000113a51f8: f940b2c1 ldr x1, [x22,#352]
next->prev = prev;
ffff8000113a51fc: f9000420 str x0, [x1,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a5200: f9000001 str x1, [x0]
ffff8000113a5204: f900b2d3 str x19, [x22,#352]
list->prev = list;
ffff8000113a5208: f9000673 str x19, [x19,#8]
kfree_skb(napi->skb);
ffff8000113a520c: f94082c0 ldr x0, [x22,#256]
ffff8000113a5210: 910102d4 add x20, x22, #0x40
ffff8000113a5214: 94000000 bl 0 <kfree_skb>
ffff8000113a5214: R_AARCH64_CALL26 kfree_skb
for (i = 0; i < GRO_HASH_BUCKETS; i++) {
ffff8000113a5218: 52800015 mov w21, #0x0 // #0
napi->skb = NULL;
ffff8000113a521c: f90082df str xzr, [x22,#256]
list_for_each_entry_safe(skb, n, &napi->gro_hash[i].list, list)
ffff8000113a5220: f9400280 ldr x0, [x20]
ffff8000113a5224: eb00029f cmp x20, x0
ffff8000113a5228: f9400013 ldr x19, [x0]
ffff8000113a522c: 54000081 b.ne ffff8000113a523c <netif_napi_del+0x90>
ffff8000113a5230: 14000007 b ffff8000113a524c <netif_napi_del+0xa0>
ffff8000113a5234: aa1303e0 mov x0, x19
ffff8000113a5238: aa0103f3 mov x19, x1
kfree_skb(skb);
ffff8000113a523c: 94000000 bl 0 <kfree_skb>
ffff8000113a523c: R_AARCH64_CALL26 kfree_skb
list_for_each_entry_safe(skb, n, &napi->gro_hash[i].list, list)
ffff8000113a5240: eb13029f cmp x20, x19
ffff8000113a5244: f9400261 ldr x1, [x19]
ffff8000113a5248: 54ffff61 b.ne ffff8000113a5234 <netif_napi_del+0x88>
for (i = 0; i < GRO_HASH_BUCKETS; i++) {
ffff8000113a524c: 110006b5 add w21, w21, #0x1
napi->gro_hash[i].count = 0;
ffff8000113a5250: b900129f str wzr, [x20,#16]
for (i = 0; i < GRO_HASH_BUCKETS; i++) {
ffff8000113a5254: 710022bf cmp w21, #0x8
ffff8000113a5258: 91006294 add x20, x20, #0x18
ffff8000113a525c: 54fffe21 b.ne ffff8000113a5220 <netif_napi_del+0x74>
napi->gro_bitmask = 0;
ffff8000113a5260: f90012df str xzr, [x22,#32]
}
ffff8000113a5264: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a5268: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a526c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a5270: d65f03c0 ret
ffff8000113a5274 <free_netdev>:
{
ffff8000113a5274: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a5278: 910003fd mov x29, sp
ffff8000113a527c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a5280: f90013f5 str x21, [sp,#32]
ffff8000113a5284: aa0003f4 mov x20, x0
ffff8000113a5288: aa1e03e0 mov x0, x30
ffff8000113a528c: 94000000 bl 0 <_mcount>
ffff8000113a528c: R_AARCH64_CALL26 _mcount
might_sleep();
ffff8000113a5290: 94000000 bl 0 <_cond_resched>
ffff8000113a5290: R_AARCH64_CALL26 _cond_resched
kvfree(dev->_tx);
ffff8000113a5294: f941e280 ldr x0, [x20,#960]
ffff8000113a5298: 94000000 bl 0 <kvfree>
ffff8000113a5298: R_AARCH64_CALL26 kvfree
if (!dev->_rx)
ffff8000113a529c: f9419280 ldr x0, [x20,#800]
void free_netdev(struct net_device *dev)
ffff8000113a52a0: b9432a95 ldr w21, [x20,#808]
if (!dev->_rx)
ffff8000113a52a4: b40001c0 cbz x0, ffff8000113a52dc <free_netdev+0x68>
for (i = 0; i < count; i++)
ffff8000113a52a8: 34000195 cbz w21, ffff8000113a52d8 <free_netdev+0x64>
ffff8000113a52ac: 510006b5 sub w21, w21, #0x1
ffff8000113a52b0: 910006b5 add x21, x21, #0x1
ffff8000113a52b4: d378deb5 lsl x21, x21, #8
ffff8000113a52b8: d2800013 mov x19, #0x0 // #0
xdp_rxq_info_unreg(&dev->_rx[i].xdp_rxq);
ffff8000113a52bc: 8b130000 add x0, x0, x19
ffff8000113a52c0: 91020000 add x0, x0, #0x80
ffff8000113a52c4: 94000000 bl 0 <xdp_rxq_info_unreg>
ffff8000113a52c4: R_AARCH64_CALL26 xdp_rxq_info_unreg
ffff8000113a52c8: 91040273 add x19, x19, #0x100
for (i = 0; i < count; i++)
ffff8000113a52cc: eb15027f cmp x19, x21
ffff8000113a52d0: f9419280 ldr x0, [x20,#800]
ffff8000113a52d4: 54ffff41 b.ne ffff8000113a52bc <free_netdev+0x48>
kvfree(dev->_rx);
ffff8000113a52d8: 94000000 bl 0 <kvfree>
ffff8000113a52d8: R_AARCH64_CALL26 kvfree
kfree(rcu_dereference_protected(dev->ingress_queue, 1));
ffff8000113a52dc: f941ae80 ldr x0, [x20,#856]
list_for_each_entry_safe(p, n, &dev->napi_list, dev_list)
ffff8000113a52e0: aa1403f5 mov x21, x20
kfree(rcu_dereference_protected(dev->ingress_queue, 1));
ffff8000113a52e4: 94000000 bl 0 <kfree>
ffff8000113a52e4: R_AARCH64_CALL26 kfree
dev_addr_flush(dev);
ffff8000113a52e8: aa1403e0 mov x0, x20
ffff8000113a52ec: 94000000 bl 0 <dev_addr_flush>
ffff8000113a52ec: R_AARCH64_CALL26 dev_addr_flush
list_for_each_entry_safe(p, n, &dev->napi_list, dev_list)
ffff8000113a52f0: f8458ea1 ldr x1, [x21,#88]!
ffff8000113a52f4: d1058020 sub x0, x1, #0x160
ffff8000113a52f8: f940b013 ldr x19, [x0,#352]
ffff8000113a52fc: eb0102bf cmp x21, x1
ffff8000113a5300: d1058273 sub x19, x19, #0x160
ffff8000113a5304: 54000081 b.ne ffff8000113a5314 <free_netdev+0xa0>
ffff8000113a5308: 14000009 b ffff8000113a532c <free_netdev+0xb8>
ffff8000113a530c: aa1303e0 mov x0, x19
ffff8000113a5310: aa0103f3 mov x19, x1
netif_napi_del(p);
ffff8000113a5314: 94000000 bl ffff8000113a51ac <netif_napi_del>
ffff8000113a5314: R_AARCH64_CALL26 netif_napi_del
list_for_each_entry_safe(p, n, &dev->napi_list, dev_list)
ffff8000113a5318: 91058261 add x1, x19, #0x160
ffff8000113a531c: f940b260 ldr x0, [x19,#352]
ffff8000113a5320: eb0102bf cmp x21, x1
ffff8000113a5324: d1058001 sub x1, x0, #0x160
ffff8000113a5328: 54ffff21 b.ne ffff8000113a530c <free_netdev+0x98>
free_percpu(dev->pcpu_refcnt);
ffff8000113a532c: f9426280 ldr x0, [x20,#1216]
ffff8000113a5330: 94000000 bl 0 <free_percpu>
ffff8000113a5330: R_AARCH64_CALL26 free_percpu
free_percpu(dev->xdp_bulkq);
ffff8000113a5334: f941f280 ldr x0, [x20,#992]
dev->pcpu_refcnt = NULL;
ffff8000113a5338: f902629f str xzr, [x20,#1216]
free_percpu(dev->xdp_bulkq);
ffff8000113a533c: 94000000 bl 0 <free_percpu>
ffff8000113a533c: R_AARCH64_CALL26 free_percpu
if (dev->reg_state == NETREG_UNINITIALIZED) {
ffff8000113a5340: 39536280 ldrb w0, [x20,#1240]
dev->xdp_bulkq = NULL;
ffff8000113a5344: f901f29f str xzr, [x20,#992]
if (dev->reg_state == NETREG_UNINITIALIZED) {
ffff8000113a5348: 34000160 cbz w0, ffff8000113a5374 <free_netdev+0x100>
BUG_ON(dev->reg_state != NETREG_UNREGISTERED);
ffff8000113a534c: 71000c1f cmp w0, #0x3
ffff8000113a5350: 54000201 b.ne ffff8000113a5390 <free_netdev+0x11c>
dev->reg_state = NETREG_RELEASED;
ffff8000113a5354: 52800080 mov w0, #0x4 // #4
ffff8000113a5358: 39136280 strb w0, [x20,#1240]
put_device(&dev->dev);
ffff8000113a535c: 91144280 add x0, x20, #0x510
ffff8000113a5360: 94000000 bl 0 <put_device>
ffff8000113a5360: R_AARCH64_CALL26 put_device
}
ffff8000113a5364: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a5368: f94013f5 ldr x21, [sp,#32]
ffff8000113a536c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a5370: d65f03c0 ret
char *addr = (char *)dev - dev->padded;
ffff8000113a5374: 79446680 ldrh w0, [x20,#562]
kvfree(addr);
ffff8000113a5378: cb000280 sub x0, x20, x0
ffff8000113a537c: 94000000 bl 0 <kvfree>
ffff8000113a537c: R_AARCH64_CALL26 kvfree
}
ffff8000113a5380: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a5384: f94013f5 ldr x21, [sp,#32]
ffff8000113a5388: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a538c: d65f03c0 ret
BUG_ON(dev->reg_state != NETREG_UNREGISTERED);
ffff8000113a5390: d4210000 brk #0x800
ffff8000113a5394 <alloc_netdev_mqs>:
{
ffff8000113a5394: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113a5398: 910003fd mov x29, sp
ffff8000113a539c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a53a0: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a53a4: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a53a8: f90023f9 str x25, [sp,#64]
ffff8000113a53ac: 2a0003f3 mov w19, w0
ffff8000113a53b0: aa1e03e0 mov x0, x30
ffff8000113a53b4: aa0103f7 mov x23, x1
ffff8000113a53b8: 53001c58 uxtb w24, w2
ffff8000113a53bc: aa0303f5 mov x21, x3
ffff8000113a53c0: 2a0403f4 mov w20, w4
ffff8000113a53c4: 2a0503f6 mov w22, w5
ffff8000113a53c8: 94000000 bl 0 <_mcount>
ffff8000113a53c8: R_AARCH64_CALL26 _mcount
return __builtin_strlen(p);
ffff8000113a53cc: aa1703e0 mov x0, x23
ffff8000113a53d0: 94000000 bl 0 <strlen>
ffff8000113a53d0: R_AARCH64_CALL26 strlen
BUG_ON(strlen(name) >= sizeof(dev->name));
ffff8000113a53d4: f1003c1f cmp x0, #0xf
ffff8000113a53d8: 540018a8 b.hi ffff8000113a56ec <alloc_netdev_mqs+0x358>
if (txqs < 1) {
ffff8000113a53dc: 340017f4 cbz w20, ffff8000113a56d8 <alloc_netdev_mqs+0x344>
if (rxqs < 1) {
ffff8000113a53e0: 34001896 cbz w22, ffff8000113a56f0 <alloc_netdev_mqs+0x35c>
ffff8000113a53e4: 6b1f027f cmp w19, wzr
ffff8000113a53e8: d28123e0 mov x0, #0x91f // #2335
ffff8000113a53ec: 11247e73 add w19, w19, #0x91f
ffff8000113a53f0: 9a801260 csel x0, x19, x0, ne
return kvmalloc_node(size, flags, NUMA_NO_NODE);
ffff8000113a53f4: 5289b801 mov w1, #0x4dc0 // #19904
ffff8000113a53f8: 12800002 mov w2, #0xffffffff // #-1
ffff8000113a53fc: 94000000 bl 0 <kvmalloc_node>
ffff8000113a53fc: R_AARCH64_CALL26 kvmalloc_node
if (!p)
ffff8000113a5400: b4001160 cbz x0, ffff8000113a562c <alloc_netdev_mqs+0x298>
dev = PTR_ALIGN(p, NETDEV_ALIGN);
ffff8000113a5404: 91007c13 add x19, x0, #0x1f
ffff8000113a5408: 927bea73 and x19, x19, #0xffffffffffffffe0
dev->padded = (char *)dev - (char *)p;
ffff8000113a540c: cb000261 sub x1, x19, x0
dev->pcpu_refcnt = alloc_percpu(int);
ffff8000113a5410: d2800080 mov x0, #0x4 // #4
dev->padded = (char *)dev - (char *)p;
ffff8000113a5414: 79046661 strh w1, [x19,#562]
dev->pcpu_refcnt = alloc_percpu(int);
ffff8000113a5418: aa0003e1 mov x1, x0
ffff8000113a541c: 94000000 bl 0 <__alloc_percpu>
ffff8000113a541c: R_AARCH64_CALL26 __alloc_percpu
ffff8000113a5420: f9026260 str x0, [x19,#1216]
if (!dev->pcpu_refcnt)
ffff8000113a5424: b4001460 cbz x0, ffff8000113a56b0 <alloc_netdev_mqs+0x31c>
if (dev_addr_init(dev))
ffff8000113a5428: aa1303e0 mov x0, x19
ffff8000113a542c: 94000000 bl 0 <dev_addr_init>
ffff8000113a542c: R_AARCH64_CALL26 dev_addr_init
ffff8000113a5430: 350013c0 cbnz w0, ffff8000113a56a8 <alloc_netdev_mqs+0x314>
dev_mc_init(dev);
ffff8000113a5434: aa1303e0 mov x0, x19
ffff8000113a5438: 94000000 bl 0 <dev_mc_init>
ffff8000113a5438: R_AARCH64_CALL26 dev_mc_init
dev_uc_init(dev);
ffff8000113a543c: aa1303e0 mov x0, x19
ffff8000113a5440: 94000000 bl 0 <dev_uc_init>
ffff8000113a5440: R_AARCH64_CALL26 dev_uc_init
pnet->net = net;
ffff8000113a5444: 90000002 adrp x2, 0 <init_net>
ffff8000113a5444: R_AARCH64_ADR_PREL_PG_HI21 init_net
ffff8000113a5448: 91000042 add x2, x2, #0x0
ffff8000113a5448: R_AARCH64_ADD_ABS_LO12_NC init_net
ffff8000113a544c: f9027a62 str x2, [x19,#1264]
dev->gso_max_size = GSO_MAX_SIZE;
ffff8000113a5450: 52a00022 mov w2, #0x10000 // #65536
ffff8000113a5454: b9083a62 str w2, [x19,#2104]
dev->upper_level = 1;
ffff8000113a5458: 52800021 mov w1, #0x1 // #1
INIT_LIST_HEAD(&dev->napi_list);
ffff8000113a545c: 91016260 add x0, x19, #0x58
dev->gso_max_segs = GSO_MAX_SEGS;
ffff8000113a5460: 12800002 mov w2, #0xffffffff // #-1
ffff8000113a5464: f9002e60 str x0, [x19,#88]
dev->upper_level = 1;
ffff8000113a5468: 3909c261 strb w1, [x19,#624]
dev->lower_level = 1;
ffff8000113a546c: 3909c661 strb w1, [x19,#625]
dev->gso_max_segs = GSO_MAX_SEGS;
ffff8000113a5470: 79107a62 strh w2, [x19,#2108]
ffff8000113a5474: f9000400 str x0, [x0,#8]
INIT_LIST_HEAD(&dev->unreg_list);
ffff8000113a5478: 9101a260 add x0, x19, #0x68
ffff8000113a547c: f9003660 str x0, [x19,#104]
ffff8000113a5480: f9000400 str x0, [x0,#8]
INIT_LIST_HEAD(&dev->close_list);
ffff8000113a5484: 9101e260 add x0, x19, #0x78
ffff8000113a5488: f9003e60 str x0, [x19,#120]
ffff8000113a548c: f9000400 str x0, [x0,#8]
INIT_LIST_HEAD(&dev->link_watch_list);
ffff8000113a5490: 91132260 add x0, x19, #0x4c8
ffff8000113a5494: f9026660 str x0, [x19,#1224]
ffff8000113a5498: f9000400 str x0, [x0,#8]
INIT_LIST_HEAD(&dev->adj_list.upper);
ffff8000113a549c: 9102a260 add x0, x19, #0xa8
ffff8000113a54a0: f9005660 str x0, [x19,#168]
ffff8000113a54a4: f9000400 str x0, [x0,#8]
INIT_LIST_HEAD(&dev->adj_list.lower);
ffff8000113a54a8: 9102e260 add x0, x19, #0xb8
ffff8000113a54ac: f9005e60 str x0, [x19,#184]
ffff8000113a54b0: f9000400 str x0, [x0,#8]
INIT_LIST_HEAD(&dev->ptype_all);
ffff8000113a54b4: 91022260 add x0, x19, #0x88
ffff8000113a54b8: f9004660 str x0, [x19,#136]
ffff8000113a54bc: f9000400 str x0, [x0,#8]
INIT_LIST_HEAD(&dev->ptype_specific);
ffff8000113a54c0: 91026260 add x0, x19, #0x98
ffff8000113a54c4: f9004e60 str x0, [x19,#152]
ffff8000113a54c8: f9000400 str x0, [x0,#8]
INIT_LIST_HEAD(&dev->net_notifier_list);
ffff8000113a54cc: 91230260 add x0, x19, #0x8c0
ffff8000113a54d0: f9046260 str x0, [x19,#2240]
ffff8000113a54d4: f9000400 str x0, [x0,#8]
hash_init(dev->qdisc_hash);
ffff8000113a54d8: 91100261 add x1, x19, #0x400
ffff8000113a54dc: d2800006 mov x6, #0x0 // #0
static inline void __hash_init(struct hlist_head *ht, unsigned int sz)
{
unsigned int i;
for (i = 0; i < sz; i++)
INIT_HLIST_HEAD(&ht[i]);
ffff8000113a54e0: f826683f str xzr, [x1,x6]
ffff8000113a54e4: 910020c6 add x6, x6, #0x8
for (i = 0; i < sz; i++)
ffff8000113a54e8: f10200df cmp x6, #0x80
ffff8000113a54ec: 54ffffa1 b.ne ffff8000113a54e0 <alloc_netdev_mqs+0x14c>
dev->priv_flags = IFF_XMIT_DST_RELEASE | IFF_XMIT_DST_RELEASE_PERM;
ffff8000113a54f0: 52800400 mov w0, #0x20 // #32
ffff8000113a54f4: 72a00040 movk w0, #0x2, lsl #16
ffff8000113a54f8: b9022e60 str w0, [x19,#556]
setup(dev);
ffff8000113a54fc: aa1303e0 mov x0, x19
ffff8000113a5500: d63f02a0 blr x21
if (!dev->tx_queue_len) {
ffff8000113a5504: b943da60 ldr w0, [x19,#984]
ffff8000113a5508: 340009e0 cbz w0, ffff8000113a5644 <alloc_netdev_mqs+0x2b0>
if (count < 1 || count > 0xffff)
ffff8000113a550c: 529fffc0 mov w0, #0xfffe // #65534
ffff8000113a5510: 51000681 sub w1, w20, #0x1
size_t sz = count * sizeof(*tx);
ffff8000113a5514: 52802819 mov w25, #0x140 // #320
if (count < 1 || count > 0xffff)
ffff8000113a5518: 6b00003f cmp w1, w0
dev->num_tx_queues = txqs;
ffff8000113a551c: b903ca74 str w20, [x19,#968]
dev->real_num_tx_queues = txqs;
ffff8000113a5520: b903ce74 str w20, [x19,#972]
size_t sz = count * sizeof(*tx);
ffff8000113a5524: 9bb97e80 umull x0, w20, w25
if (count < 1 || count > 0xffff)
ffff8000113a5528: 540007c8 b.hi ffff8000113a5620 <alloc_netdev_mqs+0x28c>
ffff8000113a552c: 5289b801 mov w1, #0x4dc0 // #19904
ffff8000113a5530: 12800002 mov w2, #0xffffffff // #-1
ffff8000113a5534: 94000000 bl 0 <kvmalloc_node>
ffff8000113a5534: R_AARCH64_CALL26 kvmalloc_node
if (!tx)
ffff8000113a5538: b4000740 cbz x0, ffff8000113a5620 <alloc_netdev_mqs+0x28c>
for (i = 0; i < dev->num_tx_queues; i++)
ffff8000113a553c: b943ca61 ldr w1, [x19,#968]
dev->_tx = tx;
ffff8000113a5540: f901e260 str x0, [x19,#960]
ffff8000113a5544: aa0003e4 mov x4, x0
ffff8000113a5548: 52800014 mov w20, #0x0 // #0
queue->xmit_lock_owner = -1;
ffff8000113a554c: 12800015 mov w21, #0xffffffff // #-1
ffff8000113a5550: 35000061 cbnz w1, ffff8000113a555c <alloc_netdev_mqs+0x1c8>
ffff8000113a5554: 1400000f b ffff8000113a5590 <alloc_netdev_mqs+0x1fc>
ffff8000113a5558: f941e264 ldr x4, [x19,#960]
f(dev, &dev->_tx[i], arg);
ffff8000113a555c: 9bb97e80 umull x0, w20, w25
ffff8000113a5560: 8b000083 add x3, x4, x0
spin_lock_init(&queue->_xmit_lock);
ffff8000113a5564: b900807f str wzr, [x3,#128]
queue->xmit_lock_owner = -1;
ffff8000113a5568: b9008475 str w21, [x3,#132]
q->numa_node = node;
ffff8000113a556c: b9005875 str w21, [x3,#88]
queue->dev = dev;
ffff8000113a5570: f8206893 str x19, [x4,x0]
dql_init(&queue->dql, HZ);
ffff8000113a5574: 52801f41 mov w1, #0xfa // #250
ffff8000113a5578: 91030060 add x0, x3, #0xc0
ffff8000113a557c: 94000000 bl 0 <dql_init>
ffff8000113a557c: R_AARCH64_CALL26 dql_init
for (i = 0; i < dev->num_tx_queues; i++)
ffff8000113a5580: b943ca60 ldr w0, [x19,#968]
ffff8000113a5584: 11000694 add w20, w20, #0x1
ffff8000113a5588: 6b00029f cmp w20, w0
ffff8000113a558c: 54fffe63 b.cc ffff8000113a5558 <alloc_netdev_mqs+0x1c4>
spin_lock_init(&dev->tx_global_lock);
ffff8000113a5590: b903de7f str wzr, [x19,#988]
dev->num_rx_queues = rxqs;
ffff8000113a5594: b9032a76 str w22, [x19,#808]
dev->real_num_rx_queues = rxqs;
ffff8000113a5598: b9032e76 str w22, [x19,#812]
ffff8000113a559c: d3787ec0 ubfiz x0, x22, #8, #32
ffff8000113a55a0: 5289b801 mov w1, #0x4dc0 // #19904
ffff8000113a55a4: 12800002 mov w2, #0xffffffff // #-1
ffff8000113a55a8: 94000000 bl 0 <kvmalloc_node>
ffff8000113a55a8: R_AARCH64_CALL26 kvmalloc_node
ffff8000113a55ac: aa0003f9 mov x25, x0
if (!rx)
ffff8000113a55b0: b4000380 cbz x0, ffff8000113a5620 <alloc_netdev_mqs+0x28c>
dev->_rx = rx;
ffff8000113a55b4: f9019260 str x0, [x19,#800]
ffff8000113a55b8: 91020015 add x21, x0, #0x80
for (i = 0; i < count; i++) {
ffff8000113a55bc: 52800014 mov w20, #0x0 // #0
ffff8000113a55c0: 14000005 b ffff8000113a55d4 <alloc_netdev_mqs+0x240>
ffff8000113a55c4: 11000694 add w20, w20, #0x1
ffff8000113a55c8: 6b16029f cmp w20, w22
ffff8000113a55cc: 910402b5 add x21, x21, #0x100
ffff8000113a55d0: 54000460 b.eq ffff8000113a565c <alloc_netdev_mqs+0x2c8>
err = xdp_rxq_info_reg(&rx[i].xdp_rxq, dev, i);
ffff8000113a55d4: aa1303e1 mov x1, x19
rx[i].dev = dev;
ffff8000113a55d8: f81d02b3 stur x19, [x21,#-48]
err = xdp_rxq_info_reg(&rx[i].xdp_rxq, dev, i);
ffff8000113a55dc: aa1503e0 mov x0, x21
ffff8000113a55e0: 2a1403e2 mov w2, w20
ffff8000113a55e4: 94000000 bl 0 <xdp_rxq_info_reg>
ffff8000113a55e4: R_AARCH64_CALL26 xdp_rxq_info_reg
if (err < 0)
ffff8000113a55e8: 36fffee0 tbz w0, #31, ffff8000113a55c4 <alloc_netdev_mqs+0x230>
while (i--)
ffff8000113a55ec: 51000695 sub w21, w20, #0x1
ffff8000113a55f0: 35000074 cbnz w20, ffff8000113a55fc <alloc_netdev_mqs+0x268>
ffff8000113a55f4: 14000008 b ffff8000113a5614 <alloc_netdev_mqs+0x280>
ffff8000113a55f8: 2a0003f5 mov w21, w0
xdp_rxq_info_unreg(&rx[i].xdp_rxq);
ffff8000113a55fc: d3787ea1 ubfiz x1, x21, #8, #32
ffff8000113a5600: 8b010320 add x0, x25, x1
ffff8000113a5604: 91020000 add x0, x0, #0x80
ffff8000113a5608: 94000000 bl 0 <xdp_rxq_info_unreg>
ffff8000113a5608: R_AARCH64_CALL26 xdp_rxq_info_unreg
while (i--)
ffff8000113a560c: 510006a0 sub w0, w21, #0x1
ffff8000113a5610: 35ffff55 cbnz w21, ffff8000113a55f8 <alloc_netdev_mqs+0x264>
kvfree(dev->_rx);
ffff8000113a5614: f9419260 ldr x0, [x19,#800]
ffff8000113a5618: 94000000 bl 0 <kvfree>
ffff8000113a5618: R_AARCH64_CALL26 kvfree
dev->_rx = NULL;
ffff8000113a561c: f901927f str xzr, [x19,#800]
free_netdev(dev);
ffff8000113a5620: aa1303e0 mov x0, x19
ffff8000113a5624: 94000000 bl ffff8000113a5274 <free_netdev>
ffff8000113a5624: R_AARCH64_CALL26 free_netdev
return NULL;
ffff8000113a5628: d2800000 mov x0, #0x0 // #0
}
ffff8000113a562c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a5630: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a5634: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a5638: f94023f9 ldr x25, [sp,#64]
ffff8000113a563c: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113a5640: d65f03c0 ret
dev->priv_flags |= IFF_NO_QUEUE;
ffff8000113a5644: b9422e60 ldr w0, [x19,#556]
ffff8000113a5648: 320d0000 orr w0, w0, #0x80000
ffff8000113a564c: b9022e60 str w0, [x19,#556]
dev->tx_queue_len = DEFAULT_TX_QUEUE_LEN;
ffff8000113a5650: 52807d00 mov w0, #0x3e8 // #1000
ffff8000113a5654: b903da60 str w0, [x19,#984]
ffff8000113a5658: 17ffffad b ffff8000113a550c <alloc_netdev_mqs+0x178>
__FORTIFY_INLINE char *strcpy(char *p, const char *q)
{
size_t p_size = __builtin_object_size(p, 0);
size_t q_size = __builtin_object_size(q, 0);
if (p_size == (size_t)-1 && q_size == (size_t)-1)
return __builtin_strcpy(p, q);
ffff8000113a565c: aa1303e0 mov x0, x19
ffff8000113a5660: aa1703e1 mov x1, x23
ffff8000113a5664: 94000000 bl 0 <strcpy>
ffff8000113a5664: R_AARCH64_CALL26 strcpy
if (!dev->ethtool_ops)
ffff8000113a5668: f940fe60 ldr x0, [x19,#504]
dev->name_assign_type = name_assign_type;
ffff8000113a566c: 3909f278 strb w24, [x19,#636]
dev->group = INIT_NETDEV_GROUP;
ffff8000113a5670: b901067f str wzr, [x19,#260]
if (!dev->ethtool_ops)
ffff8000113a5674: b4000120 cbz x0, ffff8000113a5698 <alloc_netdev_mqs+0x304>
ffff8000113a5678: f901b27f str xzr, [x19,#864]
return dev;
ffff8000113a567c: aa1303e0 mov x0, x19
}
ffff8000113a5680: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a5684: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a5688: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a568c: f94023f9 ldr x25, [sp,#64]
ffff8000113a5690: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113a5694: d65f03c0 ret
dev->ethtool_ops = &default_ethtool_ops;
ffff8000113a5698: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a5698: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a569c: 91000000 add x0, x0, #0x0
ffff8000113a569c: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a56a0: f900fe60 str x0, [x19,#504]
ffff8000113a56a4: 17fffff5 b ffff8000113a5678 <alloc_netdev_mqs+0x2e4>
free_percpu(dev->pcpu_refcnt);
ffff8000113a56a8: f9426260 ldr x0, [x19,#1216]
ffff8000113a56ac: 94000000 bl 0 <free_percpu>
ffff8000113a56ac: R_AARCH64_CALL26 free_percpu
char *addr = (char *)dev - dev->padded;
ffff8000113a56b0: 79446660 ldrh w0, [x19,#562]
kvfree(addr);
ffff8000113a56b4: cb000260 sub x0, x19, x0
ffff8000113a56b8: 94000000 bl 0 <kvfree>
ffff8000113a56b8: R_AARCH64_CALL26 kvfree
return NULL;
ffff8000113a56bc: d2800000 mov x0, #0x0 // #0
}
ffff8000113a56c0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a56c4: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a56c8: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a56cc: f94023f9 ldr x25, [sp,#64]
ffff8000113a56d0: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113a56d4: d65f03c0 ret
pr_err("alloc_netdev: Unable to allocate device with zero queues\n");
ffff8000113a56d8: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a56d8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x430
ffff8000113a56dc: 91000000 add x0, x0, #0x0
ffff8000113a56dc: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x430
ffff8000113a56e0: 94000000 bl 0 <printk>
ffff8000113a56e0: R_AARCH64_CALL26 printk
return NULL;
ffff8000113a56e4: d2800000 mov x0, #0x0 // #0
ffff8000113a56e8: 17ffffd1 b ffff8000113a562c <alloc_netdev_mqs+0x298>
BUG_ON(strlen(name) >= sizeof(dev->name));
ffff8000113a56ec: d4210000 brk #0x800
pr_err("alloc_netdev: Unable to allocate device with zero RX queues\n");
ffff8000113a56f0: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a56f0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x470
ffff8000113a56f4: 91000000 add x0, x0, #0x0
ffff8000113a56f4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x470
ffff8000113a56f8: 94000000 bl 0 <printk>
ffff8000113a56f8: R_AARCH64_CALL26 printk
return NULL;
ffff8000113a56fc: d2800000 mov x0, #0x0 // #0
ffff8000113a5700: 17ffffcb b ffff8000113a562c <alloc_netdev_mqs+0x298>
ffff8000113a5704 <__napi_schedule_irqoff>:
{
ffff8000113a5704: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a5708: 910003fd mov x29, sp
ffff8000113a570c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a5710: f90013f5 str x21, [sp,#32]
____napi_schedule(this_cpu_ptr(&softnet_data), n);
ffff8000113a5714: 90000014 adrp x20, ffff80001139e37c <__my_cpu_offset>
ffff8000113a5714: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
{
ffff8000113a5718: aa0003f3 mov x19, x0
ffff8000113a571c: aa1e03e0 mov x0, x30
ffff8000113a5720: 94000000 bl 0 <_mcount>
ffff8000113a5720: R_AARCH64_CALL26 _mcount
____napi_schedule(this_cpu_ptr(&softnet_data), n);
ffff8000113a5724: 91000294 add x20, x20, #0x0
ffff8000113a5724: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a5728: d538d080 mrs x0, tpidr_el1
ffff8000113a572c: 8b140014 add x20, x0, x20
__list_add(new, head->prev, head);
ffff8000113a5730: f9400695 ldr x21, [x20,#8]
if (!__list_add_valid(new, prev, next))
ffff8000113a5734: aa1303e0 mov x0, x19
ffff8000113a5738: aa1503e1 mov x1, x21
ffff8000113a573c: aa1403e2 mov x2, x20
ffff8000113a5740: 94000000 bl 0 <__list_add_valid>
ffff8000113a5740: R_AARCH64_CALL26 __list_add_valid
ffff8000113a5744: 53001c00 uxtb w0, w0
ffff8000113a5748: 340000a0 cbz w0, ffff8000113a575c <__napi_schedule_irqoff+0x58>
next->prev = new;
ffff8000113a574c: f9000693 str x19, [x20,#8]
new->next = next;
ffff8000113a5750: f9000274 str x20, [x19]
new->prev = prev;
ffff8000113a5754: f9000675 str x21, [x19,#8]
ffff8000113a5758: f90002b3 str x19, [x21]
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
ffff8000113a575c: 52800060 mov w0, #0x3 // #3
ffff8000113a5760: 94000000 bl 0 <__raise_softirq_irqoff>
ffff8000113a5760: R_AARCH64_CALL26 __raise_softirq_irqoff
}
ffff8000113a5764: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a5768: f94013f5 ldr x21, [sp,#32]
ffff8000113a576c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a5770: d65f03c0 ret
ffff8000113a5774 <napi_watchdog>:
{
ffff8000113a5774: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a5778: 910003fd mov x29, sp
ffff8000113a577c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a5780: aa0003f3 mov x19, x0
ffff8000113a5784: aa1e03e0 mov x0, x30
ffff8000113a5788: 94000000 bl 0 <_mcount>
ffff8000113a5788: R_AARCH64_CALL26 _mcount
ffff8000113a578c: 90000014 adrp x20, 0 <__stack_chk_guard>
ffff8000113a578c: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a5790: f9400280 ldr x0, [x20]
ffff8000113a5790: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
if (napi->gro_bitmask && !napi_disable_pending(napi) &&
ffff8000113a5794: f8500261 ldur x1, [x19,#-256]
{
ffff8000113a5798: f90017a0 str x0, [x29,#40]
if (napi->gro_bitmask && !napi_disable_pending(napi) &&
ffff8000113a579c: d1048260 sub x0, x19, #0x120
ffff8000113a57a0: b4000081 cbz x1, ffff8000113a57b0 <napi_watchdog+0x3c>
ffff8000113a57a4: d1044273 sub x19, x19, #0x110
ffff8000113a57a8: f9400261 ldr x1, [x19]
ffff8000113a57ac: 36100121 tbz w1, #2, ffff8000113a57d0 <napi_watchdog+0x5c>
}
ffff8000113a57b0: f94017a2 ldr x2, [x29,#40]
ffff8000113a57b4: f9400281 ldr x1, [x20]
ffff8000113a57b4: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a57b8: 52800000 mov w0, #0x0 // #0
ffff8000113a57bc: eb01005f cmp x2, x1
ffff8000113a57c0: 54000201 b.ne ffff8000113a5800 <napi_watchdog+0x8c>
ffff8000113a57c4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a57c8: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a57cc: d65f03c0 ret
__READ_ONCE_SIZE;
ffff8000113a57d0: f9400261 ldr x1, [x19]
if (READ_ONCE(*p) & mask)
ffff8000113a57d4: 3707fee1 tbnz w1, #0, ffff8000113a57b0 <napi_watchdog+0x3c>
ATOMIC64_OPS(or, orr, L)
ffff8000113a57d8: 91004005 add x5, x0, #0x10
ffff8000113a57dc: f98000b1 prfm pstl1strm, [x5]
ffff8000113a57e0: c85f7ca1 ldxr x1, [x5]
ffff8000113a57e4: b2400022 orr x2, x1, #0x1
ffff8000113a57e8: c803fca2 stlxr w3, x2, [x5]
ffff8000113a57ec: 35ffffa3 cbnz w3, ffff8000113a57e0 <napi_watchdog+0x6c>
ffff8000113a57f0: d5033bbf dmb ish
if (napi->gro_bitmask && !napi_disable_pending(napi) &&
ffff8000113a57f4: 3707fde1 tbnz w1, #0, ffff8000113a57b0 <napi_watchdog+0x3c>
__napi_schedule_irqoff(napi);
ffff8000113a57f8: 94000000 bl ffff8000113a5704 <__napi_schedule_irqoff>
ffff8000113a57f8: R_AARCH64_CALL26 __napi_schedule_irqoff
ffff8000113a57fc: 17ffffed b ffff8000113a57b0 <napi_watchdog+0x3c>
}
ffff8000113a5800: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a5800: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a5804 <dev_get_by_name>:
{
ffff8000113a5804: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a5808: 910003fd mov x29, sp
ffff8000113a580c: f9000bf3 str x19, [sp,#16]
ffff8000113a5810: aa0003f3 mov x19, x0
ffff8000113a5814: aa1e03e0 mov x0, x30
ffff8000113a5818: f90017a1 str x1, [x29,#40]
ffff8000113a581c: 94000000 bl 0 <_mcount>
ffff8000113a581c: R_AARCH64_CALL26 _mcount
node_name = netdev_name_node_lookup_rcu(net, name);
ffff8000113a5820: f94017a1 ldr x1, [x29,#40]
ffff8000113a5824: aa1303e0 mov x0, x19
ffff8000113a5828: 97fff8c2 bl ffff8000113a3b30 <netdev_name_node_lookup_rcu>
return node_name ? node_name->dev : NULL;
ffff8000113a582c: b4000160 cbz x0, ffff8000113a5858 <dev_get_by_name+0x54>
ffff8000113a5830: f9401000 ldr x0, [x0,#32]
if (dev)
ffff8000113a5834: b4000120 cbz x0, ffff8000113a5858 <dev_get_by_name+0x54>
PERCPU_RW_OPS(8)
PERCPU_RW_OPS(16)
PERCPU_RW_OPS(32)
PERCPU_RW_OPS(64)
PERCPU_OP(add, add, stadd)
ffff8000113a5838: 52800023 mov w3, #0x1 // #1
this_cpu_inc(*dev->pcpu_refcnt);
ffff8000113a583c: f9426001 ldr x1, [x0,#1216]
asm(ALTERNATIVE("mrs %0, tpidr_el1",
ffff8000113a5840: d538d082 mrs x2, tpidr_el1
PERCPU_OP(add, add, stadd)
ffff8000113a5844: 8b010046 add x6, x2, x1
ffff8000113a5848: 885f7cc5 ldxr w5, [x6]
ffff8000113a584c: 0b0300a5 add w5, w5, w3
ffff8000113a5850: 88047cc5 stxr w4, w5, [x6]
ffff8000113a5854: 35ffffa4 cbnz w4, ffff8000113a5848 <dev_get_by_name+0x44>
}
ffff8000113a5858: f9400bf3 ldr x19, [sp,#16]
ffff8000113a585c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a5860: d65f03c0 ret
ffff8000113a5864 <__napi_schedule>:
{
ffff8000113a5864: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a5868: 910003fd mov x29, sp
ffff8000113a586c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a5870: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a5874: aa0003f3 mov x19, x0
ffff8000113a5878: aa1e03e0 mov x0, x30
ffff8000113a587c: 94000000 bl 0 <_mcount>
ffff8000113a587c: R_AARCH64_CALL26 _mcount
*/
static inline unsigned long arch_local_save_flags(void)
{
unsigned long flags;
asm volatile(ALTERNATIVE(
ffff8000113a5880: d53b4236 mrs x22, daif
static inline int arch_irqs_disabled_flags(unsigned long flags)
{
int res;
asm volatile(ALTERNATIVE(
ffff8000113a5884: 121902c0 and w0, w22, #0x80
/*
* There are too many states with IRQs disabled, just keep the current
* state if interrupts are already disabled/masked.
*/
if (!arch_irqs_disabled_flags(flags))
ffff8000113a5888: 35000060 cbnz w0, ffff8000113a5894 <__napi_schedule+0x30>
asm volatile(ALTERNATIVE(
ffff8000113a588c: d2800c00 mov x0, #0x60 // #96
ffff8000113a5890: d50342df msr daifset, #0x2
____napi_schedule(this_cpu_ptr(&softnet_data), n);
ffff8000113a5894: 90000014 adrp x20, ffff80001139e37c <__my_cpu_offset>
ffff8000113a5894: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
asm(ALTERNATIVE("mrs %0, tpidr_el1",
ffff8000113a5898: d538d080 mrs x0, tpidr_el1
ffff8000113a589c: 91000294 add x20, x20, #0x0
ffff8000113a589c: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a58a0: 8b140014 add x20, x0, x20
__list_add(new, head->prev, head);
ffff8000113a58a4: f9400695 ldr x21, [x20,#8]
if (!__list_add_valid(new, prev, next))
ffff8000113a58a8: aa1303e0 mov x0, x19
ffff8000113a58ac: aa1503e1 mov x1, x21
ffff8000113a58b0: aa1403e2 mov x2, x20
ffff8000113a58b4: 94000000 bl 0 <__list_add_valid>
ffff8000113a58b4: R_AARCH64_CALL26 __list_add_valid
ffff8000113a58b8: 53001c00 uxtb w0, w0
ffff8000113a58bc: 340000a0 cbz w0, ffff8000113a58d0 <__napi_schedule+0x6c>
next->prev = new;
ffff8000113a58c0: f9000693 str x19, [x20,#8]
new->next = next;
ffff8000113a58c4: f9000274 str x20, [x19]
new->prev = prev;
ffff8000113a58c8: f9000675 str x21, [x19,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a58cc: f90002b3 str x19, [x21]
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
ffff8000113a58d0: 52800060 mov w0, #0x3 // #3
ffff8000113a58d4: 94000000 bl 0 <__raise_softirq_irqoff>
ffff8000113a58d4: R_AARCH64_CALL26 __raise_softirq_irqoff
/*
* restore saved IRQ state
*/
static inline void arch_local_irq_restore(unsigned long flags)
{
asm volatile(ALTERNATIVE(
ffff8000113a58d8: d51b4236 msr daif, x22
}
ffff8000113a58dc: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a58e0: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a58e4: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a58e8: d65f03c0 ret
ffff8000113a58ec <__dev_kfree_skb_irq>:
{
ffff8000113a58ec: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a58f0: 910003fd mov x29, sp
ffff8000113a58f4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a58f8: aa0003f3 mov x19, x0
ffff8000113a58fc: aa1e03e0 mov x0, x30
ffff8000113a5900: f90017a1 str x1, [x29,#40]
ffff8000113a5904: 94000000 bl 0 <_mcount>
ffff8000113a5904: R_AARCH64_CALL26 _mcount
if (unlikely(!skb))
ffff8000113a5908: f94017a1 ldr x1, [x29,#40]
ffff8000113a590c: b40002d3 cbz x19, ffff8000113a5964 <__dev_kfree_skb_irq+0x78>
__READ_ONCE_SIZE;
ffff8000113a5910: b940d660 ldr w0, [x19,#212]
if (likely(refcount_read(&skb->users) == 1)) {
ffff8000113a5914: 7100041f cmp w0, #0x1
ffff8000113a5918: 540002c1 b.ne ffff8000113a5970 <__dev_kfree_skb_irq+0x84>
smp_rmb();
ffff8000113a591c: d50339bf dmb ishld
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff8000113a5920: b900d67f str wzr, [x19,#212]
get_kfree_skb_cb(skb)->reason = reason;
ffff8000113a5924: b9002a61 str w1, [x19,#40]
asm volatile(ALTERNATIVE(
ffff8000113a5928: d53b4234 mrs x20, daif
asm volatile(ALTERNATIVE(
ffff8000113a592c: 12190280 and w0, w20, #0x80
if (!arch_irqs_disabled_flags(flags))
ffff8000113a5930: 35000060 cbnz w0, ffff8000113a593c <__dev_kfree_skb_irq+0x50>
asm volatile(ALTERNATIVE(
ffff8000113a5934: d2800c00 mov x0, #0x60 // #96
ffff8000113a5938: d50342df msr daifset, #0x2
skb->next = __this_cpu_read(softnet_data.completion_queue);
ffff8000113a593c: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a593c: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
ffff8000113a5940: 91000021 add x1, x1, #0x0
ffff8000113a5940: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a5944: d538d082 mrs x2, tpidr_el1
ffff8000113a5948: 91016021 add x1, x1, #0x58
ffff8000113a594c: f8616843 ldr x3, [x2,x1]
raise_softirq_irqoff(NET_TX_SOFTIRQ);
ffff8000113a5950: 52800040 mov w0, #0x2 // #2
skb->next = __this_cpu_read(softnet_data.completion_queue);
ffff8000113a5954: f9000263 str x3, [x19]
__this_cpu_write(softnet_data.completion_queue, skb);
ffff8000113a5958: f8216853 str x19, [x2,x1]
raise_softirq_irqoff(NET_TX_SOFTIRQ);
ffff8000113a595c: 94000000 bl 0 <raise_softirq_irqoff>
ffff8000113a595c: R_AARCH64_CALL26 raise_softirq_irqoff
asm volatile(ALTERNATIVE(
ffff8000113a5960: d51b4234 msr daif, x20
}
ffff8000113a5964: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a5968: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a596c: d65f03c0 ret
} else if (likely(!refcount_dec_and_test(&skb->users))) {
ffff8000113a5970: 91035260 add x0, x19, #0xd4
ATOMIC_OPS(sub, sub, J)
ffff8000113a5974: 52800022 mov w2, #0x1 // #1
ffff8000113a5978: f9800011 prfm pstl1strm, [x0]
ffff8000113a597c: 885f7c03 ldxr w3, [x0]
ffff8000113a5980: 4b020064 sub w4, w3, w2
ffff8000113a5984: 8805fc04 stlxr w5, w4, [x0]
ffff8000113a5988: 35ffffa5 cbnz w5, ffff8000113a597c <__dev_kfree_skb_irq+0x90>
*/
static inline __must_check bool refcount_sub_and_test(int i, refcount_t *r)
{
int old = atomic_fetch_sub_release(i, &r->refs);
if (old == i) {
ffff8000113a598c: 6b02007f cmp w3, w2
ffff8000113a5990: 540000c0 b.eq ffff8000113a59a8 <__dev_kfree_skb_irq+0xbc>
smp_acquire__after_ctrl_dep();
return true;
}
if (unlikely(old < 0 || old - i < 0))
ffff8000113a5994: 6b1f007f cmp w3, wzr
ffff8000113a5998: 54fffe6c b.gt ffff8000113a5964 <__dev_kfree_skb_irq+0x78>
refcount_warn_saturate(r, REFCOUNT_SUB_UAF);
ffff8000113a599c: 52800061 mov w1, #0x3 // #3
ffff8000113a59a0: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113a59a0: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113a59a4: 17fffff0 b ffff8000113a5964 <__dev_kfree_skb_irq+0x78>
smp_acquire__after_ctrl_dep();
ffff8000113a59a8: d50339bf dmb ishld
ffff8000113a59ac: 17ffffde b ffff8000113a5924 <__dev_kfree_skb_irq+0x38>
ffff8000113a59b0 <__dev_kfree_skb_any>:
{
ffff8000113a59b0: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a59b4: 910003fd mov x29, sp
ffff8000113a59b8: f9000bf3 str x19, [sp,#16]
ffff8000113a59bc: aa0003f3 mov x19, x0
ffff8000113a59c0: aa1e03e0 mov x0, x30
ffff8000113a59c4: f90017a1 str x1, [x29,#40]
ffff8000113a59c8: 94000000 bl 0 <_mcount>
ffff8000113a59c8: R_AARCH64_CALL26 _mcount
ffff8000113a59cc: d5384102 mrs x2, sp_el0
__READ_ONCE_SIZE;
ffff8000113a59d0: b9401842 ldr w2, [x2,#24]
if (in_irq() || irqs_disabled())
ffff8000113a59d4: f94017a1 ldr x1, [x29,#40]
ffff8000113a59d8: 72100c5f tst w2, #0xf0000
ffff8000113a59dc: 54000081 b.ne ffff8000113a59ec <__dev_kfree_skb_any+0x3c>
asm volatile(ALTERNATIVE(
ffff8000113a59e0: d53b4222 mrs x2, daif
asm volatile(ALTERNATIVE(
ffff8000113a59e4: 12190040 and w0, w2, #0x80
ffff8000113a59e8: 340000c0 cbz w0, ffff8000113a5a00 <__dev_kfree_skb_any+0x50>
__dev_kfree_skb_irq(skb, reason);
ffff8000113a59ec: aa1303e0 mov x0, x19
ffff8000113a59f0: 94000000 bl ffff8000113a58ec <__dev_kfree_skb_irq>
ffff8000113a59f0: R_AARCH64_CALL26 __dev_kfree_skb_irq
}
ffff8000113a59f4: f9400bf3 ldr x19, [sp,#16]
ffff8000113a59f8: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a59fc: d65f03c0 ret
dev_kfree_skb(skb);
ffff8000113a5a00: aa1303e0 mov x0, x19
ffff8000113a5a04: 94000000 bl 0 <consume_skb>
ffff8000113a5a04: R_AARCH64_CALL26 consume_skb
}
ffff8000113a5a08: f9400bf3 ldr x19, [sp,#16]
ffff8000113a5a0c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a5a10: d65f03c0 ret
ffff8000113a5a14 <__netif_schedule>:
{
ffff8000113a5a14: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a5a18: 910003fd mov x29, sp
ffff8000113a5a1c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a5a20: f90013f5 str x21, [sp,#32]
ffff8000113a5a24: aa0003f3 mov x19, x0
ffff8000113a5a28: aa1e03e0 mov x0, x30
ffff8000113a5a2c: 94000000 bl 0 <_mcount>
ffff8000113a5a2c: R_AARCH64_CALL26 _mcount
ffff8000113a5a30: 90000014 adrp x20, 0 <__stack_chk_guard>
ffff8000113a5a30: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a5a34: f9400280 ldr x0, [x20]
ffff8000113a5a34: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a5a38: f9001fa0 str x0, [x29,#56]
ffff8000113a5a3c: f9406e60 ldr x0, [x19,#216]
ffff8000113a5a40: 37000340 tbnz w0, #0, ffff8000113a5aa8 <__netif_schedule+0x94>
ATOMIC64_OPS(or, orr, L)
ffff8000113a5a44: 91036263 add x3, x19, #0xd8
ffff8000113a5a48: f9800071 prfm pstl1strm, [x3]
ffff8000113a5a4c: c85f7c60 ldxr x0, [x3]
ffff8000113a5a50: b2400001 orr x1, x0, #0x1
ffff8000113a5a54: c802fc61 stlxr w2, x1, [x3]
ffff8000113a5a58: 35ffffa2 cbnz w2, ffff8000113a5a4c <__netif_schedule+0x38>
ffff8000113a5a5c: d5033bbf dmb ish
if (!test_and_set_bit(__QDISC_STATE_SCHED, &q->state))
ffff8000113a5a60: 37000240 tbnz w0, #0, ffff8000113a5aa8 <__netif_schedule+0x94>
asm volatile(ALTERNATIVE(
ffff8000113a5a64: d53b4235 mrs x21, daif
asm volatile(ALTERNATIVE(
ffff8000113a5a68: 121902a0 and w0, w21, #0x80
if (!arch_irqs_disabled_flags(flags))
ffff8000113a5a6c: 35000060 cbnz w0, ffff8000113a5a78 <__netif_schedule+0x64>
asm volatile(ALTERNATIVE(
ffff8000113a5a70: d2800c00 mov x0, #0x60 // #96
ffff8000113a5a74: d50342df msr daifset, #0x2
sd = this_cpu_ptr(&softnet_data);
ffff8000113a5a78: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a5a78: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
ffff8000113a5a7c: d538d081 mrs x1, tpidr_el1
ffff8000113a5a80: 91000000 add x0, x0, #0x0
ffff8000113a5a80: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
q->next_sched = NULL;
ffff8000113a5a84: f900727f str xzr, [x19,#224]
sd = this_cpu_ptr(&softnet_data);
ffff8000113a5a88: 8b000020 add x0, x1, x0
*sd->output_queue_tailp = q;
ffff8000113a5a8c: f9402802 ldr x2, [x0,#80]
sd->output_queue_tailp = &q->next_sched;
ffff8000113a5a90: 91038261 add x1, x19, #0xe0
*sd->output_queue_tailp = q;
ffff8000113a5a94: f9000053 str x19, [x2]
sd->output_queue_tailp = &q->next_sched;
ffff8000113a5a98: f9002801 str x1, [x0,#80]
raise_softirq_irqoff(NET_TX_SOFTIRQ);
ffff8000113a5a9c: 52800040 mov w0, #0x2 // #2
ffff8000113a5aa0: 94000000 bl 0 <raise_softirq_irqoff>
ffff8000113a5aa0: R_AARCH64_CALL26 raise_softirq_irqoff
asm volatile(ALTERNATIVE(
ffff8000113a5aa4: d51b4235 msr daif, x21
}
ffff8000113a5aa8: f9401fa1 ldr x1, [x29,#56]
ffff8000113a5aac: f9400280 ldr x0, [x20]
ffff8000113a5aac: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a5ab0: eb00003f cmp x1, x0
ffff8000113a5ab4: 540000a1 b.ne ffff8000113a5ac8 <__netif_schedule+0xb4>
ffff8000113a5ab8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a5abc: f94013f5 ldr x21, [sp,#32]
ffff8000113a5ac0: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a5ac4: d65f03c0 ret
ffff8000113a5ac8: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a5ac8: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a5acc <netif_schedule_queue>:
{
ffff8000113a5acc: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a5ad0: 910003fd mov x29, sp
ffff8000113a5ad4: f9000bf3 str x19, [sp,#16]
ffff8000113a5ad8: aa0003f3 mov x19, x0
ffff8000113a5adc: aa1e03e0 mov x0, x30
ffff8000113a5ae0: 94000000 bl 0 <_mcount>
ffff8000113a5ae0: R_AARCH64_CALL26 _mcount
return dev_queue->state & QUEUE_STATE_ANY_XOFF;
ffff8000113a5ae4: f9404a60 ldr x0, [x19,#144]
ffff8000113a5ae8: 92400400 and x0, x0, #0x3
if (!netif_xmit_stopped(txq)) {
ffff8000113a5aec: b5000060 cbnz x0, ffff8000113a5af8 <netif_schedule_queue+0x2c>
ffff8000113a5af0: f9400660 ldr x0, [x19,#8]
__netif_schedule(q);
ffff8000113a5af4: 94000000 bl ffff8000113a5a14 <__netif_schedule>
ffff8000113a5af4: R_AARCH64_CALL26 __netif_schedule
}
ffff8000113a5af8: f9400bf3 ldr x19, [sp,#16]
ffff8000113a5afc: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a5b00: d65f03c0 ret
ffff8000113a5b04 <netif_tx_wake_queue>:
{
ffff8000113a5b04: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a5b08: 910003fd mov x29, sp
ffff8000113a5b0c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a5b10: aa0003f3 mov x19, x0
ffff8000113a5b14: aa1e03e0 mov x0, x30
ffff8000113a5b18: 94000000 bl 0 <_mcount>
ffff8000113a5b18: R_AARCH64_CALL26 _mcount
ffff8000113a5b1c: 90000014 adrp x20, 0 <__stack_chk_guard>
ffff8000113a5b1c: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a5b20: f9400280 ldr x0, [x20]
ffff8000113a5b20: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a5b24: f90017a0 str x0, [x29,#40]
ffff8000113a5b28: f9404a60 ldr x0, [x19,#144]
if (!(READ_ONCE(*p) & mask))
ffff8000113a5b2c: 36000180 tbz w0, #0, ffff8000113a5b5c <netif_tx_wake_queue+0x58>
ATOMIC64_OPS(andnot, bic, )
ffff8000113a5b30: d2800020 mov x0, #0x1 // #1
ffff8000113a5b34: 91024264 add x4, x19, #0x90
ffff8000113a5b38: f9800091 prfm pstl1strm, [x4]
ffff8000113a5b3c: c85f7c81 ldxr x1, [x4]
ffff8000113a5b40: 8a200022 bic x2, x1, x0
ffff8000113a5b44: c803fc82 stlxr w3, x2, [x4]
ffff8000113a5b48: 35ffffa3 cbnz w3, ffff8000113a5b3c <netif_tx_wake_queue+0x38>
ffff8000113a5b4c: d5033bbf dmb ish
if (test_and_clear_bit(__QUEUE_STATE_DRV_XOFF, &dev_queue->state)) {
ffff8000113a5b50: 36000061 tbz w1, #0, ffff8000113a5b5c <netif_tx_wake_queue+0x58>
ffff8000113a5b54: f9400660 ldr x0, [x19,#8]
__netif_schedule(q);
ffff8000113a5b58: 94000000 bl ffff8000113a5a14 <__netif_schedule>
ffff8000113a5b58: R_AARCH64_CALL26 __netif_schedule
}
ffff8000113a5b5c: f94017a1 ldr x1, [x29,#40]
ffff8000113a5b60: f9400280 ldr x0, [x20]
ffff8000113a5b60: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a5b64: eb00003f cmp x1, x0
ffff8000113a5b68: 54000081 b.ne ffff8000113a5b78 <netif_tx_wake_queue+0x74>
ffff8000113a5b6c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a5b70: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a5b74: d65f03c0 ret
ffff8000113a5b78: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a5b78: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a5b7c <netif_device_attach>:
{
ffff8000113a5b7c: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a5b80: 910003fd mov x29, sp
ffff8000113a5b84: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a5b88: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a5b8c: aa0003f3 mov x19, x0
ffff8000113a5b90: aa1e03e0 mov x0, x30
ffff8000113a5b94: 94000000 bl 0 <_mcount>
ffff8000113a5b94: R_AARCH64_CALL26 _mcount
ffff8000113a5b98: 90000015 adrp x21, 0 <__stack_chk_guard>
ffff8000113a5b98: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a5b9c: f94002a0 ldr x0, [x21]
ffff8000113a5b9c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a5ba0: f9001fa0 str x0, [x29,#56]
ffff8000113a5ba4: f9402260 ldr x0, [x19,#64]
if (READ_ONCE(*p) & mask)
ffff8000113a5ba8: 37080180 tbnz w0, #1, ffff8000113a5bd8 <netif_device_attach+0x5c>
ATOMIC64_OPS(or, orr, L)
ffff8000113a5bac: 91010262 add x2, x19, #0x40
ffff8000113a5bb0: f9800051 prfm pstl1strm, [x2]
ffff8000113a5bb4: c85f7c54 ldxr x20, [x2]
ffff8000113a5bb8: b27f0280 orr x0, x20, #0x2
ffff8000113a5bbc: c801fc40 stlxr w1, x0, [x2]
ffff8000113a5bc0: 35ffffa1 cbnz w1, ffff8000113a5bb4 <netif_device_attach+0x38>
ffff8000113a5bc4: d5033bbf dmb ish
return !!(old & mask);
ffff8000113a5bc8: 927f0294 and x20, x20, #0x2
if (!test_and_set_bit(__LINK_STATE_PRESENT, &dev->state) &&
ffff8000113a5bcc: b5000074 cbnz x20, ffff8000113a5bd8 <netif_device_attach+0x5c>
ffff8000113a5bd0: f9402260 ldr x0, [x19,#64]
ffff8000113a5bd4: 37000120 tbnz w0, #0, ffff8000113a5bf8 <netif_device_attach+0x7c>
}
ffff8000113a5bd8: f9401fa1 ldr x1, [x29,#56]
ffff8000113a5bdc: f94002a0 ldr x0, [x21]
ffff8000113a5bdc: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a5be0: eb00003f cmp x1, x0
ffff8000113a5be4: 54000261 b.ne ffff8000113a5c30 <netif_device_attach+0xb4>
ffff8000113a5be8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a5bec: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a5bf0: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a5bf4: d65f03c0 ret
for (i = 0; i < dev->num_tx_queues; i++) {
ffff8000113a5bf8: b943ca60 ldr w0, [x19,#968]
return &dev->_tx[index];
ffff8000113a5bfc: 52802816 mov w22, #0x140 // #320
for (i = 0; i < dev->num_tx_queues; i++) {
ffff8000113a5c00: 34000120 cbz w0, ffff8000113a5c24 <netif_device_attach+0xa8>
return &dev->_tx[index];
ffff8000113a5c04: f941e261 ldr x1, [x19,#960]
ffff8000113a5c08: 9bb67e80 umull x0, w20, w22
netif_tx_wake_queue(txq);
ffff8000113a5c0c: 8b000020 add x0, x1, x0
ffff8000113a5c10: 94000000 bl ffff8000113a5b04 <netif_tx_wake_queue>
ffff8000113a5c10: R_AARCH64_CALL26 netif_tx_wake_queue
for (i = 0; i < dev->num_tx_queues; i++) {
ffff8000113a5c14: b943ca60 ldr w0, [x19,#968]
ffff8000113a5c18: 11000694 add w20, w20, #0x1
ffff8000113a5c1c: 6b00029f cmp w20, w0
ffff8000113a5c20: 54ffff23 b.cc ffff8000113a5c04 <netif_device_attach+0x88>
__netdev_watchdog_up(dev);
ffff8000113a5c24: aa1303e0 mov x0, x19
ffff8000113a5c28: 94000000 bl 0 <__netdev_watchdog_up>
ffff8000113a5c28: R_AARCH64_CALL26 __netdev_watchdog_up
ffff8000113a5c2c: 17ffffeb b ffff8000113a5bd8 <netif_device_attach+0x5c>
}
ffff8000113a5c30: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a5c30: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a5c34 <dev_getfirstbyhwtype>:
{
ffff8000113a5c34: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a5c38: 910003fd mov x29, sp
ffff8000113a5c3c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a5c40: aa0003f4 mov x20, x0
ffff8000113a5c44: aa1e03e0 mov x0, x30
ffff8000113a5c48: 53003c33 uxth w19, w1
ffff8000113a5c4c: 94000000 bl 0 <_mcount>
ffff8000113a5c4c: R_AARCH64_CALL26 _mcount
ffff8000113a5c50: aa1403e3 mov x3, x20
ffff8000113a5c54: f8490c60 ldr x0, [x3,#144]!
for_each_netdev_rcu(net, dev)
ffff8000113a5c58: eb00007f cmp x3, x0
ffff8000113a5c5c: d1012000 sub x0, x0, #0x48
ffff8000113a5c60: 54000180 b.eq ffff8000113a5c90 <dev_getfirstbyhwtype+0x5c>
if (dev->type == type) {
ffff8000113a5c64: 79448801 ldrh w1, [x0,#580]
ffff8000113a5c68: 6b13003f cmp w1, w19
ffff8000113a5c6c: 540000a1 b.ne ffff8000113a5c80 <dev_getfirstbyhwtype+0x4c>
ffff8000113a5c70: 1400000c b ffff8000113a5ca0 <dev_getfirstbyhwtype+0x6c>
ffff8000113a5c74: 79448802 ldrh w2, [x0,#580]
ffff8000113a5c78: 6b13005f cmp w2, w19
ffff8000113a5c7c: 54000120 b.eq ffff8000113a5ca0 <dev_getfirstbyhwtype+0x6c>
ffff8000113a5c80: f9402400 ldr x0, [x0,#72]
for_each_netdev_rcu(net, dev)
ffff8000113a5c84: eb00007f cmp x3, x0
ffff8000113a5c88: d1012000 sub x0, x0, #0x48
ffff8000113a5c8c: 54ffff41 b.ne ffff8000113a5c74 <dev_getfirstbyhwtype+0x40>
struct net_device *dev, *ret = NULL;
ffff8000113a5c90: d2800000 mov x0, #0x0 // #0
}
ffff8000113a5c94: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a5c98: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a5c9c: d65f03c0 ret
PERCPU_OP(add, add, stadd)
ffff8000113a5ca0: 52800023 mov w3, #0x1 // #1
this_cpu_inc(*dev->pcpu_refcnt);
ffff8000113a5ca4: f9426001 ldr x1, [x0,#1216]
asm(ALTERNATIVE("mrs %0, tpidr_el1",
ffff8000113a5ca8: d538d082 mrs x2, tpidr_el1
PERCPU_OP(add, add, stadd)
ffff8000113a5cac: 8b010046 add x6, x2, x1
ffff8000113a5cb0: 885f7cc5 ldxr w5, [x6]
ffff8000113a5cb4: 0b0300a5 add w5, w5, w3
ffff8000113a5cb8: 88047cc5 stxr w4, w5, [x6]
ffff8000113a5cbc: 35ffffa4 cbnz w4, ffff8000113a5cb0 <dev_getfirstbyhwtype+0x7c>
ffff8000113a5cc0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a5cc4: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a5cc8: d65f03c0 ret
ffff8000113a5ccc <dev_get_by_index>:
{
ffff8000113a5ccc: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a5cd0: 910003fd mov x29, sp
ffff8000113a5cd4: f9000bf3 str x19, [sp,#16]
ffff8000113a5cd8: aa0003f3 mov x19, x0
ffff8000113a5cdc: aa1e03e0 mov x0, x30
ffff8000113a5ce0: f90017a1 str x1, [x29,#40]
ffff8000113a5ce4: 94000000 bl 0 <_mcount>
ffff8000113a5ce4: R_AARCH64_CALL26 _mcount
return &net->dev_index_head[ifindex & (NETDEV_HASHENTRIES - 1)];
ffff8000113a5ce8: f94017a1 ldr x1, [x29,#40]
ffff8000113a5cec: f9409a62 ldr x2, [x19,#304]
ffff8000113a5cf0: d37d1c20 ubfiz x0, x1, #3, #8
ffff8000113a5cf4: f8606840 ldr x0, [x2,x0]
hlist_for_each_entry_rcu(dev, head, index_hlist)
ffff8000113a5cf8: b4000040 cbz x0, ffff8000113a5d00 <dev_get_by_index+0x34>
ffff8000113a5cfc: d10e4000 sub x0, x0, #0x390
ffff8000113a5d00: b40000c0 cbz x0, ffff8000113a5d18 <dev_get_by_index+0x4c>
if (dev->ifindex == ifindex)
ffff8000113a5d04: b9410002 ldr w2, [x0,#256]
ffff8000113a5d08: 6b02003f cmp w1, w2
ffff8000113a5d0c: 540000c0 b.eq ffff8000113a5d24 <dev_get_by_index+0x58>
ffff8000113a5d10: f941c800 ldr x0, [x0,#912]
hlist_for_each_entry_rcu(dev, head, index_hlist)
ffff8000113a5d14: b5ffff40 cbnz x0, ffff8000113a5cfc <dev_get_by_index+0x30>
}
ffff8000113a5d18: f9400bf3 ldr x19, [sp,#16]
ffff8000113a5d1c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a5d20: d65f03c0 ret
ffff8000113a5d24: 52800023 mov w3, #0x1 // #1
ffff8000113a5d28: f9426001 ldr x1, [x0,#1216]
asm(ALTERNATIVE("mrs %0, tpidr_el1",
ffff8000113a5d2c: d538d082 mrs x2, tpidr_el1
PERCPU_OP(add, add, stadd)
ffff8000113a5d30: 8b010046 add x6, x2, x1
ffff8000113a5d34: 885f7cc5 ldxr w5, [x6]
ffff8000113a5d38: 0b0300a5 add w5, w5, w3
ffff8000113a5d3c: 88047cc5 stxr w4, w5, [x6]
ffff8000113a5d40: 35ffffa4 cbnz w4, ffff8000113a5d34 <dev_get_by_index+0x68>
ffff8000113a5d44: f9400bf3 ldr x19, [sp,#16]
ffff8000113a5d48: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a5d4c: d65f03c0 ret
ffff8000113a5d50 <__netdev_adjacent_dev_remove.constprop.155>:
static void __netdev_adjacent_dev_remove(struct net_device *dev,
ffff8000113a5d50: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a5d54: 910003fd mov x29, sp
ffff8000113a5d58: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a5d5c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a5d60: f9001bf7 str x23, [sp,#48]
ffff8000113a5d64: aa0003f7 mov x23, x0
ffff8000113a5d68: aa1e03e0 mov x0, x30
ffff8000113a5d6c: aa0103f5 mov x21, x1
pr_debug("Remove adjacency: dev %s adj_dev %s ref_nr %d\n",
ffff8000113a5d70: 90000016 adrp x22, ffff80001139e37c <__my_cpu_offset>
ffff8000113a5d70: R_AARCH64_ADR_PREL_PG_HI21 __verbose
static void __netdev_adjacent_dev_remove(struct net_device *dev,
ffff8000113a5d74: aa0203f4 mov x20, x2
ffff8000113a5d78: 94000000 bl 0 <_mcount>
ffff8000113a5d78: R_AARCH64_CALL26 _mcount
pr_debug("Remove adjacency: dev %s adj_dev %s ref_nr %d\n",
ffff8000113a5d7c: 910002c0 add x0, x22, #0x0
ffff8000113a5d7c: R_AARCH64_ADD_ABS_LO12_NC __verbose
ffff8000113a5d80: 79404401 ldrh w1, [x0,#34]
ffff8000113a5d84: 37100da1 tbnz w1, #2, ffff8000113a5f38 <__netdev_adjacent_dev_remove.constprop.155+0x1e8>
list_for_each_entry(adj, adj_list, list) {
ffff8000113a5d88: f9400284 ldr x4, [x20]
ffff8000113a5d8c: eb04029f cmp x20, x4
ffff8000113a5d90: d1006093 sub x19, x4, #0x18
ffff8000113a5d94: 54000180 b.eq ffff8000113a5dc4 <__netdev_adjacent_dev_remove.constprop.155+0x74>
if (adj->dev == adj_dev)
ffff8000113a5d98: f85e8080 ldur x0, [x4,#-24]
ffff8000113a5d9c: eb0002bf cmp x21, x0
ffff8000113a5da0: 540000a1 b.ne ffff8000113a5db4 <__netdev_adjacent_dev_remove.constprop.155+0x64>
ffff8000113a5da4: 1400000f b ffff8000113a5de0 <__netdev_adjacent_dev_remove.constprop.155+0x90>
ffff8000113a5da8: f85e80a5 ldur x5, [x5,#-24]
ffff8000113a5dac: eb0502bf cmp x21, x5
ffff8000113a5db0: 54000180 b.eq ffff8000113a5de0 <__netdev_adjacent_dev_remove.constprop.155+0x90>
list_for_each_entry(adj, adj_list, list) {
ffff8000113a5db4: f9400e65 ldr x5, [x19,#24]
ffff8000113a5db8: eb05029f cmp x20, x5
ffff8000113a5dbc: d10060b3 sub x19, x5, #0x18
ffff8000113a5dc0: 54ffff41 b.ne ffff8000113a5da8 <__netdev_adjacent_dev_remove.constprop.155+0x58>
pr_err("Adjacency does not exist for device %s from %s\n",
ffff8000113a5dc4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a5dc4: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x4e0
ffff8000113a5dc8: aa1703e1 mov x1, x23
ffff8000113a5dcc: aa1503e2 mov x2, x21
ffff8000113a5dd0: 91000000 add x0, x0, #0x0
ffff8000113a5dd0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x4e0
ffff8000113a5dd4: 94000000 bl 0 <printk>
ffff8000113a5dd4: R_AARCH64_CALL26 printk
WARN_ON(1);
ffff8000113a5dd8: d4210000 brk #0x800
ffff8000113a5ddc: 1400000c b ffff8000113a5e0c <__netdev_adjacent_dev_remove.constprop.155+0xbc>
if (!adj) {
ffff8000113a5de0: b4ffff33 cbz x19, ffff8000113a5dc4 <__netdev_adjacent_dev_remove.constprop.155+0x74>
if (adj->ref_nr > ref_nr) {
ffff8000113a5de4: 79401664 ldrh w4, [x19,#10]
ffff8000113a5de8: 7100049f cmp w4, #0x1
ffff8000113a5dec: 540001a9 b.ls ffff8000113a5e20 <__netdev_adjacent_dev_remove.constprop.155+0xd0>
pr_debug("adjacency: %s to %s ref_nr - %d = %d\n",
ffff8000113a5df0: 910002d6 add x22, x22, #0x0
ffff8000113a5df0: R_AARCH64_ADD_ABS_LO12_NC __verbose
ffff8000113a5df4: 9100a2c0 add x0, x22, #0x28
ffff8000113a5df8: 79404401 ldrh w1, [x0,#34]
ffff8000113a5dfc: 2a0403e5 mov w5, w4
ffff8000113a5e00: 371008a1 tbnz w1, #2, ffff8000113a5f14 <__netdev_adjacent_dev_remove.constprop.155+0x1c4>
adj->ref_nr -= ref_nr;
ffff8000113a5e04: 510004a4 sub w4, w5, #0x1
ffff8000113a5e08: 79001664 strh w4, [x19,#10]
}
ffff8000113a5e0c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a5e10: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a5e14: f9401bf7 ldr x23, [sp,#48]
ffff8000113a5e18: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a5e1c: d65f03c0 ret
if (adj->master)
ffff8000113a5e20: 39402260 ldrb w0, [x19,#8]
ffff8000113a5e24: 350004e0 cbnz w0, ffff8000113a5ec0 <__netdev_adjacent_dev_remove.constprop.155+0x170>
return (dev_list == &dev->adj_list.upper ||
ffff8000113a5e28: 9102a2e0 add x0, x23, #0xa8
dev_list == &dev->adj_list.lower) &&
ffff8000113a5e2c: eb00029f cmp x20, x0
ffff8000113a5e30: 54000520 b.eq ffff8000113a5ed4 <__netdev_adjacent_dev_remove.constprop.155+0x184>
ffff8000113a5e34: 9102e2e0 add x0, x23, #0xb8
return (dev_list == &dev->adj_list.upper ||
ffff8000113a5e38: eb00029f cmp x20, x0
ffff8000113a5e3c: 540004c0 b.eq ffff8000113a5ed4 <__netdev_adjacent_dev_remove.constprop.155+0x184>
list_del_rcu(&adj->list);
ffff8000113a5e40: 91006274 add x20, x19, #0x18
if (!__list_del_entry_valid(entry))
ffff8000113a5e44: aa1403e0 mov x0, x20
ffff8000113a5e48: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113a5e48: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113a5e4c: 53001c00 uxtb w0, w0
ffff8000113a5e50: 340000a0 cbz w0, ffff8000113a5e64 <__netdev_adjacent_dev_remove.constprop.155+0x114>
__list_del(entry->prev, entry->next);
ffff8000113a5e54: f9400680 ldr x0, [x20,#8]
ffff8000113a5e58: f9400e61 ldr x1, [x19,#24]
next->prev = prev;
ffff8000113a5e5c: f9000420 str x0, [x1,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a5e60: f9000001 str x1, [x0]
entry->prev = LIST_POISON2;
ffff8000113a5e64: d2802440 mov x0, #0x122 // #290
ffff8000113a5e68: f2fbd5a0 movk x0, #0xdead, lsl #48
pr_debug("adjacency: dev_put for %s, because link removed from %s to %s\n",
ffff8000113a5e6c: 910002d6 add x22, x22, #0x0
ffff8000113a5e6c: R_AARCH64_ADD_ABS_LO12_NC __verbose
ffff8000113a5e70: f9000680 str x0, [x20,#8]
ffff8000113a5e74: 910142c0 add x0, x22, #0x50
ffff8000113a5e78: 79404401 ldrh w1, [x0,#34]
ffff8000113a5e7c: 371003e1 tbnz w1, #2, ffff8000113a5ef8 <__netdev_adjacent_dev_remove.constprop.155+0x1a8>
ffff8000113a5e80: 12800002 mov w2, #0xffffffff // #-1
this_cpu_dec(*dev->pcpu_refcnt);
ffff8000113a5e84: f94262a0 ldr x0, [x21,#1216]
asm(ALTERNATIVE("mrs %0, tpidr_el1",
ffff8000113a5e88: d538d081 mrs x1, tpidr_el1
PERCPU_OP(add, add, stadd)
ffff8000113a5e8c: 8b000025 add x5, x1, x0
ffff8000113a5e90: 885f7ca4 ldxr w4, [x5]
ffff8000113a5e94: 0b020084 add w4, w4, w2
ffff8000113a5e98: 88037ca4 stxr w3, w4, [x5]
ffff8000113a5e9c: 35ffffa3 cbnz w3, ffff8000113a5e90 <__netdev_adjacent_dev_remove.constprop.155+0x140>
kfree_rcu(adj, rcu);
ffff8000113a5ea0: d2800501 mov x1, #0x28 // #40
ffff8000113a5ea4: 8b010260 add x0, x19, x1
ffff8000113a5ea8: 94000000 bl 0 <kfree_call_rcu>
ffff8000113a5ea8: R_AARCH64_CALL26 kfree_call_rcu
}
ffff8000113a5eac: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a5eb0: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a5eb4: f9401bf7 ldr x23, [sp,#48]
ffff8000113a5eb8: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a5ebc: d65f03c0 ret
sysfs_remove_link(&(dev->dev.kobj), "master");
ffff8000113a5ec0: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a5ec0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x540
ffff8000113a5ec4: 911442e0 add x0, x23, #0x510
ffff8000113a5ec8: 91000021 add x1, x1, #0x0
ffff8000113a5ec8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x540
ffff8000113a5ecc: 94000000 bl 0 <sysfs_remove_link>
ffff8000113a5ecc: R_AARCH64_CALL26 sysfs_remove_link
ffff8000113a5ed0: 17ffffd6 b ffff8000113a5e28 <__netdev_adjacent_dev_remove.constprop.155+0xd8>
dev_list == &dev->adj_list.lower) &&
ffff8000113a5ed4: f9427ae1 ldr x1, [x23,#1264]
ffff8000113a5ed8: f9427aa0 ldr x0, [x21,#1264]
ffff8000113a5edc: eb00003f cmp x1, x0
ffff8000113a5ee0: 54fffb01 b.ne ffff8000113a5e40 <__netdev_adjacent_dev_remove.constprop.155+0xf0>
netdev_adjacent_sysfs_del(dev, adj_dev->name, dev_list);
ffff8000113a5ee4: aa1703e0 mov x0, x23
ffff8000113a5ee8: aa1503e1 mov x1, x21
ffff8000113a5eec: aa1403e2 mov x2, x20
ffff8000113a5ef0: 97ffec2b bl ffff8000113a0f9c <netdev_adjacent_sysfs_del>
ffff8000113a5ef4: 17ffffd3 b ffff8000113a5e40 <__netdev_adjacent_dev_remove.constprop.155+0xf0>
pr_debug("adjacency: dev_put for %s, because link removed from %s to %s\n",
ffff8000113a5ef8: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a5ef8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x548
ffff8000113a5efc: 91000021 add x1, x1, #0x0
ffff8000113a5efc: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x548
ffff8000113a5f00: aa1503e2 mov x2, x21
ffff8000113a5f04: aa1703e3 mov x3, x23
ffff8000113a5f08: aa1503e4 mov x4, x21
ffff8000113a5f0c: 94000000 bl 0 <__dynamic_pr_debug>
ffff8000113a5f0c: R_AARCH64_CALL26 __dynamic_pr_debug
ffff8000113a5f10: 17ffffdc b ffff8000113a5e80 <__netdev_adjacent_dev_remove.constprop.155+0x130>
pr_debug("adjacency: %s to %s ref_nr - %d = %d\n",
ffff8000113a5f14: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a5f14: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x518
ffff8000113a5f18: 51000485 sub w5, w4, #0x1
ffff8000113a5f1c: 91000021 add x1, x1, #0x0
ffff8000113a5f1c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x518
ffff8000113a5f20: aa1703e2 mov x2, x23
ffff8000113a5f24: aa1503e3 mov x3, x21
ffff8000113a5f28: 52800024 mov w4, #0x1 // #1
ffff8000113a5f2c: 94000000 bl 0 <__dynamic_pr_debug>
ffff8000113a5f2c: R_AARCH64_CALL26 __dynamic_pr_debug
ffff8000113a5f30: 79401665 ldrh w5, [x19,#10]
ffff8000113a5f34: 17ffffb4 b ffff8000113a5e04 <__netdev_adjacent_dev_remove.constprop.155+0xb4>
pr_debug("Remove adjacency: dev %s adj_dev %s ref_nr %d\n",
ffff8000113a5f38: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a5f38: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x4b0
ffff8000113a5f3c: 91000021 add x1, x1, #0x0
ffff8000113a5f3c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x4b0
ffff8000113a5f40: aa1703e2 mov x2, x23
ffff8000113a5f44: aa1503e3 mov x3, x21
ffff8000113a5f48: 52800024 mov w4, #0x1 // #1
ffff8000113a5f4c: 94000000 bl 0 <__dynamic_pr_debug>
ffff8000113a5f4c: R_AARCH64_CALL26 __dynamic_pr_debug
ffff8000113a5f50: 17ffff8e b ffff8000113a5d88 <__netdev_adjacent_dev_remove.constprop.155+0x38>
ffff8000113a5f54 <netdev_upper_dev_unlink>:
{
ffff8000113a5f54: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff8000113a5f58: 910003fd mov x29, sp
ffff8000113a5f5c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a5f60: f90013f5 str x21, [sp,#32]
ffff8000113a5f64: aa0003f4 mov x20, x0
ffff8000113a5f68: aa1e03e0 mov x0, x30
ffff8000113a5f6c: aa0103f3 mov x19, x1
ffff8000113a5f70: 90000015 adrp x21, 0 <__stack_chk_guard>
ffff8000113a5f70: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a5f74: 94000000 bl 0 <_mcount>
ffff8000113a5f74: R_AARCH64_CALL26 _mcount
ffff8000113a5f78: f94002a0 ldr x0, [x21]
ffff8000113a5f78: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
struct netdev_notifier_changeupper_info changeupper_info = {
ffff8000113a5f7c: a9037fbf stp xzr, xzr, [x29,#48]
ffff8000113a5f80: a9047fbf stp xzr, xzr, [x29,#64]
{
ffff8000113a5f84: f9002fa0 str x0, [x29,#88]
struct netdev_notifier_changeupper_info changeupper_info = {
ffff8000113a5f88: f9002bbf str xzr, [x29,#80]
ffff8000113a5f8c: f9001bb4 str x20, [x29,#48]
ffff8000113a5f90: f90023b3 str x19, [x29,#64]
ASSERT_RTNL();
ffff8000113a5f94: 94000000 bl 0 <rtnl_is_locked>
ffff8000113a5f94: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113a5f98: 340005a0 cbz w0, ffff8000113a604c <netdev_upper_dev_unlink+0xf8>
changeupper_info.master = netdev_master_upper_dev_get(dev) == upper_dev;
ffff8000113a5f9c: aa1403e0 mov x0, x20
ffff8000113a5fa0: 94000000 bl ffff80001139ff0c <netdev_master_upper_dev_get>
ffff8000113a5fa0: R_AARCH64_CALL26 netdev_master_upper_dev_get
ffff8000113a5fa4: eb00027f cmp x19, x0
ffff8000113a5fa8: 1a9f17e2 cset w2, eq
call_netdevice_notifiers_info(NETDEV_PRECHANGEUPPER,
ffff8000113a5fac: 9100c3a1 add x1, x29, #0x30
ffff8000113a5fb0: d2800340 mov x0, #0x1a // #26
changeupper_info.master = netdev_master_upper_dev_get(dev) == upper_dev;
ffff8000113a5fb4: 390123a2 strb w2, [x29,#72]
call_netdevice_notifiers_info(NETDEV_PRECHANGEUPPER,
ffff8000113a5fb8: 97ffe850 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
__netdev_adjacent_dev_remove(dev, upper_dev, ref_nr, up_list);
ffff8000113a5fbc: aa1403e0 mov x0, x20
ffff8000113a5fc0: aa1303e1 mov x1, x19
ffff8000113a5fc4: 9102a282 add x2, x20, #0xa8
ffff8000113a5fc8: 97ffff62 bl ffff8000113a5d50 <__netdev_adjacent_dev_remove.constprop.155>
__netdev_adjacent_dev_remove(upper_dev, dev, ref_nr, down_list);
ffff8000113a5fcc: 9102e262 add x2, x19, #0xb8
ffff8000113a5fd0: aa1303e0 mov x0, x19
ffff8000113a5fd4: aa1403e1 mov x1, x20
ffff8000113a5fd8: 97ffff5e bl ffff8000113a5d50 <__netdev_adjacent_dev_remove.constprop.155>
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
ffff8000113a5fdc: 9100c3a1 add x1, x29, #0x30
ffff8000113a5fe0: d28002a0 mov x0, #0x15 // #21
ffff8000113a5fe4: 97ffe845 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
dev->upper_level = __netdev_upper_depth(dev) + 1;
ffff8000113a5fe8: aa1403e0 mov x0, x20
ffff8000113a5fec: 97ffe3b7 bl ffff80001139eec8 <__netdev_upper_depth>
ffff8000113a5ff0: 53001c00 uxtb w0, w0
ffff8000113a5ff4: 11000400 add w0, w0, #0x1
ffff8000113a5ff8: 3909c280 strb w0, [x20,#624]
__netdev_walk_all_lower_dev(dev, __netdev_update_upper_level, NULL);
ffff8000113a5ffc: aa1403e0 mov x0, x20
ffff8000113a6000: 97fff095 bl ffff8000113a2254 <__netdev_walk_all_lower_dev.constprop.156>
dev->lower_level = __netdev_lower_depth(dev) + 1;
ffff8000113a6004: aa1303e0 mov x0, x19
ffff8000113a6008: 97ffe3d1 bl ffff80001139ef4c <__netdev_lower_depth>
ffff8000113a600c: 53001c00 uxtb w0, w0
ffff8000113a6010: 11000400 add w0, w0, #0x1
__netdev_walk_all_upper_dev(upper_dev, __netdev_update_lower_level,
ffff8000113a6014: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a6014: R_AARCH64_ADR_PREL_PG_HI21 .text+0xc90
dev->lower_level = __netdev_lower_depth(dev) + 1;
ffff8000113a6018: 3909c660 strb w0, [x19,#625]
__netdev_walk_all_upper_dev(upper_dev, __netdev_update_lower_level,
ffff8000113a601c: 91000021 add x1, x1, #0x0
ffff8000113a601c: R_AARCH64_ADD_ABS_LO12_NC .text+0xc90
ffff8000113a6020: aa1303e0 mov x0, x19
ffff8000113a6024: d2800002 mov x2, #0x0 // #0
ffff8000113a6028: 97ffe295 bl ffff80001139ea7c <__netdev_walk_all_upper_dev>
}
ffff8000113a602c: f9402fa1 ldr x1, [x29,#88]
ffff8000113a6030: f94002a0 ldr x0, [x21]
ffff8000113a6030: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a6034: eb00003f cmp x1, x0
ffff8000113a6038: 54000261 b.ne ffff8000113a6084 <netdev_upper_dev_unlink+0x130>
ffff8000113a603c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a6040: f94013f5 ldr x21, [sp,#32]
ffff8000113a6044: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113a6048: d65f03c0 ret
ASSERT_RTNL();
ffff8000113a604c: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113a604c: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113a6050: 91000063 add x3, x3, #0x0
ffff8000113a6050: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113a6054: 39404860 ldrb w0, [x3,#18]
ffff8000113a6058: 35fffa20 cbnz w0, ffff8000113a5f9c <netdev_upper_dev_unlink+0x48>
ffff8000113a605c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a605c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113a6060: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a6060: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113a6064: 52800024 mov w4, #0x1 // #1
ffff8000113a6068: 91000000 add x0, x0, #0x0
ffff8000113a6068: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113a606c: 91000021 add x1, x1, #0x0
ffff8000113a606c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113a6070: 5283be42 mov w2, #0x1df2 // #7666
ffff8000113a6074: 39004864 strb w4, [x3,#18]
ffff8000113a6078: 94000000 bl 0 <__warn_printk>
ffff8000113a6078: R_AARCH64_CALL26 __warn_printk
ffff8000113a607c: d4210000 brk #0x800
ffff8000113a6080: 17ffffc7 b ffff8000113a5f9c <netdev_upper_dev_unlink+0x48>
}
ffff8000113a6084: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a6084: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a6088 <netdev_adjacent_change_commit>:
{
ffff8000113a6088: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a608c: 910003fd mov x29, sp
ffff8000113a6090: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a6094: f90013f5 str x21, [sp,#32]
ffff8000113a6098: aa0003f3 mov x19, x0
ffff8000113a609c: aa0103f4 mov x20, x1
ffff8000113a60a0: aa1e03e0 mov x0, x30
ffff8000113a60a4: aa0203f5 mov x21, x2
ffff8000113a60a8: 94000000 bl 0 <_mcount>
ffff8000113a60a8: R_AARCH64_CALL26 _mcount
if (!new_dev || !old_dev)
ffff8000113a60ac: b4000194 cbz x20, ffff8000113a60dc <netdev_adjacent_change_commit+0x54>
ffff8000113a60b0: eb1f027f cmp x19, xzr
ffff8000113a60b4: 1a9f17e2 cset w2, eq
ffff8000113a60b8: 35000122 cbnz w2, ffff8000113a60dc <netdev_adjacent_change_commit+0x54>
if (new_dev == old_dev)
ffff8000113a60bc: eb13029f cmp x20, x19
ffff8000113a60c0: 540000e0 b.eq ffff8000113a60dc <netdev_adjacent_change_commit+0x54>
__netdev_adjacent_dev_set(upper_dev, lower_dev, false);
ffff8000113a60c4: aa1503e0 mov x0, x21
ffff8000113a60c8: aa1303e1 mov x1, x19
ffff8000113a60cc: 97ffe419 bl ffff80001139f130 <__netdev_adjacent_dev_set>
netdev_upper_dev_unlink(old_dev, dev);
ffff8000113a60d0: aa1303e0 mov x0, x19
ffff8000113a60d4: aa1503e1 mov x1, x21
ffff8000113a60d8: 94000000 bl ffff8000113a5f54 <netdev_upper_dev_unlink>
ffff8000113a60d8: R_AARCH64_CALL26 netdev_upper_dev_unlink
}
ffff8000113a60dc: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a60e0: f94013f5 ldr x21, [sp,#32]
ffff8000113a60e4: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a60e8: d65f03c0 ret
ffff8000113a60ec <netdev_adjacent_change_abort>:
{
ffff8000113a60ec: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a60f0: 910003fd mov x29, sp
ffff8000113a60f4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a60f8: f90013f5 str x21, [sp,#32]
ffff8000113a60fc: aa0003f4 mov x20, x0
ffff8000113a6100: aa0103f3 mov x19, x1
ffff8000113a6104: aa1e03e0 mov x0, x30
ffff8000113a6108: aa0203f5 mov x21, x2
ffff8000113a610c: 94000000 bl 0 <_mcount>
ffff8000113a610c: R_AARCH64_CALL26 _mcount
if (!new_dev)
ffff8000113a6110: b40000d3 cbz x19, ffff8000113a6128 <netdev_adjacent_change_abort+0x3c>
if (old_dev && new_dev != old_dev)
ffff8000113a6114: eb14027f cmp x19, x20
ffff8000113a6118: 54000101 b.ne ffff8000113a6138 <netdev_adjacent_change_abort+0x4c>
netdev_upper_dev_unlink(new_dev, dev);
ffff8000113a611c: aa1303e0 mov x0, x19
ffff8000113a6120: aa1503e1 mov x1, x21
ffff8000113a6124: 94000000 bl ffff8000113a5f54 <netdev_upper_dev_unlink>
ffff8000113a6124: R_AARCH64_CALL26 netdev_upper_dev_unlink
}
ffff8000113a6128: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a612c: f94013f5 ldr x21, [sp,#32]
ffff8000113a6130: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a6134: d65f03c0 ret
if (old_dev && new_dev != old_dev)
ffff8000113a6138: b4ffff34 cbz x20, ffff8000113a611c <netdev_adjacent_change_abort+0x30>
__netdev_adjacent_dev_set(upper_dev, lower_dev, false);
ffff8000113a613c: aa1503e0 mov x0, x21
ffff8000113a6140: aa1403e1 mov x1, x20
ffff8000113a6144: 52800002 mov w2, #0x0 // #0
ffff8000113a6148: 97ffe3fa bl ffff80001139f130 <__netdev_adjacent_dev_set>
ffff8000113a614c: 17fffff4 b ffff8000113a611c <netdev_adjacent_change_abort+0x30>
ffff8000113a6150 <flush_backlog>:
{
ffff8000113a6150: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a6154: 910003fd mov x29, sp
ffff8000113a6158: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a615c: f90013f5 str x21, [sp,#32]
ffff8000113a6160: aa1e03e0 mov x0, x30
ffff8000113a6164: 94000000 bl 0 <_mcount>
ffff8000113a6164: R_AARCH64_CALL26 _mcount
ffff8000113a6168: d5384100 mrs x0, sp_el0
__READ_ONCE_SIZE;
ffff8000113a616c: b9401801 ldr w1, [x0,#24]
ffff8000113a6170: 11080021 add w1, w1, #0x200
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff8000113a6174: b9001801 str w1, [x0,#24]
sd = this_cpu_ptr(&softnet_data);
ffff8000113a6178: 90000014 adrp x20, ffff80001139e37c <__my_cpu_offset>
ffff8000113a6178: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
asm(ALTERNATIVE("mrs %0, tpidr_el1",
ffff8000113a617c: d538d080 mrs x0, tpidr_el1
ffff8000113a6180: 91000294 add x20, x20, #0x0
ffff8000113a6180: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a6184: 8b140014 add x20, x0, x20
asm volatile(ALTERNATIVE(
ffff8000113a6188: d2800c00 mov x0, #0x60 // #96
ffff8000113a618c: d50342df msr daifset, #0x2
__CMPXCHG_CASE(w, , acq_, 32, , a, , "memory", K)
ffff8000113a6190: 52800023 mov w3, #0x1 // #1
ffff8000113a6194: 91043280 add x0, x20, #0x10c
ffff8000113a6198: d2800002 mov x2, #0x0 // #0
ffff8000113a619c: f9800011 prfm pstl1strm, [x0]
ffff8000113a61a0: 885ffc01 ldaxr w1, [x0]
ffff8000113a61a4: 4a020024 eor w4, w1, w2
ffff8000113a61a8: 35000064 cbnz w4, ffff8000113a61b4 <flush_backlog+0x64>
ffff8000113a61ac: 88047c03 stxr w4, w3, [x0]
ffff8000113a61b0: 35ffff84 cbnz w4, ffff8000113a61a0 <flush_backlog+0x50>
ffff8000113a61b4: 350009c1 cbnz w1, ffff8000113a62ec <flush_backlog+0x19c>
skb_queue_walk_safe(&sd->input_pkt_queue, skb, tmp) {
ffff8000113a61b8: aa1403f5 mov x21, x20
ffff8000113a61bc: f84f8ea1 ldr x1, [x21,#248]!
ffff8000113a61c0: eb15003f cmp x1, x21
ffff8000113a61c4: f9400033 ldr x19, [x1]
ffff8000113a61c8: 540000e1 b.ne ffff8000113a61e4 <flush_backlog+0x94>
ffff8000113a61cc: 1400001b b ffff8000113a6238 <flush_backlog+0xe8>
ffff8000113a61d0: eb1302bf cmp x21, x19
ffff8000113a61d4: f9400260 ldr x0, [x19]
ffff8000113a61d8: 54000300 b.eq ffff8000113a6238 <flush_backlog+0xe8>
ffff8000113a61dc: aa1303e1 mov x1, x19
ffff8000113a61e0: aa0003f3 mov x19, x0
if (skb->dev->reg_state == NETREG_UNREGISTERING) {
ffff8000113a61e4: f9400820 ldr x0, [x1,#16]
ffff8000113a61e8: 39536000 ldrb w0, [x0,#1240]
ffff8000113a61ec: 7100081f cmp w0, #0x2
ffff8000113a61f0: 54ffff01 b.ne ffff8000113a61d0 <flush_backlog+0x80>
WRITE_ONCE(list->qlen, list->qlen - 1);
ffff8000113a61f4: b94012a2 ldr w2, [x21,#16]
kfree_skb(skb);
ffff8000113a61f8: aa0103e0 mov x0, x1
ffff8000113a61fc: 51000442 sub w2, w2, #0x1
ffff8000113a6200: b9010a82 str w2, [x20,#264]
next = skb->next;
ffff8000113a6204: f9400023 ldr x3, [x1]
prev = skb->prev;
ffff8000113a6208: f9400422 ldr x2, [x1,#8]
skb->next = skb->prev = NULL;
ffff8000113a620c: f900003f str xzr, [x1]
ffff8000113a6210: f900043f str xzr, [x1,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a6214: f9000462 str x2, [x3,#8]
ffff8000113a6218: f9000043 str x3, [x2]
ffff8000113a621c: 94000000 bl 0 <kfree_skb>
ffff8000113a621c: R_AARCH64_CALL26 kfree_skb
sd->input_queue_head++;
ffff8000113a6220: b9408280 ldr w0, [x20,#128]
skb_queue_walk_safe(&sd->input_pkt_queue, skb, tmp) {
ffff8000113a6224: eb1302bf cmp x21, x19
ffff8000113a6228: 11000400 add w0, w0, #0x1
ffff8000113a622c: b9008280 str w0, [x20,#128]
ffff8000113a6230: f9400260 ldr x0, [x19]
ffff8000113a6234: 54fffd41 b.ne ffff8000113a61dc <flush_backlog+0x8c>
smp_store_release(&lock->locked, 0);
ffff8000113a6238: 52800000 mov w0, #0x0 // #0
ffff8000113a623c: 91043281 add x1, x20, #0x10c
ffff8000113a6240: 089ffc20 stlrb w0, [x1]
asm volatile(ALTERNATIVE(
ffff8000113a6244: d2801c00 mov x0, #0xe0 // #224
ffff8000113a6248: d50342ff msr daifclr, #0x2
skb_queue_walk_safe(&sd->process_queue, skb, tmp) {
ffff8000113a624c: aa1403f5 mov x21, x20
ffff8000113a6250: f8410ea1 ldr x1, [x21,#16]!
ffff8000113a6254: eb15003f cmp x1, x21
ffff8000113a6258: f9400033 ldr x19, [x1]
ffff8000113a625c: 540000e1 b.ne ffff8000113a6278 <flush_backlog+0x128>
ffff8000113a6260: 1400001b b ffff8000113a62cc <flush_backlog+0x17c>
ffff8000113a6264: eb15027f cmp x19, x21
ffff8000113a6268: f9400260 ldr x0, [x19]
ffff8000113a626c: 54000300 b.eq ffff8000113a62cc <flush_backlog+0x17c>
ffff8000113a6270: aa1303e1 mov x1, x19
ffff8000113a6274: aa0003f3 mov x19, x0
if (skb->dev->reg_state == NETREG_UNREGISTERING) {
ffff8000113a6278: f9400820 ldr x0, [x1,#16]
ffff8000113a627c: 39536000 ldrb w0, [x0,#1240]
ffff8000113a6280: 7100081f cmp w0, #0x2
ffff8000113a6284: 54ffff01 b.ne ffff8000113a6264 <flush_backlog+0x114>
WRITE_ONCE(list->qlen, list->qlen - 1);
ffff8000113a6288: b94012a2 ldr w2, [x21,#16]
kfree_skb(skb);
ffff8000113a628c: aa0103e0 mov x0, x1
ffff8000113a6290: 51000442 sub w2, w2, #0x1
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff8000113a6294: b9002282 str w2, [x20,#32]
next = skb->next;
ffff8000113a6298: f9400023 ldr x3, [x1]
prev = skb->prev;
ffff8000113a629c: f9400422 ldr x2, [x1,#8]
skb->next = skb->prev = NULL;
ffff8000113a62a0: f900003f str xzr, [x1]
ffff8000113a62a4: f900043f str xzr, [x1,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a62a8: f9000462 str x2, [x3,#8]
ffff8000113a62ac: f9000043 str x3, [x2]
ffff8000113a62b0: 94000000 bl 0 <kfree_skb>
ffff8000113a62b0: R_AARCH64_CALL26 kfree_skb
ffff8000113a62b4: b9408280 ldr w0, [x20,#128]
skb_queue_walk_safe(&sd->process_queue, skb, tmp) {
ffff8000113a62b8: eb15027f cmp x19, x21
ffff8000113a62bc: 11000400 add w0, w0, #0x1
ffff8000113a62c0: b9008280 str w0, [x20,#128]
ffff8000113a62c4: f9400260 ldr x0, [x19]
ffff8000113a62c8: 54fffd41 b.ne ffff8000113a6270 <flush_backlog+0x120>
__local_bh_enable_ip(ip, SOFTIRQ_DISABLE_OFFSET);
}
static inline void local_bh_enable(void)
{
__local_bh_enable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET);
ffff8000113a62cc: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a62cc: R_AARCH64_ADR_PREL_PG_HI21 .text+0x7f50
ffff8000113a62d0: 91000000 add x0, x0, #0x0
ffff8000113a62d0: R_AARCH64_ADD_ABS_LO12_NC .text+0x7f50
ffff8000113a62d4: 52804001 mov w1, #0x200 // #512
ffff8000113a62d8: 94000000 bl 0 <__local_bh_enable_ip>
ffff8000113a62d8: R_AARCH64_CALL26 __local_bh_enable_ip
}
ffff8000113a62dc: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a62e0: f94013f5 ldr x21, [sp,#32]
ffff8000113a62e4: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a62e8: d65f03c0 ret
queued_spin_lock_slowpath(lock, val);
ffff8000113a62ec: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113a62ec: R_AARCH64_CALL26 queued_spin_lock_slowpath
ffff8000113a62f0: 17ffffb2 b ffff8000113a61b8 <flush_backlog+0x68>
ffff8000113a62f4 <net_tx_action>:
{
ffff8000113a62f4: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113a62f8: 910003fd mov x29, sp
ffff8000113a62fc: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a6300: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a6304: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a6308: a9046bf9 stp x25, x26, [sp,#64]
struct softnet_data *sd = this_cpu_ptr(&softnet_data);
ffff8000113a630c: 90000018 adrp x24, ffff80001139e37c <__my_cpu_offset>
ffff8000113a630c: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
{
ffff8000113a6310: aa1e03e0 mov x0, x30
ffff8000113a6314: 94000000 bl 0 <_mcount>
ffff8000113a6314: R_AARCH64_CALL26 _mcount
struct softnet_data *sd = this_cpu_ptr(&softnet_data);
ffff8000113a6318: 91000318 add x24, x24, #0x0
ffff8000113a6318: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a631c: d538d080 mrs x0, tpidr_el1
ffff8000113a6320: 8b180018 add x24, x0, x24
if (sd->completion_queue) {
ffff8000113a6324: f9402f00 ldr x0, [x24,#88]
ffff8000113a6328: b4000460 cbz x0, ffff8000113a63b4 <net_tx_action+0xc0>
asm volatile(ALTERNATIVE(
ffff8000113a632c: d2800c00 mov x0, #0x60 // #96
ffff8000113a6330: d50342df msr daifset, #0x2
asm volatile(ALTERNATIVE(
ffff8000113a6334: d2801c00 mov x0, #0xe0 // #224
clist = sd->completion_queue;
ffff8000113a6338: f9402f14 ldr x20, [x24,#88]
sd->completion_queue = NULL;
ffff8000113a633c: f9002f1f str xzr, [x24,#88]
ffff8000113a6340: d50342ff msr daifclr, #0x2
while (clist) {
ffff8000113a6344: b4000374 cbz x20, ffff8000113a63b0 <net_tx_action+0xbc>
#include <linux/tracepoint.h>
/*
* Tracepoint for free an sk_buff:
*/
TRACE_EVENT(kfree_skb,
ffff8000113a6348: 90000016 adrp x22, 0 <cpu_number>
ffff8000113a6348: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113a634c: 90000017 adrp x23, 0 <__cpu_online_mask>
ffff8000113a634c: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113a6350: 910002d6 add x22, x22, #0x0
ffff8000113a6350: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a6354: 910002f7 add x23, x23, #0x0
ffff8000113a6354: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
TP_printk("skbaddr=%p protocol=%u location=%p",
__entry->skbaddr, __entry->protocol, __entry->location)
);
TRACE_EVENT(consume_skb,
ffff8000113a6358: aa1603f9 mov x25, x22
__READ_ONCE_SIZE;
ffff8000113a635c: b940d680 ldr w0, [x20,#212]
clist = clist->next;
ffff8000113a6360: f9400295 ldr x21, [x20]
WARN_ON(refcount_read(&skb->users));
ffff8000113a6364: 35000da0 cbnz w0, ffff8000113a6518 <net_tx_action+0x224>
if (likely(get_kfree_skb_cb(skb)->reason == SKB_REASON_CONSUMED))
ffff8000113a6368: b9402a80 ldr w0, [x20,#40]
ffff8000113a636c: 35001000 cbnz w0, ffff8000113a656c <net_tx_action+0x278>
ffff8000113a6370: 90000000 adrp x0, 0 <__tracepoint_consume_skb>
ffff8000113a6370: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_consume_skb
ffff8000113a6374: 91000000 add x0, x0, #0x0
ffff8000113a6374: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_consume_skb
ffff8000113a6378: b9400801 ldr w1, [x0,#8]
ffff8000113a637c: 6b1f003f cmp w1, wzr
ffff8000113a6380: 54000d0c b.gt ffff8000113a6520 <net_tx_action+0x22c>
if (skb->fclone != SKB_FCLONE_UNAVAILABLE)
ffff8000113a6384: 3941fa80 ldrb w0, [x20,#126]
ffff8000113a6388: d3420c00 ubfx x0, x0, #2, #2
ffff8000113a638c: 340000c0 cbz w0, ffff8000113a63a4 <net_tx_action+0xb0>
__kfree_skb(skb);
ffff8000113a6390: aa1403e0 mov x0, x20
ffff8000113a6394: 94000000 bl 0 <__kfree_skb>
ffff8000113a6394: R_AARCH64_CALL26 __kfree_skb
while (clist) {
ffff8000113a6398: b40000d5 cbz x21, ffff8000113a63b0 <net_tx_action+0xbc>
ffff8000113a639c: aa1503f4 mov x20, x21
ffff8000113a63a0: 17ffffef b ffff8000113a635c <net_tx_action+0x68>
__kfree_skb_defer(skb);
ffff8000113a63a4: aa1403e0 mov x0, x20
ffff8000113a63a8: 94000000 bl 0 <__kfree_skb_defer>
ffff8000113a63a8: R_AARCH64_CALL26 __kfree_skb_defer
while (clist) {
ffff8000113a63ac: b5ffff95 cbnz x21, ffff8000113a639c <net_tx_action+0xa8>
__kfree_skb_flush();
ffff8000113a63b0: 94000000 bl 0 <__kfree_skb_flush>
ffff8000113a63b0: R_AARCH64_CALL26 __kfree_skb_flush
if (sd->output_queue) {
ffff8000113a63b4: f9402700 ldr x0, [x24,#72]
ffff8000113a63b8: b4000a00 cbz x0, ffff8000113a64f8 <net_tx_action+0x204>
asm volatile(ALTERNATIVE(
ffff8000113a63bc: d2800c00 mov x0, #0x60 // #96
ffff8000113a63c0: d50342df msr daifset, #0x2
sd->output_queue = NULL;
ffff8000113a63c4: aa1803e0 mov x0, x24
head = sd->output_queue;
ffff8000113a63c8: f9402713 ldr x19, [x24,#72]
sd->output_queue = NULL;
ffff8000113a63cc: f8048c1f str xzr, [x0,#72]!
sd->output_queue_tailp = &sd->output_queue;
ffff8000113a63d0: f9002b00 str x0, [x24,#80]
asm volatile(ALTERNATIVE(
ffff8000113a63d4: d2801c00 mov x0, #0xe0 // #224
ffff8000113a63d8: d50342ff msr daifclr, #0x2
while (head) {
ffff8000113a63dc: b40008f3 cbz x19, ffff8000113a64f8 <net_tx_action+0x204>
if (!(q->flags & TCQ_F_NOLOCK)) {
ffff8000113a63e0: b9401260 ldr w0, [x19,#16]
spinlock_t *root_lock = NULL;
ffff8000113a63e4: d2800017 mov x23, #0x0 // #0
ffff8000113a63e8: 5280003a mov w26, #0x1 // #1
ATOMIC64_OPS(andnot, bic, )
ffff8000113a63ec: d2800034 mov x20, #0x1 // #1
smp_store_release(&lock->locked, 0);
ffff8000113a63f0: 2a1703f9 mov w25, w23
head = head->next_sched;
ffff8000113a63f4: f9407276 ldr x22, [x19,#224]
spinlock_t *root_lock = NULL;
ffff8000113a63f8: d2800015 mov x21, #0x0 // #0
if (!(q->flags & TCQ_F_NOLOCK)) {
ffff8000113a63fc: 364004a0 tbz w0, #8, ffff8000113a6490 <net_tx_action+0x19c>
smp_mb__before_atomic();
ffff8000113a6400: d5033bbf dmb ish
ffff8000113a6404: 91036264 add x4, x19, #0xd8
ffff8000113a6408: f9800091 prfm pstl1strm, [x4]
ffff8000113a640c: c85f7c80 ldxr x0, [x4]
ffff8000113a6410: 8a340000 bic x0, x0, x20
ffff8000113a6414: c8017c80 stxr w1, x0, [x4]
ffff8000113a6418: 35ffffa1 cbnz w1, ffff8000113a640c <net_tx_action+0x118>
if (qdisc->flags & TCQ_F_NOLOCK) {
ffff8000113a641c: b9401260 ldr w0, [x19,#16]
ffff8000113a6420: 37400540 tbnz w0, #8, ffff8000113a64c8 <net_tx_action+0x1d4>
ffff8000113a6424: b940c260 ldr w0, [x19,#192]
* masking the LSB. Calling code is responsible for handling that.
*/
static inline unsigned raw_read_seqcount(const seqcount_t *s)
{
unsigned ret = READ_ONCE(s->sequence);
smp_rmb();
ffff8000113a6428: d50339bf dmb ishld
} else if (qdisc_is_running(qdisc)) {
ffff8000113a642c: 37000220 tbnz w0, #0, ffff8000113a6470 <net_tx_action+0x17c>
static inline void raw_write_seqcount_begin(seqcount_t *s)
{
s->sequence++;
ffff8000113a6430: b940c260 ldr w0, [x19,#192]
ffff8000113a6434: 11000400 add w0, w0, #0x1
ffff8000113a6438: b900c260 str w0, [x19,#192]
smp_wmb();
ffff8000113a643c: d5033abf dmb ishst
{
if (qdisc_run_begin(q)) {
/* NOLOCK qdisc must check 'state' under the qdisc seqlock
* to avoid racing with dev_qdisc_reset()
*/
if (!(q->flags & TCQ_F_NOLOCK) ||
ffff8000113a6440: b9401260 ldr w0, [x19,#16]
ffff8000113a6444: 36400060 tbz w0, #8, ffff8000113a6450 <net_tx_action+0x15c>
ffff8000113a6448: f9406e60 ldr x0, [x19,#216]
ffff8000113a644c: 37080060 tbnz w0, #1, ffff8000113a6458 <net_tx_action+0x164>
likely(!test_bit(__QDISC_STATE_DEACTIVATED, &q->state)))
__qdisc_run(q);
ffff8000113a6450: aa1303e0 mov x0, x19
ffff8000113a6454: 94000000 bl 0 <__qdisc_run>
ffff8000113a6454: R_AARCH64_CALL26 __qdisc_run
}
static inline void raw_write_seqcount_end(seqcount_t *s)
{
smp_wmb();
ffff8000113a6458: d5033abf dmb ishst
s->sequence++;
ffff8000113a645c: b940c261 ldr w1, [x19,#192]
if (qdisc->flags & TCQ_F_NOLOCK)
ffff8000113a6460: b9401260 ldr w0, [x19,#16]
ffff8000113a6464: 11000421 add w1, w1, #0x1
ffff8000113a6468: b900c261 str w1, [x19,#192]
ffff8000113a646c: 37400280 tbnz w0, #8, ffff8000113a64bc <net_tx_action+0x1c8>
if (root_lock)
ffff8000113a6470: b4000055 cbz x21, ffff8000113a6478 <net_tx_action+0x184>
ffff8000113a6474: 089ffeb9 stlrb w25, [x21]
while (head) {
ffff8000113a6478: b4000416 cbz x22, ffff8000113a64f8 <net_tx_action+0x204>
ffff8000113a647c: aa1603f3 mov x19, x22
if (!(q->flags & TCQ_F_NOLOCK)) {
ffff8000113a6480: b9401260 ldr w0, [x19,#16]
head = head->next_sched;
ffff8000113a6484: f9407276 ldr x22, [x19,#224]
spinlock_t *root_lock = NULL;
ffff8000113a6488: d2800015 mov x21, #0x0 // #0
if (!(q->flags & TCQ_F_NOLOCK)) {
ffff8000113a648c: 3747fba0 tbnz w0, #8, ffff8000113a6400 <net_tx_action+0x10c>
root_lock = qdisc_lock(q);
ffff8000113a6490: 9102b275 add x21, x19, #0xac
__CMPXCHG_CASE(w, , acq_, 32, , a, , "memory", K)
ffff8000113a6494: f98002b1 prfm pstl1strm, [x21]
ffff8000113a6498: 885ffea1 ldaxr w1, [x21]
ffff8000113a649c: 4a170020 eor w0, w1, w23
ffff8000113a64a0: 35000060 cbnz w0, ffff8000113a64ac <net_tx_action+0x1b8>
ffff8000113a64a4: 88007eba stxr w0, w26, [x21]
ffff8000113a64a8: 35ffff80 cbnz w0, ffff8000113a6498 <net_tx_action+0x1a4>
ffff8000113a64ac: 34fffaa1 cbz w1, ffff8000113a6400 <net_tx_action+0x10c>
queued_spin_lock_slowpath(lock, val);
ffff8000113a64b0: aa1503e0 mov x0, x21
ffff8000113a64b4: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113a64b4: R_AARCH64_CALL26 queued_spin_lock_slowpath
ffff8000113a64b8: 17ffffd2 b ffff8000113a6400 <net_tx_action+0x10c>
smp_store_release(&lock->locked, 0);
ffff8000113a64bc: 91041273 add x19, x19, #0x104
ffff8000113a64c0: 089ffe79 stlrb w25, [x19]
preempt_enable();
ffff8000113a64c4: 17ffffeb b ffff8000113a6470 <net_tx_action+0x17c>
ffff8000113a64c8: b9410660 ldr w0, [x19,#260]
if (unlikely(val))
ffff8000113a64cc: 35ffffc0 cbnz w0, ffff8000113a64c4 <net_tx_action+0x1d0>
ffff8000113a64d0: 91041264 add x4, x19, #0x104
ffff8000113a64d4: f9800091 prfm pstl1strm, [x4]
ffff8000113a64d8: 885ffc81 ldaxr w1, [x4]
ffff8000113a64dc: 4a170022 eor w2, w1, w23
ffff8000113a64e0: 35000062 cbnz w2, ffff8000113a64ec <net_tx_action+0x1f8>
ffff8000113a64e4: 88027c94 stxr w2, w20, [x4]
ffff8000113a64e8: 35ffff82 cbnz w2, ffff8000113a64d8 <net_tx_action+0x1e4>
if (do_raw_spin_trylock(lock)) {
ffff8000113a64ec: 35fffec1 cbnz w1, ffff8000113a64c4 <net_tx_action+0x1d0>
case 1: *(volatile __u8 *)p = *(__u8 *)res; break;
ffff8000113a64f0: 39042260 strb w0, [x19,#264]
ffff8000113a64f4: 17ffffcf b ffff8000113a6430 <net_tx_action+0x13c>
xfrm_dev_backlog(sd);
ffff8000113a64f8: aa1803e0 mov x0, x24
ffff8000113a64fc: 94000000 bl 0 <xfrm_dev_backlog>
ffff8000113a64fc: R_AARCH64_CALL26 xfrm_dev_backlog
}
ffff8000113a6500: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a6504: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a6508: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a650c: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a6510: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113a6514: d65f03c0 ret
WARN_ON(refcount_read(&skb->users));
ffff8000113a6518: d4210000 brk #0x800
ffff8000113a651c: 17ffff93 b ffff8000113a6368 <net_tx_action+0x74>
ffff8000113a6520: d538d081 mrs x1, tpidr_el1
ffff8000113a6524: b8796821 ldr w1, [x1,x25]
ffff8000113a6528: 1100fc22 add w2, w1, #0x3f
ffff8000113a652c: 6b1f003f cmp w1, wzr
ffff8000113a6530: 1a81b042 csel w2, w2, w1, lt
ffff8000113a6534: 13067c42 asr w2, w2, #6
ffff8000113a6538: 937d7c42 sbfiz x2, x2, #3, #32
ffff8000113a653c: f8776842 ldr x2, [x2,x23]
ffff8000113a6540: 9ac12441 lsr x1, x2, x1
ffff8000113a6544: 3607f201 tbz w1, #0, ffff8000113a6384 <net_tx_action+0x90>
__READ_ONCE_SIZE;
ffff8000113a6548: f9401013 ldr x19, [x0,#32]
ffff8000113a654c: b40000f3 cbz x19, ffff8000113a6568 <net_tx_action+0x274>
ffff8000113a6550: f9400262 ldr x2, [x19]
ffff8000113a6554: f9400660 ldr x0, [x19,#8]
ffff8000113a6558: aa1403e1 mov x1, x20
ffff8000113a655c: d63f0040 blr x2
ffff8000113a6560: f8418e62 ldr x2, [x19,#24]!
ffff8000113a6564: b5ffff82 cbnz x2, ffff8000113a6554 <net_tx_action+0x260>
TRACE_EVENT(kfree_skb,
ffff8000113a6568: 17ffff87 b ffff8000113a6384 <net_tx_action+0x90>
ffff8000113a656c: 90000001 adrp x1, 0 <__tracepoint_kfree_skb>
ffff8000113a656c: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_kfree_skb
ffff8000113a6570: 91000021 add x1, x1, #0x0
ffff8000113a6570: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_kfree_skb
ffff8000113a6574: b9400820 ldr w0, [x1,#8]
ffff8000113a6578: 6b1f001f cmp w0, wzr
ffff8000113a657c: 54fff04d b.le ffff8000113a6384 <net_tx_action+0x90>
ffff8000113a6580: d538d080 mrs x0, tpidr_el1
ffff8000113a6584: b8766800 ldr w0, [x0,x22]
ffff8000113a6588: 1100fc02 add w2, w0, #0x3f
ffff8000113a658c: 6b1f001f cmp w0, wzr
ffff8000113a6590: 1a80b042 csel w2, w2, w0, lt
ffff8000113a6594: 13067c42 asr w2, w2, #6
ffff8000113a6598: 937d7c42 sbfiz x2, x2, #3, #32
ffff8000113a659c: f8776842 ldr x2, [x2,x23]
ffff8000113a65a0: 9ac02440 lsr x0, x2, x0
ffff8000113a65a4: 3607ef00 tbz w0, #0, ffff8000113a6384 <net_tx_action+0x90>
ffff8000113a65a8: f9401033 ldr x19, [x1,#32]
ffff8000113a65ac: b4fffdf3 cbz x19, ffff8000113a6568 <net_tx_action+0x274>
ffff8000113a65b0: 9000001a adrp x26, ffff80001139e37c <__my_cpu_offset>
ffff8000113a65b0: R_AARCH64_ADR_PREL_PG_HI21 .text+0x7f78
ffff8000113a65b4: f9400263 ldr x3, [x19]
ffff8000113a65b8: 9100035a add x26, x26, #0x0
ffff8000113a65b8: R_AARCH64_ADD_ABS_LO12_NC .text+0x7f78
ffff8000113a65bc: f9400660 ldr x0, [x19,#8]
ffff8000113a65c0: aa1403e1 mov x1, x20
ffff8000113a65c4: aa1a03e2 mov x2, x26
ffff8000113a65c8: d63f0060 blr x3
ffff8000113a65cc: f8418e63 ldr x3, [x19,#24]!
ffff8000113a65d0: b5ffff63 cbnz x3, ffff8000113a65bc <net_tx_action+0x2c8>
ffff8000113a65d4: 17ffff6c b ffff8000113a6384 <net_tx_action+0x90>
ffff8000113a65d8 <enqueue_to_backlog>:
{
ffff8000113a65d8: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff8000113a65dc: 910003fd mov x29, sp
ffff8000113a65e0: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a65e4: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a65e8: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a65ec: f90023f9 str x25, [sp,#64]
ffff8000113a65f0: aa0003f4 mov x20, x0
ffff8000113a65f4: aa1e03e0 mov x0, x30
ffff8000113a65f8: f9002fa1 str x1, [x29,#88]
ffff8000113a65fc: aa0203f7 mov x23, x2
ffff8000113a6600: 94000000 bl 0 <_mcount>
ffff8000113a6600: R_AARCH64_CALL26 _mcount
sd = &per_cpu(softnet_data, cpu);
ffff8000113a6604: f9402fa1 ldr x1, [x29,#88]
ffff8000113a6608: 90000000 adrp x0, 0 <__per_cpu_offset>
ffff8000113a6608: R_AARCH64_ADR_PREL_PG_HI21 __per_cpu_offset
ffff8000113a660c: 91000000 add x0, x0, #0x0
ffff8000113a660c: R_AARCH64_ADD_ABS_LO12_NC __per_cpu_offset
ffff8000113a6610: f861d813 ldr x19, [x0,w1,sxtw #3]
ffff8000113a6614: 90000016 adrp x22, ffff80001139e37c <__my_cpu_offset>
ffff8000113a6614: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
ffff8000113a6618: 910002c0 add x0, x22, #0x0
ffff8000113a6618: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a661c: 8b130013 add x19, x0, x19
asm volatile(ALTERNATIVE(
ffff8000113a6620: d53b4235 mrs x21, daif
asm volatile(ALTERNATIVE(
ffff8000113a6624: 121902a0 and w0, w21, #0x80
if (!arch_irqs_disabled_flags(flags))
ffff8000113a6628: 35000060 cbnz w0, ffff8000113a6634 <enqueue_to_backlog+0x5c>
asm volatile(ALTERNATIVE(
ffff8000113a662c: d2800c00 mov x0, #0x60 // #96
ffff8000113a6630: d50342df msr daifset, #0x2
ffff8000113a6634: 52800024 mov w4, #0x1 // #1
ffff8000113a6638: 91043260 add x0, x19, #0x10c
ffff8000113a663c: d2800003 mov x3, #0x0 // #0
ffff8000113a6640: f9800011 prfm pstl1strm, [x0]
ffff8000113a6644: 885ffc01 ldaxr w1, [x0]
ffff8000113a6648: 4a030022 eor w2, w1, w3
ffff8000113a664c: 35000062 cbnz w2, ffff8000113a6658 <enqueue_to_backlog+0x80>
ffff8000113a6650: 88027c04 stxr w2, w4, [x0]
ffff8000113a6654: 35ffff82 cbnz w2, ffff8000113a6644 <enqueue_to_backlog+0x6c>
ffff8000113a6658: 35001001 cbnz w1, ffff8000113a6858 <enqueue_to_backlog+0x280>
if (!netif_running(skb->dev))
ffff8000113a665c: f9400a80 ldr x0, [x20,#16]
ffff8000113a6660: f9402000 ldr x0, [x0,#64]
ffff8000113a6664: 360000c0 tbz w0, #0, ffff8000113a667c <enqueue_to_backlog+0xa4>
if (qlen <= netdev_max_backlog && !skb_flow_limit(skb, qlen)) {
ffff8000113a6668: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a6668: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly+0x948
qlen = skb_queue_len(&sd->input_pkt_queue);
ffff8000113a666c: b9410a78 ldr w24, [x19,#264]
if (qlen <= netdev_max_backlog && !skb_flow_limit(skb, qlen)) {
ffff8000113a6670: b9400000 ldr w0, [x0]
ffff8000113a6670: R_AARCH64_LDST32_ABS_LO12_NC .data..read_mostly+0x948
ffff8000113a6674: 6b00031f cmp w24, w0
ffff8000113a6678: 54000309 b.ls ffff8000113a66d8 <enqueue_to_backlog+0x100>
sd->dropped++;
ffff8000113a667c: b940f260 ldr w0, [x19,#240]
smp_store_release(&lock->locked, 0);
ffff8000113a6680: 91043273 add x19, x19, #0x10c
ffff8000113a6684: 11000400 add w0, w0, #0x1
ffff8000113a6688: b81e4260 stur w0, [x19,#-28]
ffff8000113a668c: 52800000 mov w0, #0x0 // #0
ffff8000113a6690: 089ffe60 stlrb w0, [x19]
asm volatile(ALTERNATIVE(
ffff8000113a6694: d51b4235 msr daif, x21
atomic_long_inc(&skb->dev->rx_dropped);
ffff8000113a6698: f9400a81 ldr x1, [x20,#16]
ATOMIC64_OPS(add, add, I)
ffff8000113a669c: 91070024 add x4, x1, #0x1c0
ffff8000113a66a0: f9800091 prfm pstl1strm, [x4]
ffff8000113a66a4: c85f7c80 ldxr x0, [x4]
ffff8000113a66a8: 91000400 add x0, x0, #0x1
ffff8000113a66ac: c8027c80 stxr w2, x0, [x4]
ffff8000113a66b0: 35ffffa2 cbnz w2, ffff8000113a66a4 <enqueue_to_backlog+0xcc>
kfree_skb(skb);
ffff8000113a66b4: aa1403e0 mov x0, x20
ffff8000113a66b8: 94000000 bl 0 <kfree_skb>
ffff8000113a66b8: R_AARCH64_CALL26 kfree_skb
}
ffff8000113a66bc: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a66c0: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a66c4: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a66c8: f94023f9 ldr x25, [sp,#64]
return NET_RX_DROP;
ffff8000113a66cc: 52800020 mov w0, #0x1 // #1
}
ffff8000113a66d0: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113a66d4: d65f03c0 ret
if (qlen < (netdev_max_backlog >> 1))
ffff8000113a66d8: 6b80071f cmp w24, w0, asr #1
ffff8000113a66dc: 540003c2 b.cs ffff8000113a6754 <enqueue_to_backlog+0x17c>
if (qlen) {
ffff8000113a66e0: 350000b8 cbnz w24, ffff8000113a66f4 <enqueue_to_backlog+0x11c>
unsigned long old = *p;
ffff8000113a66e4: f9409260 ldr x0, [x19,#288]
*p = old | mask;
ffff8000113a66e8: b2400001 orr x1, x0, #0x1
ffff8000113a66ec: f9009261 str x1, [x19,#288]
if (!__test_and_set_bit(NAPI_STATE_SCHED, &sd->backlog.state)) {
ffff8000113a66f0: 360007a0 tbz w0, #0, ffff8000113a67e4 <enqueue_to_backlog+0x20c>
__skb_insert(newsk, next->prev, next, list);
ffff8000113a66f4: f9408260 ldr x0, [x19,#256]
ffff8000113a66f8: 9103e261 add x1, x19, #0xf8
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a66fc: f9000281 str x1, [x20]
ffff8000113a6700: f9000680 str x0, [x20,#8]
ffff8000113a6704: f9008274 str x20, [x19,#256]
ffff8000113a6708: f9000014 str x20, [x0]
list->qlen++;
ffff8000113a670c: b9410a61 ldr w1, [x19,#264]
*qtail = ++sd->input_queue_tail;
ffff8000113a6710: b940ee60 ldr w0, [x19,#236]
ffff8000113a6714: 11000421 add w1, w1, #0x1
ffff8000113a6718: 11000400 add w0, w0, #0x1
ffff8000113a671c: b900ee60 str w0, [x19,#236]
ffff8000113a6720: b9010a61 str w1, [x19,#264]
ffff8000113a6724: b90002e0 str w0, [x23]
ffff8000113a6728: 91043273 add x19, x19, #0x10c
ffff8000113a672c: 52800000 mov w0, #0x0 // #0
ffff8000113a6730: 089ffe60 stlrb w0, [x19]
ffff8000113a6734: d51b4235 msr daif, x21
}
ffff8000113a6738: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a673c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a6740: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a6744: f94023f9 ldr x25, [sp,#64]
return NET_RX_SUCCESS;
ffff8000113a6748: 52800000 mov w0, #0x0 // #0
}
ffff8000113a674c: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113a6750: d65f03c0 ret
sd = this_cpu_ptr(&softnet_data);
ffff8000113a6754: 910002c0 add x0, x22, #0x0
ffff8000113a6754: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a6758: d538d081 mrs x1, tpidr_el1
ffff8000113a675c: 8b000020 add x0, x1, x0
__READ_ONCE_SIZE;
ffff8000113a6760: f9402019 ldr x25, [x0,#64]
if (fl) {
ffff8000113a6764: b4000379 cbz x25, ffff8000113a67d0 <enqueue_to_backlog+0x1f8>
if (!skb->l4_hash && !skb->sw_hash)
ffff8000113a6768: 39420680 ldrb w0, [x20,#129]
ffff8000113a676c: 12000400 and w0, w0, #0x3
ffff8000113a6770: 34000500 cbz w0, ffff8000113a6810 <enqueue_to_backlog+0x238>
old_flow = fl->history[fl->history_head];
ffff8000113a6774: b9400f23 ldr w3, [x25,#12]
new_flow = skb_get_hash(skb) & (fl->num_buckets - 1);
ffff8000113a6778: b9400b21 ldr w1, [x25,#8]
ffff8000113a677c: b9409684 ldr w4, [x20,#148]
ffff8000113a6780: 8b234722 add x2, x25, w3, uxtw #1
ffff8000113a6784: 51000421 sub w1, w1, #0x1
old_flow = fl->history[fl->history_head];
ffff8000113a6788: 79402040 ldrh w0, [x2,#16]
new_flow = skb_get_hash(skb) & (fl->num_buckets - 1);
ffff8000113a678c: 0a040021 and w1, w1, w4
fl->history_head++;
ffff8000113a6790: 11000463 add w3, w3, #0x1
fl->history[fl->history_head] = new_flow;
ffff8000113a6794: 79002041 strh w1, [x2,#16]
fl->history_head &= FLOW_LIMIT_HISTORY - 1;
ffff8000113a6798: 12001863 and w3, w3, #0x7f
ffff8000113a679c: b9000f23 str w3, [x25,#12]
if (likely(fl->buckets[old_flow]))
ffff8000113a67a0: 8b202320 add x0, x25, w0, uxth
ffff8000113a67a4: 39444002 ldrb w2, [x0,#272]
ffff8000113a67a8: 34000062 cbz w2, ffff8000113a67b4 <enqueue_to_backlog+0x1dc>
fl->buckets[old_flow]--;
ffff8000113a67ac: 51000442 sub w2, w2, #0x1
ffff8000113a67b0: 39044002 strb w2, [x0,#272]
if (++fl->buckets[new_flow] > (FLOW_LIMIT_HISTORY >> 1)) {
ffff8000113a67b4: 8b214321 add x1, x25, w1, uxtw
ffff8000113a67b8: 39444020 ldrb w0, [x1,#272]
ffff8000113a67bc: 11000400 add w0, w0, #0x1
ffff8000113a67c0: 53001c00 uxtb w0, w0
ffff8000113a67c4: 39044020 strb w0, [x1,#272]
ffff8000113a67c8: 7101001f cmp w0, #0x40
ffff8000113a67cc: 54000048 b.hi ffff8000113a67d4 <enqueue_to_backlog+0x1fc>
preempt_disable();
}
static inline void __rcu_read_unlock(void)
{
preempt_enable();
ffff8000113a67d0: 17ffffc4 b ffff8000113a66e0 <enqueue_to_backlog+0x108>
fl->count++;
ffff8000113a67d4: f9400320 ldr x0, [x25]
ffff8000113a67d8: 91000400 add x0, x0, #0x1
ffff8000113a67dc: f9000320 str x0, [x25]
ffff8000113a67e0: 17ffffa7 b ffff8000113a667c <enqueue_to_backlog+0xa4>
struct softnet_data *mysd = this_cpu_ptr(&softnet_data);
ffff8000113a67e4: 910002d6 add x22, x22, #0x0
ffff8000113a67e4: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a67e8: d538d080 mrs x0, tpidr_el1
ffff8000113a67ec: 8b160016 add x22, x0, x22
if (sd != mysd) {
ffff8000113a67f0: eb16027f cmp x19, x22
ffff8000113a67f4: 54000140 b.eq ffff8000113a681c <enqueue_to_backlog+0x244>
sd->rps_ipi_next = mysd->rps_ipi_list;
ffff8000113a67f8: f9401ec1 ldr x1, [x22,#56]
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
ffff8000113a67fc: 52800060 mov w0, #0x3 // #3
sd->rps_ipi_next = mysd->rps_ipi_list;
ffff8000113a6800: f9007261 str x1, [x19,#224]
mysd->rps_ipi_list = sd;
ffff8000113a6804: f9001ed3 str x19, [x22,#56]
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
ffff8000113a6808: 94000000 bl 0 <__raise_softirq_irqoff>
ffff8000113a6808: R_AARCH64_CALL26 __raise_softirq_irqoff
ffff8000113a680c: 17ffffba b ffff8000113a66f4 <enqueue_to_backlog+0x11c>
__skb_get_hash(skb);
ffff8000113a6810: aa1403e0 mov x0, x20
ffff8000113a6814: 94000000 bl 0 <__skb_get_hash>
ffff8000113a6814: R_AARCH64_CALL26 __skb_get_hash
ffff8000113a6818: 17ffffd7 b ffff8000113a6774 <enqueue_to_backlog+0x19c>
__list_add(new, head->prev, head);
ffff8000113a681c: f9400678 ldr x24, [x19,#8]
list_add_tail(&napi->poll_list, &sd->poll_list);
ffff8000113a6820: 91044276 add x22, x19, #0x110
if (!__list_add_valid(new, prev, next))
ffff8000113a6824: aa1603e0 mov x0, x22
ffff8000113a6828: aa1803e1 mov x1, x24
ffff8000113a682c: aa1303e2 mov x2, x19
ffff8000113a6830: 94000000 bl 0 <__list_add_valid>
ffff8000113a6830: R_AARCH64_CALL26 __list_add_valid
ffff8000113a6834: 53001c00 uxtb w0, w0
ffff8000113a6838: 340000a0 cbz w0, ffff8000113a684c <enqueue_to_backlog+0x274>
next->prev = new;
ffff8000113a683c: f9000676 str x22, [x19,#8]
new->next = next;
ffff8000113a6840: f9008a73 str x19, [x19,#272]
new->prev = prev;
ffff8000113a6844: f90006d8 str x24, [x22,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a6848: f9000316 str x22, [x24]
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
ffff8000113a684c: 52800060 mov w0, #0x3 // #3
ffff8000113a6850: 94000000 bl 0 <__raise_softirq_irqoff>
ffff8000113a6850: R_AARCH64_CALL26 __raise_softirq_irqoff
ffff8000113a6854: 17ffffa8 b ffff8000113a66f4 <enqueue_to_backlog+0x11c>
queued_spin_lock_slowpath(lock, val);
ffff8000113a6858: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113a6858: R_AARCH64_CALL26 queued_spin_lock_slowpath
ffff8000113a685c: 17ffff80 b ffff8000113a665c <enqueue_to_backlog+0x84>
ffff8000113a6860 <netif_rx_internal>:
{
ffff8000113a6860: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113a6864: 910003fd mov x29, sp
ffff8000113a6868: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a686c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a6870: aa0003f4 mov x20, x0
ffff8000113a6874: aa1e03e0 mov x0, x30
ffff8000113a6878: 94000000 bl 0 <_mcount>
ffff8000113a6878: R_AARCH64_CALL26 _mcount
ffff8000113a687c: 90000015 adrp x21, 0 <__stack_chk_guard>
ffff8000113a687c: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a6880: f94002a0 ldr x0, [x21]
ffff8000113a6880: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a6884: 90000016 adrp x22, ffff80001139e37c <__my_cpu_offset>
ffff8000113a6884: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a6888: f90027a0 str x0, [x29,#72]
__READ_ONCE_SIZE;
ffff8000113a688c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a688c: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a6890: 91000000 add x0, x0, #0x0
ffff8000113a6890: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a6894: b9434800 ldr w0, [x0,#840]
net_timestamp_check(netdev_tstamp_prequeue, skb);
ffff8000113a6898: 6b1f001f cmp w0, wzr
ffff8000113a689c: 5400078c b.gt ffff8000113a698c <netif_rx_internal+0x12c>
ffff8000113a68a0: 90000000 adrp x0, 0 <__tracepoint_netif_rx>
ffff8000113a68a0: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_netif_rx
ffff8000113a68a4: 91000000 add x0, x0, #0x0
ffff8000113a68a4: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_netif_rx
ffff8000113a68a8: b9400801 ldr w1, [x0,#8]
ffff8000113a68ac: 6b1f003f cmp w1, wzr
ffff8000113a68b0: 5400044c b.gt ffff8000113a6938 <netif_rx_internal+0xd8>
ffff8000113a68b4: 910002d6 add x22, x22, #0x0
ffff8000113a68b4: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a68b8: b94952c0 ldr w0, [x22,#2384]
if (static_branch_unlikely(&rps_needed)) {
ffff8000113a68bc: 6b1f001f cmp w0, wzr
ffff8000113a68c0: 5400022c b.gt ffff8000113a6904 <netif_rx_internal+0xa4>
ret = enqueue_to_backlog(skb, get_cpu(), &qtail);
ffff8000113a68c4: 90000000 adrp x0, 0 <cpu_number>
ffff8000113a68c4: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113a68c8: d538d081 mrs x1, tpidr_el1
ffff8000113a68cc: 91000000 add x0, x0, #0x0
ffff8000113a68cc: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a68d0: b8606821 ldr w1, [x1,x0]
ffff8000113a68d4: 910103a2 add x2, x29, #0x40
ffff8000113a68d8: aa1403e0 mov x0, x20
ffff8000113a68dc: 97ffff3f bl ffff8000113a65d8 <enqueue_to_backlog>
}
ffff8000113a68e0: f94027a2 ldr x2, [x29,#72]
ffff8000113a68e4: f94002a1 ldr x1, [x21]
ffff8000113a68e4: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a68e8: eb01005f cmp x2, x1
ffff8000113a68ec: 540000a1 b.ne ffff8000113a6900 <netif_rx_internal+0xa0>
ffff8000113a68f0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a68f4: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a68f8: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113a68fc: d65f03c0 ret
ffff8000113a6900: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a6900: R_AARCH64_CALL26 __stack_chk_fail
struct rps_dev_flow voidflow, *rflow = &voidflow;
ffff8000113a6904: 910143a2 add x2, x29, #0x50
ffff8000113a6908: 9100e3a0 add x0, x29, #0x38
ffff8000113a690c: f81f0c40 str x0, [x2,#-16]!
cpu = get_rps_cpu(skb->dev, skb, &rflow);
ffff8000113a6910: f9400a80 ldr x0, [x20,#16]
ffff8000113a6914: aa1403e1 mov x1, x20
ffff8000113a6918: 97ffe7dc bl ffff8000113a0888 <get_rps_cpu>
ffff8000113a691c: 2a0003e1 mov w1, w0
if (cpu < 0)
ffff8000113a6920: 37f80461 tbnz w1, #31, ffff8000113a69ac <netif_rx_internal+0x14c>
ret = enqueue_to_backlog(skb, cpu, &rflow->last_qtail);
ffff8000113a6924: f94023a2 ldr x2, [x29,#64]
ffff8000113a6928: aa1403e0 mov x0, x20
ffff8000113a692c: 91001042 add x2, x2, #0x4
ffff8000113a6930: 97ffff2a bl ffff8000113a65d8 <enqueue_to_backlog>
preempt_enable();
ffff8000113a6934: 17ffffeb b ffff8000113a68e0 <netif_rx_internal+0x80>
TP_PROTO(struct sk_buff *skb),
TP_ARGS(skb)
);
DEFINE_EVENT(net_dev_template, netif_rx,
ffff8000113a6938: 90000001 adrp x1, 0 <cpu_number>
ffff8000113a6938: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113a693c: d538d082 mrs x2, tpidr_el1
ffff8000113a6940: 91000021 add x1, x1, #0x0
ffff8000113a6940: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a6944: b8616841 ldr w1, [x2,x1]
return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
ffff8000113a6948: 52800803 mov w3, #0x40 // #64
ffff8000113a694c: 1ac30c23 sdiv w3, w1, w3
ffff8000113a6950: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113a6950: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113a6954: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113a6958: 91000042 add x2, x2, #0x0
ffff8000113a6958: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113a695c: f8626862 ldr x2, [x3,x2]
ffff8000113a6960: 9ac12441 lsr x1, x2, x1
ffff8000113a6964: 3607fa81 tbz w1, #0, ffff8000113a68b4 <netif_rx_internal+0x54>
ffff8000113a6968: f9401013 ldr x19, [x0,#32]
ffff8000113a696c: b40000f3 cbz x19, ffff8000113a6988 <netif_rx_internal+0x128>
ffff8000113a6970: f9400262 ldr x2, [x19]
ffff8000113a6974: f9400660 ldr x0, [x19,#8]
ffff8000113a6978: aa1403e1 mov x1, x20
ffff8000113a697c: d63f0040 blr x2
ffff8000113a6980: f8418e62 ldr x2, [x19,#24]!
ffff8000113a6984: b5ffff82 cbnz x2, ffff8000113a6974 <netif_rx_internal+0x114>
ffff8000113a6988: 17ffffcb b ffff8000113a68b4 <netif_rx_internal+0x54>
net_timestamp_check(netdev_tstamp_prequeue, skb);
ffff8000113a698c: 910002c0 add x0, x22, #0x0
ffff8000113a698c: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a6990: b9494c00 ldr w0, [x0,#2380]
ffff8000113a6994: 34fff860 cbz w0, ffff8000113a68a0 <netif_rx_internal+0x40>
ffff8000113a6998: f9401280 ldr x0, [x20,#32]
ffff8000113a699c: b5fff820 cbnz x0, ffff8000113a68a0 <netif_rx_internal+0x40>
ffff8000113a69a0: 94000000 bl 0 <ktime_get_with_offset>
ffff8000113a69a0: R_AARCH64_CALL26 ktime_get_with_offset
skb->tstamp = ktime_get_real();
ffff8000113a69a4: f9001280 str x0, [x20,#32]
ffff8000113a69a8: 17ffffbe b ffff8000113a68a0 <netif_rx_internal+0x40>
cpu = smp_processor_id();
ffff8000113a69ac: 90000013 adrp x19, 0 <cpu_number>
ffff8000113a69ac: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113a69b0: 97ffde73 bl ffff80001139e37c <__my_cpu_offset>
ffff8000113a69b4: 91000273 add x19, x19, #0x0
ffff8000113a69b4: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a69b8: b8736801 ldr w1, [x0,x19]
ffff8000113a69bc: 17ffffda b ffff8000113a6924 <netif_rx_internal+0xc4>
ffff8000113a69c0 <dev_forward_skb>:
{
ffff8000113a69c0: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a69c4: 910003fd mov x29, sp
ffff8000113a69c8: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a69cc: aa0003f4 mov x20, x0
ffff8000113a69d0: aa1e03e0 mov x0, x30
ffff8000113a69d4: aa0103f3 mov x19, x1
ffff8000113a69d8: 94000000 bl 0 <_mcount>
ffff8000113a69d8: R_AARCH64_CALL26 _mcount
return __dev_forward_skb(dev, skb) ?: netif_rx_internal(skb);
ffff8000113a69dc: aa1403e0 mov x0, x20
ffff8000113a69e0: aa1303e1 mov x1, x19
ffff8000113a69e4: 94000000 bl ffff8000113a2050 <__dev_forward_skb>
ffff8000113a69e4: R_AARCH64_CALL26 __dev_forward_skb
ffff8000113a69e8: 35000060 cbnz w0, ffff8000113a69f4 <dev_forward_skb+0x34>
ffff8000113a69ec: aa1303e0 mov x0, x19
ffff8000113a69f0: 97ffff9c bl ffff8000113a6860 <netif_rx_internal>
}
ffff8000113a69f4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a69f8: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a69fc: d65f03c0 ret
ffff8000113a6a00 <netif_rx>:
{
ffff8000113a6a00: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a6a04: 910003fd mov x29, sp
ffff8000113a6a08: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a6a0c: aa0003f4 mov x20, x0
ffff8000113a6a10: aa1e03e0 mov x0, x30
ffff8000113a6a14: 94000000 bl 0 <_mcount>
ffff8000113a6a14: R_AARCH64_CALL26 _mcount
ffff8000113a6a18: 90000000 adrp x0, 0 <__tracepoint_netif_rx_entry>
ffff8000113a6a18: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_netif_rx_entry
ffff8000113a6a1c: 91000000 add x0, x0, #0x0
ffff8000113a6a1c: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_netif_rx_entry
ffff8000113a6a20: b9400801 ldr w1, [x0,#8]
ffff8000113a6a24: 6b1f003f cmp w1, wzr
ffff8000113a6a28: 540001ac b.gt ffff8000113a6a5c <netif_rx+0x5c>
ret = netif_rx_internal(skb);
ffff8000113a6a2c: aa1403e0 mov x0, x20
ffff8000113a6a30: 97ffff8c bl ffff8000113a6860 <netif_rx_internal>
ffff8000113a6a34: 2a0003f4 mov w20, w0
ffff8000113a6a38: 90000000 adrp x0, 0 <__tracepoint_netif_rx_exit>
ffff8000113a6a38: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_netif_rx_exit
ffff8000113a6a3c: 91000000 add x0, x0, #0x0
ffff8000113a6a3c: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_netif_rx_exit
ffff8000113a6a40: b9400801 ldr w1, [x0,#8]
ffff8000113a6a44: 6b1f003f cmp w1, wzr
ffff8000113a6a48: 5400034c b.gt ffff8000113a6ab0 <netif_rx+0xb0>
}
ffff8000113a6a4c: 2a1403e0 mov w0, w20
ffff8000113a6a50: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a6a54: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a6a58: d65f03c0 ret
TP_PROTO(const struct sk_buff *skb),
TP_ARGS(skb)
);
DEFINE_EVENT(net_dev_rx_verbose_template, netif_rx_entry,
ffff8000113a6a5c: 90000001 adrp x1, 0 <cpu_number>
ffff8000113a6a5c: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113a6a60: d538d082 mrs x2, tpidr_el1
ffff8000113a6a64: 91000021 add x1, x1, #0x0
ffff8000113a6a64: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a6a68: b8616841 ldr w1, [x2,x1]
ffff8000113a6a6c: 52800803 mov w3, #0x40 // #64
ffff8000113a6a70: 1ac30c23 sdiv w3, w1, w3
ffff8000113a6a74: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113a6a74: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113a6a78: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113a6a7c: 91000042 add x2, x2, #0x0
ffff8000113a6a7c: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113a6a80: f8626862 ldr x2, [x3,x2]
ffff8000113a6a84: 9ac12441 lsr x1, x2, x1
ffff8000113a6a88: 3607fd21 tbz w1, #0, ffff8000113a6a2c <netif_rx+0x2c>
ffff8000113a6a8c: f9401013 ldr x19, [x0,#32]
ffff8000113a6a90: b40000f3 cbz x19, ffff8000113a6aac <netif_rx+0xac>
ffff8000113a6a94: f9400262 ldr x2, [x19]
ffff8000113a6a98: f9400660 ldr x0, [x19,#8]
ffff8000113a6a9c: aa1403e1 mov x1, x20
ffff8000113a6aa0: d63f0040 blr x2
ffff8000113a6aa4: f8418e62 ldr x2, [x19,#24]!
ffff8000113a6aa8: b5ffff82 cbnz x2, ffff8000113a6a98 <netif_rx+0x98>
ffff8000113a6aac: 17ffffe0 b ffff8000113a6a2c <netif_rx+0x2c>
TP_PROTO(int ret),
TP_ARGS(ret)
);
DEFINE_EVENT(net_dev_rx_exit_template, netif_rx_exit,
ffff8000113a6ab0: 90000001 adrp x1, 0 <cpu_number>
ffff8000113a6ab0: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113a6ab4: d538d082 mrs x2, tpidr_el1
ffff8000113a6ab8: 91000021 add x1, x1, #0x0
ffff8000113a6ab8: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a6abc: b8616841 ldr w1, [x2,x1]
ffff8000113a6ac0: 52800803 mov w3, #0x40 // #64
ffff8000113a6ac4: 1ac30c23 sdiv w3, w1, w3
ffff8000113a6ac8: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113a6ac8: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113a6acc: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113a6ad0: 91000042 add x2, x2, #0x0
ffff8000113a6ad0: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113a6ad4: f8626862 ldr x2, [x3,x2]
ffff8000113a6ad8: 9ac12441 lsr x1, x2, x1
ffff8000113a6adc: 3607fb81 tbz w1, #0, ffff8000113a6a4c <netif_rx+0x4c>
ffff8000113a6ae0: f9401013 ldr x19, [x0,#32]
ffff8000113a6ae4: b40000f3 cbz x19, ffff8000113a6b00 <netif_rx+0x100>
ffff8000113a6ae8: f9400262 ldr x2, [x19]
ffff8000113a6aec: f9400660 ldr x0, [x19,#8]
ffff8000113a6af0: 2a1403e1 mov w1, w20
ffff8000113a6af4: d63f0040 blr x2
ffff8000113a6af8: f8418e62 ldr x2, [x19,#24]!
ffff8000113a6afc: b5ffff82 cbnz x2, ffff8000113a6aec <netif_rx+0xec>
ffff8000113a6b00: 2a1403e0 mov w0, w20
ffff8000113a6b04: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a6b08: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a6b0c: d65f03c0 ret
ffff8000113a6b10 <netif_rx_ni>:
{
ffff8000113a6b10: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a6b14: 910003fd mov x29, sp
ffff8000113a6b18: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a6b1c: aa0003f4 mov x20, x0
ffff8000113a6b20: aa1e03e0 mov x0, x30
ffff8000113a6b24: 94000000 bl 0 <_mcount>
ffff8000113a6b24: R_AARCH64_CALL26 _mcount
ffff8000113a6b28: 90000000 adrp x0, 0 <__tracepoint_netif_rx_ni_entry>
ffff8000113a6b28: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_netif_rx_ni_entry
ffff8000113a6b2c: 91000000 add x0, x0, #0x0
ffff8000113a6b2c: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_netif_rx_ni_entry
ffff8000113a6b30: b9400801 ldr w1, [x0,#8]
ffff8000113a6b34: 6b1f003f cmp w1, wzr
ffff8000113a6b38: 5400026c b.gt ffff8000113a6b84 <netif_rx_ni+0x74>
err = netif_rx_internal(skb);
ffff8000113a6b3c: aa1403e0 mov x0, x20
ffff8000113a6b40: 97ffff48 bl ffff8000113a6860 <netif_rx_internal>
ffff8000113a6b44: 2a0003f4 mov w20, w0
if (local_softirq_pending())
ffff8000113a6b48: 90000000 adrp x0, 0 <irq_stat>
ffff8000113a6b48: R_AARCH64_ADR_PREL_PG_HI21 irq_stat
ffff8000113a6b4c: 91000000 add x0, x0, #0x0
ffff8000113a6b4c: R_AARCH64_ADD_ABS_LO12_NC irq_stat
ffff8000113a6b50: d538d081 mrs x1, tpidr_el1
ffff8000113a6b54: b8606820 ldr w0, [x1,x0]
ffff8000113a6b58: 34000040 cbz w0, ffff8000113a6b60 <netif_rx_ni+0x50>
do_softirq();
ffff8000113a6b5c: 94000000 bl 0 <do_softirq>
ffff8000113a6b5c: R_AARCH64_CALL26 do_softirq
ffff8000113a6b60: 90000000 adrp x0, 0 <__tracepoint_netif_rx_ni_exit>
ffff8000113a6b60: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_netif_rx_ni_exit
ffff8000113a6b64: 91000000 add x0, x0, #0x0
ffff8000113a6b64: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_netif_rx_ni_exit
ffff8000113a6b68: b9400801 ldr w1, [x0,#8]
ffff8000113a6b6c: 6b1f003f cmp w1, wzr
ffff8000113a6b70: 5400034c b.gt ffff8000113a6bd8 <netif_rx_ni+0xc8>
}
ffff8000113a6b74: 2a1403e0 mov w0, w20
ffff8000113a6b78: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a6b7c: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a6b80: d65f03c0 ret
DEFINE_EVENT(net_dev_rx_verbose_template, netif_rx_ni_entry,
ffff8000113a6b84: 90000001 adrp x1, 0 <cpu_number>
ffff8000113a6b84: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113a6b88: d538d082 mrs x2, tpidr_el1
ffff8000113a6b8c: 91000021 add x1, x1, #0x0
ffff8000113a6b8c: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a6b90: b8616841 ldr w1, [x2,x1]
ffff8000113a6b94: 52800803 mov w3, #0x40 // #64
ffff8000113a6b98: 1ac30c23 sdiv w3, w1, w3
ffff8000113a6b9c: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113a6b9c: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113a6ba0: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113a6ba4: 91000042 add x2, x2, #0x0
ffff8000113a6ba4: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113a6ba8: f8626862 ldr x2, [x3,x2]
ffff8000113a6bac: 9ac12441 lsr x1, x2, x1
ffff8000113a6bb0: 3607fc61 tbz w1, #0, ffff8000113a6b3c <netif_rx_ni+0x2c>
ffff8000113a6bb4: f9401013 ldr x19, [x0,#32]
ffff8000113a6bb8: b40000f3 cbz x19, ffff8000113a6bd4 <netif_rx_ni+0xc4>
ffff8000113a6bbc: f9400262 ldr x2, [x19]
ffff8000113a6bc0: f9400660 ldr x0, [x19,#8]
ffff8000113a6bc4: aa1403e1 mov x1, x20
ffff8000113a6bc8: d63f0040 blr x2
ffff8000113a6bcc: f8418e62 ldr x2, [x19,#24]!
ffff8000113a6bd0: b5ffff82 cbnz x2, ffff8000113a6bc0 <netif_rx_ni+0xb0>
ffff8000113a6bd4: 17ffffda b ffff8000113a6b3c <netif_rx_ni+0x2c>
TP_PROTO(int ret),
TP_ARGS(ret)
);
DEFINE_EVENT(net_dev_rx_exit_template, netif_rx_ni_exit,
ffff8000113a6bd8: 90000001 adrp x1, 0 <cpu_number>
ffff8000113a6bd8: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113a6bdc: d538d082 mrs x2, tpidr_el1
ffff8000113a6be0: 91000021 add x1, x1, #0x0
ffff8000113a6be0: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a6be4: b8616841 ldr w1, [x2,x1]
ffff8000113a6be8: 52800803 mov w3, #0x40 // #64
ffff8000113a6bec: 1ac30c23 sdiv w3, w1, w3
ffff8000113a6bf0: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113a6bf0: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113a6bf4: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113a6bf8: 91000042 add x2, x2, #0x0
ffff8000113a6bf8: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113a6bfc: f8626862 ldr x2, [x3,x2]
ffff8000113a6c00: 9ac12441 lsr x1, x2, x1
ffff8000113a6c04: 3607fb81 tbz w1, #0, ffff8000113a6b74 <netif_rx_ni+0x64>
ffff8000113a6c08: f9401013 ldr x19, [x0,#32]
ffff8000113a6c0c: b40000f3 cbz x19, ffff8000113a6c28 <netif_rx_ni+0x118>
ffff8000113a6c10: f9400262 ldr x2, [x19]
ffff8000113a6c14: f9400660 ldr x0, [x19,#8]
ffff8000113a6c18: 2a1403e1 mov w1, w20
ffff8000113a6c1c: d63f0040 blr x2
ffff8000113a6c20: f8418e62 ldr x2, [x19,#24]!
ffff8000113a6c24: b5ffff82 cbnz x2, ffff8000113a6c14 <netif_rx_ni+0x104>
ffff8000113a6c28: 2a1403e0 mov w0, w20
ffff8000113a6c2c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a6c30: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a6c34: d65f03c0 ret
ffff8000113a6c38 <dev_loopback_xmit>:
{
ffff8000113a6c38: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a6c3c: 910003fd mov x29, sp
ffff8000113a6c40: aa1e03e0 mov x0, x30
ffff8000113a6c44: f9000fa2 str x2, [x29,#24]
ffff8000113a6c48: 94000000 bl 0 <_mcount>
ffff8000113a6c48: R_AARCH64_CALL26 _mcount
skb->mac_header = skb->data - skb->head;
ffff8000113a6c4c: f9400fa2 ldr x2, [x29,#24]
ffff8000113a6c50: f9406044 ldr x4, [x2,#192]
return skb->head + skb->network_header;
ffff8000113a6c54: 79416843 ldrh w3, [x2,#180]
skb->mac_header = skb->data - skb->head;
ffff8000113a6c58: f9406440 ldr x0, [x2,#200]
skb->len -= len;
ffff8000113a6c5c: b9407041 ldr w1, [x2,#112]
return skb->head + skb->network_header;
ffff8000113a6c60: 8b030083 add x3, x4, x3
return skb_network_header(skb) - skb->data;
ffff8000113a6c64: cb000063 sub x3, x3, x0
BUG_ON(skb->len < skb->data_len);
ffff8000113a6c68: b9407445 ldr w5, [x2,#116]
skb->len -= len;
ffff8000113a6c6c: 4b030021 sub w1, w1, w3
skb->mac_header = skb->data - skb->head;
ffff8000113a6c70: cb040004 sub x4, x0, x4
ffff8000113a6c74: 79016c44 strh w4, [x2,#182]
skb->len -= len;
ffff8000113a6c78: b9007041 str w1, [x2,#112]
BUG_ON(skb->len < skb->data_len);
ffff8000113a6c7c: 6b05003f cmp w1, w5
ffff8000113a6c80: 54000683 b.cc ffff8000113a6d50 <dev_loopback_xmit+0x118>
skb->pkt_type = PACKET_LOOPBACK;
ffff8000113a6c84: 39420041 ldrb w1, [x2,#128]
ffff8000113a6c88: 528000a4 mov w4, #0x5 // #5
return skb->data += len;
ffff8000113a6c8c: 8b234000 add x0, x0, w3, uxtw
ffff8000113a6c90: 33000881 bfxil w1, w4, #0, #3
skb->ip_summed = CHECKSUM_UNNECESSARY;
ffff8000113a6c94: 52800023 mov w3, #0x1 // #1
int dev_loopback_xmit(struct net *net, struct sock *sk, struct sk_buff *skb)
ffff8000113a6c98: f9402c44 ldr x4, [x2,#88]
skb->ip_summed = CHECKSUM_UNNECESSARY;
ffff8000113a6c9c: 331b0461 bfi w1, w3, #5, #2
ffff8000113a6ca0: f9006440 str x0, [x2,#200]
ffff8000113a6ca4: 39020041 strb w1, [x2,#128]
return (struct dst_entry *)(skb->_skb_refdst & SKB_DST_PTRMASK);
ffff8000113a6ca8: 927ff880 and x0, x4, #0xfffffffffffffffe
WARN_ON(!skb_dst(skb));
ffff8000113a6cac: b40004e0 cbz x0, ffff8000113a6d48 <dev_loopback_xmit+0x110>
return (skb->_skb_refdst & SKB_DST_NOREF) && skb_dst(skb);
ffff8000113a6cb0: 36000204 tbz w4, #0, ffff8000113a6cf0 <dev_loopback_xmit+0xb8>
ffff8000113a6cb4: b9404003 ldr w3, [x0,#64]
if (unlikely(c == u))
ffff8000113a6cb8: 34000263 cbz w3, ffff8000113a6d04 <dev_loopback_xmit+0xcc>
ffff8000113a6cbc: 91010001 add x1, x0, #0x40
ffff8000113a6cc0: 2a0303e4 mov w4, w3
} while (!atomic_try_cmpxchg(v, &c, c + a));
ffff8000113a6cc4: 11000466 add w6, w3, #0x1
ffff8000113a6cc8: f9800031 prfm pstl1strm, [x1]
ffff8000113a6ccc: 885f7c25 ldxr w5, [x1]
ffff8000113a6cd0: 4a0400a7 eor w7, w5, w4
ffff8000113a6cd4: 35000087 cbnz w7, ffff8000113a6ce4 <dev_loopback_xmit+0xac>
ffff8000113a6cd8: 8807fc26 stlxr w7, w6, [x1]
ffff8000113a6cdc: 35ffff87 cbnz w7, ffff8000113a6ccc <dev_loopback_xmit+0x94>
ffff8000113a6ce0: d5033bbf dmb ish
if (unlikely(r != o))
ffff8000113a6ce4: 6b05007f cmp w3, w5
ffff8000113a6ce8: 54000141 b.ne ffff8000113a6d10 <dev_loopback_xmit+0xd8>
WARN_ON(!rcu_read_lock_held());
if (!dst_hold_safe(dst))
dst = NULL;
skb->_skb_refdst = (unsigned long)dst;
ffff8000113a6cec: f9002c40 str x0, [x2,#88]
netif_rx_ni(skb);
ffff8000113a6cf0: aa0203e0 mov x0, x2
ffff8000113a6cf4: 94000000 bl ffff8000113a6b10 <netif_rx_ni>
ffff8000113a6cf4: R_AARCH64_CALL26 netif_rx_ni
}
ffff8000113a6cf8: 52800000 mov w0, #0x0 // #0
ffff8000113a6cfc: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a6d00: d65f03c0 ret
ffff8000113a6d04: d2800000 mov x0, #0x0 // #0
ffff8000113a6d08: f9002c40 str x0, [x2,#88]
ffff8000113a6d0c: 17fffff9 b ffff8000113a6cf0 <dev_loopback_xmit+0xb8>
if (unlikely(c == u))
ffff8000113a6d10: 34ffffa5 cbz w5, ffff8000113a6d04 <dev_loopback_xmit+0xcc>
ffff8000113a6d14: 2a0503e3 mov w3, w5
} while (!atomic_try_cmpxchg(v, &c, c + a));
ffff8000113a6d18: 110004a4 add w4, w5, #0x1
__CMPXCHG_CASE(w, , mb_, 32, dmb ish, , l, "memory", K)
ffff8000113a6d1c: f9800031 prfm pstl1strm, [x1]
ffff8000113a6d20: 885f7c26 ldxr w6, [x1]
ffff8000113a6d24: 4a0300c7 eor w7, w6, w3
ffff8000113a6d28: 35000087 cbnz w7, ffff8000113a6d38 <dev_loopback_xmit+0x100>
ffff8000113a6d2c: 8807fc24 stlxr w7, w4, [x1]
ffff8000113a6d30: 35ffff87 cbnz w7, ffff8000113a6d20 <dev_loopback_xmit+0xe8>
ffff8000113a6d34: d5033bbf dmb ish
if (unlikely(r != o))
ffff8000113a6d38: 6b0600bf cmp w5, w6
ffff8000113a6d3c: 54fffd80 b.eq ffff8000113a6cec <dev_loopback_xmit+0xb4>
ffff8000113a6d40: 2a0603e5 mov w5, w6
ffff8000113a6d44: 17fffff3 b ffff8000113a6d10 <dev_loopback_xmit+0xd8>
WARN_ON(!skb_dst(skb));
ffff8000113a6d48: d4210000 brk #0x800
ffff8000113a6d4c: 17ffffe9 b ffff8000113a6cf0 <dev_loopback_xmit+0xb8>
ffff8000113a6d50: 94000000 bl ffff80001139e37c <__my_cpu_offset>
ffff8000113a6d50: R_AARCH64_CALL26 .text.unlikely+0xa0
ffff8000113a6d54 <dev_cpu_dead>:
{
ffff8000113a6d54: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a6d58: 910003fd mov x29, sp
ffff8000113a6d5c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a6d60: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a6d64: f9001bf7 str x23, [sp,#48]
ffff8000113a6d68: 2a0003f3 mov w19, w0
ffff8000113a6d6c: aa1e03e0 mov x0, x30
ffff8000113a6d70: 94000000 bl 0 <_mcount>
ffff8000113a6d70: R_AARCH64_CALL26 _mcount
asm volatile(ALTERNATIVE(
ffff8000113a6d74: d2800c00 mov x0, #0x60 // #96
ffff8000113a6d78: d50342df msr daifset, #0x2
cpu = smp_processor_id();
ffff8000113a6d7c: 90000001 adrp x1, 0 <cpu_number>
ffff8000113a6d7c: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113a6d80: 91000021 add x1, x1, #0x0
ffff8000113a6d80: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a6d84: d538d080 mrs x0, tpidr_el1
sd = &per_cpu(softnet_data, cpu);
ffff8000113a6d88: b8616800 ldr w0, [x0,x1]
ffff8000113a6d8c: 90000001 adrp x1, 0 <__per_cpu_offset>
ffff8000113a6d8c: R_AARCH64_ADR_PREL_PG_HI21 __per_cpu_offset
ffff8000113a6d90: 91000021 add x1, x1, #0x0
ffff8000113a6d90: R_AARCH64_ADD_ABS_LO12_NC __per_cpu_offset
ffff8000113a6d94: f8607835 ldr x21, [x1,x0,lsl #3]
ffff8000113a6d98: 90000014 adrp x20, ffff80001139e37c <__my_cpu_offset>
ffff8000113a6d98: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
ffff8000113a6d9c: 91000294 add x20, x20, #0x0
ffff8000113a6d9c: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a6da0: 8b150295 add x21, x20, x21
oldsd = &per_cpu(softnet_data, oldcpu);
ffff8000113a6da4: f8735820 ldr x0, [x1,w19,uxtw #3]
while (*list_skb)
ffff8000113a6da8: f9402ea1 ldr x1, [x21,#88]
oldsd = &per_cpu(softnet_data, oldcpu);
ffff8000113a6dac: 8b000294 add x20, x20, x0
while (*list_skb)
ffff8000113a6db0: b5000061 cbnz x1, ffff8000113a6dbc <dev_cpu_dead+0x68>
ffff8000113a6db4: 14000060 b ffff8000113a6f34 <dev_cpu_dead+0x1e0>
ffff8000113a6db8: aa0003e1 mov x1, x0
ffff8000113a6dbc: f9400020 ldr x0, [x1]
ffff8000113a6dc0: b5ffffc0 cbnz x0, ffff8000113a6db8 <dev_cpu_dead+0x64>
*list_skb = oldsd->completion_queue;
ffff8000113a6dc4: f9402e80 ldr x0, [x20,#88]
ffff8000113a6dc8: f9000020 str x0, [x1]
if (oldsd->output_queue) {
ffff8000113a6dcc: f9402681 ldr x1, [x20,#72]
oldsd->completion_queue = NULL;
ffff8000113a6dd0: f9002e9f str xzr, [x20,#88]
if (oldsd->output_queue) {
ffff8000113a6dd4: b4000101 cbz x1, ffff8000113a6df4 <dev_cpu_dead+0xa0>
*sd->output_queue_tailp = oldsd->output_queue;
ffff8000113a6dd8: f9402aa2 ldr x2, [x21,#80]
oldsd->output_queue = NULL;
ffff8000113a6ddc: aa1403e0 mov x0, x20
*sd->output_queue_tailp = oldsd->output_queue;
ffff8000113a6de0: f9000041 str x1, [x2]
sd->output_queue_tailp = oldsd->output_queue_tailp;
ffff8000113a6de4: f9402a81 ldr x1, [x20,#80]
ffff8000113a6de8: f9002aa1 str x1, [x21,#80]
oldsd->output_queue = NULL;
ffff8000113a6dec: f8048c1f str xzr, [x0,#72]!
oldsd->output_queue_tailp = &oldsd->output_queue;
ffff8000113a6df0: f9002a80 str x0, [x20,#80]
if (napi->poll == process_backlog)
ffff8000113a6df4: 90000017 adrp x23, ffff80001139e37c <__my_cpu_offset>
ffff8000113a6df4: R_AARCH64_ADR_PREL_PG_HI21 .text+0xd00c
ffff8000113a6df8: 910002f7 add x23, x23, #0x0
ffff8000113a6df8: R_AARCH64_ADD_ABS_LO12_NC .text+0xd00c
ffff8000113a6dfc: f9400280 ldr x0, [x20]
while (!list_empty(&oldsd->poll_list)) {
ffff8000113a6e00: eb00029f cmp x20, x0
ffff8000113a6e04: 540003e0 b.eq ffff8000113a6e80 <dev_cpu_dead+0x12c>
struct napi_struct *napi = list_first_entry(&oldsd->poll_list,
ffff8000113a6e08: f9400293 ldr x19, [x20]
if (!__list_del_entry_valid(entry))
ffff8000113a6e0c: aa1303e0 mov x0, x19
ffff8000113a6e10: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113a6e10: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113a6e14: 53001c01 uxtb w1, w0
if (!__list_add_valid(new, prev, next))
ffff8000113a6e18: aa1503e2 mov x2, x21
ffff8000113a6e1c: aa1303e0 mov x0, x19
if (!__list_del_entry_valid(entry))
ffff8000113a6e20: 340000a1 cbz w1, ffff8000113a6e34 <dev_cpu_dead+0xe0>
__list_del(entry->prev, entry->next);
ffff8000113a6e24: f9400661 ldr x1, [x19,#8]
ffff8000113a6e28: f9400263 ldr x3, [x19]
next->prev = prev;
ffff8000113a6e2c: f9000461 str x1, [x3,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a6e30: f9000023 str x3, [x1]
if (napi->poll == process_backlog)
ffff8000113a6e34: f9401661 ldr x1, [x19,#40]
ffff8000113a6e38: f9000273 str x19, [x19]
list->prev = list;
ffff8000113a6e3c: f9000673 str x19, [x19,#8]
ffff8000113a6e40: eb17003f cmp x1, x23
ffff8000113a6e44: 54000740 b.eq ffff8000113a6f2c <dev_cpu_dead+0x1d8>
__list_add(new, head->prev, head);
ffff8000113a6e48: f94006b6 ldr x22, [x21,#8]
if (!__list_add_valid(new, prev, next))
ffff8000113a6e4c: aa1603e1 mov x1, x22
ffff8000113a6e50: 94000000 bl 0 <__list_add_valid>
ffff8000113a6e50: R_AARCH64_CALL26 __list_add_valid
ffff8000113a6e54: 53001c01 uxtb w1, w0
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
ffff8000113a6e58: 52800060 mov w0, #0x3 // #3
ffff8000113a6e5c: 340000a1 cbz w1, ffff8000113a6e70 <dev_cpu_dead+0x11c>
next->prev = new;
ffff8000113a6e60: f90006b3 str x19, [x21,#8]
new->next = next;
ffff8000113a6e64: f9000275 str x21, [x19]
new->prev = prev;
ffff8000113a6e68: f9000676 str x22, [x19,#8]
ffff8000113a6e6c: f90002d3 str x19, [x22]
ffff8000113a6e70: 94000000 bl 0 <__raise_softirq_irqoff>
ffff8000113a6e70: R_AARCH64_CALL26 __raise_softirq_irqoff
__READ_ONCE_SIZE;
ffff8000113a6e74: f9400280 ldr x0, [x20]
while (!list_empty(&oldsd->poll_list)) {
ffff8000113a6e78: eb00029f cmp x20, x0
ffff8000113a6e7c: 54fffc61 b.ne ffff8000113a6e08 <dev_cpu_dead+0xb4>
raise_softirq_irqoff(NET_TX_SOFTIRQ);
ffff8000113a6e80: 52800040 mov w0, #0x2 // #2
ffff8000113a6e84: 94000000 bl 0 <raise_softirq_irqoff>
ffff8000113a6e84: R_AARCH64_CALL26 raise_softirq_irqoff
asm volatile(ALTERNATIVE(
ffff8000113a6e88: d2801c00 mov x0, #0xe0 // #224
ffff8000113a6e8c: d50342ff msr daifclr, #0x2
remsd = oldsd->rps_ipi_list;
ffff8000113a6e90: f9401e80 ldr x0, [x20,#56]
oldsd->rps_ipi_list = NULL;
ffff8000113a6e94: f9001e9f str xzr, [x20,#56]
net_rps_send_ipi(remsd);
ffff8000113a6e98: 97ffe964 bl ffff8000113a1428 <net_rps_send_ipi>
struct sk_buff *skb = list_->next;
ffff8000113a6e9c: f9400a81 ldr x1, [x20,#16]
while ((skb = __skb_dequeue(&oldsd->process_queue))) {
ffff8000113a6ea0: 91004293 add x19, x20, #0x10
if (skb == (struct sk_buff *)list_)
ffff8000113a6ea4: eb01027f cmp x19, x1
ffff8000113a6ea8: 54000260 b.eq ffff8000113a6ef4 <dev_cpu_dead+0x1a0>
if (skb)
ffff8000113a6eac: b4000241 cbz x1, ffff8000113a6ef4 <dev_cpu_dead+0x1a0>
WRITE_ONCE(list->qlen, list->qlen - 1);
ffff8000113a6eb0: b9401262 ldr w2, [x19,#16]
netif_rx_ni(skb);
ffff8000113a6eb4: aa0103e0 mov x0, x1
ffff8000113a6eb8: 51000442 sub w2, w2, #0x1
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff8000113a6ebc: b9002282 str w2, [x20,#32]
next = skb->next;
ffff8000113a6ec0: f9400023 ldr x3, [x1]
prev = skb->prev;
ffff8000113a6ec4: f9400422 ldr x2, [x1,#8]
skb->next = skb->prev = NULL;
ffff8000113a6ec8: f900003f str xzr, [x1]
ffff8000113a6ecc: f900043f str xzr, [x1,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a6ed0: f9000462 str x2, [x3,#8]
ffff8000113a6ed4: f9000043 str x3, [x2]
ffff8000113a6ed8: 94000000 bl ffff8000113a6b10 <netif_rx_ni>
ffff8000113a6ed8: R_AARCH64_CALL26 netif_rx_ni
sd->input_queue_head++;
ffff8000113a6edc: b9408280 ldr w0, [x20,#128]
ffff8000113a6ee0: 11000400 add w0, w0, #0x1
ffff8000113a6ee4: b9008280 str w0, [x20,#128]
struct sk_buff *skb = list_->next;
ffff8000113a6ee8: f9400261 ldr x1, [x19]
if (skb == (struct sk_buff *)list_)
ffff8000113a6eec: eb13003f cmp x1, x19
ffff8000113a6ef0: 54fffde1 b.ne ffff8000113a6eac <dev_cpu_dead+0x158>
ffff8000113a6ef4: 9103e293 add x19, x20, #0xf8
ffff8000113a6ef8: 14000005 b ffff8000113a6f0c <dev_cpu_dead+0x1b8>
netif_rx_ni(skb);
ffff8000113a6efc: 94000000 bl ffff8000113a6b10 <netif_rx_ni>
ffff8000113a6efc: R_AARCH64_CALL26 netif_rx_ni
ffff8000113a6f00: b9408281 ldr w1, [x20,#128]
ffff8000113a6f04: 11000421 add w1, w1, #0x1
ffff8000113a6f08: b9008281 str w1, [x20,#128]
while ((skb = skb_dequeue(&oldsd->input_pkt_queue))) {
ffff8000113a6f0c: aa1303e0 mov x0, x19
ffff8000113a6f10: 94000000 bl 0 <skb_dequeue>
ffff8000113a6f10: R_AARCH64_CALL26 skb_dequeue
ffff8000113a6f14: b5ffff40 cbnz x0, ffff8000113a6efc <dev_cpu_dead+0x1a8>
}
ffff8000113a6f18: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a6f1c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a6f20: f9401bf7 ldr x23, [sp,#48]
ffff8000113a6f24: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a6f28: d65f03c0 ret
napi->state = 0;
ffff8000113a6f2c: f9000a7f str xzr, [x19,#16]
ffff8000113a6f30: 17ffffb3 b ffff8000113a6dfc <dev_cpu_dead+0xa8>
list_skb = &sd->completion_queue;
ffff8000113a6f34: 910162a1 add x1, x21, #0x58
ffff8000113a6f38: 17ffffa3 b ffff8000113a6dc4 <dev_cpu_dead+0x70>
ffff8000113a6f3c <dev_set_alias>:
{
ffff8000113a6f3c: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a6f40: 910003fd mov x29, sp
ffff8000113a6f44: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a6f48: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a6f4c: f9001bf7 str x23, [sp,#48]
ffff8000113a6f50: aa0003f5 mov x21, x0
ffff8000113a6f54: aa1e03e0 mov x0, x30
ffff8000113a6f58: aa0203f3 mov x19, x2
ffff8000113a6f5c: aa0103f6 mov x22, x1
ffff8000113a6f60: 94000000 bl 0 <_mcount>
ffff8000113a6f60: R_AARCH64_CALL26 _mcount
if (len >= IFALIASZ)
ffff8000113a6f64: f103fe7f cmp x19, #0xff
ffff8000113a6f68: 54000468 b.hi ffff8000113a6ff4 <dev_set_alias+0xb8>
if (len) {
ffff8000113a6f6c: b4000413 cbz x19, ffff8000113a6fec <dev_set_alias+0xb0>
kmalloc_caches[kmalloc_type(flags)][index],
flags, size);
#endif
}
return __kmalloc(size, flags);
ffff8000113a6f70: 91004660 add x0, x19, #0x11
ffff8000113a6f74: 52819801 mov w1, #0xcc0 // #3264
ffff8000113a6f78: 94000000 bl 0 <__kmalloc>
ffff8000113a6f78: R_AARCH64_CALL26 __kmalloc
ffff8000113a6f7c: aa0003f4 mov x20, x0
if (!new_alias)
ffff8000113a6f80: b40003e0 cbz x0, ffff8000113a6ffc <dev_set_alias+0xc0>
return __builtin_memcpy(p, q, size);
ffff8000113a6f84: 91004000 add x0, x0, #0x10
ffff8000113a6f88: aa1603e1 mov x1, x22
ffff8000113a6f8c: aa1303e2 mov x2, x19
ffff8000113a6f90: 94000000 bl 0 <memcpy>
ffff8000113a6f90: R_AARCH64_CALL26 memcpy
new_alias->ifalias[len] = 0;
ffff8000113a6f94: 8b130280 add x0, x20, x19
ffff8000113a6f98: 3900401f strb wzr, [x0,#16]
mutex_lock(&ifalias_mutex);
ffff8000113a6f9c: 90000016 adrp x22, ffff80001139e37c <__my_cpu_offset>
ffff8000113a6f9c: R_AARCH64_ADR_PREL_PG_HI21 .data
ffff8000113a6fa0: 910002d6 add x22, x22, #0x0
ffff8000113a6fa0: R_AARCH64_ADD_ABS_LO12_NC .data
ffff8000113a6fa4: 9102c2d6 add x22, x22, #0xb0
ffff8000113a6fa8: aa1603e0 mov x0, x22
ffff8000113a6fac: 94000000 bl 0 <mutex_lock>
ffff8000113a6fac: R_AARCH64_CALL26 mutex_lock
new_alias = rcu_replace_pointer(dev->ifalias, new_alias,
ffff8000113a6fb0: 910062b5 add x21, x21, #0x18
ffff8000113a6fb4: f94002b7 ldr x23, [x21]
ffff8000113a6fb8: c89ffeb4 stlr x20, [x21]
mutex_unlock(&ifalias_mutex);
ffff8000113a6fbc: aa1603e0 mov x0, x22
ffff8000113a6fc0: 94000000 bl 0 <mutex_unlock>
ffff8000113a6fc0: R_AARCH64_CALL26 mutex_unlock
if (new_alias)
ffff8000113a6fc4: b4000097 cbz x23, ffff8000113a6fd4 <dev_set_alias+0x98>
kfree_rcu(new_alias, rcuhead);
ffff8000113a6fc8: aa1703e0 mov x0, x23
ffff8000113a6fcc: d2800001 mov x1, #0x0 // #0
ffff8000113a6fd0: 94000000 bl 0 <kfree_call_rcu>
ffff8000113a6fd0: R_AARCH64_CALL26 kfree_call_rcu
return len;
ffff8000113a6fd4: 2a1303e0 mov w0, w19
}
ffff8000113a6fd8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a6fdc: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a6fe0: f9401bf7 ldr x23, [sp,#48]
ffff8000113a6fe4: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a6fe8: d65f03c0 ret
ffff8000113a6fec: aa1303f4 mov x20, x19
ffff8000113a6ff0: 17ffffeb b ffff8000113a6f9c <dev_set_alias+0x60>
return -EINVAL;
ffff8000113a6ff4: 128002a0 mov w0, #0xffffffea // #-22
ffff8000113a6ff8: 17fffff8 b ffff8000113a6fd8 <dev_set_alias+0x9c>
return -ENOMEM;
ffff8000113a6ffc: 12800160 mov w0, #0xfffffff4 // #-12
ffff8000113a7000: 17fffff6 b ffff8000113a6fd8 <dev_set_alias+0x9c>
ffff8000113a7004 <__netdev_adjacent_dev_insert>:
{
ffff8000113a7004: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113a7008: 910003fd mov x29, sp
ffff8000113a700c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a7010: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a7014: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a7018: f90023f9 str x25, [sp,#64]
ffff8000113a701c: aa0003f5 mov x21, x0
ffff8000113a7020: aa1e03e0 mov x0, x30
ffff8000113a7024: aa0203f3 mov x19, x2
ffff8000113a7028: aa0103f4 mov x20, x1
ffff8000113a702c: aa0303f7 mov x23, x3
ffff8000113a7030: 53001c96 uxtb w22, w4
ffff8000113a7034: 94000000 bl 0 <_mcount>
ffff8000113a7034: R_AARCH64_CALL26 _mcount
list_for_each_entry(adj, adj_list, list) {
ffff8000113a7038: f9400261 ldr x1, [x19]
ffff8000113a703c: eb01027f cmp x19, x1
ffff8000113a7040: d1006027 sub x7, x1, #0x18
ffff8000113a7044: 54000180 b.eq ffff8000113a7074 <__netdev_adjacent_dev_insert+0x70>
if (adj->dev == adj_dev)
ffff8000113a7048: f85e8021 ldur x1, [x1,#-24]
ffff8000113a704c: eb01029f cmp x20, x1
ffff8000113a7050: 540000a1 b.ne ffff8000113a7064 <__netdev_adjacent_dev_insert+0x60>
ffff8000113a7054: 14000041 b ffff8000113a7158 <__netdev_adjacent_dev_insert+0x154>
ffff8000113a7058: f85e80c6 ldur x6, [x6,#-24]
ffff8000113a705c: eb06029f cmp x20, x6
ffff8000113a7060: 540007c0 b.eq ffff8000113a7158 <__netdev_adjacent_dev_insert+0x154>
list_for_each_entry(adj, adj_list, list) {
ffff8000113a7064: f9400ce6 ldr x6, [x7,#24]
ffff8000113a7068: eb06027f cmp x19, x6
ffff8000113a706c: d10060c7 sub x7, x6, #0x18
ffff8000113a7070: 54ffff41 b.ne ffff8000113a7058 <__netdev_adjacent_dev_insert+0x54>
return kmem_cache_alloc_trace(
ffff8000113a7074: 90000000 adrp x0, 0 <kmalloc_caches>
ffff8000113a7074: R_AARCH64_ADR_PREL_PG_HI21 kmalloc_caches+0x38
ffff8000113a7078: f9400000 ldr x0, [x0]
ffff8000113a7078: R_AARCH64_LDST64_ABS_LO12_NC kmalloc_caches+0x38
ffff8000113a707c: 52819801 mov w1, #0xcc0 // #3264
ffff8000113a7080: d2800702 mov x2, #0x38 // #56
ffff8000113a7084: 94000000 bl 0 <kmem_cache_alloc_trace>
ffff8000113a7084: R_AARCH64_CALL26 kmem_cache_alloc_trace
ffff8000113a7088: aa0003f8 mov x24, x0
if (!adj)
ffff8000113a708c: b4000f00 cbz x0, ffff8000113a726c <__netdev_adjacent_dev_insert+0x268>
adj->dev = adj_dev;
ffff8000113a7090: f9000014 str x20, [x0]
adj->master = master;
ffff8000113a7094: 39002016 strb w22, [x0,#8]
adj->ref_nr = 1;
ffff8000113a7098: 52800020 mov w0, #0x1 // #1
ffff8000113a709c: 79001700 strh w0, [x24,#10]
adj->private = private;
ffff8000113a70a0: f9000b17 str x23, [x24,#16]
adj->ignore = false;
ffff8000113a70a4: 3900271f strb wzr, [x24,#9]
PERCPU_OP(add, add, stadd)
ffff8000113a70a8: 52800022 mov w2, #0x1 // #1
this_cpu_inc(*dev->pcpu_refcnt);
ffff8000113a70ac: f9426280 ldr x0, [x20,#1216]
asm(ALTERNATIVE("mrs %0, tpidr_el1",
ffff8000113a70b0: d538d081 mrs x1, tpidr_el1
PERCPU_OP(add, add, stadd)
ffff8000113a70b4: 8b000025 add x5, x1, x0
ffff8000113a70b8: 885f7ca4 ldxr w4, [x5]
ffff8000113a70bc: 0b020084 add w4, w4, w2
ffff8000113a70c0: 88037ca4 stxr w3, w4, [x5]
ffff8000113a70c4: 35ffffa3 cbnz w3, ffff8000113a70b8 <__netdev_adjacent_dev_insert+0xb4>
pr_debug("Insert adjacency: dev %s adj_dev %s adj->ref_nr %d; dev_hold on %s\n",
ffff8000113a70c8: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a70c8: R_AARCH64_ADR_PREL_PG_HI21 __verbose
ffff8000113a70cc: 91000000 add x0, x0, #0x0
ffff8000113a70cc: R_AARCH64_ADD_ABS_LO12_NC __verbose
ffff8000113a70d0: 91028000 add x0, x0, #0xa0
ffff8000113a70d4: 79404401 ldrh w1, [x0,#34]
ffff8000113a70d8: 37100da1 tbnz w1, #2, ffff8000113a728c <__netdev_adjacent_dev_insert+0x288>
return (dev_list == &dev->adj_list.upper ||
ffff8000113a70dc: 9102a2b9 add x25, x21, #0xa8
dev_list == &dev->adj_list.lower) &&
ffff8000113a70e0: eb19027f cmp x19, x25
ffff8000113a70e4: 540007a0 b.eq ffff8000113a71d8 <__netdev_adjacent_dev_insert+0x1d4>
ffff8000113a70e8: 9102e2a0 add x0, x21, #0xb8
return (dev_list == &dev->adj_list.upper ||
ffff8000113a70ec: eb00027f cmp x19, x0
ffff8000113a70f0: 54000740 b.eq ffff8000113a71d8 <__netdev_adjacent_dev_insert+0x1d4>
if (master) {
ffff8000113a70f4: 34000576 cbz w22, ffff8000113a71a0 <__netdev_adjacent_dev_insert+0x19c>
ret = sysfs_create_link(&(dev->dev.kobj),
ffff8000113a70f8: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113a70f8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x540
ffff8000113a70fc: 911442a0 add x0, x21, #0x510
ffff8000113a7100: 91144281 add x1, x20, #0x510
ffff8000113a7104: 91000042 add x2, x2, #0x0
ffff8000113a7104: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x540
ffff8000113a7108: 94000000 bl 0 <sysfs_create_link>
ffff8000113a7108: R_AARCH64_CALL26 sysfs_create_link
ffff8000113a710c: 2a0003f7 mov w23, w0
if (ret)
ffff8000113a7110: 34000920 cbz w0, ffff8000113a7234 <__netdev_adjacent_dev_insert+0x230>
dev_list == &dev->adj_list.lower) &&
ffff8000113a7114: eb19027f cmp x19, x25
ffff8000113a7118: 540007c0 b.eq ffff8000113a7210 <__netdev_adjacent_dev_insert+0x20c>
ffff8000113a711c: 9102e2a0 add x0, x21, #0xb8
return (dev_list == &dev->adj_list.upper ||
ffff8000113a7120: eb00027f cmp x19, x0
ffff8000113a7124: 54000760 b.eq ffff8000113a7210 <__netdev_adjacent_dev_insert+0x20c>
kfree(adj);
ffff8000113a7128: aa1803e0 mov x0, x24
ffff8000113a712c: 94000000 bl 0 <kfree>
ffff8000113a712c: R_AARCH64_CALL26 kfree
ffff8000113a7130: 12800000 mov w0, #0xffffffff // #-1
this_cpu_dec(*dev->pcpu_refcnt);
ffff8000113a7134: f9426281 ldr x1, [x20,#1216]
asm(ALTERNATIVE("mrs %0, tpidr_el1",
ffff8000113a7138: d538d082 mrs x2, tpidr_el1
PERCPU_OP(add, add, stadd)
ffff8000113a713c: 8b010045 add x5, x2, x1
ffff8000113a7140: 885f7ca4 ldxr w4, [x5]
ffff8000113a7144: 0b000084 add w4, w4, w0
ffff8000113a7148: 88037ca4 stxr w3, w4, [x5]
ffff8000113a714c: 35ffffa3 cbnz w3, ffff8000113a7140 <__netdev_adjacent_dev_insert+0x13c>
return ret;
ffff8000113a7150: 2a1703f3 mov w19, w23
ffff8000113a7154: 1400000c b ffff8000113a7184 <__netdev_adjacent_dev_insert+0x180>
if (adj) {
ffff8000113a7158: b4fff8e7 cbz x7, ffff8000113a7074 <__netdev_adjacent_dev_insert+0x70>
adj->ref_nr += 1;
ffff8000113a715c: 794014e4 ldrh w4, [x7,#10]
pr_debug("Insert adjacency: dev %s adj_dev %s adj->ref_nr %d\n",
ffff8000113a7160: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a7160: R_AARCH64_ADR_PREL_PG_HI21 __verbose
adj->ref_nr += 1;
ffff8000113a7164: 11000484 add w4, w4, #0x1
pr_debug("Insert adjacency: dev %s adj_dev %s adj->ref_nr %d\n",
ffff8000113a7168: 91000000 add x0, x0, #0x0
ffff8000113a7168: R_AARCH64_ADD_ABS_LO12_NC __verbose
adj->ref_nr += 1;
ffff8000113a716c: 53003c84 uxth w4, w4
ffff8000113a7170: 790014e4 strh w4, [x7,#10]
pr_debug("Insert adjacency: dev %s adj_dev %s adj->ref_nr %d\n",
ffff8000113a7174: 9101e000 add x0, x0, #0x78
ffff8000113a7178: 79404401 ldrh w1, [x0,#34]
return 0;
ffff8000113a717c: 52800013 mov w19, #0x0 // #0
pr_debug("Insert adjacency: dev %s adj_dev %s adj->ref_nr %d\n",
ffff8000113a7180: 371007a1 tbnz w1, #2, ffff8000113a7274 <__netdev_adjacent_dev_insert+0x270>
}
ffff8000113a7184: 2a1303e0 mov w0, w19
ffff8000113a7188: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a718c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a7190: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a7194: f94023f9 ldr x25, [sp,#64]
ffff8000113a7198: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113a719c: d65f03c0 ret
__list_add_rcu(new, head->prev, head);
ffff8000113a71a0: f9400675 ldr x21, [x19,#8]
list_add_tail_rcu(&adj->list, dev_list);
ffff8000113a71a4: 91006314 add x20, x24, #0x18
if (!__list_add_valid(new, prev, next))
ffff8000113a71a8: aa1403e0 mov x0, x20
ffff8000113a71ac: aa1503e1 mov x1, x21
ffff8000113a71b0: aa1303e2 mov x2, x19
ffff8000113a71b4: 94000000 bl 0 <__list_add_valid>
ffff8000113a71b4: R_AARCH64_CALL26 __list_add_valid
ffff8000113a71b8: 53001c00 uxtb w0, w0
ffff8000113a71bc: 34000260 cbz w0, ffff8000113a7208 <__netdev_adjacent_dev_insert+0x204>
new->next = next;
ffff8000113a71c0: f9000f13 str x19, [x24,#24]
new->prev = prev;
ffff8000113a71c4: f9000695 str x21, [x20,#8]
rcu_assign_pointer(list_next_rcu(prev), new);
ffff8000113a71c8: c89ffeb4 stlr x20, [x21]
next->prev = new;
ffff8000113a71cc: f9000674 str x20, [x19,#8]
return 0;
ffff8000113a71d0: 2a1603f3 mov w19, w22
ffff8000113a71d4: 17ffffec b ffff8000113a7184 <__netdev_adjacent_dev_insert+0x180>
dev_list == &dev->adj_list.lower) &&
ffff8000113a71d8: f9427aa1 ldr x1, [x21,#1264]
ffff8000113a71dc: f9427a80 ldr x0, [x20,#1264]
ffff8000113a71e0: eb00003f cmp x1, x0
ffff8000113a71e4: 54fff881 b.ne ffff8000113a70f4 <__netdev_adjacent_dev_insert+0xf0>
ret = netdev_adjacent_sysfs_add(dev, adj_dev, dev_list);
ffff8000113a71e8: aa1503e0 mov x0, x21
ffff8000113a71ec: aa1403e1 mov x1, x20
ffff8000113a71f0: aa1303e2 mov x2, x19
ffff8000113a71f4: 97ffe745 bl ffff8000113a0f08 <netdev_adjacent_sysfs_add>
ffff8000113a71f8: 2a0003f7 mov w23, w0
if (ret)
ffff8000113a71fc: 35fff960 cbnz w0, ffff8000113a7128 <__netdev_adjacent_dev_insert+0x124>
if (master) {
ffff8000113a7200: 35fff7d6 cbnz w22, ffff8000113a70f8 <__netdev_adjacent_dev_insert+0xf4>
ffff8000113a7204: 17ffffe7 b ffff8000113a71a0 <__netdev_adjacent_dev_insert+0x19c>
return 0;
ffff8000113a7208: 52800013 mov w19, #0x0 // #0
ffff8000113a720c: 17ffffde b ffff8000113a7184 <__netdev_adjacent_dev_insert+0x180>
dev_list == &dev->adj_list.lower) &&
ffff8000113a7210: f9427aa1 ldr x1, [x21,#1264]
ffff8000113a7214: f9427a80 ldr x0, [x20,#1264]
ffff8000113a7218: eb00003f cmp x1, x0
ffff8000113a721c: 54fff861 b.ne ffff8000113a7128 <__netdev_adjacent_dev_insert+0x124>
netdev_adjacent_sysfs_del(dev, adj_dev->name, dev_list);
ffff8000113a7220: aa1503e0 mov x0, x21
ffff8000113a7224: aa1403e1 mov x1, x20
ffff8000113a7228: aa1303e2 mov x2, x19
ffff8000113a722c: 97ffe75c bl ffff8000113a0f9c <netdev_adjacent_sysfs_del>
ffff8000113a7230: 17ffffbe b ffff8000113a7128 <__netdev_adjacent_dev_insert+0x124>
__list_add_rcu(new, head, head->next);
ffff8000113a7234: f9400275 ldr x21, [x19]
list_add_rcu(&adj->list, dev_list);
ffff8000113a7238: 91006314 add x20, x24, #0x18
if (!__list_add_valid(new, prev, next))
ffff8000113a723c: aa1403e0 mov x0, x20
ffff8000113a7240: aa1303e1 mov x1, x19
ffff8000113a7244: aa1503e2 mov x2, x21
ffff8000113a7248: 94000000 bl 0 <__list_add_valid>
ffff8000113a7248: R_AARCH64_CALL26 __list_add_valid
ffff8000113a724c: 53001c00 uxtb w0, w0
ffff8000113a7250: 34fffdc0 cbz w0, ffff8000113a7208 <__netdev_adjacent_dev_insert+0x204>
new->next = next;
ffff8000113a7254: f9000f15 str x21, [x24,#24]
new->prev = prev;
ffff8000113a7258: f9000693 str x19, [x20,#8]
rcu_assign_pointer(list_next_rcu(prev), new);
ffff8000113a725c: c89ffe74 stlr x20, [x19]
next->prev = new;
ffff8000113a7260: f90006b4 str x20, [x21,#8]
return 0;
ffff8000113a7264: 2a1703f3 mov w19, w23
ffff8000113a7268: 17ffffc7 b ffff8000113a7184 <__netdev_adjacent_dev_insert+0x180>
return -ENOMEM;
ffff8000113a726c: 12800173 mov w19, #0xfffffff4 // #-12
ffff8000113a7270: 17ffffc5 b ffff8000113a7184 <__netdev_adjacent_dev_insert+0x180>
pr_debug("Insert adjacency: dev %s adj_dev %s adj->ref_nr %d\n",
ffff8000113a7274: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a7274: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x588
ffff8000113a7278: 91000021 add x1, x1, #0x0
ffff8000113a7278: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x588
ffff8000113a727c: aa1503e2 mov x2, x21
ffff8000113a7280: aa1403e3 mov x3, x20
ffff8000113a7284: 94000000 bl 0 <__dynamic_pr_debug>
ffff8000113a7284: R_AARCH64_CALL26 __dynamic_pr_debug
ffff8000113a7288: 17ffffbf b ffff8000113a7184 <__netdev_adjacent_dev_insert+0x180>
pr_debug("Insert adjacency: dev %s adj_dev %s adj->ref_nr %d; dev_hold on %s\n",
ffff8000113a728c: 79401704 ldrh w4, [x24,#10]
ffff8000113a7290: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a7290: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x5c0
ffff8000113a7294: 91000021 add x1, x1, #0x0
ffff8000113a7294: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x5c0
ffff8000113a7298: aa1503e2 mov x2, x21
ffff8000113a729c: aa1403e3 mov x3, x20
ffff8000113a72a0: aa1403e5 mov x5, x20
ffff8000113a72a4: 94000000 bl 0 <__dynamic_pr_debug>
ffff8000113a72a4: R_AARCH64_CALL26 __dynamic_pr_debug
ffff8000113a72a8: 17ffff8d b ffff8000113a70dc <__netdev_adjacent_dev_insert+0xd8>
ffff8000113a72ac <__netdev_upper_dev_link>:
{
ffff8000113a72ac: a9b77bfd stp x29, x30, [sp,#-144]!
ffff8000113a72b0: 910003fd mov x29, sp
ffff8000113a72b4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a72b8: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a72bc: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a72c0: f90023f9 str x25, [sp,#64]
ffff8000113a72c4: aa0003f3 mov x19, x0
ffff8000113a72c8: aa1e03e0 mov x0, x30
ffff8000113a72cc: aa0103f4 mov x20, x1
ffff8000113a72d0: 53001c55 uxtb w21, w2
ffff8000113a72d4: f9002fa4 str x4, [x29,#88]
ffff8000113a72d8: f9002ba5 str x5, [x29,#80]
ffff8000113a72dc: 90000016 adrp x22, 0 <__stack_chk_guard>
ffff8000113a72dc: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a72e0: aa0303f8 mov x24, x3
ffff8000113a72e4: 94000000 bl 0 <_mcount>
ffff8000113a72e4: R_AARCH64_CALL26 _mcount
ffff8000113a72e8: f94002c0 ldr x0, [x22]
ffff8000113a72e8: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
struct netdev_notifier_changeupper_info changeupper_info = {
ffff8000113a72ec: f9402ba5 ldr x5, [x29,#80]
ffff8000113a72f0: f9402fa4 ldr x4, [x29,#88]
ffff8000113a72f4: 52800037 mov w23, #0x1 // #1
{
ffff8000113a72f8: f90047a0 str x0, [x29,#136]
struct netdev_notifier_changeupper_info changeupper_info = {
ffff8000113a72fc: f90033b3 str x19, [x29,#96]
ffff8000113a7300: f90037a5 str x5, [x29,#104]
ffff8000113a7304: f9003bb4 str x20, [x29,#112]
ffff8000113a7308: 3901e3b5 strb w21, [x29,#120]
ffff8000113a730c: 3901e7b7 strb w23, [x29,#121]
ffff8000113a7310: f90043a4 str x4, [x29,#128]
ASSERT_RTNL();
ffff8000113a7314: 94000000 bl 0 <rtnl_is_locked>
ffff8000113a7314: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113a7318: 34000ec0 cbz w0, ffff8000113a74f0 <__netdev_upper_dev_link+0x244>
if (dev == upper_dev)
ffff8000113a731c: eb14027f cmp x19, x20
ffff8000113a7320: 54000360 b.eq ffff8000113a738c <__netdev_upper_dev_link+0xe0>
if (__netdev_has_upper_dev(upper_dev, dev))
ffff8000113a7324: aa1403e0 mov x0, x20
ffff8000113a7328: aa1303e1 mov x1, x19
ffff8000113a732c: 97ffe31b bl ffff80001139ff98 <__netdev_has_upper_dev>
ffff8000113a7330: 53001c00 uxtb w0, w0
ffff8000113a7334: 350002c0 cbnz w0, ffff8000113a738c <__netdev_upper_dev_link+0xe0>
if ((dev->lower_level + upper_dev->upper_level) > MAX_NEST_DEV)
ffff8000113a7338: 3949c661 ldrb w1, [x19,#625]
ffff8000113a733c: 3949c280 ldrb w0, [x20,#624]
ffff8000113a7340: 0b000020 add w0, w1, w0
ffff8000113a7344: 7100201f cmp w0, #0x8
ffff8000113a7348: 54000acc b.gt ffff8000113a74a0 <__netdev_upper_dev_link+0x1f4>
if (!master) {
ffff8000113a734c: 34000255 cbz w21, ffff8000113a7394 <__netdev_upper_dev_link+0xe8>
ASSERT_RTNL();
ffff8000113a7350: 94000000 bl 0 <rtnl_is_locked>
ffff8000113a7350: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113a7354: 34000e80 cbz w0, ffff8000113a7524 <__netdev_upper_dev_link+0x278>
__READ_ONCE_SIZE;
ffff8000113a7358: aa1303e0 mov x0, x19
ffff8000113a735c: f84a8c01 ldr x1, [x0,#168]!
if (list_empty(&dev->adj_list.upper))
ffff8000113a7360: eb01001f cmp x0, x1
ffff8000113a7364: 54000220 b.eq ffff8000113a73a8 <__netdev_upper_dev_link+0xfc>
upper = list_first_entry(&dev->adj_list.upper,
ffff8000113a7368: f9405660 ldr x0, [x19,#168]
if (likely(upper->master) && !upper->ignore)
ffff8000113a736c: 385f0001 ldurb w1, [x0,#-16]
ffff8000113a7370: 340001c1 cbz w1, ffff8000113a73a8 <__netdev_upper_dev_link+0xfc>
ffff8000113a7374: 385f1001 ldurb w1, [x0,#-15]
ffff8000113a7378: 35000181 cbnz w1, ffff8000113a73a8 <__netdev_upper_dev_link+0xfc>
return upper->dev;
ffff8000113a737c: f85e8000 ldur x0, [x0,#-24]
if (master_dev)
ffff8000113a7380: b4000140 cbz x0, ffff8000113a73a8 <__netdev_upper_dev_link+0xfc>
return master_dev == upper_dev ? -EEXIST : -EBUSY;
ffff8000113a7384: eb00029f cmp x20, x0
ffff8000113a7388: 54000360 b.eq ffff8000113a73f4 <__netdev_upper_dev_link+0x148>
ffff8000113a738c: 128001f5 mov w21, #0xfffffff0 // #-16
ffff8000113a7390: 1400000e b ffff8000113a73c8 <__netdev_upper_dev_link+0x11c>
if (__netdev_has_upper_dev(dev, upper_dev))
ffff8000113a7394: aa1303e0 mov x0, x19
ffff8000113a7398: aa1403e1 mov x1, x20
ffff8000113a739c: 97ffe2ff bl ffff80001139ff98 <__netdev_has_upper_dev>
ffff8000113a73a0: 53001c00 uxtb w0, w0
ffff8000113a73a4: 35000280 cbnz w0, ffff8000113a73f4 <__netdev_upper_dev_link+0x148>
ret = call_netdevice_notifiers_info(NETDEV_PRECHANGEUPPER,
ffff8000113a73a8: d2800340 mov x0, #0x1a // #26
ffff8000113a73ac: 910183a1 add x1, x29, #0x60
ffff8000113a73b0: 97ffe352 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ret &= ~NOTIFY_STOP_MASK;
ffff8000113a73b4: 12107800 and w0, w0, #0xffff7fff
return ret > NOTIFY_OK ? NOTIFY_OK - ret : 0;
ffff8000113a73b8: 7100041f cmp w0, #0x1
ffff8000113a73bc: 5400020d b.le ffff8000113a73fc <__netdev_upper_dev_link+0x150>
ffff8000113a73c0: 52800035 mov w21, #0x1 // #1
ffff8000113a73c4: 4b0002b5 sub w21, w21, w0
}
ffff8000113a73c8: f94047a2 ldr x2, [x29,#136]
ffff8000113a73cc: f94002c1 ldr x1, [x22]
ffff8000113a73cc: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a73d0: 2a1503e0 mov w0, w21
ffff8000113a73d4: eb01005f cmp x2, x1
ffff8000113a73d8: 540008a1 b.ne ffff8000113a74ec <__netdev_upper_dev_link+0x240>
ffff8000113a73dc: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a73e0: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a73e4: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a73e8: f94023f9 ldr x25, [sp,#64]
ffff8000113a73ec: a8c97bfd ldp x29, x30, [sp],#144
ffff8000113a73f0: d65f03c0 ret
return -EEXIST;
ffff8000113a73f4: 12800215 mov w21, #0xffffffef // #-17
ffff8000113a73f8: 17fffff4 b ffff8000113a73c8 <__netdev_upper_dev_link+0x11c>
return __netdev_adjacent_dev_link_lists(dev, upper_dev,
ffff8000113a73fc: 9102a277 add x23, x19, #0xa8
ret = __netdev_adjacent_dev_insert(dev, upper_dev, up_list,
ffff8000113a7400: 2a1503e4 mov w4, w21
ffff8000113a7404: aa1303e0 mov x0, x19
ffff8000113a7408: aa1403e1 mov x1, x20
ffff8000113a740c: aa1703e2 mov x2, x23
ffff8000113a7410: aa1803e3 mov x3, x24
ffff8000113a7414: 97fffefc bl ffff8000113a7004 <__netdev_adjacent_dev_insert>
ffff8000113a7418: 2a0003f5 mov w21, w0
if (ret)
ffff8000113a741c: 35fffd60 cbnz w0, ffff8000113a73c8 <__netdev_upper_dev_link+0x11c>
return __netdev_adjacent_dev_link_lists(dev, upper_dev,
ffff8000113a7420: 9102e299 add x25, x20, #0xb8
ret = __netdev_adjacent_dev_insert(upper_dev, dev, down_list,
ffff8000113a7424: aa1803e3 mov x3, x24
ffff8000113a7428: aa1403e0 mov x0, x20
ffff8000113a742c: aa1303e1 mov x1, x19
ffff8000113a7430: aa1903e2 mov x2, x25
ffff8000113a7434: 2a1503e4 mov w4, w21
ffff8000113a7438: 97fffef3 bl ffff8000113a7004 <__netdev_adjacent_dev_insert>
ffff8000113a743c: 2a0003f8 mov w24, w0
if (ret) {
ffff8000113a7440: 35000240 cbnz w0, ffff8000113a7488 <__netdev_upper_dev_link+0x1dc>
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
ffff8000113a7444: d28002a0 mov x0, #0x15 // #21
ffff8000113a7448: 910183a1 add x1, x29, #0x60
ffff8000113a744c: 97ffe32b bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ret &= ~NOTIFY_STOP_MASK;
ffff8000113a7450: 12107803 and w3, w0, #0xffff7fff
return ret > NOTIFY_OK ? NOTIFY_OK - ret : 0;
ffff8000113a7454: 7100047f cmp w3, #0x1
__netdev_adjacent_dev_remove(dev, upper_dev, ref_nr, up_list);
ffff8000113a7458: aa1303e0 mov x0, x19
ffff8000113a745c: 5400026d b.le ffff8000113a74a8 <__netdev_upper_dev_link+0x1fc>
ffff8000113a7460: aa1403e1 mov x1, x20
ffff8000113a7464: aa1703e2 mov x2, x23
ffff8000113a7468: 52800035 mov w21, #0x1 // #1
ffff8000113a746c: 4b0302b5 sub w21, w21, w3
ffff8000113a7470: 97fffa38 bl ffff8000113a5d50 <__netdev_adjacent_dev_remove.constprop.155>
__netdev_adjacent_dev_remove(upper_dev, dev, ref_nr, down_list);
ffff8000113a7474: aa1403e0 mov x0, x20
ffff8000113a7478: aa1303e1 mov x1, x19
ffff8000113a747c: aa1903e2 mov x2, x25
ffff8000113a7480: 97fffa34 bl ffff8000113a5d50 <__netdev_adjacent_dev_remove.constprop.155>
ffff8000113a7484: 17ffffd1 b ffff8000113a73c8 <__netdev_upper_dev_link+0x11c>
__netdev_adjacent_dev_remove(dev, upper_dev, 1, up_list);
ffff8000113a7488: aa1303e0 mov x0, x19
ffff8000113a748c: aa1403e1 mov x1, x20
ffff8000113a7490: aa1703e2 mov x2, x23
ffff8000113a7494: 97fffa2f bl ffff8000113a5d50 <__netdev_adjacent_dev_remove.constprop.155>
ffff8000113a7498: 2a1803f5 mov w21, w24
ffff8000113a749c: 17ffffcb b ffff8000113a73c8 <__netdev_upper_dev_link+0x11c>
return -EMLINK;
ffff8000113a74a0: 128003d5 mov w21, #0xffffffe1 // #-31
ffff8000113a74a4: 17ffffc9 b ffff8000113a73c8 <__netdev_upper_dev_link+0x11c>
dev->upper_level = __netdev_upper_depth(dev) + 1;
ffff8000113a74a8: 97ffde88 bl ffff80001139eec8 <__netdev_upper_depth>
ffff8000113a74ac: 53001c00 uxtb w0, w0
ffff8000113a74b0: 11000400 add w0, w0, #0x1
ffff8000113a74b4: 3909c260 strb w0, [x19,#624]
__netdev_walk_all_lower_dev(dev, __netdev_update_upper_level, NULL);
ffff8000113a74b8: aa1303e0 mov x0, x19
ffff8000113a74bc: 97ffeb66 bl ffff8000113a2254 <__netdev_walk_all_lower_dev.constprop.156>
dev->lower_level = __netdev_lower_depth(dev) + 1;
ffff8000113a74c0: aa1403e0 mov x0, x20
ffff8000113a74c4: 97ffdea2 bl ffff80001139ef4c <__netdev_lower_depth>
ffff8000113a74c8: 53001c00 uxtb w0, w0
ffff8000113a74cc: 11000400 add w0, w0, #0x1
__netdev_walk_all_upper_dev(upper_dev, __netdev_update_lower_level,
ffff8000113a74d0: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a74d0: R_AARCH64_ADR_PREL_PG_HI21 .text+0xc90
dev->lower_level = __netdev_lower_depth(dev) + 1;
ffff8000113a74d4: 3909c680 strb w0, [x20,#625]
__netdev_walk_all_upper_dev(upper_dev, __netdev_update_lower_level,
ffff8000113a74d8: 91000021 add x1, x1, #0x0
ffff8000113a74d8: R_AARCH64_ADD_ABS_LO12_NC .text+0xc90
ffff8000113a74dc: aa1403e0 mov x0, x20
ffff8000113a74e0: d2800002 mov x2, #0x0 // #0
ffff8000113a74e4: 97ffdd66 bl ffff80001139ea7c <__netdev_walk_all_upper_dev>
return 0;
ffff8000113a74e8: 17ffffb8 b ffff8000113a73c8 <__netdev_upper_dev_link+0x11c>
}
ffff8000113a74ec: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a74ec: R_AARCH64_CALL26 __stack_chk_fail
ASSERT_RTNL();
ffff8000113a74f0: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113a74f0: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113a74f4: 91000063 add x3, x3, #0x0
ffff8000113a74f4: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113a74f8: 39404c60 ldrb w0, [x3,#19]
ffff8000113a74fc: 35fff100 cbnz w0, ffff8000113a731c <__netdev_upper_dev_link+0x70>
ffff8000113a7500: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a7500: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113a7504: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a7504: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113a7508: 91000000 add x0, x0, #0x0
ffff8000113a7508: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113a750c: 91000021 add x1, x1, #0x0
ffff8000113a750c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113a7510: 5283afc2 mov w2, #0x1d7e // #7550
ffff8000113a7514: 39004c77 strb w23, [x3,#19]
ffff8000113a7518: 94000000 bl 0 <__warn_printk>
ffff8000113a7518: R_AARCH64_CALL26 __warn_printk
ffff8000113a751c: d4210000 brk #0x800
ffff8000113a7520: 17ffff7f b ffff8000113a731c <__netdev_upper_dev_link+0x70>
ASSERT_RTNL();
ffff8000113a7524: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113a7524: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113a7528: 91000063 add x3, x3, #0x0
ffff8000113a7528: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113a752c: 39405060 ldrb w0, [x3,#20]
ffff8000113a7530: 35fff140 cbnz w0, ffff8000113a7358 <__netdev_upper_dev_link+0xac>
ffff8000113a7534: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a7534: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113a7538: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a7538: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113a753c: 52800024 mov w4, #0x1 // #1
ffff8000113a7540: 91000000 add x0, x0, #0x0
ffff8000113a7540: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113a7544: 91000021 add x1, x1, #0x0
ffff8000113a7544: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113a7548: 52835002 mov w2, #0x1a80 // #6784
ffff8000113a754c: 39005064 strb w4, [x3,#20]
ffff8000113a7550: 94000000 bl 0 <__warn_printk>
ffff8000113a7550: R_AARCH64_CALL26 __warn_printk
ffff8000113a7554: d4210000 brk #0x800
ffff8000113a7558: 17ffff80 b ffff8000113a7358 <__netdev_upper_dev_link+0xac>
ffff8000113a755c <netdev_upper_dev_link>:
{
ffff8000113a755c: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a7560: 910003fd mov x29, sp
ffff8000113a7564: f9000bf3 str x19, [sp,#16]
ffff8000113a7568: aa0003f3 mov x19, x0
ffff8000113a756c: aa1e03e0 mov x0, x30
ffff8000113a7570: f90017a1 str x1, [x29,#40]
ffff8000113a7574: f90013a2 str x2, [x29,#32]
ffff8000113a7578: 94000000 bl 0 <_mcount>
ffff8000113a7578: R_AARCH64_CALL26 _mcount
return __netdev_upper_dev_link(dev, upper_dev, false,
ffff8000113a757c: f94017a1 ldr x1, [x29,#40]
ffff8000113a7580: d2800003 mov x3, #0x0 // #0
ffff8000113a7584: f94013a5 ldr x5, [x29,#32]
ffff8000113a7588: aa1303e0 mov x0, x19
ffff8000113a758c: 52800002 mov w2, #0x0 // #0
ffff8000113a7590: aa0303e4 mov x4, x3
ffff8000113a7594: 97ffff46 bl ffff8000113a72ac <__netdev_upper_dev_link>
}
ffff8000113a7598: f9400bf3 ldr x19, [sp,#16]
ffff8000113a759c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a75a0: d65f03c0 ret
ffff8000113a75a4 <netdev_adjacent_change_prepare>:
{
ffff8000113a75a4: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a75a8: 910003fd mov x29, sp
ffff8000113a75ac: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a75b0: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a75b4: aa0003f5 mov x21, x0
ffff8000113a75b8: aa0103f3 mov x19, x1
ffff8000113a75bc: aa1e03e0 mov x0, x30
ffff8000113a75c0: aa0203f4 mov x20, x2
ffff8000113a75c4: aa0303f6 mov x22, x3
ffff8000113a75c8: 94000000 bl 0 <_mcount>
ffff8000113a75c8: R_AARCH64_CALL26 _mcount
if (!new_dev)
ffff8000113a75cc: b40003f3 cbz x19, ffff8000113a7648 <netdev_adjacent_change_prepare+0xa4>
if (old_dev && new_dev != old_dev)
ffff8000113a75d0: eb15027f cmp x19, x21
ffff8000113a75d4: 540001e1 b.ne ffff8000113a7610 <netdev_adjacent_change_prepare+0x6c>
return __netdev_upper_dev_link(dev, upper_dev, false,
ffff8000113a75d8: d2800003 mov x3, #0x0 // #0
ffff8000113a75dc: aa1303e0 mov x0, x19
ffff8000113a75e0: aa1403e1 mov x1, x20
ffff8000113a75e4: 52800002 mov w2, #0x0 // #0
ffff8000113a75e8: aa0303e4 mov x4, x3
ffff8000113a75ec: aa1603e5 mov x5, x22
ffff8000113a75f0: 97ffff2f bl ffff8000113a72ac <__netdev_upper_dev_link>
ffff8000113a75f4: 2a0003f3 mov w19, w0
if (err) {
ffff8000113a75f8: 34000280 cbz w0, ffff8000113a7648 <netdev_adjacent_change_prepare+0xa4>
}
ffff8000113a75fc: 2a1303e0 mov w0, w19
ffff8000113a7600: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a7604: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a7608: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a760c: d65f03c0 ret
if (old_dev && new_dev != old_dev)
ffff8000113a7610: b4fffe55 cbz x21, ffff8000113a75d8 <netdev_adjacent_change_prepare+0x34>
__netdev_adjacent_dev_set(upper_dev, lower_dev, true);
ffff8000113a7614: 52800022 mov w2, #0x1 // #1
ffff8000113a7618: aa1403e0 mov x0, x20
ffff8000113a761c: aa1503e1 mov x1, x21
ffff8000113a7620: 97ffdec4 bl ffff80001139f130 <__netdev_adjacent_dev_set>
return __netdev_upper_dev_link(dev, upper_dev, false,
ffff8000113a7624: d2800003 mov x3, #0x0 // #0
ffff8000113a7628: aa1303e0 mov x0, x19
ffff8000113a762c: aa1403e1 mov x1, x20
ffff8000113a7630: 52800002 mov w2, #0x0 // #0
ffff8000113a7634: aa0303e4 mov x4, x3
ffff8000113a7638: aa1603e5 mov x5, x22
ffff8000113a763c: 97ffff1c bl ffff8000113a72ac <__netdev_upper_dev_link>
ffff8000113a7640: 2a0003f3 mov w19, w0
if (err) {
ffff8000113a7644: 350000e0 cbnz w0, ffff8000113a7660 <netdev_adjacent_change_prepare+0xbc>
return 0;
ffff8000113a7648: 52800013 mov w19, #0x0 // #0
}
ffff8000113a764c: 2a1303e0 mov w0, w19
ffff8000113a7650: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a7654: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a7658: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a765c: d65f03c0 ret
__netdev_adjacent_dev_set(upper_dev, lower_dev, false);
ffff8000113a7660: aa1403e0 mov x0, x20
ffff8000113a7664: aa1503e1 mov x1, x21
ffff8000113a7668: 52800002 mov w2, #0x0 // #0
ffff8000113a766c: 97ffdeb1 bl ffff80001139f130 <__netdev_adjacent_dev_set>
}
ffff8000113a7670: 2a1303e0 mov w0, w19
ffff8000113a7674: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a7678: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a767c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a7680: d65f03c0 ret
ffff8000113a7684 <netdev_master_upper_dev_link>:
{
ffff8000113a7684: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a7688: 910003fd mov x29, sp
ffff8000113a768c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a7690: f90013f5 str x21, [sp,#32]
ffff8000113a7694: aa0003f5 mov x21, x0
ffff8000113a7698: aa1e03e0 mov x0, x30
ffff8000113a769c: aa0203f4 mov x20, x2
ffff8000113a76a0: aa0303f3 mov x19, x3
ffff8000113a76a4: f9001fa1 str x1, [x29,#56]
ffff8000113a76a8: f9001ba4 str x4, [x29,#48]
ffff8000113a76ac: 94000000 bl 0 <_mcount>
ffff8000113a76ac: R_AARCH64_CALL26 _mcount
return __netdev_upper_dev_link(dev, upper_dev, true,
ffff8000113a76b0: f9401fa1 ldr x1, [x29,#56]
ffff8000113a76b4: f9401ba5 ldr x5, [x29,#48]
ffff8000113a76b8: aa1403e3 mov x3, x20
ffff8000113a76bc: aa1303e4 mov x4, x19
ffff8000113a76c0: aa1503e0 mov x0, x21
ffff8000113a76c4: 52800022 mov w2, #0x1 // #1
ffff8000113a76c8: 97fffef9 bl ffff8000113a72ac <__netdev_upper_dev_link>
}
ffff8000113a76cc: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a76d0: f94013f5 ldr x21, [sp,#32]
ffff8000113a76d4: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a76d8: d65f03c0 ret
ffff8000113a76dc <__netif_set_xps_queue>:
{
ffff8000113a76dc: a9b37bfd stp x29, x30, [sp,#-208]!
ffff8000113a76e0: 910003fd mov x29, sp
ffff8000113a76e4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a76e8: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a76ec: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a76f0: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113a76f4: a90573fb stp x27, x28, [sp,#80]
ffff8000113a76f8: f9004fa0 str x0, [x29,#152]
ffff8000113a76fc: 53001c63 uxtb w3, w3
ffff8000113a7700: aa1e03e0 mov x0, x30
ffff8000113a7704: f90057a1 str x1, [x29,#168]
ffff8000113a7708: 53003c54 uxth w20, w2
ffff8000113a770c: b900c3a3 str w3, [x29,#192]
ffff8000113a7710: 94000000 bl 0 <_mcount>
ffff8000113a7710: R_AARCH64_CALL26 _mcount
if (dev->num_tc) {
ffff8000113a7714: f9404fa4 ldr x4, [x29,#152]
ffff8000113a7718: 79d09085 ldrsh w5, [x4,#2120]
ffff8000113a771c: 34003be5 cbz w5, ffff8000113a7e98 <__netif_set_xps_queue+0x7bc>
num_tc = dev->num_tc;
ffff8000113a7720: 2a0503f5 mov w21, w5
if (num_tc < 0)
ffff8000113a7724: 37f82e05 tbnz w5, #31, ffff8000113a7ce4 <__netif_set_xps_queue+0x608>
return &dev->_tx[index];
ffff8000113a7728: f941e081 ldr x1, [x4,#960]
ffff8000113a772c: 52802800 mov w0, #0x140 // #320
ffff8000113a7730: 9ba07e80 umull x0, w20, w0
ffff8000113a7734: 8b000020 add x0, x1, x0
dev = netdev_get_tx_queue(dev, index)->sb_dev ? : dev;
ffff8000113a7738: f9403804 ldr x4, [x0,#112]
ffff8000113a773c: b4002ba4 cbz x4, ffff8000113a7cb0 <__netif_set_xps_queue+0x5d4>
if (dev->num_tc) {
ffff8000113a7740: 79d09096 ldrsh w22, [x4,#2120]
ffff8000113a7744: 35002b96 cbnz w22, ffff8000113a7cb4 <__netif_set_xps_queue+0x5d8>
ffff8000113a7748: 2a0503f3 mov w19, w5
ffff8000113a774c: f9004fa4 str x4, [x29,#152]
mutex_lock(&xps_map_mutex);
ffff8000113a7750: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a7750: R_AARCH64_ADR_PREL_PG_HI21 .data
ffff8000113a7754: 91000020 add x0, x1, #0x0
ffff8000113a7754: R_AARCH64_ADD_ABS_LO12_NC .data
ffff8000113a7758: 91024000 add x0, x0, #0x90
ffff8000113a775c: 94000000 bl 0 <mutex_lock>
ffff8000113a775c: R_AARCH64_CALL26 mutex_lock
if (is_rxqs_map) {
ffff8000113a7760: b940c3a4 ldr w4, [x29,#192]
ffff8000113a7764: 34003ac4 cbz w4, ffff8000113a7ebc <__netif_set_xps_queue+0x7e0>
maps_sz = XPS_RXQ_DEV_MAPS_SIZE(num_tc, dev->num_rx_queues);
ffff8000113a7768: f9404fa4 ldr x4, [x29,#152]
const unsigned long *online_mask = NULL, *possible_mask = NULL;
ffff8000113a776c: d2800019 mov x25, #0x0 // #0
maps_sz = XPS_RXQ_DEV_MAPS_SIZE(num_tc, dev->num_rx_queues);
ffff8000113a7770: b9432897 ldr w23, [x4,#808]
ffff8000113a7774: f94057a4 ldr x4, [x29,#168]
ffff8000113a7778: 1b177e62 mul w2, w19, w23
ffff8000113a777c: eb1f009f cmp x4, xzr
dev_maps = xmap_dereference(dev->xps_rxqs_map);
ffff8000113a7780: f9404fa4 ldr x4, [x29,#152]
maps_sz = XPS_RXQ_DEV_MAPS_SIZE(num_tc, dev->num_rx_queues);
ffff8000113a7784: 91000842 add x2, x2, #0x2
ffff8000113a7788: 52800013 mov w19, #0x0 // #0
dev_maps = xmap_dereference(dev->xps_rxqs_map);
ffff8000113a778c: f941f89a ldr x26, [x4,#1008]
ffff8000113a7790: 1a9f07e4 cset w4, ne
maps_sz = XPS_RXQ_DEV_MAPS_SIZE(num_tc, dev->num_rx_queues);
ffff8000113a7794: 531d7042 lsl w2, w2, #3
ffff8000113a7798: b900cba4 str w4, [x29,#200]
ffff8000113a779c: b900c7b3 str w19, [x29,#196]
const unsigned long *online_mask = NULL, *possible_mask = NULL;
ffff8000113a77a0: f9005bb9 str x25, [x29,#176]
maps_sz = L1_CACHE_BYTES;
ffff8000113a77a4: 52800800 mov w0, #0x40 // #64
ffff8000113a77a8: 7100fc5f cmp w2, #0x3f
ffff8000113a77ac: 1a80c042 csel w2, w2, w0, gt
new_dev_maps = kzalloc(maps_sz, GFP_KERNEL);
ffff8000113a77b0: 93407c42 sxtw x2, w2
#endif
#ifndef cpu_to_node
static inline int cpu_to_node(int cpu)
{
return per_cpu(numa_node, cpu);
ffff8000113a77b4: 90000000 adrp x0, 0 <numa_node>
ffff8000113a77b4: R_AARCH64_ADR_PREL_PG_HI21 numa_node
ffff8000113a77b8: 91000000 add x0, x0, #0x0
ffff8000113a77b8: R_AARCH64_ADD_ABS_LO12_NC numa_node
ffff8000113a77bc: f90053a2 str x2, [x29,#160]
ffff8000113a77c0: f9005fa0 str x0, [x29,#184]
for (j = -1; j = netif_attrmask_next_and(j, online_mask, mask, nr_ids),
ffff8000113a77c4: 12800007 mov w7, #0xffffffff // #-1
struct xps_dev_maps *dev_maps, *new_dev_maps = NULL;
ffff8000113a77c8: d280001c mov x28, #0x0 // #0
return find_next_bit(src2p, nr_bits, n + 1);
ffff8000113a77cc: 2a1703f8 mov w24, w23
if (src1p && src2p)
ffff8000113a77d0: 350004b3 cbnz w19, ffff8000113a7864 <__netif_set_xps_queue+0x188>
else if (src1p)
ffff8000113a77d4: b940c7a4 ldr w4, [x29,#196]
ffff8000113a77d8: 34002964 cbz w4, ffff8000113a7d04 <__netif_set_xps_queue+0x628>
return find_next_bit(src1p, nr_bits, n + 1);
ffff8000113a77dc: 110004e2 add w2, w7, #0x1
ffff8000113a77e0: f9405ba0 ldr x0, [x29,#176]
ffff8000113a77e4: aa1803e1 mov x1, x24
ffff8000113a77e8: 93407c42 sxtw x2, w2
ffff8000113a77ec: 94000000 bl 0 <find_next_bit>
ffff8000113a77ec: R_AARCH64_CALL26 find_next_bit
ffff8000113a77f0: 2a0003e7 mov w7, w0
for (j = -1; j = netif_attrmask_next_and(j, online_mask, mask, nr_ids),
ffff8000113a77f4: 6b0702ff cmp w23, w7
ffff8000113a77f8: 54000489 b.ls ffff8000113a7888 <__netif_set_xps_queue+0x1ac>
if (!new_dev_maps)
ffff8000113a77fc: b400315c cbz x28, ffff8000113a7e24 <__netif_set_xps_queue+0x748>
tci = j * num_tc + tc;
ffff8000113a7800: 1b077ea9 mul w9, w21, w7
ffff8000113a7804: 0b160129 add w9, w9, w22
map = dev_maps ? xmap_dereference(dev_maps->attr_map[tci]) :
ffff8000113a7808: b400291a cbz x26, ffff8000113a7d28 <__netif_set_xps_queue+0x64c>
ffff8000113a780c: 93407d28 sxtw x8, w9
ffff8000113a7810: 91000900 add x0, x8, #0x2
ffff8000113a7814: f8607b5b ldr x27, [x26,x0,lsl #3]
for (pos = 0; map && pos < map->len; pos++) {
ffff8000113a7818: b400467b cbz x27, ffff8000113a80e4 <__netif_set_xps_queue+0xa08>
ffff8000113a781c: b9400362 ldr w2, [x27]
ffff8000113a7820: 34003382 cbz w2, ffff8000113a7e90 <__netif_set_xps_queue+0x7b4>
if (map->queues[pos] != index)
ffff8000113a7824: 79403360 ldrh w0, [x27,#24]
for (pos = 0; map && pos < map->len; pos++) {
ffff8000113a7828: 52800023 mov w3, #0x1 // #1
if (map->queues[pos] != index)
ffff8000113a782c: 6b14001f cmp w0, w20
ffff8000113a7830: 54000100 b.eq ffff8000113a7850 <__netif_set_xps_queue+0x174>
for (pos = 0; map && pos < map->len; pos++) {
ffff8000113a7834: 6b02007f cmp w3, w2
if (map->queues[pos] != index)
ffff8000113a7838: 8b23c761 add x1, x27, w3, sxtw #1
for (pos = 0; map && pos < map->len; pos++) {
ffff8000113a783c: 54002c00 b.eq ffff8000113a7dbc <__netif_set_xps_queue+0x6e0>
if (map->queues[pos] != index)
ffff8000113a7840: 79403021 ldrh w1, [x1,#24]
for (pos = 0; map && pos < map->len; pos++) {
ffff8000113a7844: 11000463 add w3, w3, #0x1
if (map->queues[pos] != index)
ffff8000113a7848: 6b14003f cmp w1, w20
ffff8000113a784c: 54ffff41 b.ne ffff8000113a7834 <__netif_set_xps_queue+0x158>
if (pos < map->alloc_len)
ffff8000113a7850: aa1b03e6 mov x6, x27
RCU_INIT_POINTER(new_dev_maps->attr_map[tci], map);
ffff8000113a7854: 91000908 add x8, x8, #0x2
ffff8000113a7858: d37df108 lsl x8, x8, #3
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113a785c: f8286b86 str x6, [x28,x8]
if (src1p && src2p)
ffff8000113a7860: 34fffbb3 cbz w19, ffff8000113a77d4 <__netif_set_xps_queue+0xf8>
return find_next_and_bit(src1p, src2p, nr_bits, n + 1);
ffff8000113a7864: 110004e3 add w3, w7, #0x1
ffff8000113a7868: f9405ba0 ldr x0, [x29,#176]
ffff8000113a786c: f94057a1 ldr x1, [x29,#168]
ffff8000113a7870: aa1803e2 mov x2, x24
ffff8000113a7874: 93407c63 sxtw x3, w3
ffff8000113a7878: 94000000 bl 0 <find_next_and_bit>
ffff8000113a7878: R_AARCH64_CALL26 find_next_and_bit
ffff8000113a787c: 2a0003e7 mov w7, w0
for (j = -1; j = netif_attrmask_next_and(j, online_mask, mask, nr_ids),
ffff8000113a7880: 6b0702ff cmp w23, w7
ffff8000113a7884: 54fffbc8 b.hi ffff8000113a77fc <__netif_set_xps_queue+0x120>
ffff8000113a7888: aa1c03f3 mov x19, x28
if (!new_dev_maps)
ffff8000113a788c: b400393c cbz x28, ffff8000113a7fb0 <__netif_set_xps_queue+0x8d4>
if (!dev_maps) {
ffff8000113a7890: b4003fda cbz x26, ffff8000113a8088 <__netif_set_xps_queue+0x9ac>
ffff8000113a7894: 90000018 adrp x24, 0 <numa_node>
ffff8000113a7894: R_AARCH64_ADR_PREL_PG_HI21 numa_node
numa_node_id = -1;
ffff8000113a7898: 12800023 mov w3, #0xfffffffe // #-2
ffff8000113a789c: 9100031b add x27, x24, #0x0
ffff8000113a789c: R_AARCH64_ADD_ABS_LO12_NC numa_node
ffff8000113a78a0: b900bba3 str w3, [x29,#184]
ffff8000113a78a4: 12800008 mov w8, #0xffffffff // #-1
return find_next_bit(srcp, nr_bits, n + 1);
ffff8000113a78a8: 2a1703f3 mov w19, w23
for (i = num_tc - tc, tci++; dev_maps && --i; tci++) {
ffff8000113a78ac: 4b1602b8 sub w24, w21, w22
ffff8000113a78b0: f90067bb str x27, [x29,#200]
if (srcp)
ffff8000113a78b4: b4000c59 cbz x25, ffff8000113a7a3c <__netif_set_xps_queue+0x360>
return find_next_bit(srcp, nr_bits, n + 1);
ffff8000113a78b8: 11000502 add w2, w8, #0x1
ffff8000113a78bc: aa1903e0 mov x0, x25
ffff8000113a78c0: aa1303e1 mov x1, x19
ffff8000113a78c4: 93407c42 sxtw x2, w2
ffff8000113a78c8: 94000000 bl 0 <find_next_bit>
ffff8000113a78c8: R_AARCH64_CALL26 find_next_bit
for (j = -1; j = netif_attrmask_next(j, possible_mask, nr_ids),
ffff8000113a78cc: 6b0002ff cmp w23, w0
ffff8000113a78d0: 2a0003e8 mov w8, w0
ffff8000113a78d4: 54000bc9 b.ls ffff8000113a7a4c <__netif_set_xps_queue+0x370>
for (i = tc, tci = j * num_tc; dev_maps && i--; tci++) {
ffff8000113a78d8: 1b157c06 mul w6, w0, w21
ffff8000113a78dc: b40034fa cbz x26, ffff8000113a7f78 <__netif_set_xps_queue+0x89c>
ffff8000113a78e0: 34000236 cbz w22, ffff8000113a7924 <__netif_set_xps_queue+0x248>
map = xmap_dereference(dev_maps->attr_map[tci]);
ffff8000113a78e4: 93407cc1 sxtw x1, w6
ffff8000113a78e8: 91000821 add x1, x1, #0x2
RCU_INIT_POINTER(new_dev_maps->attr_map[tci], map);
ffff8000113a78ec: f8617b42 ldr x2, [x26,x1,lsl #3]
ffff8000113a78f0: d37df021 lsl x1, x1, #3
ffff8000113a78f4: f8216b82 str x2, [x28,x1]
for (i = tc, tci = j * num_tc; dev_maps && i--; tci++) {
ffff8000113a78f8: 110004c1 add w1, w6, #0x1
ffff8000113a78fc: 0b1600c6 add w6, w6, w22
ffff8000113a7900: 14000004 b ffff8000113a7910 <__netif_set_xps_queue+0x234>
RCU_INIT_POINTER(new_dev_maps->attr_map[tci], map);
ffff8000113a7904: f8627b42 ldr x2, [x26,x2,lsl #3]
for (i = tc, tci = j * num_tc; dev_maps && i--; tci++) {
ffff8000113a7908: 11000421 add w1, w1, #0x1
ffff8000113a790c: f8236b82 str x2, [x28,x3]
map = xmap_dereference(dev_maps->attr_map[tci]);
ffff8000113a7910: 93407c22 sxtw x2, w1
ffff8000113a7914: 91000842 add x2, x2, #0x2
for (i = tc, tci = j * num_tc; dev_maps && i--; tci++) {
ffff8000113a7918: 6b06003f cmp w1, w6
RCU_INIT_POINTER(new_dev_maps->attr_map[tci], map);
ffff8000113a791c: d37df043 lsl x3, x2, #3
for (i = tc, tci = j * num_tc; dev_maps && i--; tci++) {
ffff8000113a7920: 54ffff21 b.ne ffff8000113a7904 <__netif_set_xps_queue+0x228>
ffff8000113a7924: 1100fc02 add w2, w0, #0x3f
ffff8000113a7928: 6b1f001f cmp w0, wzr
ffff8000113a792c: 1a80b042 csel w2, w2, w0, lt
ffff8000113a7930: 13067c42 asr w2, w2, #6
ffff8000113a7934: f94057a4 ldr x4, [x29,#168]
ffff8000113a7938: 937d7c42 sbfiz x2, x2, #3, #32
ffff8000113a793c: f8626883 ldr x3, [x4,x2]
ffff8000113a7940: 12001401 and w1, w0, #0x3f
ffff8000113a7944: 9ac12463 lsr x3, x3, x1
if (netif_attr_test_mask(j, mask, nr_ids) &&
ffff8000113a7948: 36002943 tbz w3, #0, ffff8000113a7e70 <__netif_set_xps_queue+0x794>
if (online_mask)
ffff8000113a794c: b940c7a4 ldr w4, [x29,#196]
ffff8000113a7950: 34002ee4 cbz w4, ffff8000113a7f2c <__netif_set_xps_queue+0x850>
ffff8000113a7954: f9405ba4 ldr x4, [x29,#176]
ffff8000113a7958: f8626882 ldr x2, [x4,x2]
ffff8000113a795c: 9ac12441 lsr x1, x2, x1
return test_bit(j, online_mask);
ffff8000113a7960: 12000021 and w1, w1, #0x1
ffff8000113a7964: 34002861 cbz w1, ffff8000113a7e70 <__netif_set_xps_queue+0x794>
map = xmap_dereference(new_dev_maps->attr_map[tci]);
ffff8000113a7968: 8b26cf81 add x1, x28, w6, sxtw #3
ffff8000113a796c: f9400823 ldr x3, [x1,#16]
while ((pos < map->len) && (map->queues[pos] != index))
ffff8000113a7970: b9400069 ldr w9, [x3]
ffff8000113a7974: 34002e29 cbz w9, ffff8000113a7f38 <__netif_set_xps_queue+0x85c>
ffff8000113a7978: 79403061 ldrh w1, [x3,#24]
ffff8000113a797c: 6b14003f cmp w1, w20
ffff8000113a7980: 54000180 b.eq ffff8000113a79b0 <__netif_set_xps_queue+0x2d4>
int pos = 0;
ffff8000113a7984: 52800001 mov w1, #0x0 // #0
ffff8000113a7988: 14000004 b ffff8000113a7998 <__netif_set_xps_queue+0x2bc>
while ((pos < map->len) && (map->queues[pos] != index))
ffff8000113a798c: 79403042 ldrh w2, [x2,#24]
ffff8000113a7990: 6b14005f cmp w2, w20
ffff8000113a7994: 540000a0 b.eq ffff8000113a79a8 <__netif_set_xps_queue+0x2cc>
pos++;
ffff8000113a7998: 11000421 add w1, w1, #0x1
while ((pos < map->len) && (map->queues[pos] != index))
ffff8000113a799c: 6b09003f cmp w1, w9
ffff8000113a79a0: 8b21c462 add x2, x3, w1, sxtw #1
ffff8000113a79a4: 54ffff41 b.ne ffff8000113a798c <__netif_set_xps_queue+0x2b0>
if (pos == map->len)
ffff8000113a79a8: 6b09003f cmp w1, w9
ffff8000113a79ac: 54002c60 b.eq ffff8000113a7f38 <__netif_set_xps_queue+0x85c>
if (!is_rxqs_map) {
ffff8000113a79b0: b940c3a4 ldr w4, [x29,#192]
ffff8000113a79b4: 35000184 cbnz w4, ffff8000113a79e4 <__netif_set_xps_queue+0x308>
if (numa_node_id == -2)
ffff8000113a79b8: b940bba3 ldr w3, [x29,#184]
ffff8000113a79bc: 90000001 adrp x1, 0 <__per_cpu_offset>
ffff8000113a79bc: R_AARCH64_ADR_PREL_PG_HI21 __per_cpu_offset
ffff8000113a79c0: 91000021 add x1, x1, #0x0
ffff8000113a79c0: R_AARCH64_ADD_ABS_LO12_NC __per_cpu_offset
ffff8000113a79c4: 3100087f cmn w3, #0x2
ffff8000113a79c8: f860d820 ldr x0, [x1,w0,sxtw #3]
ffff8000113a79cc: 54002da0 b.eq ffff8000113a7f80 <__netif_set_xps_queue+0x8a4>
numa_node_id = -1;
ffff8000113a79d0: b940bba3 ldr w3, [x29,#184]
else if (numa_node_id != cpu_to_node(j))
ffff8000113a79d4: b8606b60 ldr w0, [x27,x0]
numa_node_id = -1;
ffff8000113a79d8: 6b00007f cmp w3, w0
ffff8000113a79dc: 5a9f0063 csinv w3, w3, wzr, eq
ffff8000113a79e0: b900bba3 str w3, [x29,#184]
for (i = num_tc - tc, tci++; dev_maps && --i; tci++) {
ffff8000113a79e4: 110004c0 add w0, w6, #0x1
ffff8000113a79e8: b4fff67a cbz x26, ffff8000113a78b4 <__netif_set_xps_queue+0x1d8>
ffff8000113a79ec: 7100071f cmp w24, #0x1
ffff8000113a79f0: 54fff620 b.eq ffff8000113a78b4 <__netif_set_xps_queue+0x1d8>
map = xmap_dereference(dev_maps->attr_map[tci]);
ffff8000113a79f4: 93407c01 sxtw x1, w0
ffff8000113a79f8: 91000821 add x1, x1, #0x2
RCU_INIT_POINTER(new_dev_maps->attr_map[tci], map);
ffff8000113a79fc: f8617b42 ldr x2, [x26,x1,lsl #3]
ffff8000113a7a00: 0b180003 add w3, w0, w24
ffff8000113a7a04: d37df021 lsl x1, x1, #3
ffff8000113a7a08: f8216b82 str x2, [x28,x1]
for (i = num_tc - tc, tci++; dev_maps && --i; tci++) {
ffff8000113a7a0c: 11000400 add w0, w0, #0x1
ffff8000113a7a10: 51000463 sub w3, w3, #0x1
ffff8000113a7a14: 14000004 b ffff8000113a7a24 <__netif_set_xps_queue+0x348>
RCU_INIT_POINTER(new_dev_maps->attr_map[tci], map);
ffff8000113a7a18: f8617b41 ldr x1, [x26,x1,lsl #3]
for (i = num_tc - tc, tci++; dev_maps && --i; tci++) {
ffff8000113a7a1c: 11000400 add w0, w0, #0x1
ffff8000113a7a20: f8226b81 str x1, [x28,x2]
map = xmap_dereference(dev_maps->attr_map[tci]);
ffff8000113a7a24: 93407c01 sxtw x1, w0
ffff8000113a7a28: 91000821 add x1, x1, #0x2
for (i = num_tc - tc, tci++; dev_maps && --i; tci++) {
ffff8000113a7a2c: 6b03001f cmp w0, w3
RCU_INIT_POINTER(new_dev_maps->attr_map[tci], map);
ffff8000113a7a30: d37df022 lsl x2, x1, #3
for (i = num_tc - tc, tci++; dev_maps && --i; tci++) {
ffff8000113a7a34: 54ffff21 b.ne ffff8000113a7a18 <__netif_set_xps_queue+0x33c>
if (srcp)
ffff8000113a7a38: b5fff419 cbnz x25, ffff8000113a78b8 <__netif_set_xps_queue+0x1dc>
return n + 1;
ffff8000113a7a3c: 11000500 add w0, w8, #0x1
for (j = -1; j = netif_attrmask_next(j, possible_mask, nr_ids),
ffff8000113a7a40: 6b0002ff cmp w23, w0
ffff8000113a7a44: 2a0003e8 mov w8, w0
ffff8000113a7a48: 54fff488 b.hi ffff8000113a78d8 <__netif_set_xps_queue+0x1fc>
if (is_rxqs_map)
ffff8000113a7a4c: b940c3a4 ldr w4, [x29,#192]
ffff8000113a7a50: 340027e4 cbz w4, ffff8000113a7f4c <__netif_set_xps_queue+0x870>
rcu_assign_pointer(dev->xps_rxqs_map, new_dev_maps);
ffff8000113a7a54: f9404fa4 ldr x4, [x29,#152]
ffff8000113a7a58: 910fc080 add x0, x4, #0x3f0
ffff8000113a7a5c: c89ffc1c stlr x28, [x0]
if (!dev_maps)
ffff8000113a7a60: b4002b1a cbz x26, ffff8000113a7fc0 <__netif_set_xps_queue+0x8e4>
return find_next_bit(srcp, nr_bits, n + 1);
ffff8000113a7a64: 2a1703e3 mov w3, w23
ffff8000113a7a68: 12800013 mov w19, #0xffffffff // #-1
ffff8000113a7a6c: f90067a3 str x3, [x29,#200]
if (srcp)
ffff8000113a7a70: b4000359 cbz x25, ffff8000113a7ad8 <__netif_set_xps_queue+0x3fc>
return find_next_bit(srcp, nr_bits, n + 1);
ffff8000113a7a74: 11000662 add w2, w19, #0x1
ffff8000113a7a78: f94067a1 ldr x1, [x29,#200]
ffff8000113a7a7c: aa1903e0 mov x0, x25
ffff8000113a7a80: 93407c42 sxtw x2, w2
ffff8000113a7a84: 94000000 bl 0 <find_next_bit>
ffff8000113a7a84: R_AARCH64_CALL26 find_next_bit
for (j = -1; j = netif_attrmask_next(j, possible_mask, nr_ids),
ffff8000113a7a88: 6b0002ff cmp w23, w0
ffff8000113a7a8c: 2a0003f3 mov w19, w0
ffff8000113a7a90: 540002c9 b.ls ffff8000113a7ae8 <__netif_set_xps_queue+0x40c>
for (i = num_tc, tci = j * num_tc; i--; tci++) {
ffff8000113a7a94: 1b157e78 mul w24, w19, w21
ffff8000113a7a98: 2a1503fb mov w27, w21
ffff8000113a7a9c: 34fffeb5 cbz w21, ffff8000113a7a70 <__netif_set_xps_queue+0x394>
map = xmap_dereference(dev_maps->attr_map[tci]);
ffff8000113a7aa0: 93407f00 sxtw x0, w24
ffff8000113a7aa4: 91000800 add x0, x0, #0x2
ffff8000113a7aa8: f8607b46 ldr x6, [x26,x0,lsl #3]
if (map && map != new_map)
ffff8000113a7aac: f8607b80 ldr x0, [x28,x0,lsl #3]
for (i = num_tc, tci = j * num_tc; i--; tci++) {
ffff8000113a7ab0: 11000718 add w24, w24, #0x1
if (map && map != new_map)
ffff8000113a7ab4: eb06001f cmp x0, x6
ffff8000113a7ab8: 540000a0 b.eq ffff8000113a7acc <__netif_set_xps_queue+0x3f0>
kfree_rcu(map, rcu);
ffff8000113a7abc: 910020c0 add x0, x6, #0x8
ffff8000113a7ac0: d2800101 mov x1, #0x8 // #8
if (map && map != new_map)
ffff8000113a7ac4: b4000046 cbz x6, ffff8000113a7acc <__netif_set_xps_queue+0x3f0>
kfree_rcu(map, rcu);
ffff8000113a7ac8: 94000000 bl 0 <kfree_call_rcu>
ffff8000113a7ac8: R_AARCH64_CALL26 kfree_call_rcu
for (i = num_tc, tci = j * num_tc; i--; tci++) {
ffff8000113a7acc: 7100077b subs w27, w27, #0x1
ffff8000113a7ad0: 54fffe81 b.ne ffff8000113a7aa0 <__netif_set_xps_queue+0x3c4>
if (srcp)
ffff8000113a7ad4: b5fffd19 cbnz x25, ffff8000113a7a74 <__netif_set_xps_queue+0x398>
return n + 1;
ffff8000113a7ad8: 11000660 add w0, w19, #0x1
for (j = -1; j = netif_attrmask_next(j, possible_mask, nr_ids),
ffff8000113a7adc: 6b0002ff cmp w23, w0
ffff8000113a7ae0: 2a0003f3 mov w19, w0
ffff8000113a7ae4: 54fffd88 b.hi ffff8000113a7a94 <__netif_set_xps_queue+0x3b8>
kfree_rcu(dev_maps, rcu);
ffff8000113a7ae8: aa1a03e0 mov x0, x26
ffff8000113a7aec: d2800001 mov x1, #0x0 // #0
ffff8000113a7af0: 94000000 bl 0 <kfree_call_rcu>
ffff8000113a7af0: R_AARCH64_CALL26 kfree_call_rcu
active = true;
ffff8000113a7af4: 52800033 mov w19, #0x1 // #1
if (!is_rxqs_map) {
ffff8000113a7af8: b940c3a4 ldr w4, [x29,#192]
ffff8000113a7afc: 35000144 cbnz w4, ffff8000113a7b24 <__netif_set_xps_queue+0x448>
q->numa_node = node;
ffff8000113a7b00: f9404fa4 ldr x4, [x29,#152]
netdev_queue_numa_node_write(netdev_get_tx_queue(dev, index),
ffff8000113a7b04: b940bba3 ldr w3, [x29,#184]
ffff8000113a7b08: f941e081 ldr x1, [x4,#960]
return &dev->_tx[index];
ffff8000113a7b0c: 52802800 mov w0, #0x140 // #320
ffff8000113a7b10: 9ba07e80 umull x0, w20, w0
ffff8000113a7b14: 6b1f007f cmp w3, wzr
q->numa_node = node;
ffff8000113a7b18: 8b000020 add x0, x1, x0
ffff8000113a7b1c: 5a9fa07a csinv w26, w3, wzr, ge
ffff8000113a7b20: b900581a str w26, [x0,#88]
if (!dev_maps)
ffff8000113a7b24: b4000afc cbz x28, ffff8000113a7c80 <__netif_set_xps_queue+0x5a4>
ffff8000113a7b28: 12800004 mov w4, #0xffffffff // #-1
for (i = num_tc - tc, tci++; --i; tci++)
ffff8000113a7b2c: 4b1602a0 sub w0, w21, w22
if (!dev_maps)
ffff8000113a7b30: b900bba4 str w4, [x29,#184]
return find_next_bit(srcp, nr_bits, n + 1);
ffff8000113a7b34: 2a1703e3 mov w3, w23
for (i = tc, tci = j * num_tc; i--; tci++)
ffff8000113a7b38: 0b0402c4 add w4, w22, w4
for (i = num_tc - tc, tci++; --i; tci++)
ffff8000113a7b3c: 51000400 sub w0, w0, #0x1
ffff8000113a7b40: f90047a3 str x3, [x29,#136]
for (i = tc, tci = j * num_tc; i--; tci++)
ffff8000113a7b44: b90097a4 str w4, [x29,#148]
for (i = num_tc - tc, tci++; --i; tci++)
ffff8000113a7b48: b900a3a0 str w0, [x29,#160]
if (srcp)
ffff8000113a7b4c: b4000879 cbz x25, ffff8000113a7c58 <__netif_set_xps_queue+0x57c>
return find_next_bit(srcp, nr_bits, n + 1);
ffff8000113a7b50: b940bba3 ldr w3, [x29,#184]
ffff8000113a7b54: f94047a1 ldr x1, [x29,#136]
ffff8000113a7b58: 11000462 add w2, w3, #0x1
ffff8000113a7b5c: aa1903e0 mov x0, x25
ffff8000113a7b60: 93407c42 sxtw x2, w2
ffff8000113a7b64: 94000000 bl 0 <find_next_bit>
ffff8000113a7b64: R_AARCH64_CALL26 find_next_bit
ffff8000113a7b68: 2a0003f8 mov w24, w0
for (j = -1; j = netif_attrmask_next(j, possible_mask, nr_ids),
ffff8000113a7b6c: 6b1802ff cmp w23, w24
ffff8000113a7b70: b900bbb8 str w24, [x29,#184]
ffff8000113a7b74: 540007c9 b.ls ffff8000113a7c6c <__netif_set_xps_queue+0x590>
for (i = tc, tci = j * num_tc; i--; tci++)
ffff8000113a7b78: 1b157f03 mul w3, w24, w21
ffff8000113a7b7c: b900cba3 str w3, [x29,#200]
ffff8000113a7b80: 34000236 cbz w22, ffff8000113a7bc4 <__netif_set_xps_queue+0x4e8>
ffff8000113a7b84: 2a1603fa mov w26, w22
ffff8000113a7b88: 2a0303fb mov w27, w3
active |= remove_xps_queue(dev_maps, tci, index);
ffff8000113a7b8c: 2a1b03e1 mov w1, w27
ffff8000113a7b90: aa1c03e0 mov x0, x28
ffff8000113a7b94: 2a1403e2 mov w2, w20
ffff8000113a7b98: 97ffe121 bl ffff8000113a001c <remove_xps_queue>
ffff8000113a7b9c: 2a000260 orr w0, w19, w0
for (i = tc, tci = j * num_tc; i--; tci++)
ffff8000113a7ba0: 7100075a subs w26, w26, #0x1
active |= remove_xps_queue(dev_maps, tci, index);
ffff8000113a7ba4: 53001c13 uxtb w19, w0
for (i = tc, tci = j * num_tc; i--; tci++)
ffff8000113a7ba8: 1100077b add w27, w27, #0x1
ffff8000113a7bac: 54ffff01 b.ne ffff8000113a7b8c <__netif_set_xps_queue+0x4b0>
ffff8000113a7bb0: b940cba4 ldr w4, [x29,#200]
ffff8000113a7bb4: b94097a3 ldr w3, [x29,#148]
ffff8000113a7bb8: 1100049a add w26, w4, #0x1
ffff8000113a7bbc: 0b1a007a add w26, w3, w26
ffff8000113a7bc0: b900cbba str w26, [x29,#200]
ffff8000113a7bc4: 1100ff01 add w1, w24, #0x3f
ffff8000113a7bc8: 6b1f031f cmp w24, wzr
ffff8000113a7bcc: 1a98b021 csel w1, w1, w24, lt
ffff8000113a7bd0: 13067c21 asr w1, w1, #6
ffff8000113a7bd4: f94057a4 ldr x4, [x29,#168]
ffff8000113a7bd8: 937d7c21 sbfiz x1, x1, #3, #32
ffff8000113a7bdc: f8616882 ldr x2, [x4,x1]
ffff8000113a7be0: 12001700 and w0, w24, #0x3f
ffff8000113a7be4: 9ac02442 lsr x2, x2, x0
if (!netif_attr_test_mask(j, mask, nr_ids) ||
ffff8000113a7be8: 36000102 tbz w2, #0, ffff8000113a7c08 <__netif_set_xps_queue+0x52c>
if (online_mask)
ffff8000113a7bec: b940c7a4 ldr w4, [x29,#196]
ffff8000113a7bf0: 34001b64 cbz w4, ffff8000113a7f5c <__netif_set_xps_queue+0x880>
ffff8000113a7bf4: f9405ba4 ldr x4, [x29,#176]
ffff8000113a7bf8: f8616881 ldr x1, [x4,x1]
ffff8000113a7bfc: 9ac02420 lsr x0, x1, x0
return test_bit(j, online_mask);
ffff8000113a7c00: 12000000 and w0, w0, #0x1
ffff8000113a7c04: 350000e0 cbnz w0, ffff8000113a7c20 <__netif_set_xps_queue+0x544>
active |= remove_xps_queue(dev_maps, tci, index);
ffff8000113a7c08: b940cba1 ldr w1, [x29,#200]
ffff8000113a7c0c: aa1c03e0 mov x0, x28
ffff8000113a7c10: 2a1403e2 mov w2, w20
ffff8000113a7c14: 97ffe102 bl ffff8000113a001c <remove_xps_queue>
ffff8000113a7c18: 2a000260 orr w0, w19, w0
ffff8000113a7c1c: 53001c13 uxtb w19, w0
for (i = num_tc - tc, tci++; --i; tci++)
ffff8000113a7c20: b940cba4 ldr w4, [x29,#200]
ffff8000113a7c24: b940a3b8 ldr w24, [x29,#160]
ffff8000113a7c28: 1100049a add w26, w4, #0x1
ffff8000113a7c2c: 34fff918 cbz w24, ffff8000113a7b4c <__netif_set_xps_queue+0x470>
active |= remove_xps_queue(dev_maps, tci, index);
ffff8000113a7c30: 2a1a03e1 mov w1, w26
ffff8000113a7c34: aa1c03e0 mov x0, x28
ffff8000113a7c38: 2a1403e2 mov w2, w20
ffff8000113a7c3c: 97ffe0f8 bl ffff8000113a001c <remove_xps_queue>
ffff8000113a7c40: 2a000260 orr w0, w19, w0
for (i = num_tc - tc, tci++; --i; tci++)
ffff8000113a7c44: 71000718 subs w24, w24, #0x1
active |= remove_xps_queue(dev_maps, tci, index);
ffff8000113a7c48: 53001c13 uxtb w19, w0
for (i = num_tc - tc, tci++; --i; tci++)
ffff8000113a7c4c: 1100075a add w26, w26, #0x1
ffff8000113a7c50: 54ffff01 b.ne ffff8000113a7c30 <__netif_set_xps_queue+0x554>
if (srcp)
ffff8000113a7c54: b5fff7f9 cbnz x25, ffff8000113a7b50 <__netif_set_xps_queue+0x474>
return n + 1;
ffff8000113a7c58: b940bba4 ldr w4, [x29,#184]
ffff8000113a7c5c: 11000498 add w24, w4, #0x1
for (j = -1; j = netif_attrmask_next(j, possible_mask, nr_ids),
ffff8000113a7c60: 6b1802ff cmp w23, w24
ffff8000113a7c64: b900bbb8 str w24, [x29,#184]
ffff8000113a7c68: 54fff888 b.hi ffff8000113a7b78 <__netif_set_xps_queue+0x49c>
if (!active)
ffff8000113a7c6c: 350000b3 cbnz w19, ffff8000113a7c80 <__netif_set_xps_queue+0x5a4>
reset_xps_maps(dev, dev_maps, is_rxqs_map);
ffff8000113a7c70: f9404fa0 ldr x0, [x29,#152]
ffff8000113a7c74: 394303a2 ldrb w2, [x29,#192]
ffff8000113a7c78: aa1c03e1 mov x1, x28
ffff8000113a7c7c: 97fff2a1 bl ffff8000113a4700 <reset_xps_maps>
mutex_unlock(&xps_map_mutex);
ffff8000113a7c80: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a7c80: R_AARCH64_ADR_PREL_PG_HI21 .data
ffff8000113a7c84: 91000020 add x0, x1, #0x0
ffff8000113a7c84: R_AARCH64_ADD_ABS_LO12_NC .data
ffff8000113a7c88: 91024000 add x0, x0, #0x90
ffff8000113a7c8c: 94000000 bl 0 <mutex_unlock>
ffff8000113a7c8c: R_AARCH64_CALL26 mutex_unlock
}
ffff8000113a7c90: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a7c94: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a7c98: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a7c9c: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a7ca0: a94573fb ldp x27, x28, [sp,#80]
return 0;
ffff8000113a7ca4: 52800000 mov w0, #0x0 // #0
}
ffff8000113a7ca8: a8cd7bfd ldp x29, x30, [sp],#208
ffff8000113a7cac: d65f03c0 ret
dev = netdev_get_tx_queue(dev, index)->sb_dev ? : dev;
ffff8000113a7cb0: f9404fa4 ldr x4, [x29,#152]
struct netdev_tc_txq *tc = &dev->tc_to_txq[0];
ffff8000113a7cb4: 91212880 add x0, x4, #0x84a
ffff8000113a7cb8: 91222883 add x3, x4, #0x88a
for (i = 0; i < TC_MAX_QUEUE; i++, tc++) {
ffff8000113a7cbc: 52800016 mov w22, #0x0 // #0
if ((txq - tc->offset) < tc->count)
ffff8000113a7cc0: 79400402 ldrh w2, [x0,#2]
ffff8000113a7cc4: 79400001 ldrh w1, [x0]
ffff8000113a7cc8: 4b020282 sub w2, w20, w2
ffff8000113a7ccc: 6b01005f cmp w2, w1
for (i = 0; i < TC_MAX_QUEUE; i++, tc++) {
ffff8000113a7cd0: 91001000 add x0, x0, #0x4
if ((txq - tc->offset) < tc->count)
ffff8000113a7cd4: 540014c3 b.cc ffff8000113a7f6c <__netif_set_xps_queue+0x890>
for (i = 0; i < TC_MAX_QUEUE; i++, tc++) {
ffff8000113a7cd8: eb03001f cmp x0, x3
ffff8000113a7cdc: 110006d6 add w22, w22, #0x1
ffff8000113a7ce0: 54ffff01 b.ne ffff8000113a7cc0 <__netif_set_xps_queue+0x5e4>
}
ffff8000113a7ce4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a7ce8: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a7cec: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a7cf0: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a7cf4: a94573fb ldp x27, x28, [sp,#80]
return -EINVAL;
ffff8000113a7cf8: 128002a0 mov w0, #0xffffffea // #-22
}
ffff8000113a7cfc: a8cd7bfd ldp x29, x30, [sp],#208
ffff8000113a7d00: d65f03c0 ret
else if (src2p)
ffff8000113a7d04: b940cba4 ldr w4, [x29,#200]
ffff8000113a7d08: 34000564 cbz w4, ffff8000113a7db4 <__netif_set_xps_queue+0x6d8>
return find_next_bit(src2p, nr_bits, n + 1);
ffff8000113a7d0c: 110004e2 add w2, w7, #0x1
ffff8000113a7d10: f94057a0 ldr x0, [x29,#168]
ffff8000113a7d14: aa1803e1 mov x1, x24
ffff8000113a7d18: 93407c42 sxtw x2, w2
ffff8000113a7d1c: 94000000 bl 0 <find_next_bit>
ffff8000113a7d1c: R_AARCH64_CALL26 find_next_bit
ffff8000113a7d20: 2a0003e7 mov w7, w0
ffff8000113a7d24: 17fffeb4 b ffff8000113a77f4 <__netif_set_xps_queue+0x118>
ffff8000113a7d28: d2800800 mov x0, #0x40 // #64
ffff8000113a7d2c: aa1a03fb mov x27, x26
ffff8000113a7d30: 2a1a03e3 mov w3, w26
int alloc_len = XPS_MIN_MAP_ALLOC;
ffff8000113a7d34: 5280028b mov w11, #0x14 // #20
if (is_rxqs_map)
ffff8000113a7d38: b940c3a4 ldr w4, [x29,#192]
ffff8000113a7d3c: 34000544 cbz w4, ffff8000113a7de4 <__netif_set_xps_queue+0x708>
return __kmalloc(size, flags);
ffff8000113a7d40: 5281b801 mov w1, #0xdc0 // #3520
ffff8000113a7d44: f9003fa3 str x3, [x29,#120]
ffff8000113a7d48: f90037a7 str x7, [x29,#104]
ffff8000113a7d4c: f90043a9 str x9, [x29,#128]
ffff8000113a7d50: f9003bab str x11, [x29,#112]
ffff8000113a7d54: 94000000 bl 0 <__kmalloc>
ffff8000113a7d54: R_AARCH64_CALL26 __kmalloc
ffff8000113a7d58: f9403fa3 ldr x3, [x29,#120]
ffff8000113a7d5c: f94037a7 ldr x7, [x29,#104]
ffff8000113a7d60: f94043a9 ldr x9, [x29,#128]
ffff8000113a7d64: f9403bab ldr x11, [x29,#112]
if (!new_map)
ffff8000113a7d68: b4001300 cbz x0, ffff8000113a7fc8 <__netif_set_xps_queue+0x8ec>
for (i = 0; i < pos; i++)
ffff8000113a7d6c: 6b1f007f cmp w3, wzr
ffff8000113a7d70: 5400018d b.le ffff8000113a7da0 <__netif_set_xps_queue+0x6c4>
ffff8000113a7d74: 5100046a sub w10, w3, #0x1
ffff8000113a7d78: 9100054a add x10, x10, #0x1
ffff8000113a7d7c: d37ff94a lsl x10, x10, #1
ffff8000113a7d80: d2800001 mov x1, #0x0 // #0
ffff8000113a7d84: 8b010362 add x2, x27, x1
new_map->queues[i] = map->queues[i];
ffff8000113a7d88: 79403048 ldrh w8, [x2,#24]
ffff8000113a7d8c: 8b010002 add x2, x0, x1
ffff8000113a7d90: 91000821 add x1, x1, #0x2
ffff8000113a7d94: 79003048 strh w8, [x2,#24]
for (i = 0; i < pos; i++)
ffff8000113a7d98: eb0a003f cmp x1, x10
ffff8000113a7d9c: 54ffff41 b.ne ffff8000113a7d84 <__netif_set_xps_queue+0x6a8>
new_map->alloc_len = alloc_len;
ffff8000113a7da0: b900040b str w11, [x0,#4]
new_map->len = pos;
ffff8000113a7da4: b9000003 str w3, [x0]
ffff8000113a7da8: aa0003e6 mov x6, x0
ffff8000113a7dac: 93407d28 sxtw x8, w9
ffff8000113a7db0: 17fffea9 b ffff8000113a7854 <__netif_set_xps_queue+0x178>
return n + 1;
ffff8000113a7db4: 110004e7 add w7, w7, #0x1
ffff8000113a7db8: 17fffe8f b ffff8000113a77f4 <__netif_set_xps_queue+0x118>
for (pos = 0; map && pos < map->len; pos++) {
ffff8000113a7dbc: 2a0303e2 mov w2, w3
if (pos < map->alloc_len)
ffff8000113a7dc0: b940076b ldr w11, [x27,#4]
ffff8000113a7dc4: 6b0b005f cmp w2, w11
ffff8000113a7dc8: 54ffd443 b.cc ffff8000113a7850 <__netif_set_xps_queue+0x174>
alloc_len = map->alloc_len * 2;
ffff8000113a7dcc: 531f796b lsl w11, w11, #1
ffff8000113a7dd0: 93407d60 sxtw x0, w11
if (is_rxqs_map)
ffff8000113a7dd4: b940c3a4 ldr w4, [x29,#192]
ffff8000113a7dd8: 91003000 add x0, x0, #0xc
ffff8000113a7ddc: d37ff800 lsl x0, x0, #1
ffff8000113a7de0: 35fffb04 cbnz w4, ffff8000113a7d40 <__netif_set_xps_queue+0x664>
ffff8000113a7de4: 90000001 adrp x1, 0 <__per_cpu_offset>
ffff8000113a7de4: R_AARCH64_ADR_PREL_PG_HI21 __per_cpu_offset
ffff8000113a7de8: 91000021 add x1, x1, #0x0
ffff8000113a7de8: R_AARCH64_ADD_ABS_LO12_NC __per_cpu_offset
ffff8000113a7dec: f867d821 ldr x1, [x1,w7,sxtw #3]
return kmem_cache_alloc_node_trace(
kmalloc_caches[kmalloc_type(flags)][i],
flags, node, size);
}
#endif
return __kmalloc_node(size, flags, node);
ffff8000113a7df0: f9405fa4 ldr x4, [x29,#184]
ffff8000113a7df4: b8616882 ldr w2, [x4,x1]
ffff8000113a7df8: 5281b801 mov w1, #0xdc0 // #3520
ffff8000113a7dfc: f9003fa3 str x3, [x29,#120]
ffff8000113a7e00: f90037a7 str x7, [x29,#104]
ffff8000113a7e04: f90043a9 str x9, [x29,#128]
ffff8000113a7e08: f9003bab str x11, [x29,#112]
ffff8000113a7e0c: 94000000 bl 0 <__kmalloc_node>
ffff8000113a7e0c: R_AARCH64_CALL26 __kmalloc_node
ffff8000113a7e10: f9403bab ldr x11, [x29,#112]
ffff8000113a7e14: f94043a9 ldr x9, [x29,#128]
ffff8000113a7e18: f94037a7 ldr x7, [x29,#104]
ffff8000113a7e1c: f9403fa3 ldr x3, [x29,#120]
ffff8000113a7e20: 17ffffd2 b ffff8000113a7d68 <__netif_set_xps_queue+0x68c>
return __kmalloc(size, flags);
ffff8000113a7e24: f94053a0 ldr x0, [x29,#160]
ffff8000113a7e28: 5281b801 mov w1, #0xdc0 // #3520
ffff8000113a7e2c: f90037a7 str x7, [x29,#104]
ffff8000113a7e30: 94000000 bl 0 <__kmalloc>
ffff8000113a7e30: R_AARCH64_CALL26 __kmalloc
ffff8000113a7e34: aa0003fc mov x28, x0
if (!new_dev_maps) {
ffff8000113a7e38: f94037a7 ldr x7, [x29,#104]
ffff8000113a7e3c: b5ffce20 cbnz x0, ffff8000113a7800 <__netif_set_xps_queue+0x124>
mutex_unlock(&xps_map_mutex);
ffff8000113a7e40: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a7e40: R_AARCH64_ADR_PREL_PG_HI21 .data
ffff8000113a7e44: 91000020 add x0, x1, #0x0
ffff8000113a7e44: R_AARCH64_ADD_ABS_LO12_NC .data
ffff8000113a7e48: 91024000 add x0, x0, #0x90
ffff8000113a7e4c: 94000000 bl 0 <mutex_unlock>
ffff8000113a7e4c: R_AARCH64_CALL26 mutex_unlock
}
ffff8000113a7e50: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a7e54: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a7e58: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a7e5c: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a7e60: a94573fb ldp x27, x28, [sp,#80]
return -ENOMEM;
ffff8000113a7e64: 12800160 mov w0, #0xfffffff4 // #-12
}
ffff8000113a7e68: a8cd7bfd ldp x29, x30, [sp],#208
ffff8000113a7e6c: d65f03c0 ret
} else if (dev_maps) {
ffff8000113a7e70: b4ffd23a cbz x26, ffff8000113a78b4 <__netif_set_xps_queue+0x1d8>
map = xmap_dereference(dev_maps->attr_map[tci]);
ffff8000113a7e74: 93407cc0 sxtw x0, w6
ffff8000113a7e78: 91000800 add x0, x0, #0x2
RCU_INIT_POINTER(new_dev_maps->attr_map[tci], map);
ffff8000113a7e7c: f8607b41 ldr x1, [x26,x0,lsl #3]
ffff8000113a7e80: d37df000 lsl x0, x0, #3
ffff8000113a7e84: f8206b81 str x1, [x28,x0]
for (i = num_tc - tc, tci++; dev_maps && --i; tci++) {
ffff8000113a7e88: 110004c0 add w0, w6, #0x1
ffff8000113a7e8c: 17fffed8 b ffff8000113a79ec <__netif_set_xps_queue+0x310>
for (pos = 0; map && pos < map->len; pos++) {
ffff8000113a7e90: 2a0203e3 mov w3, w2
ffff8000113a7e94: 17ffffcb b ffff8000113a7dc0 <__netif_set_xps_queue+0x6e4>
mutex_lock(&xps_map_mutex);
ffff8000113a7e98: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a7e98: R_AARCH64_ADR_PREL_PG_HI21 .data
ffff8000113a7e9c: 91000020 add x0, x1, #0x0
ffff8000113a7e9c: R_AARCH64_ADD_ABS_LO12_NC .data
ffff8000113a7ea0: 91024000 add x0, x0, #0x90
int maps_sz, num_tc = 1, tc = 0;
ffff8000113a7ea4: 2a0503f6 mov w22, w5
mutex_lock(&xps_map_mutex);
ffff8000113a7ea8: 94000000 bl 0 <mutex_lock>
ffff8000113a7ea8: R_AARCH64_CALL26 mutex_lock
if (is_rxqs_map) {
ffff8000113a7eac: b940c3a4 ldr w4, [x29,#192]
ffff8000113a7eb0: 52800033 mov w19, #0x1 // #1
int maps_sz, num_tc = 1, tc = 0;
ffff8000113a7eb4: 2a1303f5 mov w21, w19
if (is_rxqs_map) {
ffff8000113a7eb8: 35ffc584 cbnz w4, ffff8000113a7768 <__netif_set_xps_queue+0x8c>
maps_sz = XPS_CPU_DEV_MAPS_SIZE(num_tc);
ffff8000113a7ebc: 90000017 adrp x23, 0 <nr_cpu_ids>
ffff8000113a7ebc: R_AARCH64_ADR_PREL_PG_HI21 nr_cpu_ids
ffff8000113a7ec0: b94002e2 ldr w2, [x23]
ffff8000113a7ec0: R_AARCH64_LDST32_ABS_LO12_NC nr_cpu_ids
ffff8000113a7ec4: 90000019 adrp x25, 0 <__cpu_possible_mask>
ffff8000113a7ec4: R_AARCH64_ADR_PREL_PG_HI21 __cpu_possible_mask
ffff8000113a7ec8: 1b027e62 mul w2, w19, w2
ffff8000113a7ecc: 91000339 add x25, x25, #0x0
ffff8000113a7ecc: R_AARCH64_ADD_ABS_LO12_NC __cpu_possible_mask
ffff8000113a7ed0: 91000842 add x2, x2, #0x2
ffff8000113a7ed4: 531d7042 lsl w2, w2, #3
ffff8000113a7ed8: aa1903e0 mov x0, x25
ffff8000113a7edc: 52820001 mov w1, #0x1000 // #4096
ffff8000113a7ee0: f90043a2 str x2, [x29,#128]
ffff8000113a7ee4: 94000000 bl 0 <__bitmap_weight>
ffff8000113a7ee4: R_AARCH64_CALL26 __bitmap_weight
if (num_possible_cpus() > 1) {
ffff8000113a7ee8: 7100041f cmp w0, #0x1
ffff8000113a7eec: f94057a4 ldr x4, [x29,#168]
ffff8000113a7ef0: f94043a2 ldr x2, [x29,#128]
ffff8000113a7ef4: 540004e9 b.ls ffff8000113a7f90 <__netif_set_xps_queue+0x8b4>
ffff8000113a7ef8: eb1f009f cmp x4, xzr
ffff8000113a7efc: 1a9f07e4 cset w4, ne
ffff8000113a7f00: b900cba4 str w4, [x29,#200]
online_mask = cpumask_bits(cpu_online_mask);
ffff8000113a7f04: 90000000 adrp x0, 0 <__cpu_online_mask>
ffff8000113a7f04: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113a7f08: 52800024 mov w4, #0x1 // #1
ffff8000113a7f0c: 91000000 add x0, x0, #0x0
ffff8000113a7f0c: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113a7f10: b940cbb3 ldr w19, [x29,#200]
ffff8000113a7f14: b900c7a4 str w4, [x29,#196]
ffff8000113a7f18: f9005ba0 str x0, [x29,#176]
dev_maps = xmap_dereference(dev->xps_cpus_map);
ffff8000113a7f1c: f9404fa4 ldr x4, [x29,#152]
nr_ids = nr_cpu_ids;
ffff8000113a7f20: b94002f7 ldr w23, [x23]
ffff8000113a7f20: R_AARCH64_LDST32_ABS_LO12_NC nr_cpu_ids
dev_maps = xmap_dereference(dev->xps_cpus_map);
ffff8000113a7f24: f941f49a ldr x26, [x4,#1000]
ffff8000113a7f28: 17fffe1f b ffff8000113a77a4 <__netif_set_xps_queue+0xc8>
return (j < nr_bits);
ffff8000113a7f2c: eb20c27f cmp x19, w0, sxtw
ffff8000113a7f30: 1a9f97e1 cset w1, hi
ffff8000113a7f34: 17fffe8c b ffff8000113a7964 <__netif_set_xps_queue+0x288>
map->queues[map->len++] = index;
ffff8000113a7f38: 11000521 add w1, w9, #0x1
ffff8000113a7f3c: b9000061 str w1, [x3]
ffff8000113a7f40: 8b294463 add x3, x3, w9, uxtw #1
ffff8000113a7f44: 79003074 strh w20, [x3,#24]
ffff8000113a7f48: 17fffe9a b ffff8000113a79b0 <__netif_set_xps_queue+0x2d4>
rcu_assign_pointer(dev->xps_cpus_map, new_dev_maps);
ffff8000113a7f4c: f9404fa4 ldr x4, [x29,#152]
ffff8000113a7f50: 910fa080 add x0, x4, #0x3e8
ffff8000113a7f54: c89ffc1c stlr x28, [x0]
ffff8000113a7f58: 17fffec2 b ffff8000113a7a60 <__netif_set_xps_queue+0x384>
ffff8000113a7f5c: f94047a3 ldr x3, [x29,#136]
ffff8000113a7f60: eb38c07f cmp x3, w24, sxtw
ffff8000113a7f64: 1a9f97e0 cset w0, hi
ffff8000113a7f68: 17ffff27 b ffff8000113a7c04 <__netif_set_xps_queue+0x528>
ffff8000113a7f6c: 2a0503f3 mov w19, w5
if ((txq - tc->offset) < tc->count)
ffff8000113a7f70: f9004fa4 str x4, [x29,#152]
ffff8000113a7f74: 17fffdf7 b ffff8000113a7750 <__netif_set_xps_queue+0x74>
ffff8000113a7f78: 0b0602c6 add w6, w22, w6
ffff8000113a7f7c: 17fffe6a b ffff8000113a7924 <__netif_set_xps_queue+0x248>
ffff8000113a7f80: f94067a4 ldr x4, [x29,#200]
ffff8000113a7f84: b8606880 ldr w0, [x4,x0]
ffff8000113a7f88: b900bba0 str w0, [x29,#184]
ffff8000113a7f8c: 17fffe96 b ffff8000113a79e4 <__netif_set_xps_queue+0x308>
ffff8000113a7f90: eb1f009f cmp x4, xzr
if (num_possible_cpus() > 1) {
ffff8000113a7f94: b940c3b3 ldr w19, [x29,#192]
const unsigned long *online_mask = NULL, *possible_mask = NULL;
ffff8000113a7f98: d2800019 mov x25, #0x0 // #0
ffff8000113a7f9c: 1a9f07e4 cset w4, ne
ffff8000113a7fa0: b900cba4 str w4, [x29,#200]
if (num_possible_cpus() > 1) {
ffff8000113a7fa4: b900c7b3 str w19, [x29,#196]
const unsigned long *online_mask = NULL, *possible_mask = NULL;
ffff8000113a7fa8: f9005bb9 str x25, [x29,#176]
ffff8000113a7fac: 17ffffdc b ffff8000113a7f1c <__netif_set_xps_queue+0x840>
int i, j, tci, numa_node_id = -2;
ffff8000113a7fb0: 12800024 mov w4, #0xfffffffe // #-2
ffff8000113a7fb4: aa1a03fc mov x28, x26
ffff8000113a7fb8: b900bba4 str w4, [x29,#184]
ffff8000113a7fbc: 17fffecf b ffff8000113a7af8 <__netif_set_xps_queue+0x41c>
active = true;
ffff8000113a7fc0: 52800033 mov w19, #0x1 // #1
ffff8000113a7fc4: 17fffecd b ffff8000113a7af8 <__netif_set_xps_queue+0x41c>
if (!new_map)
ffff8000113a7fc8: 12800016 mov w22, #0xffffffff // #-1
return find_next_bit(srcp, nr_bits, n + 1);
ffff8000113a7fcc: 2a1703f8 mov w24, w23
if (srcp)
ffff8000113a7fd0: b4000399 cbz x25, ffff8000113a8040 <__netif_set_xps_queue+0x964>
return find_next_bit(srcp, nr_bits, n + 1);
ffff8000113a7fd4: 110006c2 add w2, w22, #0x1
ffff8000113a7fd8: aa1903e0 mov x0, x25
ffff8000113a7fdc: aa1803e1 mov x1, x24
ffff8000113a7fe0: 93407c42 sxtw x2, w2
ffff8000113a7fe4: 94000000 bl 0 <find_next_bit>
ffff8000113a7fe4: R_AARCH64_CALL26 find_next_bit
for (j = -1; j = netif_attrmask_next(j, possible_mask, nr_ids),
ffff8000113a7fe8: 6b0002ff cmp w23, w0
ffff8000113a7fec: 2a0003f6 mov w22, w0
ffff8000113a7ff0: 54000309 b.ls ffff8000113a8050 <__netif_set_xps_queue+0x974>
for (i = num_tc, tci = j * num_tc; i--; tci++) {
ffff8000113a7ff4: 1b157ed4 mul w20, w22, w21
ffff8000113a7ff8: 2a1503f3 mov w19, w21
ffff8000113a7ffc: 350000b5 cbnz w21, ffff8000113a8010 <__netif_set_xps_queue+0x934>
ffff8000113a8000: 17fffff4 b ffff8000113a7fd0 <__netif_set_xps_queue+0x8f4>
ffff8000113a8004: 71000673 subs w19, w19, #0x1
ffff8000113a8008: 11000694 add w20, w20, #0x1
ffff8000113a800c: 54fffe20 b.eq ffff8000113a7fd0 <__netif_set_xps_queue+0x8f4>
new_map = xmap_dereference(new_dev_maps->attr_map[tci]);
ffff8000113a8010: 93407e81 sxtw x1, w20
ffff8000113a8014: 91000821 add x1, x1, #0x2
ffff8000113a8018: f8617b80 ldr x0, [x28,x1,lsl #3]
xmap_dereference(dev_maps->attr_map[tci]) :
ffff8000113a801c: b40000fa cbz x26, ffff8000113a8038 <__netif_set_xps_queue+0x95c>
ffff8000113a8020: f8617b41 ldr x1, [x26,x1,lsl #3]
if (new_map && new_map != map)
ffff8000113a8024: eb00003f cmp x1, x0
ffff8000113a8028: 54fffee0 b.eq ffff8000113a8004 <__netif_set_xps_queue+0x928>
ffff8000113a802c: b4fffec0 cbz x0, ffff8000113a8004 <__netif_set_xps_queue+0x928>
kfree(new_map);
ffff8000113a8030: 94000000 bl 0 <kfree>
ffff8000113a8030: R_AARCH64_CALL26 kfree
ffff8000113a8034: 17fffff4 b ffff8000113a8004 <__netif_set_xps_queue+0x928>
xmap_dereference(dev_maps->attr_map[tci]) :
ffff8000113a8038: aa1a03e1 mov x1, x26
ffff8000113a803c: 17fffffa b ffff8000113a8024 <__netif_set_xps_queue+0x948>
return n + 1;
ffff8000113a8040: 110006c0 add w0, w22, #0x1
for (j = -1; j = netif_attrmask_next(j, possible_mask, nr_ids),
ffff8000113a8044: 6b0002ff cmp w23, w0
ffff8000113a8048: 2a0003f6 mov w22, w0
ffff8000113a804c: 54fffd48 b.hi ffff8000113a7ff4 <__netif_set_xps_queue+0x918>
mutex_unlock(&xps_map_mutex);
ffff8000113a8050: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113a8050: R_AARCH64_ADR_PREL_PG_HI21 .data
ffff8000113a8054: 91000040 add x0, x2, #0x0
ffff8000113a8054: R_AARCH64_ADD_ABS_LO12_NC .data
ffff8000113a8058: 91024000 add x0, x0, #0x90
ffff8000113a805c: 94000000 bl 0 <mutex_unlock>
ffff8000113a805c: R_AARCH64_CALL26 mutex_unlock
kfree(new_dev_maps);
ffff8000113a8060: aa1c03e0 mov x0, x28
ffff8000113a8064: 94000000 bl 0 <kfree>
ffff8000113a8064: R_AARCH64_CALL26 kfree
}
ffff8000113a8068: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a806c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a8070: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a8074: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a8078: a94573fb ldp x27, x28, [sp,#80]
return -ENOMEM;
ffff8000113a807c: 12800160 mov w0, #0xfffffff4 // #-12
}
ffff8000113a8080: a8cd7bfd ldp x29, x30, [sp],#208
ffff8000113a8084: d65f03c0 ret
STATIC_KEY_CHECK_USE(key);
ffff8000113a8088: 90000018 adrp x24, 0 <static_key_initialized>
ffff8000113a8088: R_AARCH64_ADR_PREL_PG_HI21 static_key_initialized
ffff8000113a808c: 39400300 ldrb w0, [x24]
ffff8000113a808c: R_AARCH64_LDST8_ABS_LO12_NC static_key_initialized
ffff8000113a8090: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff8000113a8090: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a8094: 34000420 cbz w0, ffff8000113a8118 <__netif_set_xps_queue+0xa3c>
ATOMIC_OPS(add, add, I)
ffff8000113a8098: 91000262 add x2, x19, #0x0
ffff8000113a8098: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a809c: 9124e043 add x3, x2, #0x938
ffff8000113a80a0: f9800071 prfm pstl1strm, [x3]
ffff8000113a80a4: 885f7c60 ldxr w0, [x3]
ffff8000113a80a8: 11000400 add w0, w0, #0x1
ffff8000113a80ac: 88017c60 stxr w1, w0, [x3]
ffff8000113a80b0: 35ffffa1 cbnz w1, ffff8000113a80a4 <__netif_set_xps_queue+0x9c8>
if (is_rxqs_map)
ffff8000113a80b4: b940c3a4 ldr w4, [x29,#192]
ffff8000113a80b8: 34ffbee4 cbz w4, ffff8000113a7894 <__netif_set_xps_queue+0x1b8>
ffff8000113a80bc: 39400300 ldrb w0, [x24]
ffff8000113a80bc: R_AARCH64_LDST8_ABS_LO12_NC static_key_initialized
ffff8000113a80c0: 340001a0 cbz w0, ffff8000113a80f4 <__netif_set_xps_queue+0xa18>
ffff8000113a80c4: 91000260 add x0, x19, #0x0
ffff8000113a80c4: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a80c8: 91250003 add x3, x0, #0x940
ffff8000113a80cc: f9800071 prfm pstl1strm, [x3]
ffff8000113a80d0: 885f7c61 ldxr w1, [x3]
ffff8000113a80d4: 11000421 add w1, w1, #0x1
ffff8000113a80d8: 88027c61 stxr w2, w1, [x3]
ffff8000113a80dc: 35ffffa2 cbnz w2, ffff8000113a80d0 <__netif_set_xps_queue+0x9f4>
ffff8000113a80e0: 17fffded b ffff8000113a7894 <__netif_set_xps_queue+0x1b8>
for (pos = 0; map && pos < map->len; pos++) {
ffff8000113a80e4: d2800800 mov x0, #0x40 // #64
ffff8000113a80e8: 2a1b03e3 mov w3, w27
int alloc_len = XPS_MIN_MAP_ALLOC;
ffff8000113a80ec: 5280028b mov w11, #0x14 // #20
ffff8000113a80f0: 17ffff12 b ffff8000113a7d38 <__netif_set_xps_queue+0x65c>
ffff8000113a80f4: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a80f4: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113a80f8: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a80f8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x238
ffff8000113a80fc: 91000021 add x1, x1, #0x0
ffff8000113a80fc: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113a8100: 91000000 add x0, x0, #0x0
ffff8000113a8100: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x238
ffff8000113a8104: 9100a021 add x1, x1, #0x28
ffff8000113a8108: 91250042 add x2, x2, #0x940
ffff8000113a810c: 94000000 bl 0 <__warn_printk>
ffff8000113a810c: R_AARCH64_CALL26 __warn_printk
ffff8000113a8110: d4210000 brk #0x800
ffff8000113a8114: 17ffffec b ffff8000113a80c4 <__netif_set_xps_queue+0x9e8>
ffff8000113a8118: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a8118: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113a811c: 91000262 add x2, x19, #0x0
ffff8000113a811c: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a8120: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a8120: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x238
ffff8000113a8124: 91000021 add x1, x1, #0x0
ffff8000113a8124: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113a8128: 91000000 add x0, x0, #0x0
ffff8000113a8128: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x238
ffff8000113a812c: 9100a021 add x1, x1, #0x28
ffff8000113a8130: 9124e042 add x2, x2, #0x938
ffff8000113a8134: 94000000 bl 0 <__warn_printk>
ffff8000113a8134: R_AARCH64_CALL26 __warn_printk
ffff8000113a8138: d4210000 brk #0x800
ffff8000113a813c: 17ffffd7 b ffff8000113a8098 <__netif_set_xps_queue+0x9bc>
ffff8000113a8140 <netif_set_xps_queue>:
{
ffff8000113a8140: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a8144: 910003fd mov x29, sp
ffff8000113a8148: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a814c: aa0003f3 mov x19, x0
ffff8000113a8150: aa1e03e0 mov x0, x30
ffff8000113a8154: 53003c54 uxth w20, w2
ffff8000113a8158: f90017a1 str x1, [x29,#40]
ffff8000113a815c: 94000000 bl 0 <_mcount>
ffff8000113a815c: R_AARCH64_CALL26 _mcount
cpus_read_lock();
ffff8000113a8160: 94000000 bl 0 <cpus_read_lock>
ffff8000113a8160: R_AARCH64_CALL26 cpus_read_lock
ret = __netif_set_xps_queue(dev, cpumask_bits(mask), index, false);
ffff8000113a8164: f94017a1 ldr x1, [x29,#40]
ffff8000113a8168: 2a1403e2 mov w2, w20
ffff8000113a816c: 52800003 mov w3, #0x0 // #0
ffff8000113a8170: aa1303e0 mov x0, x19
ffff8000113a8174: 94000000 bl ffff8000113a76dc <__netif_set_xps_queue>
ffff8000113a8174: R_AARCH64_CALL26 __netif_set_xps_queue
cpus_read_unlock();
ffff8000113a8178: f90017a0 str x0, [x29,#40]
ffff8000113a817c: 94000000 bl 0 <cpus_read_unlock>
ffff8000113a817c: R_AARCH64_CALL26 cpus_read_unlock
}
ffff8000113a8180: f94017a0 ldr x0, [x29,#40]
ffff8000113a8184: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a8188: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a818c: d65f03c0 ret
ffff8000113a8190 <netdev_boot_base>:
{
ffff8000113a8190: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff8000113a8194: 910003fd mov x29, sp
ffff8000113a8198: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a819c: f90013f5 str x21, [sp,#32]
ffff8000113a81a0: aa0003e2 mov x2, x0
ffff8000113a81a4: 2a0103e3 mov w3, w1
ffff8000113a81a8: aa1e03e0 mov x0, x30
ffff8000113a81ac: f9001fa2 str x2, [x29,#56]
ffff8000113a81b0: f9001ba3 str x3, [x29,#48]
ffff8000113a81b4: 90000014 adrp x20, 0 <__stack_chk_guard>
ffff8000113a81b4: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a81b8: 94000000 bl 0 <_mcount>
ffff8000113a81b8: R_AARCH64_CALL26 _mcount
ffff8000113a81bc: f9400284 ldr x4, [x20]
ffff8000113a81bc: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
sprintf(name, "%s%d", prefix, unit);
ffff8000113a81c0: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a81c0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x608
ffff8000113a81c4: f9401fa2 ldr x2, [x29,#56]
ffff8000113a81c8: f9401ba3 ldr x3, [x29,#48]
ffff8000113a81cc: 91000021 add x1, x1, #0x0
ffff8000113a81cc: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x608
ffff8000113a81d0: 910123a0 add x0, x29, #0x48
{
ffff8000113a81d4: f9002fa4 str x4, [x29,#88]
sprintf(name, "%s%d", prefix, unit);
ffff8000113a81d8: 94000000 bl 0 <sprintf>
ffff8000113a81d8: R_AARCH64_CALL26 sprintf
node_name = netdev_name_node_lookup(net, name);
ffff8000113a81dc: 90000000 adrp x0, 0 <init_net>
ffff8000113a81dc: R_AARCH64_ADR_PREL_PG_HI21 init_net
ffff8000113a81e0: 91000000 add x0, x0, #0x0
ffff8000113a81e0: R_AARCH64_ADD_ABS_LO12_NC init_net
ffff8000113a81e4: 910123a1 add x1, x29, #0x48
ffff8000113a81e8: 97ffdd22 bl ffff80001139f670 <netdev_name_node_lookup>
return node_name ? node_name->dev : NULL;
ffff8000113a81ec: b4000180 cbz x0, ffff8000113a821c <netdev_boot_base+0x8c>
if (__dev_get_by_name(&init_net, name))
ffff8000113a81f0: f9401001 ldr x1, [x0,#32]
return 1;
ffff8000113a81f4: d2800020 mov x0, #0x1 // #1
if (__dev_get_by_name(&init_net, name))
ffff8000113a81f8: b4000121 cbz x1, ffff8000113a821c <netdev_boot_base+0x8c>
}
ffff8000113a81fc: f9402fa2 ldr x2, [x29,#88]
ffff8000113a8200: f9400281 ldr x1, [x20]
ffff8000113a8200: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a8204: eb01005f cmp x2, x1
ffff8000113a8208: 54000281 b.ne ffff8000113a8258 <netdev_boot_base+0xc8>
ffff8000113a820c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a8210: f94013f5 ldr x21, [sp,#32]
ffff8000113a8214: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113a8218: d65f03c0 ret
ffff8000113a821c: 90000015 adrp x21, ffff80001139e37c <__my_cpu_offset>
ffff8000113a821c: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a8220: 910002b5 add x21, x21, #0x0
ffff8000113a8220: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a8224: 910722b3 add x19, x21, #0x1c8
ffff8000113a8228: 910c22b5 add x21, x21, #0x308
if (!strcmp(name, s[i].name))
ffff8000113a822c: 910123a0 add x0, x29, #0x48
ffff8000113a8230: aa1303e1 mov x1, x19
ffff8000113a8234: 94000000 bl 0 <strcmp>
ffff8000113a8234: R_AARCH64_CALL26 strcmp
ffff8000113a8238: 340000c0 cbz w0, ffff8000113a8250 <netdev_boot_base+0xc0>
ffff8000113a823c: 9100a273 add x19, x19, #0x28
for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++)
ffff8000113a8240: eb15027f cmp x19, x21
ffff8000113a8244: 54ffff41 b.ne ffff8000113a822c <netdev_boot_base+0x9c>
return 0;
ffff8000113a8248: d2800000 mov x0, #0x0 // #0
ffff8000113a824c: 17ffffec b ffff8000113a81fc <netdev_boot_base+0x6c>
return s[i].map.base_addr;
ffff8000113a8250: 79404260 ldrh w0, [x19,#32]
ffff8000113a8254: 17ffffea b ffff8000113a81fc <netdev_boot_base+0x6c>
}
ffff8000113a8258: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a8258: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a825c <netdev_get_name>:
{
ffff8000113a825c: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a8260: 910003fd mov x29, sp
ffff8000113a8264: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a8268: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a826c: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a8270: 2a0203f3 mov w19, w2
ffff8000113a8274: aa0003f6 mov x22, x0
ffff8000113a8278: aa1e03e0 mov x0, x30
ffff8000113a827c: aa0103f7 mov x23, x1
ffff8000113a8280: d37d1e75 ubfiz x21, x19, #3, #8
ffff8000113a8284: 94000000 bl 0 <_mcount>
ffff8000113a8284: R_AARCH64_CALL26 _mcount
ffff8000113a8288: 90000014 adrp x20, ffff80001139e37c <__my_cpu_offset>
ffff8000113a8288: R_AARCH64_ADR_PREL_PG_HI21 .bss
__READ_ONCE_SIZE;
ffff8000113a828c: 91000280 add x0, x20, #0x0
ffff8000113a828c: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a8290: b9435018 ldr w24, [x0,#848]
smp_rmb();
ffff8000113a8294: d50339bf dmb ishld
return &net->dev_index_head[ifindex & (NETDEV_HASHENTRIES - 1)];
ffff8000113a8298: f9409ac2 ldr x2, [x22,#304]
ffff8000113a829c: f8756843 ldr x3, [x2,x21]
hlist_for_each_entry_rcu(dev, head, index_hlist)
ffff8000113a82a0: b4000383 cbz x3, ffff8000113a8310 <netdev_get_name+0xb4>
ffff8000113a82a4: d10e4061 sub x1, x3, #0x390
ffff8000113a82a8: b40000c1 cbz x1, ffff8000113a82c0 <netdev_get_name+0x64>
if (dev->ifindex == ifindex)
ffff8000113a82ac: b9410024 ldr w4, [x1,#256]
ffff8000113a82b0: 6b04027f cmp w19, w4
ffff8000113a82b4: 54000120 b.eq ffff8000113a82d8 <netdev_get_name+0x7c>
ffff8000113a82b8: f941c823 ldr x3, [x1,#912]
hlist_for_each_entry_rcu(dev, head, index_hlist)
ffff8000113a82bc: b5ffff43 cbnz x3, ffff8000113a82a4 <netdev_get_name+0x48>
return -ENODEV;
ffff8000113a82c0: 12800240 mov w0, #0xffffffed // #-19
}
ffff8000113a82c4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a82c8: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a82cc: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a82d0: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a82d4: d65f03c0 ret
return __builtin_strcpy(p, q);
ffff8000113a82d8: aa1703e0 mov x0, x23
ffff8000113a82dc: 94000000 bl 0 <strcpy>
ffff8000113a82dc: R_AARCH64_CALL26 strcpy
smp_rmb();
ffff8000113a82e0: d50339bf dmb ishld
return unlikely(s->sequence != start);
ffff8000113a82e4: 91000280 add x0, x20, #0x0
ffff8000113a82e4: R_AARCH64_ADD_ABS_LO12_NC .bss
if (read_seqcount_retry(&devnet_rename_seq, seq)) {
ffff8000113a82e8: b9435000 ldr w0, [x0,#848]
return ret & ~1;
ffff8000113a82ec: 121f7b18 and w24, w24, #0xfffffffe
ffff8000113a82f0: 6b00031f cmp w24, w0
ffff8000113a82f4: 54000121 b.ne ffff8000113a8318 <netdev_get_name+0xbc>
return 0;
ffff8000113a82f8: 52800000 mov w0, #0x0 // #0
}
ffff8000113a82fc: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a8300: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a8304: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a8308: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a830c: d65f03c0 ret
hlist_for_each_entry_rcu(dev, head, index_hlist)
ffff8000113a8310: aa0303e1 mov x1, x3
ffff8000113a8314: 17ffffe5 b ffff8000113a82a8 <netdev_get_name+0x4c>
cond_resched();
ffff8000113a8318: 94000000 bl 0 <_cond_resched>
ffff8000113a8318: R_AARCH64_CALL26 _cond_resched
goto retry;
ffff8000113a831c: 17ffffdc b ffff8000113a828c <netdev_get_name+0x30>
ffff8000113a8320 <dev_get_alias>:
{
ffff8000113a8320: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a8324: 910003fd mov x29, sp
ffff8000113a8328: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a832c: aa0003f3 mov x19, x0
ffff8000113a8330: aa1e03e0 mov x0, x30
ffff8000113a8334: aa0103f4 mov x20, x1
ffff8000113a8338: f90017a2 str x2, [x29,#40]
ffff8000113a833c: 94000000 bl 0 <_mcount>
ffff8000113a833c: R_AARCH64_CALL26 _mcount
ffff8000113a8340: f9400e63 ldr x3, [x19,#24]
if (alias)
ffff8000113a8344: f94017a2 ldr x2, [x29,#40]
ffff8000113a8348: b4000143 cbz x3, ffff8000113a8370 <dev_get_alias+0x50>
ret = snprintf(name, len, "%s", alias->ifalias);
ffff8000113a834c: aa0203e1 mov x1, x2
ffff8000113a8350: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113a8350: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x610
ffff8000113a8354: aa1403e0 mov x0, x20
ffff8000113a8358: 91000042 add x2, x2, #0x0
ffff8000113a8358: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x610
ffff8000113a835c: 91004063 add x3, x3, #0x10
ffff8000113a8360: 94000000 bl 0 <snprintf>
ffff8000113a8360: R_AARCH64_CALL26 snprintf
}
ffff8000113a8364: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a8368: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a836c: d65f03c0 ret
int ret = 0;
ffff8000113a8370: 2a0303e0 mov w0, w3
}
ffff8000113a8374: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a8378: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a837c: d65f03c0 ret
ffff8000113a8380 <skb_crc32c_csum_help>:
{
ffff8000113a8380: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a8384: 910003fd mov x29, sp
ffff8000113a8388: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a838c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a8390: aa0003f3 mov x19, x0
ffff8000113a8394: aa1e03e0 mov x0, x30
ffff8000113a8398: 94000000 bl 0 <_mcount>
ffff8000113a8398: R_AARCH64_CALL26 _mcount
if (skb->ip_summed != CHECKSUM_PARTIAL)
ffff8000113a839c: 39420260 ldrb w0, [x19,#128]
int ret = 0, offset, start;
ffff8000113a83a0: 52800014 mov w20, #0x0 // #0
if (skb->ip_summed != CHECKSUM_PARTIAL)
ffff8000113a83a4: d3451800 ubfx x0, x0, #5, #2
ffff8000113a83a8: 71000c1f cmp w0, #0x3
ffff8000113a83ac: 540000c0 b.eq ffff8000113a83c4 <skb_crc32c_csum_help+0x44>
}
ffff8000113a83b0: 2a1403e0 mov w0, w20
ffff8000113a83b4: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a83b8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a83bc: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a83c0: d65f03c0 ret
static inline bool skb_is_gso(const struct sk_buff *skb)
ffff8000113a83c4: f9406275 ldr x21, [x19,#192]
return skb->head + skb->end;
ffff8000113a83c8: b940be60 ldr w0, [x19,#188]
ffff8000113a83cc: 8b0002a0 add x0, x21, x0
if (unlikely(skb_is_gso(skb)))
ffff8000113a83d0: 79400801 ldrh w1, [x0,#4]
ffff8000113a83d4: 35fffee1 cbnz w1, ffff8000113a83b0 <skb_crc32c_csum_help+0x30>
static inline bool skb_has_shared_frag(const struct sk_buff *skb)
ffff8000113a83d8: b9407661 ldr w1, [x19,#116]
return skb_is_nonlinear(skb) &&
ffff8000113a83dc: 34000101 cbz w1, ffff8000113a83fc <skb_crc32c_csum_help+0x7c>
skb_shinfo(skb)->tx_flags & SKBTX_SHARED_FRAG;
ffff8000113a83e0: 39400c00 ldrb w0, [x0,#3]
return skb_is_nonlinear(skb) &&
ffff8000113a83e4: 362800c0 tbz w0, #5, ffff8000113a83fc <skb_crc32c_csum_help+0x7c>
return __pskb_pull_tail(skb, skb->data_len) ? 0 : -ENOMEM;
ffff8000113a83e8: aa1303e0 mov x0, x19
ffff8000113a83ec: 94000000 bl 0 <__pskb_pull_tail>
ffff8000113a83ec: R_AARCH64_CALL26 __pskb_pull_tail
ffff8000113a83f0: b40004e0 cbz x0, ffff8000113a848c <skb_crc32c_csum_help+0x10c>
ffff8000113a83f4: b9407661 ldr w1, [x19,#116]
ffff8000113a83f8: f9406275 ldr x21, [x19,#192]
return skb->data - skb->head;
ffff8000113a83fc: f9406660 ldr x0, [x19,#200]
return skb->csum_start - skb_headroom(skb);
ffff8000113a8400: 79411262 ldrh w2, [x19,#136]
return skb->data - skb->head;
ffff8000113a8404: cb150015 sub x21, x0, x21
return skb->len - skb->data_len;
ffff8000113a8408: b9407260 ldr w0, [x19,#112]
return skb->csum_start - skb_headroom(skb);
ffff8000113a840c: 4b150055 sub w21, w2, w21
offset = start + offsetof(struct sctphdr, checksum);
ffff8000113a8410: 110022b6 add w22, w21, #0x8
return skb->len - skb->data_len;
ffff8000113a8414: 4b010001 sub w1, w0, w1
if (WARN_ON_ONCE(offset >= skb_headlen(skb))) {
ffff8000113a8418: 6b0102df cmp w22, w1
ffff8000113a841c: 540003c2 b.cs ffff8000113a8494 <skb_crc32c_csum_help+0x114>
ret = skb_ensure_writable(skb, offset + sizeof(__le32));
ffff8000113a8420: aa1303e0 mov x0, x19
ffff8000113a8424: 110032a1 add w1, w21, #0xc
ffff8000113a8428: 94000000 bl 0 <skb_ensure_writable>
ffff8000113a8428: R_AARCH64_CALL26 skb_ensure_writable
ffff8000113a842c: 2a0003f4 mov w20, w0
if (ret)
ffff8000113a8430: 35fffc00 cbnz w0, ffff8000113a83b0 <skb_crc32c_csum_help+0x30>
crc32c_csum = cpu_to_le32(~__skb_checksum(skb, start,
ffff8000113a8434: b9407262 ldr w2, [x19,#112]
ffff8000113a8438: 90000000 adrp x0, 0 <crc32c_csum_stub>
ffff8000113a8438: R_AARCH64_ADR_PREL_PG_HI21 crc32c_csum_stub
ffff8000113a843c: f9400004 ldr x4, [x0]
ffff8000113a843c: R_AARCH64_LDST64_ABS_LO12_NC crc32c_csum_stub
ffff8000113a8440: 2a1503e1 mov w1, w21
ffff8000113a8444: 4b150042 sub w2, w2, w21
ffff8000113a8448: aa1303e0 mov x0, x19
ffff8000113a844c: 12800003 mov w3, #0xffffffff // #-1
ffff8000113a8450: 94000000 bl 0 <__skb_checksum>
ffff8000113a8450: R_AARCH64_CALL26 __skb_checksum
*(__le32 *)(skb->data + offset) = crc32c_csum;
ffff8000113a8454: f9406661 ldr x1, [x19,#200]
crc32c_csum = cpu_to_le32(~__skb_checksum(skb, start,
ffff8000113a8458: 2a2003e0 mvn w0, w0
*(__le32 *)(skb->data + offset) = crc32c_csum;
ffff8000113a845c: b836c820 str w0, [x1,w22,sxtw]
skb->ip_summed = CHECKSUM_NONE;
ffff8000113a8460: 39420261 ldrb w1, [x19,#128]
skb->csum_not_inet = 0;
ffff8000113a8464: 39420a60 ldrb w0, [x19,#130]
skb->ip_summed = CHECKSUM_NONE;
ffff8000113a8468: 12197421 and w1, w1, #0xffffff9f
skb->csum_not_inet = 0;
ffff8000113a846c: 121b7800 and w0, w0, #0xffffffef
ffff8000113a8470: 39020a60 strb w0, [x19,#130]
skb->ip_summed = CHECKSUM_NONE;
ffff8000113a8474: 39020261 strb w1, [x19,#128]
}
ffff8000113a8478: 2a1403e0 mov w0, w20
ffff8000113a847c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a8480: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a8484: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a8488: d65f03c0 ret
return __pskb_pull_tail(skb, skb->data_len) ? 0 : -ENOMEM;
ffff8000113a848c: 12800174 mov w20, #0xfffffff4 // #-12
ffff8000113a8490: 17ffffc8 b ffff8000113a83b0 <skb_crc32c_csum_help+0x30>
if (WARN_ON_ONCE(offset >= skb_headlen(skb))) {
ffff8000113a8494: d4210000 brk #0x800
ret = -EINVAL;
ffff8000113a8498: 128002b4 mov w20, #0xffffffea // #-22
ffff8000113a849c: 17ffffc5 b ffff8000113a83b0 <skb_crc32c_csum_help+0x30>
ffff8000113a84a0 <skb_csum_hwoffload_help>:
{
ffff8000113a84a0: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a84a4: 910003fd mov x29, sp
ffff8000113a84a8: f9000bf3 str x19, [sp,#16]
ffff8000113a84ac: aa0003f3 mov x19, x0
ffff8000113a84b0: aa1e03e0 mov x0, x30
ffff8000113a84b4: f90017a1 str x1, [x29,#40]
ffff8000113a84b8: 94000000 bl 0 <_mcount>
ffff8000113a84b8: R_AARCH64_CALL26 _mcount
if (unlikely(skb->csum_not_inet))
ffff8000113a84bc: 39420a62 ldrb w2, [x19,#130]
ffff8000113a84c0: f94017a1 ldr x1, [x29,#40]
ffff8000113a84c4: d3441042 ubfx x2, x2, #4, #1
ffff8000113a84c8: 350001a2 cbnz w2, ffff8000113a84fc <skb_csum_hwoffload_help+0x5c>
return !!(features & NETIF_F_CSUM_MASK) ? 0 : skb_checksum_help(skb);
ffff8000113a84cc: d2800340 mov x0, #0x1a // #26
ffff8000113a84d0: ea00003f tst x1, x0
ffff8000113a84d4: 2a0203e0 mov w0, w2
ffff8000113a84d8: 54000080 b.eq ffff8000113a84e8 <skb_csum_hwoffload_help+0x48>
}
ffff8000113a84dc: f9400bf3 ldr x19, [sp,#16]
ffff8000113a84e0: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a84e4: d65f03c0 ret
return !!(features & NETIF_F_CSUM_MASK) ? 0 : skb_checksum_help(skb);
ffff8000113a84e8: aa1303e0 mov x0, x19
ffff8000113a84ec: 94000000 bl ffff8000113a19cc <skb_checksum_help>
ffff8000113a84ec: R_AARCH64_CALL26 skb_checksum_help
}
ffff8000113a84f0: f9400bf3 ldr x19, [sp,#16]
ffff8000113a84f4: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a84f8: d65f03c0 ret
return !!(features & NETIF_F_SCTP_CRC) ? 0 :
ffff8000113a84fc: 52800000 mov w0, #0x0 // #0
ffff8000113a8500: b727fee1 tbnz x1, #36, ffff8000113a84dc <skb_csum_hwoffload_help+0x3c>
ffff8000113a8504: aa1303e0 mov x0, x19
ffff8000113a8508: 94000000 bl ffff8000113a8380 <skb_crc32c_csum_help>
ffff8000113a8508: R_AARCH64_CALL26 skb_crc32c_csum_help
ffff8000113a850c: 17fffff4 b ffff8000113a84dc <skb_csum_hwoffload_help+0x3c>
ffff8000113a8510 <skb_network_protocol>:
{
ffff8000113a8510: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a8514: 910003fd mov x29, sp
ffff8000113a8518: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a851c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a8520: f9001bf7 str x23, [sp,#48]
ffff8000113a8524: aa0003f3 mov x19, x0
ffff8000113a8528: aa1e03e0 mov x0, x30
ffff8000113a852c: aa0103f7 mov x23, x1
ffff8000113a8530: 94000000 bl 0 <_mcount>
ffff8000113a8530: R_AARCH64_CALL26 _mcount
__be16 type = skb->protocol;
ffff8000113a8534: 79416260 ldrh w0, [x19,#176]
if (type == htons(ETH_P_TEB)) {
ffff8000113a8538: 528b0ca1 mov w1, #0x5865 // #22629
ffff8000113a853c: 6b01001f cmp w0, w1
ffff8000113a8540: 540004c0 b.eq ffff8000113a85d8 <skb_network_protocol+0xc8>
switch (ethertype) {
ffff8000113a8544: 7102041f cmp w0, #0x81
* vlan encapsulated (normal or hardware accelerated) or not.
*/
static inline __be16 __vlan_get_protocol(struct sk_buff *skb, __be16 type,
int *depth)
{
unsigned int vlan_depth = skb->mac_len;
ffff8000113a8548: 7940f274 ldrh w20, [x19,#120]
switch (ethertype) {
ffff8000113a854c: 54000160 b.eq ffff8000113a8578 <skb_network_protocol+0x68>
ffff8000113a8550: 52951101 mov w1, #0xa888 // #43144
ffff8000113a8554: 6b01001f cmp w0, w1
ffff8000113a8558: 54000100 b.eq ffff8000113a8578 <skb_network_protocol+0x68>
type = vh->h_vlan_encapsulated_proto;
vlan_depth += VLAN_HLEN;
} while (eth_type_vlan(type));
}
if (depth)
ffff8000113a855c: b4000057 cbz x23, ffff8000113a8564 <skb_network_protocol+0x54>
*depth = vlan_depth;
ffff8000113a8560: b90002f4 str w20, [x23]
}
ffff8000113a8564: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a8568: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a856c: f9401bf7 ldr x23, [sp,#48]
ffff8000113a8570: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a8574: d65f03c0 ret
vlan_depth = ETH_HLEN;
ffff8000113a8578: 528001d5 mov w21, #0xe // #14
if (vlan_depth) {
ffff8000113a857c: 35000234 cbnz w20, ffff8000113a85c0 <skb_network_protocol+0xb0>
switch (ethertype) {
ffff8000113a8580: 52951116 mov w22, #0xa888 // #43144
static inline bool pskb_may_pull(struct sk_buff *skb, unsigned int len)
ffff8000113a8584: b9407262 ldr w2, [x19,#112]
return skb->len - skb->data_len;
ffff8000113a8588: b9407663 ldr w3, [x19,#116]
if (unlikely(!pskb_may_pull(skb,
ffff8000113a858c: 110012b4 add w20, w21, #0x4
ffff8000113a8590: 4b030041 sub w1, w2, w3
if (likely(len <= skb_headlen(skb)))
ffff8000113a8594: 6b01029f cmp w20, w1
ffff8000113a8598: 54000308 b.hi ffff8000113a85f8 <skb_network_protocol+0xe8>
type = vh->h_vlan_encapsulated_proto;
ffff8000113a859c: f9406660 ldr x0, [x19,#200]
ffff8000113a85a0: 8b354015 add x21, x0, w21, uxtw
ffff8000113a85a4: 794006a0 ldrh w0, [x21,#2]
switch (ethertype) {
ffff8000113a85a8: 7102041f cmp w0, #0x81
ffff8000113a85ac: 54000060 b.eq ffff8000113a85b8 <skb_network_protocol+0xa8>
ffff8000113a85b0: 6b16001f cmp w0, w22
ffff8000113a85b4: 54fffd41 b.ne ffff8000113a855c <skb_network_protocol+0x4c>
if (unlikely(!pskb_may_pull(skb,
ffff8000113a85b8: 2a1403f5 mov w21, w20
ffff8000113a85bc: 17fffff2 b ffff8000113a8584 <skb_network_protocol+0x74>
if (WARN_ON(vlan_depth < VLAN_HLEN))
ffff8000113a85c0: 71000e9f cmp w20, #0x3
vlan_depth -= VLAN_HLEN;
ffff8000113a85c4: 51001295 sub w21, w20, #0x4
if (WARN_ON(vlan_depth < VLAN_HLEN))
ffff8000113a85c8: 54fffdc8 b.hi ffff8000113a8580 <skb_network_protocol+0x70>
ffff8000113a85cc: d4210000 brk #0x800
return 0;
ffff8000113a85d0: 52800000 mov w0, #0x0 // #0
ffff8000113a85d4: 17ffffe4 b ffff8000113a8564 <skb_network_protocol+0x54>
static inline bool pskb_may_pull(struct sk_buff *skb, unsigned int len)
ffff8000113a85d8: b9407260 ldr w0, [x19,#112]
return skb->len - skb->data_len;
ffff8000113a85dc: b9407661 ldr w1, [x19,#116]
ffff8000113a85e0: 4b010001 sub w1, w0, w1
if (likely(len <= skb_headlen(skb)))
ffff8000113a85e4: 7100343f cmp w1, #0xd
ffff8000113a85e8: 54000189 b.ls ffff8000113a8618 <skb_network_protocol+0x108>
type = eth->h_proto;
ffff8000113a85ec: f9406660 ldr x0, [x19,#200]
ffff8000113a85f0: 79401800 ldrh w0, [x0,#12]
ffff8000113a85f4: 17ffffd4 b ffff8000113a8544 <skb_network_protocol+0x34>
if (unlikely(len > skb->len))
ffff8000113a85f8: 6b02029f cmp w20, w2
return __pskb_pull_tail(skb, len - skb_headlen(skb)) != NULL;
ffff8000113a85fc: aa1303e0 mov x0, x19
ffff8000113a8600: 4b010281 sub w1, w20, w1
if (unlikely(len > skb->len))
ffff8000113a8604: 54000068 b.hi ffff8000113a8610 <skb_network_protocol+0x100>
return __pskb_pull_tail(skb, len - skb_headlen(skb)) != NULL;
ffff8000113a8608: 94000000 bl 0 <__pskb_pull_tail>
ffff8000113a8608: R_AARCH64_CALL26 __pskb_pull_tail
if (unlikely(!pskb_may_pull(skb,
ffff8000113a860c: b5fffc80 cbnz x0, ffff8000113a859c <skb_network_protocol+0x8c>
return 0;
ffff8000113a8610: 52800000 mov w0, #0x0 // #0
ffff8000113a8614: 17ffffd4 b ffff8000113a8564 <skb_network_protocol+0x54>
if (unlikely(len > skb->len))
ffff8000113a8618: 7100341f cmp w0, #0xd
ffff8000113a861c: 54ffffa9 b.ls ffff8000113a8610 <skb_network_protocol+0x100>
return __pskb_pull_tail(skb, len - skb_headlen(skb)) != NULL;
ffff8000113a8620: 528001c2 mov w2, #0xe // #14
ffff8000113a8624: aa1303e0 mov x0, x19
ffff8000113a8628: 4b010041 sub w1, w2, w1
ffff8000113a862c: 94000000 bl 0 <__pskb_pull_tail>
ffff8000113a862c: R_AARCH64_CALL26 __pskb_pull_tail
if (unlikely(!pskb_may_pull(skb, sizeof(struct ethhdr))))
ffff8000113a8630: b5fffde0 cbnz x0, ffff8000113a85ec <skb_network_protocol+0xdc>
ffff8000113a8634: 52800000 mov w0, #0x0 // #0
ffff8000113a8638: 17ffffcb b ffff8000113a8564 <skb_network_protocol+0x54>
ffff8000113a863c <skb_mac_gso_segment>:
{
ffff8000113a863c: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a8640: 910003fd mov x29, sp
ffff8000113a8644: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a8648: f90013f5 str x21, [sp,#32]
ffff8000113a864c: aa0003f3 mov x19, x0
ffff8000113a8650: aa1e03e0 mov x0, x30
ffff8000113a8654: aa0103f5 mov x21, x1
ffff8000113a8658: 94000000 bl 0 <_mcount>
ffff8000113a8658: R_AARCH64_CALL26 _mcount
int vlan_depth = skb->mac_len;
ffff8000113a865c: 7940f260 ldrh w0, [x19,#120]
{
ffff8000113a8660: 90000014 adrp x20, 0 <__stack_chk_guard>
ffff8000113a8660: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
int vlan_depth = skb->mac_len;
ffff8000113a8664: 910103a1 add x1, x29, #0x40
{
ffff8000113a8668: f9400283 ldr x3, [x20]
ffff8000113a8668: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
int vlan_depth = skb->mac_len;
ffff8000113a866c: b81f4c20 str w0, [x1,#-12]!
__be16 type = skb_network_protocol(skb, &vlan_depth);
ffff8000113a8670: aa1303e0 mov x0, x19
{
ffff8000113a8674: f9001fa3 str x3, [x29,#56]
__be16 type = skb_network_protocol(skb, &vlan_depth);
ffff8000113a8678: 94000000 bl ffff8000113a8510 <skb_network_protocol>
ffff8000113a8678: R_AARCH64_CALL26 skb_network_protocol
ffff8000113a867c: 53003c04 uxth w4, w0
if (unlikely(!type))
ffff8000113a8680: 34000684 cbz w4, ffff8000113a8750 <skb_mac_gso_segment+0x114>
skb->len -= len;
ffff8000113a8684: b9407261 ldr w1, [x19,#112]
__skb_pull(skb, vlan_depth);
ffff8000113a8688: b94037a0 ldr w0, [x29,#52]
BUG_ON(skb->len < skb->data_len);
ffff8000113a868c: b9407662 ldr w2, [x19,#116]
skb->len -= len;
ffff8000113a8690: 4b000021 sub w1, w1, w0
ffff8000113a8694: b9007261 str w1, [x19,#112]
BUG_ON(skb->len < skb->data_len);
ffff8000113a8698: 6b02003f cmp w1, w2
ffff8000113a869c: 54000583 b.cc ffff8000113a874c <skb_mac_gso_segment+0x110>
return skb->data += len;
ffff8000113a86a0: f9406661 ldr x1, [x19,#200]
ffff8000113a86a4: 8b204020 add x0, x1, w0, uxtw
ffff8000113a86a8: f9006660 str x0, [x19,#200]
ffff8000113a86ac: 90000005 adrp x5, ffff80001139e37c <__my_cpu_offset>
ffff8000113a86ac: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a86b0: 910000a5 add x5, x5, #0x0
ffff8000113a86b0: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a86b4: f94408a2 ldr x2, [x5,#2064]
ffff8000113a86b8: 912040a5 add x5, x5, #0x810
list_for_each_entry_rcu(ptype, &offload_base, list) {
ffff8000113a86bc: eb0200bf cmp x5, x2
ffff8000113a86c0: d1008042 sub x2, x2, #0x20
ffff8000113a86c4: 540000c1 b.ne ffff8000113a86dc <skb_mac_gso_segment+0xa0>
ffff8000113a86c8: 1400000e b ffff8000113a8700 <skb_mac_gso_segment+0xc4>
ffff8000113a86cc: f9401042 ldr x2, [x2,#32]
ffff8000113a86d0: eb0200bf cmp x5, x2
ffff8000113a86d4: d1008042 sub x2, x2, #0x20
ffff8000113a86d8: 54000140 b.eq ffff8000113a8700 <skb_mac_gso_segment+0xc4>
if (ptype->type == type && ptype->callbacks.gso_segment) {
ffff8000113a86dc: 79400043 ldrh w3, [x2]
ffff8000113a86e0: 6b04007f cmp w3, w4
ffff8000113a86e4: 54ffff41 b.ne ffff8000113a86cc <skb_mac_gso_segment+0x90>
ffff8000113a86e8: f9400443 ldr x3, [x2,#8]
ffff8000113a86ec: b4ffff03 cbz x3, ffff8000113a86cc <skb_mac_gso_segment+0x90>
segs = ptype->callbacks.gso_segment(skb, features);
ffff8000113a86f0: aa1303e0 mov x0, x19
ffff8000113a86f4: aa1503e1 mov x1, x21
ffff8000113a86f8: d63f0060 blr x3
break;
ffff8000113a86fc: 14000002 b ffff8000113a8704 <skb_mac_gso_segment+0xc8>
struct sk_buff *segs = ERR_PTR(-EPROTONOSUPPORT);
ffff8000113a8700: 92800b80 mov x0, #0xffffffffffffffa3 // #-93
return skb->head + skb->mac_header;
ffff8000113a8704: 79416e61 ldrh w1, [x19,#182]
ffff8000113a8708: f9406264 ldr x4, [x19,#192]
__skb_push(skb, skb->data - skb_mac_header(skb));
ffff8000113a870c: f9406662 ldr x2, [x19,#200]
skb->len += len;
ffff8000113a8710: b9407263 ldr w3, [x19,#112]
return skb->head + skb->mac_header;
ffff8000113a8714: 8b010081 add x1, x4, x1
ffff8000113a8718: cb010041 sub x1, x2, x1
skb->data -= len;
ffff8000113a871c: cb214042 sub x2, x2, w1, uxtw
skb->len += len;
ffff8000113a8720: 0b010061 add w1, w3, w1
skb->data -= len;
ffff8000113a8724: f9006662 str x2, [x19,#200]
skb->len += len;
ffff8000113a8728: b9007261 str w1, [x19,#112]
}
ffff8000113a872c: f9401fa2 ldr x2, [x29,#56]
ffff8000113a8730: f9400281 ldr x1, [x20]
ffff8000113a8730: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a8734: eb01005f cmp x2, x1
ffff8000113a8738: 54000101 b.ne ffff8000113a8758 <skb_mac_gso_segment+0x11c>
ffff8000113a873c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a8740: f94013f5 ldr x21, [sp,#32]
ffff8000113a8744: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a8748: d65f03c0 ret
ffff8000113a874c: 94000000 bl ffff80001139e37c <__my_cpu_offset>
ffff8000113a874c: R_AARCH64_CALL26 .text.unlikely+0xa0
return ERR_PTR(-EINVAL);
ffff8000113a8750: 928002a0 mov x0, #0xffffffffffffffea // #-22
ffff8000113a8754: 17fffff6 b ffff8000113a872c <skb_mac_gso_segment+0xf0>
}
ffff8000113a8758: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a8758: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a875c <__skb_gso_segment>:
{
ffff8000113a875c: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a8760: 910003fd mov x29, sp
ffff8000113a8764: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a8768: f90013f5 str x21, [sp,#32]
ffff8000113a876c: aa0003f3 mov x19, x0
ffff8000113a8770: aa1e03e0 mov x0, x30
ffff8000113a8774: 53001c55 uxtb w21, w2
ffff8000113a8778: aa0103f4 mov x20, x1
ffff8000113a877c: 94000000 bl 0 <_mcount>
ffff8000113a877c: R_AARCH64_CALL26 _mcount
return skb->ip_summed != CHECKSUM_PARTIAL &&
ffff8000113a8780: 39420260 ldrb w0, [x19,#128]
if (tx_path)
ffff8000113a8784: 34000415 cbz w21, ffff8000113a8804 <__skb_gso_segment+0xa8>
return skb->ip_summed != CHECKSUM_PARTIAL &&
ffff8000113a8788: d3451400 ubfx x0, x0, #5, #1
ffff8000113a878c: 52000000 eor w0, w0, #0x1
if (unlikely(skb_needs_check(skb, tx_path))) {
ffff8000113a8790: 350007e0 cbnz w0, ffff8000113a888c <__skb_gso_segment+0x130>
if (features & NETIF_F_GSO_PARTIAL) {
ffff8000113a8794: 37e00434 tbnz w20, #28, ffff8000113a8818 <__skb_gso_segment+0xbc>
ffff8000113a8798: f9406261 ldr x1, [x19,#192]
return skb->data - skb->head;
ffff8000113a879c: f9406660 ldr x0, [x19,#200]
skb->mac_len = skb->network_header - skb->mac_header;
ffff8000113a87a0: 79416a62 ldrh w2, [x19,#180]
return skb->data - skb->head;
ffff8000113a87a4: cb010001 sub x1, x0, x1
skb->mac_header = skb->data - skb->head;
ffff8000113a87a8: 53003c20 uxth w0, w1
skb->mac_len = skb->network_header - skb->mac_header;
ffff8000113a87ac: 4b000042 sub w2, w2, w0
SKB_GSO_CB(skb)->mac_offset = skb_headroom(skb);
ffff8000113a87b0: b9004a61 str w1, [x19,#72]
skb->mac_header = skb->data - skb->head;
ffff8000113a87b4: 79016e60 strh w0, [x19,#182]
SKB_GSO_CB(skb)->encap_level = 0;
ffff8000113a87b8: b9004e7f str wzr, [x19,#76]
skb->mac_len = skb->network_header - skb->mac_header;
ffff8000113a87bc: 7900f262 strh w2, [x19,#120]
segs = skb_mac_gso_segment(skb, features);
ffff8000113a87c0: aa1303e0 mov x0, x19
ffff8000113a87c4: aa1403e1 mov x1, x20
ffff8000113a87c8: 94000000 bl ffff8000113a863c <skb_mac_gso_segment>
ffff8000113a87c8: R_AARCH64_CALL26 skb_mac_gso_segment
if (segs != skb && unlikely(skb_needs_check(skb, tx_path) && !IS_ERR(segs)))
ffff8000113a87cc: eb13001f cmp x0, x19
ffff8000113a87d0: 54000520 b.eq ffff8000113a8874 <__skb_gso_segment+0x118>
return skb->ip_summed != CHECKSUM_PARTIAL &&
ffff8000113a87d4: 39420261 ldrb w1, [x19,#128]
if (tx_path)
ffff8000113a87d8: 35000415 cbnz w21, ffff8000113a8858 <__skb_gso_segment+0xfc>
return skb->ip_summed == CHECKSUM_NONE;
ffff8000113a87dc: d3451821 ubfx x1, x1, #5, #2
ffff8000113a87e0: 6b1f003f cmp w1, wzr
ffff8000113a87e4: 1a9f17e1 cset w1, eq
ffff8000113a87e8: aa0003f4 mov x20, x0
if (segs != skb && unlikely(skb_needs_check(skb, tx_path) && !IS_ERR(segs)))
ffff8000113a87ec: 350005c1 cbnz w1, ffff8000113a88a4 <__skb_gso_segment+0x148>
}
ffff8000113a87f0: aa1403e0 mov x0, x20
ffff8000113a87f4: f94013f5 ldr x21, [sp,#32]
ffff8000113a87f8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a87fc: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a8800: d65f03c0 ret
return skb->ip_summed == CHECKSUM_NONE;
ffff8000113a8804: d3451800 ubfx x0, x0, #5, #2
ffff8000113a8808: 6b1f001f cmp w0, wzr
ffff8000113a880c: 1a9f17e0 cset w0, eq
if (unlikely(skb_needs_check(skb, tx_path))) {
ffff8000113a8810: 34fffc20 cbz w0, ffff8000113a8794 <__skb_gso_segment+0x38>
ffff8000113a8814: 1400001e b ffff8000113a888c <__skb_gso_segment+0x130>
struct net_device *dev = skb->dev;
ffff8000113a8818: f9400a60 ldr x0, [x19,#16]
static inline bool skb_gso_ok(struct sk_buff *skb, netdev_features_t features)
ffff8000113a881c: f9406261 ldr x1, [x19,#192]
return skb->head + skb->end;
ffff8000113a8820: b940be62 ldr w2, [x19,#188]
partial_features |= dev->features & dev->gso_partial_features;
ffff8000113a8824: f9407c03 ldr x3, [x0,#248]
ffff8000113a8828: f9406400 ldr x0, [x0,#200]
ffff8000113a882c: 8b020022 add x2, x1, x2
ffff8000113a8830: 8a000063 and x3, x3, x0
netdev_features_t feature = (netdev_features_t)gso_type << NETIF_F_GSO_SHIFT;
ffff8000113a8834: b9801840 ldrsw x0, [x2,#24]
ffff8000113a8838: b26f0063 orr x3, x3, #0x20000
ffff8000113a883c: d370bc00 lsl x0, x0, #16
if (!skb_gso_ok(skb, features | partial_features))
ffff8000113a8840: aa140063 orr x3, x3, x20
return (features & feature) == feature;
ffff8000113a8844: 8a030004 and x4, x0, x3
return net_gso_ok(features, skb_shinfo(skb)->gso_type) &&
ffff8000113a8848: eb04001f cmp x0, x4
ffff8000113a884c: 540000c0 b.eq ffff8000113a8864 <__skb_gso_segment+0x108>
features &= ~NETIF_F_GSO_PARTIAL;
ffff8000113a8850: 9263fa94 and x20, x20, #0xffffffffefffffff
ffff8000113a8854: 17ffffd2 b ffff8000113a879c <__skb_gso_segment+0x40>
return skb->ip_summed != CHECKSUM_PARTIAL &&
ffff8000113a8858: d3451421 ubfx x1, x1, #5, #1
ffff8000113a885c: 52000021 eor w1, w1, #0x1
ffff8000113a8860: 17ffffe2 b ffff8000113a87e8 <__skb_gso_segment+0x8c>
ffff8000113a8864: f9400440 ldr x0, [x2,#8]
ffff8000113a8868: b4fff9a0 cbz x0, ffff8000113a879c <__skb_gso_segment+0x40>
(!skb_has_frag_list(skb) || (features & NETIF_F_FRAGLIST));
ffff8000113a886c: 3637ff23 tbz w3, #6, ffff8000113a8850 <__skb_gso_segment+0xf4>
ffff8000113a8870: 17ffffcb b ffff8000113a879c <__skb_gso_segment+0x40>
ffff8000113a8874: aa1303f4 mov x20, x19
}
ffff8000113a8878: aa1403e0 mov x0, x20
ffff8000113a887c: f94013f5 ldr x21, [sp,#32]
ffff8000113a8880: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a8884: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a8888: d65f03c0 ret
err = skb_cow_head(skb, 0);
ffff8000113a888c: 52800001 mov w1, #0x0 // #0
ffff8000113a8890: aa1303e0 mov x0, x19
ffff8000113a8894: 97ffe13c bl ffff8000113a0d84 <skb_cow_head>
if (err < 0)
ffff8000113a8898: 36fff7e0 tbz w0, #31, ffff8000113a8794 <__skb_gso_segment+0x38>
return ERR_PTR(err);
ffff8000113a889c: 93407c14 sxtw x20, w0
ffff8000113a88a0: 17ffffd4 b ffff8000113a87f0 <__skb_gso_segment+0x94>
if (segs != skb && unlikely(skb_needs_check(skb, tx_path) && !IS_ERR(segs)))
ffff8000113a88a4: b140041f cmn x0, #0x1, lsl #12
ffff8000113a88a8: 54fffa48 b.hi ffff8000113a87f0 <__skb_gso_segment+0x94>
skb_warn_bad_offload(skb);
ffff8000113a88ac: aa1303e0 mov x0, x19
ffff8000113a88b0: 94000000 bl ffff80001139e37c <__my_cpu_offset>
ffff8000113a88b0: R_AARCH64_CALL26 .text.unlikely+0xa4
ffff8000113a88b4: 17ffffcf b ffff8000113a87f0 <__skb_gso_segment+0x94>
ffff8000113a88b8 <netif_skb_features>:
{
ffff8000113a88b8: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a88bc: 910003fd mov x29, sp
ffff8000113a88c0: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a88c4: f90013f5 str x21, [sp,#32]
ffff8000113a88c8: aa0003f3 mov x19, x0
ffff8000113a88cc: aa1e03e0 mov x0, x30
ffff8000113a88d0: 94000000 bl 0 <_mcount>
ffff8000113a88d0: R_AARCH64_CALL26 _mcount
static inline bool skb_is_gso(const struct sk_buff *skb)
ffff8000113a88d4: f9406262 ldr x2, [x19,#192]
return skb->head + skb->end;
ffff8000113a88d8: b940be60 ldr w0, [x19,#188]
ffff8000113a88dc: 90000015 adrp x21, 0 <__stack_chk_guard>
ffff8000113a88dc: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a88e0: f94002a4 ldr x4, [x21]
ffff8000113a88e0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a88e4: 8b000040 add x0, x2, x0
struct net_device *dev = skb->dev;
ffff8000113a88e8: f9400a61 ldr x1, [x19,#16]
if (skb_is_gso(skb))
ffff8000113a88ec: 79400803 ldrh w3, [x0,#4]
{
ffff8000113a88f0: f9001fa4 str x4, [x29,#56]
netdev_features_t features = dev->features;
ffff8000113a88f4: f9406434 ldr x20, [x1,#200]
if (skb_is_gso(skb))
ffff8000113a88f8: 34000a23 cbz w3, ffff8000113a8a3c <netif_skb_features+0x184>
if (gso_segs > dev->gso_max_segs)
ffff8000113a88fc: 79507824 ldrh w4, [x1,#2108]
ffff8000113a8900: 79400c03 ldrh w3, [x0,#6]
struct net_device *dev = skb->dev;
ffff8000113a8904: f9407c25 ldr x5, [x1,#248]
if (gso_segs > dev->gso_max_segs)
ffff8000113a8908: 6b03009f cmp w4, w3
ffff8000113a890c: 54000c23 b.cc ffff8000113a8a90 <netif_skb_features+0x1d8>
if (!(skb_shinfo(skb)->gso_type & SKB_GSO_PARTIAL))
ffff8000113a8910: b9401800 ldr w0, [x0,#24]
ffff8000113a8914: 37600040 tbnz w0, #12, ffff8000113a891c <netif_skb_features+0x64>
features &= ~dev->gso_partial_features;
ffff8000113a8918: 8a250294 bic x20, x20, x5
if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4) {
ffff8000113a891c: 36000900 tbz w0, #0, ffff8000113a8a3c <netif_skb_features+0x184>
struct iphdr *iph = skb->encapsulation ?
ffff8000113a8920: 39420660 ldrb w0, [x19,#129]
ffff8000113a8924: d3451400 ubfx x0, x0, #5, #1
inner_ip_hdr(skb) : ip_hdr(skb);
ffff8000113a8928: 34000ee0 cbz w0, ffff8000113a8b04 <netif_skb_features+0x24c>
return skb->head + skb->inner_network_header;
ffff8000113a892c: 79415a63 ldrh w3, [x19,#172]
ffff8000113a8930: 8b030042 add x2, x2, x3
if (!(iph->frag_off & htons(IP_DF)))
ffff8000113a8934: 79400c43 ldrh w3, [x2,#6]
features &= ~NETIF_F_TSO_MANGLEID;
ffff8000113a8938: 926cfa82 and x2, x20, #0xfffffffffff7ffff
if (!(iph->frag_off & htons(IP_DF)))
ffff8000113a893c: 121a0063 and w3, w3, #0x40
features &= ~NETIF_F_TSO_MANGLEID;
ffff8000113a8940: 6b1f007f cmp w3, wzr
ffff8000113a8944: 9a940054 csel x20, x2, x20, eq
if (skb->encapsulation)
ffff8000113a8948: 34000060 cbz w0, ffff8000113a8954 <netif_skb_features+0x9c>
features &= dev->hw_enc_features;
ffff8000113a894c: f9407420 ldr x0, [x1,#232]
ffff8000113a8950: 8a000294 and x20, x20, x0
* Returns true if the skb is tagged, regardless of whether it is hardware
* accelerated or not.
*/
static inline bool skb_vlan_tagged(const struct sk_buff *skb)
{
if (!skb_vlan_tag_present(skb) &&
ffff8000113a8954: 39420a60 ldrb w0, [x19,#130]
ffff8000113a8958: 12000000 and w0, w0, #0x1
ffff8000113a895c: 350000e0 cbnz w0, ffff8000113a8978 <netif_skb_features+0xc0>
switch (ethertype) {
ffff8000113a8960: 79416262 ldrh w2, [x19,#176]
ffff8000113a8964: 7102045f cmp w2, #0x81
ffff8000113a8968: 54000080 b.eq ffff8000113a8978 <netif_skb_features+0xc0>
ffff8000113a896c: 52951103 mov w3, #0xa888 // #43144
ffff8000113a8970: 6b03005f cmp w2, w3
ffff8000113a8974: 54000101 b.ne ffff8000113a8994 <netif_skb_features+0xdc>
dev->vlan_features |
ffff8000113a8978: f9407023 ldr x3, [x1,#224]
features = netdev_intersect_features(features,
ffff8000113a897c: d2801002 mov x2, #0x80 // #128
ffff8000113a8980: f2c40002 movk x2, #0x2000, lsl #32
ffff8000113a8984: aa020062 orr x2, x3, x2
if ((f1 ^ f2) & NETIF_F_HW_CSUM) {
ffff8000113a8988: ca020284 eor x4, x20, x2
ffff8000113a898c: 37180664 tbnz w4, #3, ffff8000113a8a58 <netif_skb_features+0x1a0>
return f1 & f2;
ffff8000113a8990: 8a020294 and x20, x20, x2
if (dev->netdev_ops->ndo_features_check)
ffff8000113a8994: f940f822 ldr x2, [x1,#496]
ffff8000113a8998: f9401443 ldr x3, [x2,#40]
ffff8000113a899c: b4000663 cbz x3, ffff8000113a8a68 <netif_skb_features+0x1b0>
features &= dev->netdev_ops->ndo_features_check(skb, dev,
ffff8000113a89a0: aa1403e2 mov x2, x20
ffff8000113a89a4: aa1303e0 mov x0, x19
ffff8000113a89a8: d63f0060 blr x3
ffff8000113a89ac: 8a140014 and x20, x0, x20
type = skb_network_protocol(skb, &tmp);
ffff8000113a89b0: 9100d3a1 add x1, x29, #0x34
ffff8000113a89b4: aa1303e0 mov x0, x19
ffff8000113a89b8: 94000000 bl ffff8000113a8510 <skb_network_protocol>
ffff8000113a89b8: R_AARCH64_CALL26 skb_network_protocol
ffff8000113a89bc: 53003c00 uxth w0, w0
};
static inline bool eth_p_mpls(__be16 eth_type)
{
return eth_type == htons(ETH_P_MPLS_UC) ||
eth_type == htons(ETH_P_MPLS_MC);
ffff8000113a89c0: 52891101 mov w1, #0x4888 // #18568
if (eth_p_mpls(type))
ffff8000113a89c4: 6b01001f cmp w0, w1
ffff8000113a89c8: 54000400 b.eq ffff8000113a8a48 <netif_skb_features+0x190>
return eth_type == htons(ETH_P_MPLS_UC) ||
ffff8000113a89cc: 5288f101 mov w1, #0x4788 // #18312
ffff8000113a89d0: 6b01001f cmp w0, w1
ffff8000113a89d4: 540003a0 b.eq ffff8000113a8a48 <netif_skb_features+0x190>
if (skb->ip_summed != CHECKSUM_NONE &&
ffff8000113a89d8: 39420261 ldrb w1, [x19,#128]
ffff8000113a89dc: d3451821 ubfx x1, x1, #5, #2
ffff8000113a89e0: 340001c1 cbz w1, ffff8000113a8a18 <netif_skb_features+0x160>
if (protocol == htons(ETH_P_FCOE))
ffff8000113a89e4: 711a241f cmp w0, #0x689
ffff8000113a89e8: 54000640 b.eq ffff8000113a8ab0 <netif_skb_features+0x1f8>
if (features & NETIF_F_HW_CSUM) {
ffff8000113a89ec: 37180174 tbnz w20, #3, ffff8000113a8a18 <netif_skb_features+0x160>
switch (protocol) {
ffff8000113a89f0: 7100201f cmp w0, #0x8
ffff8000113a89f4: 54000840 b.eq ffff8000113a8afc <netif_skb_features+0x244>
ffff8000113a89f8: 529bb0c1 mov w1, #0xdd86 // #56710
ffff8000113a89fc: 6b01001f cmp w0, w1
ffff8000113a8a00: 54000061 b.ne ffff8000113a8a0c <netif_skb_features+0x154>
return !!(features & NETIF_F_IPV6_CSUM);
ffff8000113a8a04: d3441280 ubfx x0, x20, #4, #1
ffff8000113a8a08: 35000080 cbnz w0, ffff8000113a8a18 <netif_skb_features+0x160>
features &= ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
ffff8000113a8a0c: b25d73e0 mov x0, #0xfffffff800000000 // #-34359738368
ffff8000113a8a10: f29ffca0 movk x0, #0xffe5
ffff8000113a8a14: 8a000294 and x20, x20, x0
}
ffff8000113a8a18: f9401fa2 ldr x2, [x29,#56]
ffff8000113a8a1c: f94002a1 ldr x1, [x21]
ffff8000113a8a1c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a8a20: aa1403e0 mov x0, x20
ffff8000113a8a24: eb01005f cmp x2, x1
ffff8000113a8a28: 54000741 b.ne ffff8000113a8b10 <netif_skb_features+0x258>
ffff8000113a8a2c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a8a30: f94013f5 ldr x21, [sp,#32]
ffff8000113a8a34: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a8a38: d65f03c0 ret
ffff8000113a8a3c: 39420660 ldrb w0, [x19,#129]
ffff8000113a8a40: d3451400 ubfx x0, x0, #5, #1
ffff8000113a8a44: 17ffffc1 b ffff8000113a8948 <netif_skb_features+0x90>
features &= skb->dev->mpls_features;
ffff8000113a8a48: f9400a61 ldr x1, [x19,#16]
ffff8000113a8a4c: f9407821 ldr x1, [x1,#240]
ffff8000113a8a50: 8a010294 and x20, x20, x1
ffff8000113a8a54: 17ffffe1 b ffff8000113a89d8 <netif_skb_features+0x120>
if (f1 & NETIF_F_HW_CSUM)
ffff8000113a8a58: 36180254 tbz w20, #3, ffff8000113a8aa0 <netif_skb_features+0x1e8>
f1 |= (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM);
ffff8000113a8a5c: d2800243 mov x3, #0x12 // #18
ffff8000113a8a60: aa030294 orr x20, x20, x3
ffff8000113a8a64: 17ffffcb b ffff8000113a8990 <netif_skb_features+0xd8>
* Returns true if the skb is tagged with multiple vlan headers, regardless
* of whether it is hardware accelerated or not.
*/
static inline bool skb_vlan_tagged_multi(struct sk_buff *skb)
{
__be16 protocol = skb->protocol;
ffff8000113a8a68: 79416261 ldrh w1, [x19,#176]
if (!skb_vlan_tag_present(skb)) {
ffff8000113a8a6c: 35000340 cbnz w0, ffff8000113a8ad4 <netif_skb_features+0x21c>
switch (ethertype) {
ffff8000113a8a70: 7102043f cmp w1, #0x81
ffff8000113a8a74: 54000220 b.eq ffff8000113a8ab8 <netif_skb_features+0x200>
ffff8000113a8a78: 52951100 mov w0, #0xa888 // #43144
ffff8000113a8a7c: 6b00003f cmp w1, w0
ffff8000113a8a80: 540001c0 b.eq ffff8000113a8ab8 <netif_skb_features+0x200>
{
ffff8000113a8a84: aa1403e0 mov x0, x20
features &= dflt_features_check(skb, dev, features);
ffff8000113a8a88: 8a140014 and x20, x0, x20
ffff8000113a8a8c: 17ffffc9 b ffff8000113a89b0 <netif_skb_features+0xf8>
ffff8000113a8a90: 39420660 ldrb w0, [x19,#129]
return features & ~NETIF_F_GSO_MASK;
ffff8000113a8a94: 925db294 and x20, x20, #0xfffffff80000ffff
ffff8000113a8a98: d3451400 ubfx x0, x0, #5, #1
ffff8000113a8a9c: 17ffffab b ffff8000113a8948 <netif_skb_features+0x90>
f2 |= (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM);
ffff8000113a8aa0: d2801242 mov x2, #0x92 // #146
ffff8000113a8aa4: f2c40002 movk x2, #0x2000, lsl #32
ffff8000113a8aa8: aa020062 orr x2, x3, x2
ffff8000113a8aac: 17ffffb9 b ffff8000113a8990 <netif_skb_features+0xd8>
return !!(features & NETIF_F_FCOE_CRC);
ffff8000113a8ab0: d3638e80 ubfx x0, x20, #35, #1
ffff8000113a8ab4: 17ffffd5 b ffff8000113a8a08 <netif_skb_features+0x150>
struct vlan_ethhdr *veh;
if (likely(!eth_type_vlan(protocol)))
return false;
if (unlikely(!pskb_may_pull(skb, VLAN_ETH_HLEN)))
ffff8000113a8ab8: aa1303e0 mov x0, x19
ffff8000113a8abc: 52800241 mov w1, #0x12 // #18
ffff8000113a8ac0: 97ffe09d bl ffff8000113a0d34 <pskb_may_pull>
ffff8000113a8ac4: 53001c00 uxtb w0, w0
ffff8000113a8ac8: 34fffde0 cbz w0, ffff8000113a8a84 <netif_skb_features+0x1cc>
return false;
veh = (struct vlan_ethhdr *)skb->data;
protocol = veh->h_vlan_encapsulated_proto;
ffff8000113a8acc: f9406660 ldr x0, [x19,#200]
ffff8000113a8ad0: 79402001 ldrh w1, [x0,#16]
switch (ethertype) {
ffff8000113a8ad4: 7102043f cmp w1, #0x81
ffff8000113a8ad8: 54000080 b.eq ffff8000113a8ae8 <netif_skb_features+0x230>
ffff8000113a8adc: 52951100 mov w0, #0xa888 // #43144
ffff8000113a8ae0: 6b00003f cmp w1, w0
ffff8000113a8ae4: 54fffd01 b.ne ffff8000113a8a84 <netif_skb_features+0x1cc>
/* In the case of multi-tagged packets, use a direct mask
* instead of using netdev_interesect_features(), to make
* sure that only devices supporting NETIF_F_HW_CSUM will
* have checksum offloading support.
*/
features &= NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_HW_CSUM |
ffff8000113a8ae8: d2801d20 mov x0, #0xe9 // #233
ffff8000113a8aec: f2c40000 movk x0, #0x2000, lsl #32
ffff8000113a8af0: 8a000280 and x0, x20, x0
features &= dflt_features_check(skb, dev, features);
ffff8000113a8af4: 8a140014 and x20, x0, x20
ffff8000113a8af8: 17ffffae b ffff8000113a89b0 <netif_skb_features+0xf8>
return !!(features & NETIF_F_IP_CSUM);
ffff8000113a8afc: d3410680 ubfx x0, x20, #1, #1
ffff8000113a8b00: 17ffffc2 b ffff8000113a8a08 <netif_skb_features+0x150>
return skb->head + skb->network_header;
ffff8000113a8b04: 79416a63 ldrh w3, [x19,#180]
ffff8000113a8b08: 8b030042 add x2, x2, x3
ffff8000113a8b0c: 17ffff8a b ffff8000113a8934 <netif_skb_features+0x7c>
}
ffff8000113a8b10: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a8b10: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113a8b14 <validate_xmit_skb>:
{
ffff8000113a8b14: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a8b18: 910003fd mov x29, sp
ffff8000113a8b1c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a8b20: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a8b24: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a8b28: aa0003f3 mov x19, x0
ffff8000113a8b2c: aa1e03e0 mov x0, x30
ffff8000113a8b30: aa0103f7 mov x23, x1
ffff8000113a8b34: aa0203f6 mov x22, x2
ffff8000113a8b38: 94000000 bl 0 <_mcount>
ffff8000113a8b38: R_AARCH64_CALL26 _mcount
features = netif_skb_features(skb);
ffff8000113a8b3c: aa1303e0 mov x0, x19
ffff8000113a8b40: 94000000 bl ffff8000113a88b8 <netif_skb_features>
ffff8000113a8b40: R_AARCH64_CALL26 netif_skb_features
ffff8000113a8b44: aa0003f4 mov x20, x0
if (skb_vlan_tag_present(skb) &&
ffff8000113a8b48: 39420a60 ldrb w0, [x19,#130]
ffff8000113a8b4c: 36000620 tbz w0, #0, ffff8000113a8c10 <validate_xmit_skb+0xfc>
!vlan_hw_offload_capable(features, skb->vlan_proto))
ffff8000113a8b50: 79413275 ldrh w21, [x19,#152]
if (proto == htons(ETH_P_8021Q) && features & NETIF_F_HW_VLAN_CTAG_TX)
ffff8000113a8b54: 710206bf cmp w21, #0x81
ffff8000113a8b58: 54001020 b.eq ffff8000113a8d5c <validate_xmit_skb+0x248>
if (proto == htons(ETH_P_8021AD) && features & NETIF_F_HW_VLAN_STAG_TX)
ffff8000113a8b5c: 52951100 mov w0, #0xa888 // #43144
ffff8000113a8b60: 6b0002bf cmp w21, w0
ffff8000113a8b64: 540013a0 b.eq ffff8000113a8dd8 <validate_xmit_skb+0x2c4>
if (!skb->cloned)
ffff8000113a8b68: 3941fa60 ldrb w0, [x19,#126]
skb = vlan_insert_tag_set_proto(skb, skb->vlan_proto,
ffff8000113a8b6c: 79413678 ldrh w24, [x19,#154]
ffff8000113a8b70: 12000000 and w0, w0, #0x1
ffff8000113a8b74: 34001240 cbz w0, ffff8000113a8dbc <validate_xmit_skb+0x2a8>
static inline int skb_header_cloned(const struct sk_buff *skb)
ffff8000113a8b78: f9406260 ldr x0, [x19,#192]
return skb->head + skb->end;
ffff8000113a8b7c: b940be61 ldr w1, [x19,#188]
return dataref != 1;
ffff8000113a8b80: aa0003e2 mov x2, x0
return skb->head + skb->end;
ffff8000113a8b84: 8b010000 add x0, x0, x1
ffff8000113a8b88: b9402000 ldr w0, [x0,#32]
return skb->data - skb->head;
ffff8000113a8b8c: f9406663 ldr x3, [x19,#200]
dataref = (dataref & SKB_DATAREF_MASK) - (dataref >> SKB_DATAREF_SHIFT);
ffff8000113a8b90: 12003c01 and w1, w0, #0xffff
ffff8000113a8b94: 4b804020 sub w0, w1, w0, asr #16
return dataref != 1;
ffff8000113a8b98: 7100041f cmp w0, #0x1
return skb->data - skb->head;
ffff8000113a8b9c: cb020062 sub x2, x3, x2
return dataref != 1;
ffff8000113a8ba0: 1a9f07e0 cset w0, ne
if (headroom > skb_headroom(skb))
ffff8000113a8ba4: 71000c5f cmp w2, #0x3
int delta = 0;
ffff8000113a8ba8: 52800001 mov w1, #0x0 // #0
if (headroom > skb_headroom(skb))
ffff8000113a8bac: 54000068 b.hi ffff8000113a8bb8 <validate_xmit_skb+0xa4>
delta = headroom - skb_headroom(skb);
ffff8000113a8bb0: 52800081 mov w1, #0x4 // #4
ffff8000113a8bb4: 4b020021 sub w1, w1, w2
if (delta || cloned)
ffff8000113a8bb8: 2a000020 orr w0, w1, w0
ffff8000113a8bbc: 35000ea0 cbnz w0, ffff8000113a8d90 <validate_xmit_skb+0x27c>
skb_push(skb, VLAN_HLEN);
ffff8000113a8bc0: 52800081 mov w1, #0x4 // #4
ffff8000113a8bc4: aa1303e0 mov x0, x19
ffff8000113a8bc8: 94000000 bl 0 <skb_push>
ffff8000113a8bc8: R_AARCH64_CALL26 skb_push
memmove(skb->data, skb->data + VLAN_HLEN, mac_len - ETH_TLEN);
ffff8000113a8bcc: f9406660 ldr x0, [x19,#200]
return __builtin_memmove(p, q, size);
ffff8000113a8bd0: d2800182 mov x2, #0xc // #12
ffff8000113a8bd4: 91001001 add x1, x0, #0x4
ffff8000113a8bd8: 94000000 bl 0 <memmove>
ffff8000113a8bd8: R_AARCH64_CALL26 memmove
skb->mac_header -= VLAN_HLEN;
ffff8000113a8bdc: 79416e61 ldrh w1, [x19,#182]
veth = (struct vlan_ethhdr *)(skb->data + mac_len - ETH_HLEN);
ffff8000113a8be0: f9406660 ldr x0, [x19,#200]
skb->mac_header -= VLAN_HLEN;
ffff8000113a8be4: 51001021 sub w1, w1, #0x4
ffff8000113a8be8: 79016e61 strh w1, [x19,#182]
static inline __attribute_const__ __u16 __fswab16(__u16 val)
{
#if defined (__arch_swab16)
return __arch_swab16(val);
#else
return ___constant_swab16(val);
ffff8000113a8bec: 53087f01 lsr w1, w24, #8
ffff8000113a8bf0: 2a182038 orr w24, w1, w24, lsl #8
veth->h_vlan_proto = vlan_proto;
ffff8000113a8bf4: 79001815 strh w21, [x0,#12]
veth->h_vlan_TCI = htons(vlan_tci);
ffff8000113a8bf8: 79001c18 strh w24, [x0,#14]
if (skb)
ffff8000113a8bfc: b4000a13 cbz x19, ffff8000113a8d3c <validate_xmit_skb+0x228>
skb->vlan_present = 0;
ffff8000113a8c00: 39420a60 ldrb w0, [x19,#130]
skb->protocol = vlan_proto;
ffff8000113a8c04: 79016275 strh w21, [x19,#176]
skb->vlan_present = 0;
ffff8000113a8c08: 121f7800 and w0, w0, #0xfffffffe
ffff8000113a8c0c: 39020a60 strb w0, [x19,#130]
if (unlikely(!skb))
ffff8000113a8c10: b4000973 cbz x19, ffff8000113a8d3c <validate_xmit_skb+0x228>
*/
static inline struct sk_buff *sk_validate_xmit_skb(struct sk_buff *skb,
struct net_device *dev)
{
#ifdef CONFIG_SOCK_VALIDATE_XMIT
struct sock *sk = skb->sk;
ffff8000113a8c14: f9400e60 ldr x0, [x19,#24]
if (sk && sk_fullsock(sk) && sk->sk_validate_xmit_skb) {
ffff8000113a8c18: b4000580 cbz x0, ffff8000113a8cc8 <validate_xmit_skb+0x1b4>
return (1 << sk->sk_state) & ~(TCPF_TIME_WAIT | TCPF_NEW_SYN_RECV);
ffff8000113a8c1c: 39404801 ldrb w1, [x0,#18]
ffff8000113a8c20: 52800022 mov w2, #0x1 // #1
ffff8000113a8c24: 1ac12042 lsl w2, w2, w1
ffff8000113a8c28: 12820801 mov w1, #0xffffefbf // #-4161
if (sk && sk_fullsock(sk) && sk->sk_validate_xmit_skb) {
ffff8000113a8c2c: 6a01005f tst w2, w1
ffff8000113a8c30: 540004c0 b.eq ffff8000113a8cc8 <validate_xmit_skb+0x1b4>
ffff8000113a8c34: f9416403 ldr x3, [x0,#712]
ffff8000113a8c38: b4000483 cbz x3, ffff8000113a8cc8 <validate_xmit_skb+0x1b4>
skb = sk->sk_validate_xmit_skb(sk, dev, skb);
ffff8000113a8c3c: aa1303e2 mov x2, x19
ffff8000113a8c40: aa1703e1 mov x1, x23
ffff8000113a8c44: d63f0060 blr x3
ffff8000113a8c48: aa0003f3 mov x19, x0
if (unlikely(!skb))
ffff8000113a8c4c: b4000780 cbz x0, ffff8000113a8d3c <validate_xmit_skb+0x228>
return skb->head + skb->end;
ffff8000113a8c50: b940be60 ldr w0, [x19,#188]
ffff8000113a8c54: f9406261 ldr x1, [x19,#192]
ffff8000113a8c58: 8b000020 add x0, x1, x0
return skb_is_gso(skb) && (!skb_gso_ok(skb, features) ||
ffff8000113a8c5c: 79400803 ldrh w3, [x0,#4]
ffff8000113a8c60: 34000423 cbz w3, ffff8000113a8ce4 <validate_xmit_skb+0x1d0>
netdev_features_t feature = (netdev_features_t)gso_type << NETIF_F_GSO_SHIFT;
ffff8000113a8c64: b9801801 ldrsw x1, [x0,#24]
ffff8000113a8c68: d370bc21 lsl x1, x1, #16
return (features & feature) == feature;
ffff8000113a8c6c: 8a010282 and x2, x20, x1
return net_gso_ok(features, skb_shinfo(skb)->gso_type) &&
ffff8000113a8c70: eb02003f cmp x1, x2
ffff8000113a8c74: 54000b60 b.eq ffff8000113a8de0 <validate_xmit_skb+0x2cc>
return __skb_gso_segment(skb, features, true);
ffff8000113a8c78: aa1303e0 mov x0, x19
ffff8000113a8c7c: aa1403e1 mov x1, x20
ffff8000113a8c80: 52800022 mov w2, #0x1 // #1
ffff8000113a8c84: 94000000 bl ffff8000113a875c <__skb_gso_segment>
ffff8000113a8c84: R_AARCH64_CALL26 __skb_gso_segment
if (IS_ERR(segs)) {
ffff8000113a8c88: b140041f cmn x0, #0x1, lsl #12
ffff8000113a8c8c: aa0003f5 mov x21, x0
ffff8000113a8c90: 54000528 b.hi ffff8000113a8d34 <validate_xmit_skb+0x220>
} else if (segs) {
ffff8000113a8c94: b4000095 cbz x21, ffff8000113a8ca4 <validate_xmit_skb+0x190>
consume_skb(skb);
ffff8000113a8c98: aa1303e0 mov x0, x19
ffff8000113a8c9c: 94000000 bl 0 <consume_skb>
ffff8000113a8c9c: R_AARCH64_CALL26 consume_skb
ffff8000113a8ca0: aa1503f3 mov x19, x21
skb = validate_xmit_xfrm(skb, features, again);
ffff8000113a8ca4: aa1303e0 mov x0, x19
ffff8000113a8ca8: aa1403e1 mov x1, x20
ffff8000113a8cac: aa1603e2 mov x2, x22
ffff8000113a8cb0: 94000000 bl 0 <validate_xmit_xfrm>
ffff8000113a8cb0: R_AARCH64_CALL26 validate_xmit_xfrm
}
ffff8000113a8cb4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a8cb8: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a8cbc: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a8cc0: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a8cc4: d65f03c0 ret
#ifdef CONFIG_TLS_DEVICE
} else if (unlikely(skb->decrypted)) {
ffff8000113a8cc8: 39421260 ldrb w0, [x19,#132]
ffff8000113a8ccc: 37080960 tbnz w0, #1, ffff8000113a8df8 <validate_xmit_skb+0x2e4>
ffff8000113a8cd0: b940be60 ldr w0, [x19,#188]
ffff8000113a8cd4: f9406261 ldr x1, [x19,#192]
ffff8000113a8cd8: 8b000020 add x0, x1, x0
return skb_is_gso(skb) && (!skb_gso_ok(skb, features) ||
ffff8000113a8cdc: 79400803 ldrh w3, [x0,#4]
ffff8000113a8ce0: 35fffc23 cbnz w3, ffff8000113a8c64 <validate_xmit_skb+0x150>
static inline bool skb_needs_linearize(struct sk_buff *skb,
ffff8000113a8ce4: b9407661 ldr w1, [x19,#116]
return skb_is_nonlinear(skb) &&
ffff8000113a8ce8: 340000e1 cbz w1, ffff8000113a8d04 <validate_xmit_skb+0x1f0>
ffff8000113a8cec: f9400402 ldr x2, [x0,#8]
ffff8000113a8cf0: b4000042 cbz x2, ffff8000113a8cf8 <validate_xmit_skb+0x1e4>
((skb_has_frag_list(skb) && !(features & NETIF_F_FRAGLIST)) ||
ffff8000113a8cf4: 363003f4 tbz w20, #6, ffff8000113a8d70 <validate_xmit_skb+0x25c>
ffff8000113a8cf8: 39400800 ldrb w0, [x0,#2]
ffff8000113a8cfc: 34000040 cbz w0, ffff8000113a8d04 <validate_xmit_skb+0x1f0>
(skb_shinfo(skb)->nr_frags && !(features & NETIF_F_SG)));
ffff8000113a8d00: 36000394 tbz w20, #0, ffff8000113a8d70 <validate_xmit_skb+0x25c>
if (skb->ip_summed == CHECKSUM_PARTIAL) {
ffff8000113a8d04: 39420260 ldrb w0, [x19,#128]
ffff8000113a8d08: d3451800 ubfx x0, x0, #5, #2
ffff8000113a8d0c: 71000c1f cmp w0, #0x3
ffff8000113a8d10: 54fffca1 b.ne ffff8000113a8ca4 <validate_xmit_skb+0x190>
if (skb->encapsulation)
ffff8000113a8d14: 39420660 ldrb w0, [x19,#129]
ffff8000113a8d18: 37280260 tbnz w0, #5, ffff8000113a8d64 <validate_xmit_skb+0x250>
skb->transport_header += offset;
ffff8000113a8d1c: 79411260 ldrh w0, [x19,#136]
ffff8000113a8d20: 79016660 strh w0, [x19,#178]
if (skb_csum_hwoffload_help(skb, features))
ffff8000113a8d24: aa1303e0 mov x0, x19
ffff8000113a8d28: aa1403e1 mov x1, x20
ffff8000113a8d2c: 94000000 bl ffff8000113a84a0 <skb_csum_hwoffload_help>
ffff8000113a8d2c: R_AARCH64_CALL26 skb_csum_hwoffload_help
ffff8000113a8d30: 34fffba0 cbz w0, ffff8000113a8ca4 <validate_xmit_skb+0x190>
kfree_skb(skb);
ffff8000113a8d34: aa1303e0 mov x0, x19
ffff8000113a8d38: 94000000 bl 0 <kfree_skb>
ffff8000113a8d38: R_AARCH64_CALL26 kfree_skb
ATOMIC64_OPS(add, add, I)
ffff8000113a8d3c: 910722e2 add x2, x23, #0x1c8
ffff8000113a8d40: f9800051 prfm pstl1strm, [x2]
ffff8000113a8d44: c85f7c40 ldxr x0, [x2]
ffff8000113a8d48: 91000400 add x0, x0, #0x1
ffff8000113a8d4c: c8017c40 stxr w1, x0, [x2]
ffff8000113a8d50: 35ffffa1 cbnz w1, ffff8000113a8d44 <validate_xmit_skb+0x230>
return NULL;
ffff8000113a8d54: d2800000 mov x0, #0x0 // #0
ffff8000113a8d58: 17ffffd7 b ffff8000113a8cb4 <validate_xmit_skb+0x1a0>
if (proto == htons(ETH_P_8021Q) && features & NETIF_F_HW_VLAN_CTAG_TX)
ffff8000113a8d5c: 373ff5b4 tbnz w20, #7, ffff8000113a8c10 <validate_xmit_skb+0xfc>
ffff8000113a8d60: 17ffff82 b ffff8000113a8b68 <validate_xmit_skb+0x54>
skb->inner_transport_header += offset;
ffff8000113a8d64: 79411260 ldrh w0, [x19,#136]
ffff8000113a8d68: 79015660 strh w0, [x19,#170]
ffff8000113a8d6c: 17ffffee b ffff8000113a8d24 <validate_xmit_skb+0x210>
return __pskb_pull_tail(skb, skb->data_len) ? 0 : -ENOMEM;
ffff8000113a8d70: aa1303e0 mov x0, x19
ffff8000113a8d74: 94000000 bl 0 <__pskb_pull_tail>
ffff8000113a8d74: R_AARCH64_CALL26 __pskb_pull_tail
ffff8000113a8d78: b4fffde0 cbz x0, ffff8000113a8d34 <validate_xmit_skb+0x220>
if (skb->ip_summed == CHECKSUM_PARTIAL) {
ffff8000113a8d7c: 39420260 ldrb w0, [x19,#128]
ffff8000113a8d80: d3451800 ubfx x0, x0, #5, #2
ffff8000113a8d84: 71000c1f cmp w0, #0x3
ffff8000113a8d88: 54fff8e1 b.ne ffff8000113a8ca4 <validate_xmit_skb+0x190>
ffff8000113a8d8c: 17ffffe2 b ffff8000113a8d14 <validate_xmit_skb+0x200>
return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD), 0,
ffff8000113a8d90: 1100fc21 add w1, w1, #0x3f
ffff8000113a8d94: 121a6421 and w1, w1, #0xffffffc0
ffff8000113a8d98: aa1303e0 mov x0, x19
ffff8000113a8d9c: 52800002 mov w2, #0x0 // #0
ffff8000113a8da0: 52814403 mov w3, #0xa20 // #2592
ffff8000113a8da4: 94000000 bl 0 <pskb_expand_head>
ffff8000113a8da4: R_AARCH64_CALL26 pskb_expand_head
if (skb_cow_head(skb, VLAN_HLEN) < 0)
ffff8000113a8da8: 36fff0c0 tbz w0, #31, ffff8000113a8bc0 <validate_xmit_skb+0xac>
__dev_kfree_skb_any(skb, SKB_REASON_DROPPED);
ffff8000113a8dac: aa1303e0 mov x0, x19
ffff8000113a8db0: 52800021 mov w1, #0x1 // #1
ffff8000113a8db4: 94000000 bl ffff8000113a59b0 <__dev_kfree_skb_any>
ffff8000113a8db4: R_AARCH64_CALL26 __dev_kfree_skb_any
ffff8000113a8db8: 17ffffe1 b ffff8000113a8d3c <validate_xmit_skb+0x228>
ffff8000113a8dbc: f9406262 ldr x2, [x19,#192]
return skb->data - skb->head;
ffff8000113a8dc0: f9406663 ldr x3, [x19,#200]
int delta = 0;
ffff8000113a8dc4: 52800001 mov w1, #0x0 // #0
return skb->data - skb->head;
ffff8000113a8dc8: cb020062 sub x2, x3, x2
if (headroom > skb_headroom(skb))
ffff8000113a8dcc: 71000c5f cmp w2, #0x3
ffff8000113a8dd0: 54ffef48 b.hi ffff8000113a8bb8 <validate_xmit_skb+0xa4>
ffff8000113a8dd4: 17ffff77 b ffff8000113a8bb0 <validate_xmit_skb+0x9c>
if (proto == htons(ETH_P_8021AD) && features & NETIF_F_HW_VLAN_STAG_TX)
ffff8000113a8dd8: b76ff1d4 tbnz x20, #45, ffff8000113a8c10 <validate_xmit_skb+0xfc>
ffff8000113a8ddc: 17ffff63 b ffff8000113a8b68 <validate_xmit_skb+0x54>
return net_gso_ok(features, skb_shinfo(skb)->gso_type) &&
ffff8000113a8de0: f9400401 ldr x1, [x0,#8]
ffff8000113a8de4: b4000041 cbz x1, ffff8000113a8dec <validate_xmit_skb+0x2d8>
(!skb_has_frag_list(skb) || (features & NETIF_F_FRAGLIST));
ffff8000113a8de8: 3637f494 tbz w20, #6, ffff8000113a8c78 <validate_xmit_skb+0x164>
unlikely((skb->ip_summed != CHECKSUM_PARTIAL) &&
ffff8000113a8dec: 39420261 ldrb w1, [x19,#128]
return skb_is_gso(skb) && (!skb_gso_ok(skb, features) ||
ffff8000113a8df0: 372ff7a1 tbnz w1, #5, ffff8000113a8ce4 <validate_xmit_skb+0x1d0>
ffff8000113a8df4: 17ffffa1 b ffff8000113a8c78 <validate_xmit_skb+0x164>
pr_warn_ratelimited("unencrypted skb with no associated socket - dropping\n");
ffff8000113a8df8: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a8df8: R_AARCH64_ADR_PREL_PG_HI21 .data
ffff8000113a8dfc: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a8dfc: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113a8e00: 91000000 add x0, x0, #0x0
ffff8000113a8e00: R_AARCH64_ADD_ABS_LO12_NC .data
ffff8000113a8e04: 91000021 add x1, x1, #0x0
ffff8000113a8e04: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113a8e08: 91034000 add x0, x0, #0xd0
ffff8000113a8e0c: 9101a021 add x1, x1, #0x68
ffff8000113a8e10: 94000000 bl 0 <___ratelimit>
ffff8000113a8e10: R_AARCH64_CALL26 ___ratelimit
ffff8000113a8e14: 34fff900 cbz w0, ffff8000113a8d34 <validate_xmit_skb+0x220>
ffff8000113a8e18: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a8e18: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x618
ffff8000113a8e1c: 91000000 add x0, x0, #0x0
ffff8000113a8e1c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x618
ffff8000113a8e20: 94000000 bl 0 <printk>
ffff8000113a8e20: R_AARCH64_CALL26 printk
ffff8000113a8e24: 17ffffc4 b ffff8000113a8d34 <validate_xmit_skb+0x220>
ffff8000113a8e28 <validate_xmit_skb_list>:
{
ffff8000113a8e28: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a8e2c: 910003fd mov x29, sp
ffff8000113a8e30: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a8e34: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a8e38: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a8e3c: aa0003f3 mov x19, x0
ffff8000113a8e40: aa1e03e0 mov x0, x30
ffff8000113a8e44: aa0103f7 mov x23, x1
ffff8000113a8e48: aa0203f8 mov x24, x2
ffff8000113a8e4c: 94000000 bl 0 <_mcount>
ffff8000113a8e4c: R_AARCH64_CALL26 _mcount
for (; skb != NULL; skb = next) {
ffff8000113a8e50: b4000273 cbz x19, ffff8000113a8e9c <validate_xmit_skb_list+0x74>
struct sk_buff *next, *head = NULL, *tail;
ffff8000113a8e54: d2800016 mov x22, #0x0 // #0
next = skb->next;
ffff8000113a8e58: f9400274 ldr x20, [x19]
skb->prev = skb;
ffff8000113a8e5c: f9000673 str x19, [x19,#8]
skb->next = NULL;
ffff8000113a8e60: f900027f str xzr, [x19]
skb = validate_xmit_skb(skb, dev, again);
ffff8000113a8e64: aa1303e0 mov x0, x19
ffff8000113a8e68: aa1703e1 mov x1, x23
ffff8000113a8e6c: aa1803e2 mov x2, x24
ffff8000113a8e70: 97ffff29 bl ffff8000113a8b14 <validate_xmit_skb>
if (!skb)
ffff8000113a8e74: b4000080 cbz x0, ffff8000113a8e84 <validate_xmit_skb_list+0x5c>
if (!head)
ffff8000113a8e78: b40000d6 cbz x22, ffff8000113a8e90 <validate_xmit_skb_list+0x68>
tail->next = skb;
ffff8000113a8e7c: f90002a0 str x0, [x21]
tail = skb->prev;
ffff8000113a8e80: f9400415 ldr x21, [x0,#8]
for (; skb != NULL; skb = next) {
ffff8000113a8e84: b40000f4 cbz x20, ffff8000113a8ea0 <validate_xmit_skb_list+0x78>
ffff8000113a8e88: aa1403f3 mov x19, x20
ffff8000113a8e8c: 17fffff3 b ffff8000113a8e58 <validate_xmit_skb_list+0x30>
ffff8000113a8e90: aa0003f6 mov x22, x0
tail = skb->prev;
ffff8000113a8e94: f9400415 ldr x21, [x0,#8]
ffff8000113a8e98: 17fffffb b ffff8000113a8e84 <validate_xmit_skb_list+0x5c>
struct sk_buff *next, *head = NULL, *tail;
ffff8000113a8e9c: aa1303f6 mov x22, x19
}
ffff8000113a8ea0: aa1603e0 mov x0, x22
ffff8000113a8ea4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a8ea8: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a8eac: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a8eb0: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a8eb4: d65f03c0 ret
ffff8000113a8eb8 <dev_direct_xmit>:
{
ffff8000113a8eb8: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113a8ebc: 910003fd mov x29, sp
ffff8000113a8ec0: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a8ec4: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a8ec8: f9001bf7 str x23, [sp,#48]
ffff8000113a8ecc: aa0003f4 mov x20, x0
ffff8000113a8ed0: aa1e03e0 mov x0, x30
ffff8000113a8ed4: 90000015 adrp x21, 0 <__stack_chk_guard>
ffff8000113a8ed4: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a8ed8: 53003c36 uxth w22, w1
ffff8000113a8edc: 94000000 bl 0 <_mcount>
ffff8000113a8edc: R_AARCH64_CALL26 _mcount
ffff8000113a8ee0: f94002a0 ldr x0, [x21]
ffff8000113a8ee0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
struct net_device *dev = skb->dev;
ffff8000113a8ee4: f9400a93 ldr x19, [x20,#16]
{
ffff8000113a8ee8: f90027a0 str x0, [x29,#72]
ffff8000113a8eec: f9402260 ldr x0, [x19,#64]
bool again = false;
ffff8000113a8ef0: 39011fbf strb wzr, [x29,#71]
if (unlikely(!netif_running(dev) ||
ffff8000113a8ef4: 36000c00 tbz w0, #0, ffff8000113a9074 <dev_direct_xmit+0x1bc>
ffff8000113a8ef8: f9402260 ldr x0, [x19,#64]
ffff8000113a8efc: 37100bc0 tbnz w0, #2, ffff8000113a9074 <dev_direct_xmit+0x1bc>
skb = validate_xmit_skb_list(skb, dev, &again);
ffff8000113a8f00: aa1403e0 mov x0, x20
ffff8000113a8f04: aa1303e1 mov x1, x19
ffff8000113a8f08: 91011fa2 add x2, x29, #0x47
ffff8000113a8f0c: 94000000 bl ffff8000113a8e28 <validate_xmit_skb_list>
ffff8000113a8f0c: R_AARCH64_CALL26 validate_xmit_skb_list
if (skb != orig_skb)
ffff8000113a8f10: eb00029f cmp x20, x0
ffff8000113a8f14: 54000260 b.eq ffff8000113a8f60 <dev_direct_xmit+0xa8>
ffff8000113a8f18: 91072263 add x3, x19, #0x1c8
ffff8000113a8f1c: f9800071 prfm pstl1strm, [x3]
ffff8000113a8f20: c85f7c61 ldxr x1, [x3]
ffff8000113a8f24: 91000421 add x1, x1, #0x1
ffff8000113a8f28: c8027c61 stxr w2, x1, [x3]
ffff8000113a8f2c: 35ffffa2 cbnz w2, ffff8000113a8f20 <dev_direct_xmit+0x68>
return NET_XMIT_DROP;
ffff8000113a8f30: 52800033 mov w19, #0x1 // #1
kfree_skb_list(skb);
ffff8000113a8f34: 94000000 bl 0 <kfree_skb_list>
ffff8000113a8f34: R_AARCH64_CALL26 kfree_skb_list
}
ffff8000113a8f38: f94027a2 ldr x2, [x29,#72]
ffff8000113a8f3c: f94002a1 ldr x1, [x21]
ffff8000113a8f3c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a8f40: 2a1303e0 mov w0, w19
ffff8000113a8f44: eb01005f cmp x2, x1
ffff8000113a8f48: 540009a1 b.ne ffff8000113a907c <dev_direct_xmit+0x1c4>
ffff8000113a8f4c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a8f50: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a8f54: f9401bf7 ldr x23, [sp,#48]
ffff8000113a8f58: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113a8f5c: d65f03c0 ret
skb->queue_mapping = queue_mapping;
ffff8000113a8f60: 7900fa96 strh w22, [x20,#124]
ffff8000113a8f64: d5384100 mrs x0, sp_el0
ffff8000113a8f68: b9401801 ldr w1, [x0,#24]
return &dev->_tx[index];
ffff8000113a8f6c: f941e262 ldr x2, [x19,#960]
ffff8000113a8f70: 52802803 mov w3, #0x140 // #320
ffff8000113a8f74: 9ba37ed6 umull x22, w22, w3
ffff8000113a8f78: 11080021 add w1, w1, #0x200
ffff8000113a8f7c: 8b160056 add x22, x2, x22
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff8000113a8f80: b9001801 str w1, [x0,#24]
HARD_TX_LOCK(dev, txq, smp_processor_id());
ffff8000113a8f84: f9406662 ldr x2, [x19,#200]
ffff8000113a8f88: 92740042 and x2, x2, #0x1000
ffff8000113a8f8c: b4000562 cbz x2, ffff8000113a9038 <dev_direct_xmit+0x180>
return dev_queue->state & QUEUE_STATE_DRV_XOFF_OR_FROZEN;
ffff8000113a8f90: f9404ac1 ldr x1, [x22,#144]
ffff8000113a8f94: d28000a0 mov x0, #0x5 // #5
ffff8000113a8f98: 8a000020 and x0, x1, x0
int ret = NETDEV_TX_BUSY;
ffff8000113a8f9c: 52800217 mov w23, #0x10 // #16
if (!netif_xmit_frozen_or_drv_stopped(txq))
ffff8000113a8fa0: b4000260 cbz x0, ffff8000113a8fec <dev_direct_xmit+0x134>
HARD_TX_UNLOCK(dev, txq);
ffff8000113a8fa4: f9406660 ldr x0, [x19,#200]
ffff8000113a8fa8: 92740000 and x0, x0, #0x1000
ffff8000113a8fac: b4000160 cbz x0, ffff8000113a8fd8 <dev_direct_xmit+0x120>
ffff8000113a8fb0: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a8fb0: R_AARCH64_ADR_PREL_PG_HI21 .text+0xac34
ffff8000113a8fb4: 91000000 add x0, x0, #0x0
ffff8000113a8fb4: R_AARCH64_ADD_ABS_LO12_NC .text+0xac34
ffff8000113a8fb8: 52804001 mov w1, #0x200 // #512
ffff8000113a8fbc: 94000000 bl 0 <__local_bh_enable_ip>
ffff8000113a8fbc: R_AARCH64_CALL26 __local_bh_enable_ip
if (likely(rc < NET_XMIT_MASK))
ffff8000113a8fc0: 71003aff cmp w23, #0xe
ffff8000113a8fc4: 2a1703f3 mov w19, w23
ffff8000113a8fc8: 54fffb8d b.le ffff8000113a8f38 <dev_direct_xmit+0x80>
kfree_skb(skb);
ffff8000113a8fcc: aa1403e0 mov x0, x20
ffff8000113a8fd0: 94000000 bl 0 <kfree_skb>
ffff8000113a8fd0: R_AARCH64_CALL26 kfree_skb
ffff8000113a8fd4: 17ffffd9 b ffff8000113a8f38 <dev_direct_xmit+0x80>
txq->xmit_lock_owner = -1;
ffff8000113a8fd8: 12800001 mov w1, #0xffffffff // #-1
ffff8000113a8fdc: b90086c1 str w1, [x22,#132]
smp_store_release(&lock->locked, 0);
ffff8000113a8fe0: 910202d6 add x22, x22, #0x80
ffff8000113a8fe4: 089ffec0 stlrb w0, [x22]
preempt_enable();
ffff8000113a8fe8: 17fffff2 b ffff8000113a8fb0 <dev_direct_xmit+0xf8>
__this_cpu_write(softnet_data.xmit.more, more);
ffff8000113a8fec: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a8fec: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
const struct net_device_ops *ops = dev->netdev_ops;
ffff8000113a8ff0: f940fa62 ldr x2, [x19,#496]
__this_cpu_write(softnet_data.xmit.more, more);
ffff8000113a8ff4: 91000021 add x1, x1, #0x0
ffff8000113a8ff4: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a8ff8: 9101e821 add x1, x1, #0x7a
asm(ALTERNATIVE("mrs %0, tpidr_el1",
ffff8000113a8ffc: d538d083 mrs x3, tpidr_el1
ffff8000113a9000: 38216860 strb w0, [x3,x1]
return ops->ndo_start_xmit(skb, dev);
ffff8000113a9004: f9401042 ldr x2, [x2,#32]
ffff8000113a9008: aa1403e0 mov x0, x20
ffff8000113a900c: aa1303e1 mov x1, x19
ffff8000113a9010: d63f0040 blr x2
if (rc == NETDEV_TX_OK)
ffff8000113a9014: 350000e0 cbnz w0, ffff8000113a9030 <dev_direct_xmit+0x178>
if (txq->xmit_lock_owner != -1)
ffff8000113a9018: b94086c1 ldr w1, [x22,#132]
ffff8000113a901c: 3100043f cmn w1, #0x1
ffff8000113a9020: 54000080 b.eq ffff8000113a9030 <dev_direct_xmit+0x178>
txq->trans_start = jiffies;
ffff8000113a9024: 90000001 adrp x1, 0 <jiffies>
ffff8000113a9024: R_AARCH64_ADR_PREL_PG_HI21 jiffies
ffff8000113a9028: f9400021 ldr x1, [x1]
ffff8000113a9028: R_AARCH64_LDST64_ABS_LO12_NC jiffies
ffff8000113a902c: f90046c1 str x1, [x22,#136]
return ops->ndo_start_xmit(skb, dev);
ffff8000113a9030: 2a0003f7 mov w23, w0
ffff8000113a9034: 17ffffdc b ffff8000113a8fa4 <dev_direct_xmit+0xec>
HARD_TX_LOCK(dev, txq, smp_processor_id());
ffff8000113a9038: 90000000 adrp x0, 0 <cpu_number>
ffff8000113a9038: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113a903c: d538d081 mrs x1, tpidr_el1
ffff8000113a9040: 91000000 add x0, x0, #0x0
ffff8000113a9040: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a9044: b8606837 ldr w23, [x1,x0]
__CMPXCHG_CASE(w, , acq_, 32, , a, , "memory", K)
ffff8000113a9048: 52800023 mov w3, #0x1 // #1
ffff8000113a904c: 910202c0 add x0, x22, #0x80
ffff8000113a9050: f9800011 prfm pstl1strm, [x0]
ffff8000113a9054: 885ffc01 ldaxr w1, [x0]
ffff8000113a9058: 4a020024 eor w4, w1, w2
ffff8000113a905c: 35000064 cbnz w4, ffff8000113a9068 <dev_direct_xmit+0x1b0>
ffff8000113a9060: 88047c03 stxr w4, w3, [x0]
ffff8000113a9064: 35ffff84 cbnz w4, ffff8000113a9054 <dev_direct_xmit+0x19c>
if (unlikely(r != o))
ffff8000113a9068: 350000c1 cbnz w1, ffff8000113a9080 <dev_direct_xmit+0x1c8>
txq->xmit_lock_owner = cpu;
ffff8000113a906c: b90086d7 str w23, [x22,#132]
ffff8000113a9070: 17ffffc8 b ffff8000113a8f90 <dev_direct_xmit+0xd8>
ffff8000113a9074: aa1403e0 mov x0, x20
ffff8000113a9078: 17ffffa8 b ffff8000113a8f18 <dev_direct_xmit+0x60>
}
ffff8000113a907c: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a907c: R_AARCH64_CALL26 __stack_chk_fail
queued_spin_lock_slowpath(lock, val);
ffff8000113a9080: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113a9080: R_AARCH64_CALL26 queued_spin_lock_slowpath
ffff8000113a9084: b90086d7 str w23, [x22,#132]
ffff8000113a9088: 17ffffc2 b ffff8000113a8f90 <dev_direct_xmit+0xd8>
ffff8000113a908c <dev_hard_start_xmit>:
{
ffff8000113a908c: a9b87bfd stp x29, x30, [sp,#-128]!
ffff8000113a9090: 910003fd mov x29, sp
ffff8000113a9094: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a9098: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a909c: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a90a0: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113a90a4: a90573fb stp x27, x28, [sp,#80]
ffff8000113a90a8: aa0003f3 mov x19, x0
ffff8000113a90ac: aa1e03e0 mov x0, x30
ffff8000113a90b0: aa0103f4 mov x20, x1
ffff8000113a90b4: aa0203f9 mov x25, x2
ffff8000113a90b8: f9003ba3 str x3, [x29,#112]
ffff8000113a90bc: 94000000 bl 0 <_mcount>
ffff8000113a90bc: R_AARCH64_CALL26 _mcount
while (skb) {
ffff8000113a90c0: b4000a33 cbz x19, ffff8000113a9204 <dev_hard_start_xmit+0x178>
__READ_ONCE_SIZE;
ffff8000113a90c4: 9000001a adrp x26, ffff80001139e37c <__my_cpu_offset>
ffff8000113a90c4: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113a90c8: 9100035a add x26, x26, #0x0
ffff8000113a90c8: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113a90cc: 9120035a add x26, x26, #0x800
struct sk_buff *next = skb->next;
ffff8000113a90d0: f9400277 ldr x23, [x19]
TRACE_EVENT(net_dev_start_xmit,
ffff8000113a90d4: 90000000 adrp x0, 0 <cpu_number>
ffff8000113a90d4: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
skb->next = NULL;
ffff8000113a90d8: f900027f str xzr, [x19]
ffff8000113a90dc: 91000000 add x0, x0, #0x0
ffff8000113a90dc: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a90e0: f9003fa0 str x0, [x29,#120]
TRACE_EVENT(net_dev_xmit,
ffff8000113a90e4: f90037a0 str x0, [x29,#104]
ffff8000113a90e8: f9400340 ldr x0, [x26]
rc = xmit_one(skb, dev, txq, next != NULL);
ffff8000113a90ec: eb1f02ff cmp x23, xzr
__this_cpu_write(softnet_data.xmit.more, more);
ffff8000113a90f0: 9000001b adrp x27, ffff80001139e37c <__my_cpu_offset>
ffff8000113a90f0: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
ffff8000113a90f4: 9100037b add x27, x27, #0x0
ffff8000113a90f4: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a90f8: 1a9f07f8 cset w24, ne
return !list_empty(&ptype_all) || !list_empty(&dev->ptype_all);
ffff8000113a90fc: eb00035f cmp x26, x0
ffff8000113a9100: 9101eb7b add x27, x27, #0x7a
ffff8000113a9104: 54000760 b.eq ffff8000113a91f0 <dev_hard_start_xmit+0x164>
dev_queue_xmit_nit(skb, dev);
ffff8000113a9108: aa1303e0 mov x0, x19
ffff8000113a910c: aa1403e1 mov x1, x20
ffff8000113a9110: 94000000 bl ffff8000113a4ea0 <dev_queue_xmit_nit>
ffff8000113a9110: R_AARCH64_CALL26 dev_queue_xmit_nit
ffff8000113a9114: 90000000 adrp x0, 0 <__tracepoint_net_dev_start_xmit>
ffff8000113a9114: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_net_dev_start_xmit
ffff8000113a9118: 91000001 add x1, x0, #0x0
ffff8000113a9118: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_net_dev_start_xmit
ffff8000113a911c: b9400820 ldr w0, [x1,#8]
len = skb->len;
ffff8000113a9120: b9407276 ldr w22, [x19,#112]
if (unlikely(static_key_count(key) > 0))
ffff8000113a9124: 6b1f001f cmp w0, wzr
"Q" (*(const unsigned long *)current_stack_pointer));
ffff8000113a9128: 910003e0 mov x0, sp
ffff8000113a912c: 54000aac b.gt ffff8000113a9280 <dev_hard_start_xmit+0x1f4>
const struct net_device_ops *ops = dev->netdev_ops;
ffff8000113a9130: f940fa81 ldr x1, [x20,#496]
asm(ALTERNATIVE("mrs %0, tpidr_el1",
ffff8000113a9134: d538d080 mrs x0, tpidr_el1
__this_cpu_write(softnet_data.xmit.more, more);
ffff8000113a9138: 383b6818 strb w24, [x0,x27]
return ops->ndo_start_xmit(skb, dev);
ffff8000113a913c: f9401022 ldr x2, [x1,#32]
ffff8000113a9140: aa1303e0 mov x0, x19
ffff8000113a9144: aa1403e1 mov x1, x20
ffff8000113a9148: d63f0040 blr x2
ffff8000113a914c: 2a0003f5 mov w21, w0
if (rc == NETDEV_TX_OK)
ffff8000113a9150: 350000e0 cbnz w0, ffff8000113a916c <dev_hard_start_xmit+0xe0>
if (txq->xmit_lock_owner != -1)
ffff8000113a9154: b9408720 ldr w0, [x25,#132]
ffff8000113a9158: 3100041f cmn w0, #0x1
ffff8000113a915c: 54000080 b.eq ffff8000113a916c <dev_hard_start_xmit+0xe0>
txq->trans_start = jiffies;
ffff8000113a9160: 90000000 adrp x0, 0 <jiffies>
ffff8000113a9160: R_AARCH64_ADR_PREL_PG_HI21 jiffies
ffff8000113a9164: f9400000 ldr x0, [x0]
ffff8000113a9164: R_AARCH64_LDST64_ABS_LO12_NC jiffies
ffff8000113a9168: f9004720 str x0, [x25,#136]
ffff8000113a916c: 90000001 adrp x1, 0 <__tracepoint_net_dev_xmit>
ffff8000113a916c: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_net_dev_xmit
ffff8000113a9170: 91000020 add x0, x1, #0x0
ffff8000113a9170: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_net_dev_xmit
ffff8000113a9174: b9400801 ldr w1, [x0,#8]
ffff8000113a9178: 6b1f003f cmp w1, wzr
ffff8000113a917c: 5400050c b.gt ffff8000113a921c <dev_hard_start_xmit+0x190>
if (likely(rc < NET_XMIT_MASK))
ffff8000113a9180: 71003abf cmp w21, #0xe
ffff8000113a9184: 5400046c b.gt ffff8000113a9210 <dev_hard_start_xmit+0x184>
ffff8000113a9188: f9404b20 ldr x0, [x25,#144]
if (netif_tx_queue_stopped(txq) && skb) {
ffff8000113a918c: 36000200 tbz w0, #0, ffff8000113a91cc <dev_hard_start_xmit+0x140>
rc = NETDEV_TX_BUSY;
ffff8000113a9190: 6b1f031f cmp w24, wzr
ffff8000113a9194: 52800200 mov w0, #0x10 // #16
ffff8000113a9198: 1a8002b5 csel w21, w21, w0, eq
ffff8000113a919c: 6b1f031f cmp w24, wzr
ffff8000113a91a0: 9a9f12f7 csel x23, x23, xzr, ne
*ret = rc;
ffff8000113a91a4: f9403ba2 ldr x2, [x29,#112]
}
ffff8000113a91a8: aa1703e0 mov x0, x23
*ret = rc;
ffff8000113a91ac: b9000055 str w21, [x2]
}
ffff8000113a91b0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a91b4: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a91b8: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a91bc: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a91c0: a94573fb ldp x27, x28, [sp,#80]
ffff8000113a91c4: a8c87bfd ldp x29, x30, [sp],#128
ffff8000113a91c8: d65f03c0 ret
while (skb) {
ffff8000113a91cc: 340008b8 cbz w24, ffff8000113a92e0 <dev_hard_start_xmit+0x254>
struct sk_buff *next = skb->next;
ffff8000113a91d0: aa1703f3 mov x19, x23
ffff8000113a91d4: f9400277 ldr x23, [x19]
ffff8000113a91d8: f900027f str xzr, [x19]
ffff8000113a91dc: f9400340 ldr x0, [x26]
rc = xmit_one(skb, dev, txq, next != NULL);
ffff8000113a91e0: eb1f02ff cmp x23, xzr
ffff8000113a91e4: 1a9f07f8 cset w24, ne
return !list_empty(&ptype_all) || !list_empty(&dev->ptype_all);
ffff8000113a91e8: eb00035f cmp x26, x0
ffff8000113a91ec: 54fff8e1 b.ne ffff8000113a9108 <dev_hard_start_xmit+0x7c>
ffff8000113a91f0: aa1403e0 mov x0, x20
ffff8000113a91f4: f8488c01 ldr x1, [x0,#136]!
ffff8000113a91f8: eb01001f cmp x0, x1
ffff8000113a91fc: 54fff861 b.ne ffff8000113a9108 <dev_hard_start_xmit+0x7c>
ffff8000113a9200: 17ffffc5 b ffff8000113a9114 <dev_hard_start_xmit+0x88>
while (skb) {
ffff8000113a9204: aa1303f7 mov x23, x19
int rc = NETDEV_TX_OK;
ffff8000113a9208: 2a1303f5 mov w21, w19
ffff8000113a920c: 17ffffe6 b ffff8000113a91a4 <dev_hard_start_xmit+0x118>
skb->next = next;
ffff8000113a9210: f9000277 str x23, [x19]
goto out;
ffff8000113a9214: aa1303f7 mov x23, x19
ffff8000113a9218: 17ffffe3 b ffff8000113a91a4 <dev_hard_start_xmit+0x118>
ffff8000113a921c: f94037a2 ldr x2, [x29,#104]
ffff8000113a9220: d538d081 mrs x1, tpidr_el1
ffff8000113a9224: b8626821 ldr w1, [x1,x2]
ffff8000113a9228: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113a9228: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113a922c: 1100fc23 add w3, w1, #0x3f
ffff8000113a9230: 6b1f003f cmp w1, wzr
ffff8000113a9234: 1a81b063 csel w3, w3, w1, lt
ffff8000113a9238: 13067c63 asr w3, w3, #6
ffff8000113a923c: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113a9240: 91000042 add x2, x2, #0x0
ffff8000113a9240: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113a9244: f8626862 ldr x2, [x3,x2]
ffff8000113a9248: 9ac12441 lsr x1, x2, x1
ffff8000113a924c: 3607f9a1 tbz w1, #0, ffff8000113a9180 <dev_hard_start_xmit+0xf4>
ffff8000113a9250: f940101c ldr x28, [x0,#32]
ffff8000113a9254: b400015c cbz x28, ffff8000113a927c <dev_hard_start_xmit+0x1f0>
ffff8000113a9258: f9400386 ldr x6, [x28]
ffff8000113a925c: f9400780 ldr x0, [x28,#8]
ffff8000113a9260: aa1303e1 mov x1, x19
ffff8000113a9264: 2a1503e2 mov w2, w21
ffff8000113a9268: aa1403e3 mov x3, x20
ffff8000113a926c: 2a1603e4 mov w4, w22
ffff8000113a9270: d63f00c0 blr x6
ffff8000113a9274: f8418f86 ldr x6, [x28,#24]!
ffff8000113a9278: b5ffff26 cbnz x6, ffff8000113a925c <dev_hard_start_xmit+0x1d0>
ffff8000113a927c: 17ffffc1 b ffff8000113a9180 <dev_hard_start_xmit+0xf4>
TRACE_EVENT(net_dev_start_xmit,
ffff8000113a9280: f9403fa3 ldr x3, [x29,#120]
ffff8000113a9284: d538d082 mrs x2, tpidr_el1
ffff8000113a9288: b8636842 ldr w2, [x2,x3]
ffff8000113a928c: 90000003 adrp x3, 0 <__cpu_online_mask>
ffff8000113a928c: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113a9290: 1100fc44 add w4, w2, #0x3f
ffff8000113a9294: 6b1f005f cmp w2, wzr
ffff8000113a9298: 1a82b084 csel w4, w4, w2, lt
ffff8000113a929c: 13067c84 asr w4, w4, #6
ffff8000113a92a0: 937d7c84 sbfiz x4, x4, #3, #32
ffff8000113a92a4: 91000063 add x3, x3, #0x0
ffff8000113a92a4: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113a92a8: f8636883 ldr x3, [x4,x3]
ffff8000113a92ac: 9ac22462 lsr x2, x3, x2
ffff8000113a92b0: 3607f402 tbz w2, #0, ffff8000113a9130 <dev_hard_start_xmit+0xa4>
ffff8000113a92b4: f9401035 ldr x21, [x1,#32]
ffff8000113a92b8: b4000115 cbz x21, ffff8000113a92d8 <dev_hard_start_xmit+0x24c>
ffff8000113a92bc: f94002a3 ldr x3, [x21]
ffff8000113a92c0: f94006a0 ldr x0, [x21,#8]
ffff8000113a92c4: aa1303e1 mov x1, x19
ffff8000113a92c8: aa1403e2 mov x2, x20
ffff8000113a92cc: d63f0060 blr x3
ffff8000113a92d0: f8418ea3 ldr x3, [x21,#24]!
ffff8000113a92d4: b5ffff63 cbnz x3, ffff8000113a92c0 <dev_hard_start_xmit+0x234>
ffff8000113a92d8: 910003e0 mov x0, sp
ffff8000113a92dc: 17ffff95 b ffff8000113a9130 <dev_hard_start_xmit+0xa4>
ffff8000113a92e0: d2800017 mov x23, #0x0 // #0
ffff8000113a92e4: 17ffffb0 b ffff8000113a91a4 <dev_hard_start_xmit+0x118>
ffff8000113a92e8 <netdev_core_pick_tx>:
{
ffff8000113a92e8: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a92ec: 910003fd mov x29, sp
ffff8000113a92f0: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a92f4: f90013f5 str x21, [sp,#32]
ffff8000113a92f8: aa0003f3 mov x19, x0
ffff8000113a92fc: aa1e03e0 mov x0, x30
ffff8000113a9300: aa0103f4 mov x20, x1
ffff8000113a9304: f9001fa2 str x2, [x29,#56]
ffff8000113a9308: 94000000 bl 0 <_mcount>
ffff8000113a9308: R_AARCH64_CALL26 _mcount
u32 sender_cpu = skb->sender_cpu - 1;
ffff8000113a930c: b9409e80 ldr w0, [x20,#156]
if (sender_cpu >= (u32)NR_CPUS)
ffff8000113a9310: f9401fa2 ldr x2, [x29,#56]
u32 sender_cpu = skb->sender_cpu - 1;
ffff8000113a9314: 51000400 sub w0, w0, #0x1
if (sender_cpu >= (u32)NR_CPUS)
ffff8000113a9318: 713ffc1f cmp w0, #0xfff
ffff8000113a931c: 540000e9 b.ls ffff8000113a9338 <netdev_core_pick_tx+0x50>
skb->sender_cpu = raw_smp_processor_id() + 1;
ffff8000113a9320: 90000000 adrp x0, 0 <cpu_number>
ffff8000113a9320: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113a9324: d538d081 mrs x1, tpidr_el1
ffff8000113a9328: 91000000 add x0, x0, #0x0
ffff8000113a9328: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a932c: b8606820 ldr w0, [x1,x0]
ffff8000113a9330: 11000400 add w0, w0, #0x1
ffff8000113a9334: b9009e80 str w0, [x20,#156]
if (dev->real_num_tx_queues != 1) {
ffff8000113a9338: b943ce60 ldr w0, [x19,#972]
ffff8000113a933c: 7100041f cmp w0, #0x1
ffff8000113a9340: 540002c0 b.eq ffff8000113a9398 <netdev_core_pick_tx+0xb0>
if (ops->ndo_select_queue)
ffff8000113a9344: f940fa60 ldr x0, [x19,#496]
queue_index = ops->ndo_select_queue(dev, skb, sb_dev);
ffff8000113a9348: aa1403e1 mov x1, x20
if (ops->ndo_select_queue)
ffff8000113a934c: f9401803 ldr x3, [x0,#48]
queue_index = ops->ndo_select_queue(dev, skb, sb_dev);
ffff8000113a9350: aa1303e0 mov x0, x19
if (ops->ndo_select_queue)
ffff8000113a9354: b4000343 cbz x3, ffff8000113a93bc <netdev_core_pick_tx+0xd4>
queue_index = ops->ndo_select_queue(dev, skb, sb_dev);
ffff8000113a9358: d63f0060 blr x3
ffff8000113a935c: 53003c02 uxth w2, w0
if (unlikely(queue_index >= dev->real_num_tx_queues)) {
ffff8000113a9360: b943ce60 ldr w0, [x19,#972]
return queue_index;
ffff8000113a9364: 2a0203f5 mov w21, w2
if (unlikely(queue_index >= dev->real_num_tx_queues)) {
ffff8000113a9368: 6b00005f cmp w2, w0
ffff8000113a936c: 540002e2 b.cs ffff8000113a93c8 <netdev_core_pick_tx+0xe0>
ffff8000113a9370: 2a1503e1 mov w1, w21
skb->queue_mapping = queue_mapping;
ffff8000113a9374: 7900fa81 strh w1, [x20,#124]
return &dev->_tx[index];
ffff8000113a9378: f941e261 ldr x1, [x19,#960]
ffff8000113a937c: 52802800 mov w0, #0x140 // #320
}
ffff8000113a9380: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a9384: 9ba07ea0 umull x0, w21, w0
ffff8000113a9388: f94013f5 ldr x21, [sp,#32]
ffff8000113a938c: 8b000020 add x0, x1, x0
ffff8000113a9390: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a9394: d65f03c0 ret
ffff8000113a9398: d2800000 mov x0, #0x0 // #0
ffff8000113a939c: 2a0003e1 mov w1, w0
ffff8000113a93a0: 7900fa81 strh w1, [x20,#124]
ffff8000113a93a4: f941e261 ldr x1, [x19,#960]
ffff8000113a93a8: f94013f5 ldr x21, [sp,#32]
ffff8000113a93ac: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a93b0: 8b000020 add x0, x1, x0
ffff8000113a93b4: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a93b8: d65f03c0 ret
queue_index = netdev_pick_tx(dev, skb, sb_dev);
ffff8000113a93bc: 94000000 bl ffff8000113a248c <netdev_pick_tx>
ffff8000113a93bc: R_AARCH64_CALL26 netdev_pick_tx
ffff8000113a93c0: 53003c02 uxth w2, w0
ffff8000113a93c4: 17ffffe7 b ffff8000113a9360 <netdev_core_pick_tx+0x78>
net_warn_ratelimited("%s selects TX queue %d, but real number of TX queues is %d\n",
ffff8000113a93c8: f9001fa2 str x2, [x29,#56]
ffff8000113a93cc: 94000000 bl 0 <net_ratelimit>
ffff8000113a93cc: R_AARCH64_CALL26 net_ratelimit
return 0;
ffff8000113a93d0: 52800015 mov w21, #0x0 // #0
net_warn_ratelimited("%s selects TX queue %d, but real number of TX queues is %d\n",
ffff8000113a93d4: f9401fa2 ldr x2, [x29,#56]
ffff8000113a93d8: 34fffcc0 cbz w0, ffff8000113a9370 <netdev_core_pick_tx+0x88>
ffff8000113a93dc: b943ce63 ldr w3, [x19,#972]
ffff8000113a93e0: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a93e0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x650
ffff8000113a93e4: aa1303e1 mov x1, x19
ffff8000113a93e8: 91000000 add x0, x0, #0x0
ffff8000113a93e8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x650
ffff8000113a93ec: 94000000 bl 0 <printk>
ffff8000113a93ec: R_AARCH64_CALL26 printk
ffff8000113a93f0: 17ffffe0 b ffff8000113a9370 <netdev_core_pick_tx+0x88>
ffff8000113a93f4 <__dev_queue_xmit>:
{
ffff8000113a93f4: a9b67bfd stp x29, x30, [sp,#-160]!
ffff8000113a93f8: 910003fd mov x29, sp
ffff8000113a93fc: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a9400: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a9404: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a9408: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113a940c: f9002bfb str x27, [sp,#80]
ffff8000113a9410: aa0003f3 mov x19, x0
ffff8000113a9414: aa1e03e0 mov x0, x30
ffff8000113a9418: aa0103f4 mov x20, x1
ffff8000113a941c: 94000000 bl 0 <_mcount>
ffff8000113a941c: R_AARCH64_CALL26 _mcount
skb->mac_header = skb->data - skb->head;
ffff8000113a9420: f9406260 ldr x0, [x19,#192]
ffff8000113a9424: f9406663 ldr x3, [x19,#200]
return skb->head + skb->end;
ffff8000113a9428: b940be62 ldr w2, [x19,#188]
skb->mac_header = skb->data - skb->head;
ffff8000113a942c: cb000063 sub x3, x3, x0
ffff8000113a9430: 90000017 adrp x23, 0 <__stack_chk_guard>
ffff8000113a9430: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
int rc = -ENOMEM;
ffff8000113a9434: 12800164 mov w4, #0xfffffff4 // #-12
{
ffff8000113a9438: f94002e1 ldr x1, [x23]
ffff8000113a9438: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
int rc = -ENOMEM;
ffff8000113a943c: b9007fa4 str w4, [x29,#124]
ffff8000113a9440: 79016e63 strh w3, [x19,#182]
if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_SCHED_TSTAMP))
ffff8000113a9444: 8b020000 add x0, x0, x2
ffff8000113a9448: 39400c00 ldrb w0, [x0,#3]
{
ffff8000113a944c: f9004fa1 str x1, [x29,#152]
bool again = false;
ffff8000113a9450: 3901efbf strb wzr, [x29,#123]
struct net_device *dev = skb->dev;
ffff8000113a9454: f9400a76 ldr x22, [x19,#16]
if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_SCHED_TSTAMP))
ffff8000113a9458: 37303e20 tbnz w0, #6, ffff8000113a9c1c <__dev_queue_xmit+0x828>
ffff8000113a945c: d5384100 mrs x0, sp_el0
ffff8000113a9460: b9401801 ldr w1, [x0,#24]
ffff8000113a9464: 11080021 add w1, w1, #0x200
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff8000113a9468: b9001801 str w1, [x0,#24]
if (skb->priority)
ffff8000113a946c: b9408e60 ldr w0, [x19,#140]
ffff8000113a9470: 35000280 cbnz w0, ffff8000113a94c0 <__dev_queue_xmit+0xcc>
map = rcu_dereference_bh(skb->dev->priomap);
ffff8000113a9474: f9400a60 ldr x0, [x19,#16]
__READ_ONCE_SIZE;
ffff8000113a9478: f9445001 ldr x1, [x0,#2208]
if (!map)
ffff8000113a947c: b4000221 cbz x1, ffff8000113a94c0 <__dev_queue_xmit+0xcc>
static void skb_update_prio(struct sk_buff *skb)
ffff8000113a9480: f9400e60 ldr x0, [x19,#24]
* Some places want to reach the listener in this case.
*/
static inline struct sock *sk_to_full_sk(struct sock *sk)
{
#ifdef CONFIG_INET
if (sk && sk->sk_state == TCP_NEW_SYN_RECV)
ffff8000113a9484: b40001e0 cbz x0, ffff8000113a94c0 <__dev_queue_xmit+0xcc>
ffff8000113a9488: 39404802 ldrb w2, [x0,#18]
ffff8000113a948c: 53001c42 uxtb w2, w2
ffff8000113a9490: 7100305f cmp w2, #0xc
ffff8000113a9494: 54002bc0 b.eq ffff8000113a9a0c <__dev_queue_xmit+0x618>
* classid. Such races are short-lived and the result isn't critical.
*/
static inline u16 sock_cgroup_prioidx(const struct sock_cgroup_data *skcd)
{
/* fallback to 1 which is always the ID of the root cgroup */
return (skcd->is_data & 1) ? skcd->prioidx : 1;
ffff8000113a9498: 394a4003 ldrb w3, [x0,#656]
ffff8000113a949c: 52800022 mov w2, #0x1 // #1
ffff8000113a94a0: 36000043 tbz w3, #0, ffff8000113a94a8 <__dev_queue_xmit+0xb4>
ffff8000113a94a4: 79452402 ldrh w2, [x0,#658]
if (prioidx < map->priomap_len)
ffff8000113a94a8: b9401020 ldr w0, [x1,#16]
ffff8000113a94ac: 6b02001f cmp w0, w2
ffff8000113a94b0: 54000089 b.ls ffff8000113a94c0 <__dev_queue_xmit+0xcc>
skb->priority = map->priomap[prioidx];
ffff8000113a94b4: 8b222821 add x1, x1, w2, uxth #2
ffff8000113a94b8: b9401420 ldr w0, [x1,#20]
ffff8000113a94bc: b9008e60 str w0, [x19,#140]
static void qdisc_pkt_len_init(struct sk_buff *skb)
ffff8000113a94c0: f9406262 ldr x2, [x19,#192]
return skb->head + skb->end;
ffff8000113a94c4: b940be75 ldr w21, [x19,#188]
qdisc_skb_cb(skb)->pkt_len = skb->len;
ffff8000113a94c8: b9407260 ldr w0, [x19,#112]
ffff8000113a94cc: 8b150055 add x21, x2, x21
ffff8000113a94d0: b9002a60 str w0, [x19,#40]
if (shinfo->gso_size && skb_transport_header_was_set(skb)) {
ffff8000113a94d4: 79400aa1 ldrh w1, [x21,#4]
qdisc_skb_cb(skb)->pkt_len = skb->len;
ffff8000113a94d8: 9100a27a add x26, x19, #0x28
if (shinfo->gso_size && skb_transport_header_was_set(skb)) {
ffff8000113a94dc: 340005c1 cbz w1, ffff8000113a9594 <__dev_queue_xmit+0x1a0>
static void qdisc_pkt_len_init(struct sk_buff *skb)
ffff8000113a94e0: 79416661 ldrh w1, [x19,#178]
if (shinfo->gso_size && skb_transport_header_was_set(skb)) {
ffff8000113a94e4: 529fffe3 mov w3, #0xffff // #65535
ffff8000113a94e8: 6b03003f cmp w1, w3
ffff8000113a94ec: 54000540 b.eq ffff8000113a9594 <__dev_queue_xmit+0x1a0>
return skb->head + skb->mac_header;
ffff8000113a94f0: 79416e79 ldrh w25, [x19,#182]
return skb->head + skb->transport_header;
ffff8000113a94f4: 8b212041 add x1, x2, w1, uxth
if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))) {
ffff8000113a94f8: b9401aa3 ldr w3, [x21,#24]
return skb->head + skb->mac_header;
ffff8000113a94fc: 8b190042 add x2, x2, x25
hdr_len = skb_transport_header(skb) - skb_mac_header(skb);
ffff8000113a9500: cb020039 sub x25, x1, x2
if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))) {
ffff8000113a9504: 52800222 mov w2, #0x11 // #17
ffff8000113a9508: 6a02007f tst w3, w2
return skb_transport_header(skb) - skb->data;
ffff8000113a950c: f9406662 ldr x2, [x19,#200]
u16 gso_segs = shinfo->gso_segs;
ffff8000113a9510: 79400ebb ldrh w27, [x21,#6]
hdr_len = skb_transport_header(skb) - skb_mac_header(skb);
ffff8000113a9514: 2a1903f8 mov w24, w25
return skb->len - skb->data_len;
ffff8000113a9518: b9407664 ldr w4, [x19,#116]
return skb_transport_header(skb) - skb->data;
ffff8000113a951c: cb020021 sub x1, x1, x2
if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))) {
ffff8000113a9520: 54003ea0 b.eq ffff8000113a9cf4 <__dev_queue_xmit+0x900>
return skb->len - skb->data_len;
ffff8000113a9524: 4b040004 sub w4, w0, w4
if (hlen - offset >= len)
ffff8000113a9528: 4b010084 sub w4, w4, w1
ffff8000113a952c: 71004c9f cmp w4, #0x13
ffff8000113a9530: 5400268c b.gt ffff8000113a9a00 <__dev_queue_xmit+0x60c>
if (!skb ||
ffff8000113a9534: b4000193 cbz x19, ffff8000113a9564 <__dev_queue_xmit+0x170>
skb_copy_bits(skb, offset, buffer, len) < 0)
ffff8000113a9538: 52800283 mov w3, #0x14 // #20
ffff8000113a953c: aa1303e0 mov x0, x19
ffff8000113a9540: 910203a2 add x2, x29, #0x80
ffff8000113a9544: 94000000 bl 0 <skb_copy_bits>
ffff8000113a9544: R_AARCH64_CALL26 skb_copy_bits
ffff8000113a9548: b9401aa3 ldr w3, [x21,#24]
if (!skb ||
ffff8000113a954c: 37f83140 tbnz w0, #31, ffff8000113a9b74 <__dev_queue_xmit+0x780>
ffff8000113a9550: b9400340 ldr w0, [x26]
return buffer;
ffff8000113a9554: 910203a1 add x1, x29, #0x80
return (struct tcphdr *)skb_transport_header(skb);
}
static inline unsigned int __tcp_hdrlen(const struct tcphdr *th)
{
return th->doff * 4;
ffff8000113a9558: 39403038 ldrb w24, [x1,#12]
ffff8000113a955c: d3441f18 ubfx x24, x24, #4, #4
hdr_len += __tcp_hdrlen(th);
ffff8000113a9560: 0b180b38 add w24, w25, w24, lsl #2
if (shinfo->gso_type & SKB_GSO_DODGY)
ffff8000113a9564: 36080103 tbz w3, #1, ffff8000113a9584 <__dev_queue_xmit+0x190>
gso_segs = DIV_ROUND_UP(skb->len - hdr_len,
ffff8000113a9568: b940727b ldr w27, [x19,#112]
ffff8000113a956c: 79400aa1 ldrh w1, [x21,#4]
ffff8000113a9570: 5100077b sub w27, w27, #0x1
ffff8000113a9574: 0b01037b add w27, w27, w1
ffff8000113a9578: 4b18037b sub w27, w27, w24
ffff8000113a957c: 1ac10b7b udiv w27, w27, w1
ffff8000113a9580: 53003f7b uxth w27, w27
qdisc_skb_cb(skb)->pkt_len += (gso_segs - 1) * hdr_len;
ffff8000113a9584: 5100077b sub w27, w27, #0x1
ffff8000113a9588: 1b187f78 mul w24, w27, w24
ffff8000113a958c: 0b000300 add w0, w24, w0
ffff8000113a9590: b9002a60 str w0, [x19,#40]
skb->tc_at_ingress = 0;
ffff8000113a9594: 39420e60 ldrb w0, [x19,#131]
ffff8000113a9598: 12197800 and w0, w0, #0xffffffbf
ffff8000113a959c: 39020e60 strb w0, [x19,#131]
ffff8000113a95a0: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a95a0: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113a95a4: 91000000 add x0, x0, #0x0
ffff8000113a95a4: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113a95a8: b9434000 ldr w0, [x0,#832]
if (static_branch_unlikely(&egress_needed_key)) {
ffff8000113a95ac: 6b1f001f cmp w0, wzr
ffff8000113a95b0: 5400312c b.gt ffff8000113a9bd4 <__dev_queue_xmit+0x7e0>
if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
ffff8000113a95b4: b9422ec0 ldr w0, [x22,#556]
ffff8000113a95b8: 36280aa0 tbz w0, #5, ffff8000113a970c <__dev_queue_xmit+0x318>
if (skb->_skb_refdst) {
ffff8000113a95bc: f9402e60 ldr x0, [x19,#88]
ffff8000113a95c0: b4000060 cbz x0, ffff8000113a95cc <__dev_queue_xmit+0x1d8>
if (!(refdst & SKB_DST_NOREF))
ffff8000113a95c4: 36001b80 tbz w0, #0, ffff8000113a9934 <__dev_queue_xmit+0x540>
skb->_skb_refdst = 0UL;
ffff8000113a95c8: f9002e7f str xzr, [x19,#88]
txq = netdev_core_pick_tx(dev, skb, sb_dev);
ffff8000113a95cc: aa1303e1 mov x1, x19
ffff8000113a95d0: aa1403e2 mov x2, x20
ffff8000113a95d4: aa1603e0 mov x0, x22
ffff8000113a95d8: 94000000 bl ffff8000113a92e8 <netdev_core_pick_tx>
ffff8000113a95d8: R_AARCH64_CALL26 netdev_core_pick_tx
ffff8000113a95dc: aa0003f8 mov x24, x0
ffff8000113a95e0: 90000000 adrp x0, 0 <__tracepoint_net_dev_queue>
ffff8000113a95e0: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_net_dev_queue
ffff8000113a95e4: 91000000 add x0, x0, #0x0
ffff8000113a95e4: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_net_dev_queue
ffff8000113a95e8: f9400714 ldr x20, [x24,#8]
ffff8000113a95ec: b9400801 ldr w1, [x0,#8]
ffff8000113a95f0: 6b1f003f cmp w1, wzr
ffff8000113a95f4: 54002c6c b.gt ffff8000113a9b80 <__dev_queue_xmit+0x78c>
if (q->enqueue) {
ffff8000113a95f8: f9400280 ldr x0, [x20]
ffff8000113a95fc: b4000f40 cbz x0, ffff8000113a97e4 <__dev_queue_xmit+0x3f0>
struct sk_buff *to_free = NULL;
ffff8000113a9600: f90043bf str xzr, [x29,#128]
ffff8000113a9604: f9401281 ldr x1, [x20,#32]
const struct Qdisc *sch)
{
#ifdef CONFIG_NET_SCHED
struct qdisc_size_table *stab = rcu_dereference_bh(sch->stab);
if (stab)
ffff8000113a9608: b4000061 cbz x1, ffff8000113a9614 <__dev_queue_xmit+0x220>
__qdisc_calculate_pkt_len(skb, stab);
ffff8000113a960c: aa1303e0 mov x0, x19
ffff8000113a9610: 94000000 bl 0 <__qdisc_calculate_pkt_len>
ffff8000113a9610: R_AARCH64_CALL26 __qdisc_calculate_pkt_len
if (q->flags & TCQ_F_NOLOCK) {
ffff8000113a9614: b9401280 ldr w0, [x20,#16]
ffff8000113a9618: 37400a20 tbnz w0, #8, ffff8000113a975c <__dev_queue_xmit+0x368>
ffff8000113a961c: b940c280 ldr w0, [x20,#192]
smp_rmb();
ffff8000113a9620: d50339bf dmb ishld
return (raw_read_seqcount(&qdisc->running) & 1) ? true : false;
ffff8000113a9624: 12000000 and w0, w0, #0x1
if (unlikely(contended))
ffff8000113a9628: 2a0003f9 mov w25, w0
ffff8000113a962c: 53001c15 uxtb w21, w0
ffff8000113a9630: b5003859 cbnz x25, ffff8000113a9d38 <__dev_queue_xmit+0x944>
spinlock_t *root_lock = qdisc_lock(q);
ffff8000113a9634: 9102b284 add x4, x20, #0xac
ffff8000113a9638: 52800023 mov w3, #0x1 // #1
ffff8000113a963c: d2800002 mov x2, #0x0 // #0
ffff8000113a9640: f9800091 prfm pstl1strm, [x4]
ffff8000113a9644: 885ffc81 ldaxr w1, [x4]
ffff8000113a9648: 4a020020 eor w0, w1, w2
ffff8000113a964c: 35000060 cbnz w0, ffff8000113a9658 <__dev_queue_xmit+0x264>
ffff8000113a9650: 88007c83 stxr w0, w3, [x4]
ffff8000113a9654: 35ffff80 cbnz w0, ffff8000113a9644 <__dev_queue_xmit+0x250>
ffff8000113a9658: 35003881 cbnz w1, ffff8000113a9d68 <__dev_queue_xmit+0x974>
ffff8000113a965c: f9406e81 ldr x1, [x20,#216]
if (unlikely(test_bit(__QDISC_STATE_DEACTIVATED, &q->state))) {
ffff8000113a9660: 37083181 tbnz w1, #1, ffff8000113a9c90 <__dev_queue_xmit+0x89c>
} else if ((q->flags & TCQ_F_CAN_BYPASS) && !qdisc_qlen(q) &&
ffff8000113a9664: b9401281 ldr w1, [x20,#16]
ffff8000113a9668: 36100061 tbz w1, #2, ffff8000113a9674 <__dev_queue_xmit+0x280>
ffff8000113a966c: b940aa82 ldr w2, [x20,#168]
ffff8000113a9670: 340016a2 cbz w2, ffff8000113a9944 <__dev_queue_xmit+0x550>
rc = q->enqueue(skb, q, &to_free) & NET_XMIT_MASK;
ffff8000113a9674: f9400283 ldr x3, [x20]
ffff8000113a9678: aa1403e1 mov x1, x20
ffff8000113a967c: aa1303e0 mov x0, x19
ffff8000113a9680: 910203a2 add x2, x29, #0x80
ffff8000113a9684: d63f0060 blr x3
if (qdisc->flags & TCQ_F_NOLOCK) {
ffff8000113a9688: b9401281 ldr w1, [x20,#16]
ffff8000113a968c: 12000c16 and w22, w0, #0xf
ffff8000113a9690: 37401381 tbnz w1, #8, ffff8000113a9900 <__dev_queue_xmit+0x50c>
ffff8000113a9694: b940c280 ldr w0, [x20,#192]
ffff8000113a9698: d50339bf dmb ishld
} else if (qdisc_is_running(qdisc)) {
ffff8000113a969c: 370001c0 tbnz w0, #0, ffff8000113a96d4 <__dev_queue_xmit+0x2e0>
s->sequence++;
ffff8000113a96a0: b940c280 ldr w0, [x20,#192]
ffff8000113a96a4: 11000400 add w0, w0, #0x1
ffff8000113a96a8: b900c280 str w0, [x20,#192]
smp_wmb();
ffff8000113a96ac: d5033abf dmb ishst
if (unlikely(contended)) {
ffff8000113a96b0: b5003199 cbnz x25, ffff8000113a9ce0 <__dev_queue_xmit+0x8ec>
__qdisc_run(q);
ffff8000113a96b4: aa1403e0 mov x0, x20
ffff8000113a96b8: 94000000 bl 0 <__qdisc_run>
ffff8000113a96b8: R_AARCH64_CALL26 __qdisc_run
smp_wmb();
ffff8000113a96bc: d5033abf dmb ishst
s->sequence++;
ffff8000113a96c0: b940c281 ldr w1, [x20,#192]
if (qdisc->flags & TCQ_F_NOLOCK)
ffff8000113a96c4: b9401280 ldr w0, [x20,#16]
ffff8000113a96c8: 11000421 add w1, w1, #0x1
ffff8000113a96cc: b900c281 str w1, [x20,#192]
ffff8000113a96d0: 37401ac0 tbnz w0, #8, ffff8000113a9a28 <__dev_queue_xmit+0x634>
smp_store_release(&lock->locked, 0);
ffff8000113a96d4: 52800000 mov w0, #0x0 // #0
ffff8000113a96d8: 9102b283 add x3, x20, #0xac
ffff8000113a96dc: 089ffc60 stlrb w0, [x3]
if (unlikely(to_free))
ffff8000113a96e0: f94043a0 ldr x0, [x29,#128]
ffff8000113a96e4: b5002fa0 cbnz x0, ffff8000113a9cd8 <__dev_queue_xmit+0x8e4>
return rc;
ffff8000113a96e8: 2a1603f3 mov w19, w22
if (unlikely(contended))
ffff8000113a96ec: 35002ef5 cbnz w21, ffff8000113a9cc8 <__dev_queue_xmit+0x8d4>
rc = __dev_xmit_skb(skb, q, dev, txq);
ffff8000113a96f0: b9007fb3 str w19, [x29,#124]
ffff8000113a96f4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a96f4: R_AARCH64_ADR_PREL_PG_HI21 .text+0xb378
ffff8000113a96f8: 91000000 add x0, x0, #0x0
ffff8000113a96f8: R_AARCH64_ADD_ABS_LO12_NC .text+0xb378
ffff8000113a96fc: 52804001 mov w1, #0x200 // #512
ffff8000113a9700: 94000000 bl 0 <__local_bh_enable_ip>
ffff8000113a9700: R_AARCH64_CALL26 __local_bh_enable_ip
return rc;
ffff8000113a9704: b9407fa0 ldr w0, [x29,#124]
ffff8000113a9708: 14000066 b ffff8000113a98a0 <__dev_queue_xmit+0x4ac>
static inline bool skb_dst_force(struct sk_buff *skb)
ffff8000113a970c: f9402e67 ldr x7, [x19,#88]
return (skb->_skb_refdst & SKB_DST_NOREF) && skb_dst(skb);
ffff8000113a9710: 3607f5e7 tbz w7, #0, ffff8000113a95cc <__dev_queue_xmit+0x1d8>
return (struct dst_entry *)(skb->_skb_refdst & SKB_DST_PTRMASK);
ffff8000113a9714: 927ff8e7 and x7, x7, #0xfffffffffffffffe
return (skb->_skb_refdst & SKB_DST_NOREF) && skb_dst(skb);
ffff8000113a9718: b4fff5a7 cbz x7, ffff8000113a95cc <__dev_queue_xmit+0x1d8>
ffff8000113a971c: b94040e0 ldr w0, [x7,#64]
if (unlikely(c == u))
ffff8000113a9720: 340005c0 cbz w0, ffff8000113a97d8 <__dev_queue_xmit+0x3e4>
ffff8000113a9724: 910100e3 add x3, x7, #0x40
ffff8000113a9728: 2a0003e1 mov w1, w0
} while (!atomic_try_cmpxchg(v, &c, c + a));
ffff8000113a972c: 11000402 add w2, w0, #0x1
ffff8000113a9730: f9800071 prfm pstl1strm, [x3]
ffff8000113a9734: 885f7c66 ldxr w6, [x3]
ffff8000113a9738: 4a0100c4 eor w4, w6, w1
ffff8000113a973c: 35000084 cbnz w4, ffff8000113a974c <__dev_queue_xmit+0x358>
ffff8000113a9740: 8804fc62 stlxr w4, w2, [x3]
ffff8000113a9744: 35ffff84 cbnz w4, ffff8000113a9734 <__dev_queue_xmit+0x340>
ffff8000113a9748: d5033bbf dmb ish
if (unlikely(r != o))
ffff8000113a974c: 6b06001f cmp w0, w6
ffff8000113a9750: 54001921 b.ne ffff8000113a9a74 <__dev_queue_xmit+0x680>
skb->_skb_refdst = (unsigned long)dst;
ffff8000113a9754: f9002e67 str x7, [x19,#88]
ffff8000113a9758: 17ffff9d b ffff8000113a95cc <__dev_queue_xmit+0x1d8>
rc = q->enqueue(skb, q, &to_free) & NET_XMIT_MASK;
ffff8000113a975c: f9400283 ldr x3, [x20]
ffff8000113a9760: aa1303e0 mov x0, x19
ffff8000113a9764: aa1403e1 mov x1, x20
ffff8000113a9768: 910203a2 add x2, x29, #0x80
ffff8000113a976c: d63f0060 blr x3
if (qdisc->flags & TCQ_F_NOLOCK) {
ffff8000113a9770: b9401281 ldr w1, [x20,#16]
ffff8000113a9774: 12000c13 and w19, w0, #0xf
ffff8000113a9778: 37400aa1 tbnz w1, #8, ffff8000113a98cc <__dev_queue_xmit+0x4d8>
ffff8000113a977c: b940c280 ldr w0, [x20,#192]
smp_rmb();
ffff8000113a9780: d50339bf dmb ishld
} else if (qdisc_is_running(qdisc)) {
ffff8000113a9784: 37000220 tbnz w0, #0, ffff8000113a97c8 <__dev_queue_xmit+0x3d4>
s->sequence++;
ffff8000113a9788: b940c280 ldr w0, [x20,#192]
ffff8000113a978c: 11000400 add w0, w0, #0x1
ffff8000113a9790: b900c280 str w0, [x20,#192]
smp_wmb();
ffff8000113a9794: d5033abf dmb ishst
if (!(q->flags & TCQ_F_NOLOCK) ||
ffff8000113a9798: b9401280 ldr w0, [x20,#16]
ffff8000113a979c: 36400060 tbz w0, #8, ffff8000113a97a8 <__dev_queue_xmit+0x3b4>
ffff8000113a97a0: f9406e80 ldr x0, [x20,#216]
ffff8000113a97a4: 37080060 tbnz w0, #1, ffff8000113a97b0 <__dev_queue_xmit+0x3bc>
__qdisc_run(q);
ffff8000113a97a8: aa1403e0 mov x0, x20
ffff8000113a97ac: 94000000 bl 0 <__qdisc_run>
ffff8000113a97ac: R_AARCH64_CALL26 __qdisc_run
smp_wmb();
ffff8000113a97b0: d5033abf dmb ishst
s->sequence++;
ffff8000113a97b4: b940c281 ldr w1, [x20,#192]
if (qdisc->flags & TCQ_F_NOLOCK)
ffff8000113a97b8: b9401280 ldr w0, [x20,#16]
ffff8000113a97bc: 11000421 add w1, w1, #0x1
ffff8000113a97c0: b900c281 str w1, [x20,#192]
ffff8000113a97c4: 374012a0 tbnz w0, #8, ffff8000113a9a18 <__dev_queue_xmit+0x624>
if (unlikely(to_free))
ffff8000113a97c8: f94043a0 ldr x0, [x29,#128]
ffff8000113a97cc: b4fff920 cbz x0, ffff8000113a96f0 <__dev_queue_xmit+0x2fc>
kfree_skb_list(to_free);
ffff8000113a97d0: 94000000 bl 0 <kfree_skb_list>
ffff8000113a97d0: R_AARCH64_CALL26 kfree_skb_list
ffff8000113a97d4: 17ffffc7 b ffff8000113a96f0 <__dev_queue_xmit+0x2fc>
ffff8000113a97d8: d2800007 mov x7, #0x0 // #0
ffff8000113a97dc: f9002e67 str x7, [x19,#88]
ffff8000113a97e0: 17ffff7b b ffff8000113a95cc <__dev_queue_xmit+0x1d8>
if (dev->flags & IFF_UP) {
ffff8000113a97e4: b9422ac0 ldr w0, [x22,#552]
ffff8000113a97e8: 360003e0 tbz w0, #0, ffff8000113a9864 <__dev_queue_xmit+0x470>
int cpu = smp_processor_id(); /* ok because BHs are off */
ffff8000113a97ec: 90000000 adrp x0, 0 <cpu_number>
ffff8000113a97ec: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113a97f0: 91000000 add x0, x0, #0x0
ffff8000113a97f0: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a97f4: d538d081 mrs x1, tpidr_el1
if (txq->xmit_lock_owner != cpu) {
ffff8000113a97f8: b9408702 ldr w2, [x24,#132]
int cpu = smp_processor_id(); /* ok because BHs are off */
ffff8000113a97fc: b8606834 ldr w20, [x1,x0]
if (txq->xmit_lock_owner != cpu) {
ffff8000113a9800: 6b14005f cmp w2, w20
ffff8000113a9804: 54001aa0 b.eq ffff8000113a9b58 <__dev_queue_xmit+0x764>
return unlikely(__this_cpu_read(softnet_data.xmit.recursion) >
ffff8000113a9808: 90000015 adrp x21, ffff80001139e37c <__my_cpu_offset>
ffff8000113a9808: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
ffff8000113a980c: 910002a0 add x0, x21, #0x0
ffff8000113a980c: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a9810: 9101e000 add x0, x0, #0x78
if (dev_xmit_recursion())
ffff8000113a9814: 78616800 ldrh w0, [x0,x1]
ffff8000113a9818: 7100281f cmp w0, #0xa
ffff8000113a981c: 540019e8 b.hi ffff8000113a9b58 <__dev_queue_xmit+0x764>
skb = validate_xmit_skb(skb, dev, &again);
ffff8000113a9820: aa1303e0 mov x0, x19
ffff8000113a9824: aa1603e1 mov x1, x22
ffff8000113a9828: 9101efa2 add x2, x29, #0x7b
ffff8000113a982c: 97fffcba bl ffff8000113a8b14 <validate_xmit_skb>
ffff8000113a9830: aa0003f3 mov x19, x0
if (!skb)
ffff8000113a9834: b4fff600 cbz x0, ffff8000113a96f4 <__dev_queue_xmit+0x300>
HARD_TX_LOCK(dev, txq, cpu);
ffff8000113a9838: f94066c2 ldr x2, [x22,#200]
ffff8000113a983c: 92740042 and x2, x2, #0x1000
ffff8000113a9840: b40016c2 cbz x2, ffff8000113a9b18 <__dev_queue_xmit+0x724>
return dev_queue->state & QUEUE_STATE_ANY_XOFF;
ffff8000113a9844: f9404b00 ldr x0, [x24,#144]
ffff8000113a9848: 92400400 and x0, x0, #0x3
if (!netif_xmit_stopped(txq)) {
ffff8000113a984c: b4001300 cbz x0, ffff8000113a9aac <__dev_queue_xmit+0x6b8>
HARD_TX_UNLOCK(dev, txq);
ffff8000113a9850: f94066c0 ldr x0, [x22,#200]
ffff8000113a9854: 92740000 and x0, x0, #0x1000
ffff8000113a9858: b4001760 cbz x0, ffff8000113a9b44 <__dev_queue_xmit+0x750>
net_crit_ratelimited("Virtual device %s asks to queue packet!\n",
ffff8000113a985c: 94000000 bl 0 <net_ratelimit>
ffff8000113a985c: R_AARCH64_CALL26 net_ratelimit
ffff8000113a9860: 350022a0 cbnz w0, ffff8000113a9cb4 <__dev_queue_xmit+0x8c0>
ffff8000113a9864: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a9864: R_AARCH64_ADR_PREL_PG_HI21 .text+0xb4e8
rc = -ENETDOWN;
ffff8000113a9868: 12800c62 mov w2, #0xffffff9c // #-100
ffff8000113a986c: 91000000 add x0, x0, #0x0
ffff8000113a986c: R_AARCH64_ADD_ABS_LO12_NC .text+0xb4e8
ffff8000113a9870: 52804001 mov w1, #0x200 // #512
ffff8000113a9874: b9007fa2 str w2, [x29,#124]
ffff8000113a9878: 94000000 bl 0 <__local_bh_enable_ip>
ffff8000113a9878: R_AARCH64_CALL26 __local_bh_enable_ip
ATOMIC64_OPS(add, add, I)
ffff8000113a987c: 910722c7 add x7, x22, #0x1c8
ffff8000113a9880: f98000f1 prfm pstl1strm, [x7]
ffff8000113a9884: c85f7ce0 ldxr x0, [x7]
ffff8000113a9888: 91000400 add x0, x0, #0x1
ffff8000113a988c: c8017ce0 stxr w1, x0, [x7]
ffff8000113a9890: 35ffffa1 cbnz w1, ffff8000113a9884 <__dev_queue_xmit+0x490>
kfree_skb_list(skb);
ffff8000113a9894: aa1303e0 mov x0, x19
ffff8000113a9898: 94000000 bl 0 <kfree_skb_list>
ffff8000113a9898: R_AARCH64_CALL26 kfree_skb_list
return rc;
ffff8000113a989c: b9407fa0 ldr w0, [x29,#124]
}
ffff8000113a98a0: f9404fa2 ldr x2, [x29,#152]
ffff8000113a98a4: f94002e1 ldr x1, [x23]
ffff8000113a98a4: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a98a8: eb01005f cmp x2, x1
ffff8000113a98ac: 54001681 b.ne ffff8000113a9b7c <__dev_queue_xmit+0x788>
ffff8000113a98b0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a98b4: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a98b8: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a98bc: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113a98c0: f9402bfb ldr x27, [sp,#80]
ffff8000113a98c4: a8ca7bfd ldp x29, x30, [sp],#160
ffff8000113a98c8: d65f03c0 ret
ffff8000113a98cc: b9410682 ldr w2, [x20,#260]
if (unlikely(val))
ffff8000113a98d0: 35000162 cbnz w2, ffff8000113a98fc <__dev_queue_xmit+0x508>
__CMPXCHG_CASE(w, , acq_, 32, , a, , "memory", K)
ffff8000113a98d4: 52800021 mov w1, #0x1 // #1
ffff8000113a98d8: d2800000 mov x0, #0x0 // #0
ffff8000113a98dc: 91041288 add x8, x20, #0x104
ffff8000113a98e0: f9800111 prfm pstl1strm, [x8]
ffff8000113a98e4: 885ffd03 ldaxr w3, [x8]
ffff8000113a98e8: 4a000064 eor w4, w3, w0
ffff8000113a98ec: 35000064 cbnz w4, ffff8000113a98f8 <__dev_queue_xmit+0x504>
ffff8000113a98f0: 88047d01 stxr w4, w1, [x8]
ffff8000113a98f4: 35ffff84 cbnz w4, ffff8000113a98e4 <__dev_queue_xmit+0x4f0>
if (do_raw_spin_trylock(lock)) {
ffff8000113a98f8: 340007c3 cbz w3, ffff8000113a99f0 <__dev_queue_xmit+0x5fc>
preempt_enable();
ffff8000113a98fc: 17ffffb3 b ffff8000113a97c8 <__dev_queue_xmit+0x3d4>
ffff8000113a9900: b9410682 ldr w2, [x20,#260]
ffff8000113a9904: 35000162 cbnz w2, ffff8000113a9930 <__dev_queue_xmit+0x53c>
ffff8000113a9908: 52800021 mov w1, #0x1 // #1
ffff8000113a990c: d2800000 mov x0, #0x0 // #0
ffff8000113a9910: 91041285 add x5, x20, #0x104
ffff8000113a9914: f98000b1 prfm pstl1strm, [x5]
ffff8000113a9918: 885ffca3 ldaxr w3, [x5]
ffff8000113a991c: 4a000064 eor w4, w3, w0
ffff8000113a9920: 35000064 cbnz w4, ffff8000113a992c <__dev_queue_xmit+0x538>
ffff8000113a9924: 88047ca1 stxr w4, w1, [x5]
ffff8000113a9928: 35ffff84 cbnz w4, ffff8000113a9918 <__dev_queue_xmit+0x524>
if (do_raw_spin_trylock(lock)) {
ffff8000113a992c: 34000663 cbz w3, ffff8000113a99f8 <__dev_queue_xmit+0x604>
preempt_enable();
ffff8000113a9930: 17ffff69 b ffff8000113a96d4 <__dev_queue_xmit+0x2e0>
dst_release((struct dst_entry *)(refdst & SKB_DST_PTRMASK));
ffff8000113a9934: 927ff800 and x0, x0, #0xfffffffffffffffe
ffff8000113a9938: 94000000 bl 0 <dst_release>
ffff8000113a9938: R_AARCH64_CALL26 dst_release
skb->_skb_refdst = 0UL;
ffff8000113a993c: f9002e7f str xzr, [x19,#88]
ffff8000113a9940: 17ffff23 b ffff8000113a95cc <__dev_queue_xmit+0x1d8>
if (qdisc->flags & TCQ_F_NOLOCK) {
ffff8000113a9944: 374007a1 tbnz w1, #8, ffff8000113a9a38 <__dev_queue_xmit+0x644>
ffff8000113a9948: b940c280 ldr w0, [x20,#192]
smp_rmb();
ffff8000113a994c: d50339bf dmb ishld
} else if (qdisc_is_running(qdisc)) {
ffff8000113a9950: 3707e920 tbnz w0, #0, ffff8000113a9674 <__dev_queue_xmit+0x280>
s->sequence++;
ffff8000113a9954: b940c280 ldr w0, [x20,#192]
ffff8000113a9958: 11000400 add w0, w0, #0x1
ffff8000113a995c: b900c280 str w0, [x20,#192]
smp_wmb();
ffff8000113a9960: d5033abf dmb ishst
return skb->head + skb->end;
ffff8000113a9964: f9406261 ldr x1, [x19,#192]
ffff8000113a9968: b940be60 ldr w0, [x19,#188]
}
static inline void bstats_update(struct gnet_stats_basic_packed *bstats,
const struct sk_buff *skb)
{
_bstats_update(bstats,
ffff8000113a996c: b9402a63 ldr w3, [x19,#40]
ffff8000113a9970: 8b000020 add x0, x1, x0
ffff8000113a9974: 79400802 ldrh w2, [x0,#4]
ffff8000113a9978: d2800021 mov x1, #0x1 // #1
ffff8000113a997c: 34000042 cbz w2, ffff8000113a9984 <__dev_queue_xmit+0x590>
ffff8000113a9980: 79400c01 ldrh w1, [x0,#6]
bstats->bytes += bytes;
ffff8000113a9984: f9405a82 ldr x2, [x20,#176]
bstats->packets += packets;
ffff8000113a9988: f9405e80 ldr x0, [x20,#184]
bstats->bytes += bytes;
ffff8000113a998c: 8b030043 add x3, x2, x3
bstats->packets += packets;
ffff8000113a9990: 8b010001 add x1, x0, x1
bstats->bytes += bytes;
ffff8000113a9994: f9005a83 str x3, [x20,#176]
bstats->packets += packets;
ffff8000113a9998: f9005e81 str x1, [x20,#184]
if (sch_direct_xmit(skb, q, dev, txq, root_lock, true)) {
ffff8000113a999c: aa1303e0 mov x0, x19
ffff8000113a99a0: aa1403e1 mov x1, x20
ffff8000113a99a4: aa1603e2 mov x2, x22
ffff8000113a99a8: aa1803e3 mov x3, x24
ffff8000113a99ac: 52800025 mov w5, #0x1 // #1
ffff8000113a99b0: 94000000 bl 0 <sch_direct_xmit>
ffff8000113a99b0: R_AARCH64_CALL26 sch_direct_xmit
ffff8000113a99b4: 53001c00 uxtb w0, w0
ffff8000113a99b8: 34000080 cbz w0, ffff8000113a99c8 <__dev_queue_xmit+0x5d4>
if (unlikely(contended)) {
ffff8000113a99bc: b5001619 cbnz x25, ffff8000113a9c7c <__dev_queue_xmit+0x888>
__qdisc_run(q);
ffff8000113a99c0: aa1403e0 mov x0, x20
ffff8000113a99c4: 94000000 bl 0 <__qdisc_run>
ffff8000113a99c4: R_AARCH64_CALL26 __qdisc_run
smp_wmb();
ffff8000113a99c8: d5033abf dmb ishst
s->sequence++;
ffff8000113a99cc: b940c281 ldr w1, [x20,#192]
if (qdisc->flags & TCQ_F_NOLOCK)
ffff8000113a99d0: b9401280 ldr w0, [x20,#16]
ffff8000113a99d4: 11000421 add w1, w1, #0x1
ffff8000113a99d8: b900c281 str w1, [x20,#192]
rc = NET_XMIT_SUCCESS;
ffff8000113a99dc: 52800016 mov w22, #0x0 // #0
ffff8000113a99e0: 3647e7a0 tbz w0, #8, ffff8000113a96d4 <__dev_queue_xmit+0x2e0>
smp_store_release(&lock->locked, 0);
ffff8000113a99e4: 91041283 add x3, x20, #0x104
ffff8000113a99e8: 089ffc76 stlrb w22, [x3]
ffff8000113a99ec: 17ffff3a b ffff8000113a96d4 <__dev_queue_xmit+0x2e0>
case 1: *(volatile __u8 *)p = *(__u8 *)res; break;
ffff8000113a99f0: 39042282 strb w2, [x20,#264]
ffff8000113a99f4: 17ffff65 b ffff8000113a9788 <__dev_queue_xmit+0x394>
ffff8000113a99f8: 39042282 strb w2, [x20,#264]
ffff8000113a99fc: 17ffff29 b ffff8000113a96a0 <__dev_queue_xmit+0x2ac>
return data + offset;
ffff8000113a9a00: 8b21c041 add x1, x2, w1, sxtw
if (likely(th))
ffff8000113a9a04: b5ffdaa1 cbnz x1, ffff8000113a9558 <__dev_queue_xmit+0x164>
ffff8000113a9a08: 17fffed7 b ffff8000113a9564 <__dev_queue_xmit+0x170>
sk = inet_reqsk(sk)->rsk_listener;
ffff8000113a9a0c: f9403000 ldr x0, [x0,#96]
if (!sk)
ffff8000113a9a10: b5ffd440 cbnz x0, ffff8000113a9498 <__dev_queue_xmit+0xa4>
ffff8000113a9a14: 17fffeab b ffff8000113a94c0 <__dev_queue_xmit+0xcc>
ffff8000113a9a18: 52800000 mov w0, #0x0 // #0
ffff8000113a9a1c: 91041294 add x20, x20, #0x104
ffff8000113a9a20: 089ffe80 stlrb w0, [x20]
ffff8000113a9a24: 17ffff69 b ffff8000113a97c8 <__dev_queue_xmit+0x3d4>
ffff8000113a9a28: 52800000 mov w0, #0x0 // #0
ffff8000113a9a2c: 91041282 add x2, x20, #0x104
ffff8000113a9a30: 089ffc40 stlrb w0, [x2]
ffff8000113a9a34: 17ffff28 b ffff8000113a96d4 <__dev_queue_xmit+0x2e0>
__READ_ONCE_SIZE;
ffff8000113a9a38: b9410682 ldr w2, [x20,#260]
if (unlikely(val))
ffff8000113a9a3c: 35000162 cbnz w2, ffff8000113a9a68 <__dev_queue_xmit+0x674>
ffff8000113a9a40: 52800021 mov w1, #0x1 // #1
ffff8000113a9a44: d2800000 mov x0, #0x0 // #0
ffff8000113a9a48: 91041286 add x6, x20, #0x104
ffff8000113a9a4c: f98000d1 prfm pstl1strm, [x6]
ffff8000113a9a50: 885ffcc3 ldaxr w3, [x6]
ffff8000113a9a54: 4a000065 eor w5, w3, w0
ffff8000113a9a58: 35000065 cbnz w5, ffff8000113a9a64 <__dev_queue_xmit+0x670>
ffff8000113a9a5c: 88057cc1 stxr w5, w1, [x6]
ffff8000113a9a60: 35ffff85 cbnz w5, ffff8000113a9a50 <__dev_queue_xmit+0x65c>
if (do_raw_spin_trylock(lock)) {
ffff8000113a9a64: 34000043 cbz w3, ffff8000113a9a6c <__dev_queue_xmit+0x678>
preempt_enable();
ffff8000113a9a68: 17ffff03 b ffff8000113a9674 <__dev_queue_xmit+0x280>
case 1: *(volatile __u8 *)p = *(__u8 *)res; break;
ffff8000113a9a6c: 39042282 strb w2, [x20,#264]
ffff8000113a9a70: 17ffffb9 b ffff8000113a9954 <__dev_queue_xmit+0x560>
if (unlikely(c == u))
ffff8000113a9a74: 34ffeb26 cbz w6, ffff8000113a97d8 <__dev_queue_xmit+0x3e4>
ffff8000113a9a78: 2a0603e4 mov w4, w6
} while (!atomic_try_cmpxchg(v, &c, c + a));
ffff8000113a9a7c: 110004c5 add w5, w6, #0x1
__CMPXCHG_CASE(w, , mb_, 32, dmb ish, , l, "memory", K)
ffff8000113a9a80: f9800071 prfm pstl1strm, [x3]
ffff8000113a9a84: 885f7c60 ldxr w0, [x3]
ffff8000113a9a88: 4a040001 eor w1, w0, w4
ffff8000113a9a8c: 35000081 cbnz w1, ffff8000113a9a9c <__dev_queue_xmit+0x6a8>
ffff8000113a9a90: 8801fc65 stlxr w1, w5, [x3]
ffff8000113a9a94: 35ffff81 cbnz w1, ffff8000113a9a84 <__dev_queue_xmit+0x690>
ffff8000113a9a98: d5033bbf dmb ish
if (unlikely(r != o))
ffff8000113a9a9c: 6b06001f cmp w0, w6
ffff8000113a9aa0: 54ffe5a0 b.eq ffff8000113a9754 <__dev_queue_xmit+0x360>
ffff8000113a9aa4: 2a0003e6 mov w6, w0
ffff8000113a9aa8: 17fffff3 b ffff8000113a9a74 <__dev_queue_xmit+0x680>
__this_cpu_inc(softnet_data.xmit.recursion);
ffff8000113a9aac: 910002b5 add x21, x21, #0x0
ffff8000113a9aac: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a9ab0: d538d081 mrs x1, tpidr_el1
ffff8000113a9ab4: 9101e2b5 add x21, x21, #0x78
ffff8000113a9ab8: 78756822 ldrh w2, [x1,x21]
skb = dev_hard_start_xmit(skb, dev, txq, &rc);
ffff8000113a9abc: aa1303e0 mov x0, x19
ffff8000113a9ac0: 11000442 add w2, w2, #0x1
ffff8000113a9ac4: 78356822 strh w2, [x1,x21]
ffff8000113a9ac8: 9101f3a3 add x3, x29, #0x7c
ffff8000113a9acc: aa1603e1 mov x1, x22
ffff8000113a9ad0: aa1803e2 mov x2, x24
ffff8000113a9ad4: 94000000 bl ffff8000113a908c <dev_hard_start_xmit>
ffff8000113a9ad4: R_AARCH64_CALL26 dev_hard_start_xmit
ffff8000113a9ad8: aa0003f3 mov x19, x0
ffff8000113a9adc: d538d080 mrs x0, tpidr_el1
__this_cpu_dec(softnet_data.xmit.recursion);
ffff8000113a9ae0: 78756801 ldrh w1, [x0,x21]
ffff8000113a9ae4: 51000421 sub w1, w1, #0x1
ffff8000113a9ae8: 78356801 strh w1, [x0,x21]
if (likely(rc < NET_XMIT_MASK))
ffff8000113a9aec: b9407fa0 ldr w0, [x29,#124]
ffff8000113a9af0: 7100381f cmp w0, #0xe
ffff8000113a9af4: 54ffeaec b.gt ffff8000113a9850 <__dev_queue_xmit+0x45c>
HARD_TX_UNLOCK(dev, txq);
ffff8000113a9af8: f94066c0 ldr x0, [x22,#200]
ffff8000113a9afc: 92740000 and x0, x0, #0x1000
ffff8000113a9b00: b5ffdfa0 cbnz x0, ffff8000113a96f4 <__dev_queue_xmit+0x300>
txq->xmit_lock_owner = -1;
ffff8000113a9b04: 12800001 mov w1, #0xffffffff // #-1
ffff8000113a9b08: b9008701 str w1, [x24,#132]
smp_store_release(&lock->locked, 0);
ffff8000113a9b0c: 91020318 add x24, x24, #0x80
ffff8000113a9b10: 089fff00 stlrb w0, [x24]
preempt_enable();
ffff8000113a9b14: 17fffef8 b ffff8000113a96f4 <__dev_queue_xmit+0x300>
__CMPXCHG_CASE(w, , acq_, 32, , a, , "memory", K)
ffff8000113a9b18: 52800023 mov w3, #0x1 // #1
ffff8000113a9b1c: 91020300 add x0, x24, #0x80
ffff8000113a9b20: f9800011 prfm pstl1strm, [x0]
ffff8000113a9b24: 885ffc01 ldaxr w1, [x0]
ffff8000113a9b28: 4a020024 eor w4, w1, w2
ffff8000113a9b2c: 35000064 cbnz w4, ffff8000113a9b38 <__dev_queue_xmit+0x744>
ffff8000113a9b30: 88047c03 stxr w4, w3, [x0]
ffff8000113a9b34: 35ffff84 cbnz w4, ffff8000113a9b24 <__dev_queue_xmit+0x730>
if (unlikely(r != o))
ffff8000113a9b38: 350009c1 cbnz w1, ffff8000113a9c70 <__dev_queue_xmit+0x87c>
txq->xmit_lock_owner = cpu;
ffff8000113a9b3c: b9008714 str w20, [x24,#132]
ffff8000113a9b40: 17ffff41 b ffff8000113a9844 <__dev_queue_xmit+0x450>
txq->xmit_lock_owner = -1;
ffff8000113a9b44: 12800001 mov w1, #0xffffffff // #-1
ffff8000113a9b48: b9008701 str w1, [x24,#132]
ffff8000113a9b4c: 91020318 add x24, x24, #0x80
ffff8000113a9b50: 089fff00 stlrb w0, [x24]
ffff8000113a9b54: 17ffff42 b ffff8000113a985c <__dev_queue_xmit+0x468>
net_crit_ratelimited("Dead loop on virtual device %s, fix it urgently!\n",
ffff8000113a9b58: 94000000 bl 0 <net_ratelimit>
ffff8000113a9b58: R_AARCH64_CALL26 net_ratelimit
ffff8000113a9b5c: 34ffe840 cbz w0, ffff8000113a9864 <__dev_queue_xmit+0x470>
ffff8000113a9b60: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a9b60: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x6c0
ffff8000113a9b64: aa1603e1 mov x1, x22
ffff8000113a9b68: 91000000 add x0, x0, #0x0
ffff8000113a9b68: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x6c0
ffff8000113a9b6c: 94000000 bl 0 <printk>
ffff8000113a9b6c: R_AARCH64_CALL26 printk
ffff8000113a9b70: 17ffff3d b ffff8000113a9864 <__dev_queue_xmit+0x470>
ffff8000113a9b74: b9400340 ldr w0, [x26]
ffff8000113a9b78: 17fffe7b b ffff8000113a9564 <__dev_queue_xmit+0x170>
}
ffff8000113a9b7c: 94000000 bl 0 <__stack_chk_fail>
ffff8000113a9b7c: R_AARCH64_CALL26 __stack_chk_fail
DEFINE_EVENT(net_dev_template, net_dev_queue,
ffff8000113a9b80: 90000001 adrp x1, 0 <cpu_number>
ffff8000113a9b80: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113a9b84: d538d082 mrs x2, tpidr_el1
ffff8000113a9b88: 91000021 add x1, x1, #0x0
ffff8000113a9b88: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a9b8c: b8616841 ldr w1, [x2,x1]
ffff8000113a9b90: 52800803 mov w3, #0x40 // #64
ffff8000113a9b94: 1ac30c23 sdiv w3, w1, w3
ffff8000113a9b98: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113a9b98: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113a9b9c: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113a9ba0: 91000042 add x2, x2, #0x0
ffff8000113a9ba0: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113a9ba4: f8626862 ldr x2, [x3,x2]
ffff8000113a9ba8: 9ac12441 lsr x1, x2, x1
ffff8000113a9bac: 3607d261 tbz w1, #0, ffff8000113a95f8 <__dev_queue_xmit+0x204>
__READ_ONCE_SIZE;
ffff8000113a9bb0: f9401015 ldr x21, [x0,#32]
ffff8000113a9bb4: b40000f5 cbz x21, ffff8000113a9bd0 <__dev_queue_xmit+0x7dc>
ffff8000113a9bb8: f94002a4 ldr x4, [x21]
ffff8000113a9bbc: f94006a0 ldr x0, [x21,#8]
ffff8000113a9bc0: aa1303e1 mov x1, x19
ffff8000113a9bc4: d63f0080 blr x4
ffff8000113a9bc8: f8418ea4 ldr x4, [x21,#24]!
ffff8000113a9bcc: b5ffff84 cbnz x4, ffff8000113a9bbc <__dev_queue_xmit+0x7c8>
ffff8000113a9bd0: 17fffe8a b ffff8000113a95f8 <__dev_queue_xmit+0x204>
ffff8000113a9bd4: f941fed5 ldr x21, [x22,#1016]
if (!miniq)
ffff8000113a9bd8: b4000335 cbz x21, ffff8000113a9c3c <__dev_queue_xmit+0x848>
mini_qdisc_bstats_cpu_update(miniq, skb);
ffff8000113a9bdc: f9400aa0 ldr x0, [x21,#16]
ffff8000113a9be0: aa1303e1 mov x1, x19
ffff8000113a9be4: 94000000 bl ffff80001139e37c <__my_cpu_offset>
ffff8000113a9be4: R_AARCH64_CALL26 .text.unlikely
switch (tcf_classify(skb, miniq->filter_list, &cl_res, false)) {
ffff8000113a9be8: f94002a1 ldr x1, [x21]
ffff8000113a9bec: aa1303e0 mov x0, x19
ffff8000113a9bf0: 910203a2 add x2, x29, #0x80
ffff8000113a9bf4: 52800003 mov w3, #0x0 // #0
ffff8000113a9bf8: 94000000 bl 0 <tcf_classify>
ffff8000113a9bf8: R_AARCH64_CALL26 tcf_classify
ffff8000113a9bfc: 7100201f cmp w0, #0x8
ffff8000113a9c00: 540001e8 b.hi ffff8000113a9c3c <__dev_queue_xmit+0x848>
ffff8000113a9c04: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a9c04: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x8
ffff8000113a9c08: 91000021 add x1, x1, #0x0
ffff8000113a9c08: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x8
ffff8000113a9c0c: 38604822 ldrb w2, [x1,w0,uxtw]
ffff8000113a9c10: 10000063 adr x3, ffff8000113a9c1c <__dev_queue_xmit+0x828>
ffff8000113a9c14: 8b228862 add x2, x3, w2, sxtb #2
ffff8000113a9c18: d61f0040 br x2
__skb_tstamp_tx(skb, NULL, skb->sk, SCM_TSTAMP_SCHED);
ffff8000113a9c1c: f9400e62 ldr x2, [x19,#24]
ffff8000113a9c20: aa1303e0 mov x0, x19
ffff8000113a9c24: d2800001 mov x1, #0x0 // #0
ffff8000113a9c28: 52800023 mov w3, #0x1 // #1
ffff8000113a9c2c: 94000000 bl 0 <__skb_tstamp_tx>
ffff8000113a9c2c: R_AARCH64_CALL26 __skb_tstamp_tx
ffff8000113a9c30: 17fffe0b b ffff8000113a945c <__dev_queue_xmit+0x68>
skb->tc_index = TC_H_MIN(cl_res.classid);
ffff8000113a9c34: b9408ba0 ldr w0, [x29,#136]
ffff8000113a9c38: 79010e60 strh w0, [x19,#134]
if (!skb)
ffff8000113a9c3c: b5ffcbd3 cbnz x19, ffff8000113a95b4 <__dev_queue_xmit+0x1c0>
ffff8000113a9c40: 17fffead b ffff8000113a96f4 <__dev_queue_xmit+0x300>
consume_skb(skb);
ffff8000113a9c44: aa1303e0 mov x0, x19
*ret = NET_XMIT_SUCCESS;
ffff8000113a9c48: b9007fbf str wzr, [x29,#124]
consume_skb(skb);
ffff8000113a9c4c: 94000000 bl 0 <consume_skb>
ffff8000113a9c4c: R_AARCH64_CALL26 consume_skb
ffff8000113a9c50: 17fffea9 b ffff8000113a96f4 <__dev_queue_xmit+0x300>
mini_qdisc_qstats_cpu_drop(miniq);
ffff8000113a9c54: 910062a0 add x0, x21, #0x18
ffff8000113a9c58: 94000000 bl ffff80001139e37c <__my_cpu_offset>
ffff8000113a9c58: R_AARCH64_CALL26 .text.unlikely+0x64
*ret = NET_XMIT_DROP;
ffff8000113a9c5c: 52800021 mov w1, #0x1 // #1
kfree_skb(skb);
ffff8000113a9c60: aa1303e0 mov x0, x19
*ret = NET_XMIT_DROP;
ffff8000113a9c64: b9007fa1 str w1, [x29,#124]
kfree_skb(skb);
ffff8000113a9c68: 94000000 bl 0 <kfree_skb>
ffff8000113a9c68: R_AARCH64_CALL26 kfree_skb
ffff8000113a9c6c: 17fffea2 b ffff8000113a96f4 <__dev_queue_xmit+0x300>
queued_spin_lock_slowpath(lock, val);
ffff8000113a9c70: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113a9c70: R_AARCH64_CALL26 queued_spin_lock_slowpath
txq->xmit_lock_owner = cpu;
ffff8000113a9c74: b9008714 str w20, [x24,#132]
ffff8000113a9c78: 17fffef3 b ffff8000113a9844 <__dev_queue_xmit+0x450>
smp_store_release(&lock->locked, 0);
ffff8000113a9c7c: 52800000 mov w0, #0x0 // #0
ffff8000113a9c80: 91040281 add x1, x20, #0x100
ffff8000113a9c84: 089ffc20 stlrb w0, [x1]
contended = false;
ffff8000113a9c88: 52800015 mov w21, #0x0 // #0
ffff8000113a9c8c: 17ffff4d b ffff8000113a99c0 <__dev_queue_xmit+0x5cc>
/* Instead of calling kfree_skb() while root qdisc lock is held,
* queue the skb for future freeing at end of __dev_xmit_skb()
*/
static inline void __qdisc_drop(struct sk_buff *skb, struct sk_buff **to_free)
{
skb->next = *to_free;
ffff8000113a9c90: f94043a0 ldr x0, [x29,#128]
rc = NET_XMIT_DROP;
ffff8000113a9c94: 52800036 mov w22, #0x1 // #1
ffff8000113a9c98: f9000260 str x0, [x19]
*to_free = skb;
ffff8000113a9c9c: f90043b3 str x19, [x29,#128]
ffff8000113a9ca0: 17fffe8d b ffff8000113a96d4 <__dev_queue_xmit+0x2e0>
skb_do_redirect(skb);
ffff8000113a9ca4: aa1303e0 mov x0, x19
ffff8000113a9ca8: 94000000 bl 0 <skb_do_redirect>
ffff8000113a9ca8: R_AARCH64_CALL26 skb_do_redirect
*ret = NET_XMIT_SUCCESS;
ffff8000113a9cac: b9007fbf str wzr, [x29,#124]
ffff8000113a9cb0: 17fffe91 b ffff8000113a96f4 <__dev_queue_xmit+0x300>
net_crit_ratelimited("Virtual device %s asks to queue packet!\n",
ffff8000113a9cb4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113a9cb4: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x690
ffff8000113a9cb8: aa1603e1 mov x1, x22
ffff8000113a9cbc: 91000000 add x0, x0, #0x0
ffff8000113a9cbc: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x690
ffff8000113a9cc0: 94000000 bl 0 <printk>
ffff8000113a9cc0: R_AARCH64_CALL26 printk
ffff8000113a9cc4: 17fffee8 b ffff8000113a9864 <__dev_queue_xmit+0x470>
ffff8000113a9cc8: 52800000 mov w0, #0x0 // #0
ffff8000113a9ccc: 91040294 add x20, x20, #0x100
ffff8000113a9cd0: 089ffe80 stlrb w0, [x20]
ffff8000113a9cd4: 17fffe87 b ffff8000113a96f0 <__dev_queue_xmit+0x2fc>
kfree_skb_list(to_free);
ffff8000113a9cd8: 94000000 bl 0 <kfree_skb_list>
ffff8000113a9cd8: R_AARCH64_CALL26 kfree_skb_list
ffff8000113a9cdc: 17fffe83 b ffff8000113a96e8 <__dev_queue_xmit+0x2f4>
ffff8000113a9ce0: 52800000 mov w0, #0x0 // #0
ffff8000113a9ce4: 91040288 add x8, x20, #0x100
ffff8000113a9ce8: 089ffd00 stlrb w0, [x8]
contended = false;
ffff8000113a9cec: 52800015 mov w21, #0x0 // #0
ffff8000113a9cf0: 17fffe71 b ffff8000113a96b4 <__dev_queue_xmit+0x2c0>
return skb->len - skb->data_len;
ffff8000113a9cf4: 4b040000 sub w0, w0, w4
if (hlen - offset >= len)
ffff8000113a9cf8: 4b010000 sub w0, w0, w1
ffff8000113a9cfc: 71001c1f cmp w0, #0x7
ffff8000113a9d00: 5400016c b.gt ffff8000113a9d2c <__dev_queue_xmit+0x938>
if (!skb ||
ffff8000113a9d04: b4000113 cbz x19, ffff8000113a9d24 <__dev_queue_xmit+0x930>
skb_copy_bits(skb, offset, buffer, len) < 0)
ffff8000113a9d08: 52800103 mov w3, #0x8 // #8
ffff8000113a9d0c: aa1303e0 mov x0, x19
ffff8000113a9d10: 910203a2 add x2, x29, #0x80
ffff8000113a9d14: 94000000 bl 0 <skb_copy_bits>
ffff8000113a9d14: R_AARCH64_CALL26 skb_copy_bits
ffff8000113a9d18: b9401aa3 ldr w3, [x21,#24]
if (!skb ||
ffff8000113a9d1c: 37f80040 tbnz w0, #31, ffff8000113a9d24 <__dev_queue_xmit+0x930>
hdr_len += sizeof(struct udphdr);
ffff8000113a9d20: 11002338 add w24, w25, #0x8
ffff8000113a9d24: b9402a60 ldr w0, [x19,#40]
ffff8000113a9d28: 17fffe0f b ffff8000113a9564 <__dev_queue_xmit+0x170>
return data + offset;
ffff8000113a9d2c: 8b21c041 add x1, x2, w1, sxtw
if (skb_header_pointer(skb, skb_transport_offset(skb),
ffff8000113a9d30: b5ffff81 cbnz x1, ffff8000113a9d20 <__dev_queue_xmit+0x92c>
ffff8000113a9d34: 17fffffc b ffff8000113a9d24 <__dev_queue_xmit+0x930>
ffff8000113a9d38: 52800023 mov w3, #0x1 // #1
ffff8000113a9d3c: 91040280 add x0, x20, #0x100
ffff8000113a9d40: d2800002 mov x2, #0x0 // #0
ffff8000113a9d44: f9800011 prfm pstl1strm, [x0]
ffff8000113a9d48: 885ffc01 ldaxr w1, [x0]
ffff8000113a9d4c: 4a020024 eor w4, w1, w2
ffff8000113a9d50: 35000064 cbnz w4, ffff8000113a9d5c <__dev_queue_xmit+0x968>
ffff8000113a9d54: 88047c03 stxr w4, w3, [x0]
ffff8000113a9d58: 35ffff84 cbnz w4, ffff8000113a9d48 <__dev_queue_xmit+0x954>
ffff8000113a9d5c: 34ffc6c1 cbz w1, ffff8000113a9634 <__dev_queue_xmit+0x240>
queued_spin_lock_slowpath(lock, val);
ffff8000113a9d60: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113a9d60: R_AARCH64_CALL26 queued_spin_lock_slowpath
ffff8000113a9d64: 17fffe34 b ffff8000113a9634 <__dev_queue_xmit+0x240>
ffff8000113a9d68: aa0403e0 mov x0, x4
ffff8000113a9d6c: f90037a4 str x4, [x29,#104]
ffff8000113a9d70: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113a9d70: R_AARCH64_CALL26 queued_spin_lock_slowpath
ffff8000113a9d74: f94037a4 ldr x4, [x29,#104]
ffff8000113a9d78: 17fffe39 b ffff8000113a965c <__dev_queue_xmit+0x268>
ffff8000113a9d7c <dev_queue_xmit>:
{
ffff8000113a9d7c: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113a9d80: 910003fd mov x29, sp
ffff8000113a9d84: f9000bf3 str x19, [sp,#16]
ffff8000113a9d88: aa0003f3 mov x19, x0
ffff8000113a9d8c: aa1e03e0 mov x0, x30
ffff8000113a9d90: 94000000 bl 0 <_mcount>
ffff8000113a9d90: R_AARCH64_CALL26 _mcount
return __dev_queue_xmit(skb, NULL);
ffff8000113a9d94: aa1303e0 mov x0, x19
ffff8000113a9d98: d2800001 mov x1, #0x0 // #0
ffff8000113a9d9c: 97fffd96 bl ffff8000113a93f4 <__dev_queue_xmit>
}
ffff8000113a9da0: f9400bf3 ldr x19, [sp,#16]
ffff8000113a9da4: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113a9da8: d65f03c0 ret
ffff8000113a9dac <dev_queue_xmit_accel>:
{
ffff8000113a9dac: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113a9db0: 910003fd mov x29, sp
ffff8000113a9db4: f9000bf3 str x19, [sp,#16]
ffff8000113a9db8: aa0003f3 mov x19, x0
ffff8000113a9dbc: aa1e03e0 mov x0, x30
ffff8000113a9dc0: f90017a1 str x1, [x29,#40]
ffff8000113a9dc4: 94000000 bl 0 <_mcount>
ffff8000113a9dc4: R_AARCH64_CALL26 _mcount
return __dev_queue_xmit(skb, sb_dev);
ffff8000113a9dc8: f94017a1 ldr x1, [x29,#40]
ffff8000113a9dcc: aa1303e0 mov x0, x19
ffff8000113a9dd0: 97fffd89 bl ffff8000113a93f4 <__dev_queue_xmit>
}
ffff8000113a9dd4: f9400bf3 ldr x19, [sp,#16]
ffff8000113a9dd8: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113a9ddc: d65f03c0 ret
ffff8000113a9de0 <generic_xdp_tx>:
{
ffff8000113a9de0: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113a9de4: 910003fd mov x29, sp
ffff8000113a9de8: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a9dec: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a9df0: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a9df4: aa0003f5 mov x21, x0
ffff8000113a9df8: aa1e03e0 mov x0, x30
ffff8000113a9dfc: aa0103f6 mov x22, x1
ffff8000113a9e00: 94000000 bl 0 <_mcount>
ffff8000113a9e00: R_AARCH64_CALL26 _mcount
struct net_device *dev = skb->dev;
ffff8000113a9e04: f9400ab3 ldr x19, [x21,#16]
txq = netdev_core_pick_tx(dev, skb, NULL);
ffff8000113a9e08: aa1503e1 mov x1, x21
ffff8000113a9e0c: aa1303e0 mov x0, x19
ffff8000113a9e10: d2800002 mov x2, #0x0 // #0
ffff8000113a9e14: 94000000 bl ffff8000113a92e8 <netdev_core_pick_tx>
ffff8000113a9e14: R_AARCH64_CALL26 netdev_core_pick_tx
HARD_TX_LOCK(dev, txq, cpu);
ffff8000113a9e18: f9406664 ldr x4, [x19,#200]
cpu = smp_processor_id();
ffff8000113a9e1c: 90000017 adrp x23, 0 <cpu_number>
ffff8000113a9e1c: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
HARD_TX_LOCK(dev, txq, cpu);
ffff8000113a9e20: 92740084 and x4, x4, #0x1000
txq = netdev_core_pick_tx(dev, skb, NULL);
ffff8000113a9e24: aa0003f4 mov x20, x0
cpu = smp_processor_id();
ffff8000113a9e28: 910002e3 add x3, x23, #0x0
ffff8000113a9e28: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a9e2c: d538d080 mrs x0, tpidr_el1
ffff8000113a9e30: b8636818 ldr w24, [x0,x3]
HARD_TX_LOCK(dev, txq, cpu);
ffff8000113a9e34: b4000644 cbz x4, ffff8000113a9efc <generic_xdp_tx+0x11c>
return dev_queue->state & QUEUE_STATE_ANY_XOFF;
ffff8000113a9e38: f9404a80 ldr x0, [x20,#144]
ffff8000113a9e3c: 92400400 and x0, x0, #0x3
if (!netif_xmit_stopped(txq)) {
ffff8000113a9e40: b4000380 cbz x0, ffff8000113a9eb0 <generic_xdp_tx+0xd0>
bool free_skb = true;
ffff8000113a9e44: 52800021 mov w1, #0x1 // #1
HARD_TX_UNLOCK(dev, txq);
ffff8000113a9e48: f9406660 ldr x0, [x19,#200]
ffff8000113a9e4c: 92740000 and x0, x0, #0x1000
ffff8000113a9e50: b40000e0 cbz x0, ffff8000113a9e6c <generic_xdp_tx+0x8c>
if (free_skb) {
ffff8000113a9e54: 35000161 cbnz w1, ffff8000113a9e80 <generic_xdp_tx+0xa0>
}
ffff8000113a9e58: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a9e5c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a9e60: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a9e64: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a9e68: d65f03c0 ret
txq->xmit_lock_owner = -1;
ffff8000113a9e6c: 12800002 mov w2, #0xffffffff // #-1
ffff8000113a9e70: b9008682 str w2, [x20,#132]
smp_store_release(&lock->locked, 0);
ffff8000113a9e74: 91020294 add x20, x20, #0x80
ffff8000113a9e78: 089ffe80 stlrb w0, [x20]
if (free_skb) {
ffff8000113a9e7c: 34fffee1 cbz w1, ffff8000113a9e58 <generic_xdp_tx+0x78>
ffff8000113a9e80: 90000000 adrp x0, 0 <__tracepoint_xdp_exception>
ffff8000113a9e80: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_xdp_exception
ffff8000113a9e84: 91000000 add x0, x0, #0x0
ffff8000113a9e84: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_xdp_exception
ffff8000113a9e88: b9400801 ldr w1, [x0,#8]
ffff8000113a9e8c: 6b1f003f cmp w1, wzr
ffff8000113a9e90: 540005ac b.gt ffff8000113a9f44 <generic_xdp_tx+0x164>
kfree_skb(skb);
ffff8000113a9e94: aa1503e0 mov x0, x21
ffff8000113a9e98: 94000000 bl 0 <kfree_skb>
ffff8000113a9e98: R_AARCH64_CALL26 kfree_skb
}
ffff8000113a9e9c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a9ea0: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a9ea4: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a9ea8: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113a9eac: d65f03c0 ret
__this_cpu_write(softnet_data.xmit.more, more);
ffff8000113a9eb0: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113a9eb0: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
const struct net_device_ops *ops = dev->netdev_ops;
ffff8000113a9eb4: f940fa62 ldr x2, [x19,#496]
__this_cpu_write(softnet_data.xmit.more, more);
ffff8000113a9eb8: 91000021 add x1, x1, #0x0
ffff8000113a9eb8: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113a9ebc: 9101e821 add x1, x1, #0x7a
ffff8000113a9ec0: d538d083 mrs x3, tpidr_el1
ffff8000113a9ec4: 38216860 strb w0, [x3,x1]
return ops->ndo_start_xmit(skb, dev);
ffff8000113a9ec8: f9401042 ldr x2, [x2,#32]
ffff8000113a9ecc: aa1503e0 mov x0, x21
ffff8000113a9ed0: aa1303e1 mov x1, x19
ffff8000113a9ed4: d63f0040 blr x2
if (rc == NETDEV_TX_OK)
ffff8000113a9ed8: 35000280 cbnz w0, ffff8000113a9f28 <generic_xdp_tx+0x148>
if (txq->xmit_lock_owner != -1)
ffff8000113a9edc: b9408680 ldr w0, [x20,#132]
ffff8000113a9ee0: 3100041f cmn w0, #0x1
ffff8000113a9ee4: 54000080 b.eq ffff8000113a9ef4 <generic_xdp_tx+0x114>
txq->trans_start = jiffies;
ffff8000113a9ee8: 90000000 adrp x0, 0 <jiffies>
ffff8000113a9ee8: R_AARCH64_ADR_PREL_PG_HI21 jiffies
ffff8000113a9eec: f9400000 ldr x0, [x0]
ffff8000113a9eec: R_AARCH64_LDST64_ABS_LO12_NC jiffies
ffff8000113a9ef0: f9004680 str x0, [x20,#136]
free_skb = false;
ffff8000113a9ef4: 52800001 mov w1, #0x0 // #0
ffff8000113a9ef8: 17ffffd4 b ffff8000113a9e48 <generic_xdp_tx+0x68>
ffff8000113a9efc: 52800022 mov w2, #0x1 // #1
ffff8000113a9f00: 91020280 add x0, x20, #0x80
ffff8000113a9f04: f9800011 prfm pstl1strm, [x0]
ffff8000113a9f08: 885ffc01 ldaxr w1, [x0]
ffff8000113a9f0c: 4a040023 eor w3, w1, w4
ffff8000113a9f10: 35000063 cbnz w3, ffff8000113a9f1c <generic_xdp_tx+0x13c>
ffff8000113a9f14: 88037c02 stxr w3, w2, [x0]
ffff8000113a9f18: 35ffff83 cbnz w3, ffff8000113a9f08 <generic_xdp_tx+0x128>
ffff8000113a9f1c: 350000e1 cbnz w1, ffff8000113a9f38 <generic_xdp_tx+0x158>
txq->xmit_lock_owner = cpu;
ffff8000113a9f20: b9008698 str w24, [x20,#132]
ffff8000113a9f24: 17ffffc5 b ffff8000113a9e38 <generic_xdp_tx+0x58>
if (likely(rc < NET_XMIT_MASK))
ffff8000113a9f28: 7100381f cmp w0, #0xe
ffff8000113a9f2c: 54fff8cc b.gt ffff8000113a9e44 <generic_xdp_tx+0x64>
ffff8000113a9f30: 52800001 mov w1, #0x0 // #0
ffff8000113a9f34: 17ffffc5 b ffff8000113a9e48 <generic_xdp_tx+0x68>
queued_spin_lock_slowpath(lock, val);
ffff8000113a9f38: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113a9f38: R_AARCH64_CALL26 queued_spin_lock_slowpath
txq->xmit_lock_owner = cpu;
ffff8000113a9f3c: b9008698 str w24, [x20,#132]
ffff8000113a9f40: 17ffffbe b ffff8000113a9e38 <generic_xdp_tx+0x58>
{ XDP_##x, #x },
#define __XDP_ACT_SYM_TAB \
__XDP_ACT_MAP(__XDP_ACT_SYM_FN) { -1, NULL }
__XDP_ACT_MAP(__XDP_ACT_TP_FN)
TRACE_EVENT(xdp_exception,
ffff8000113a9f44: 910002f7 add x23, x23, #0x0
ffff8000113a9f44: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113a9f48: d538d081 mrs x1, tpidr_el1
ffff8000113a9f4c: b8776821 ldr w1, [x1,x23]
ffff8000113a9f50: 52800803 mov w3, #0x40 // #64
ffff8000113a9f54: 1ac30c23 sdiv w3, w1, w3
ffff8000113a9f58: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113a9f58: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113a9f5c: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113a9f60: 91000042 add x2, x2, #0x0
ffff8000113a9f60: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113a9f64: f8626862 ldr x2, [x3,x2]
ffff8000113a9f68: 9ac12441 lsr x1, x2, x1
ffff8000113a9f6c: 3607f941 tbz w1, #0, ffff8000113a9e94 <generic_xdp_tx+0xb4>
ffff8000113a9f70: f9401014 ldr x20, [x0,#32]
ffff8000113a9f74: b4000134 cbz x20, ffff8000113a9f98 <generic_xdp_tx+0x1b8>
ffff8000113a9f78: f9400284 ldr x4, [x20]
ffff8000113a9f7c: f9400680 ldr x0, [x20,#8]
ffff8000113a9f80: aa1303e1 mov x1, x19
ffff8000113a9f84: aa1603e2 mov x2, x22
ffff8000113a9f88: 52800063 mov w3, #0x3 // #3
ffff8000113a9f8c: d63f0080 blr x4
ffff8000113a9f90: f8418e84 ldr x4, [x20,#24]!
ffff8000113a9f94: b5ffff44 cbnz x4, ffff8000113a9f7c <generic_xdp_tx+0x19c>
ffff8000113a9f98: 17ffffbf b ffff8000113a9e94 <generic_xdp_tx+0xb4>
ffff8000113a9f9c <do_xdp_generic.part.132>:
int do_xdp_generic(struct bpf_prog *xdp_prog, struct sk_buff *skb)
ffff8000113a9f9c: a9b47bfd stp x29, x30, [sp,#-192]!
ffff8000113a9fa0: 910003fd mov x29, sp
ffff8000113a9fa4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113a9fa8: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113a9fac: a90363f7 stp x23, x24, [sp,#48]
ffff8000113a9fb0: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113a9fb4: a90573fb stp x27, x28, [sp,#80]
ffff8000113a9fb8: aa0003f5 mov x21, x0
ffff8000113a9fbc: aa1e03e0 mov x0, x30
ffff8000113a9fc0: aa0103f3 mov x19, x1
ffff8000113a9fc4: 90000014 adrp x20, 0 <__stack_chk_guard>
ffff8000113a9fc4: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113a9fc8: 94000000 bl 0 <_mcount>
ffff8000113a9fc8: R_AARCH64_CALL26 _mcount
ffff8000113a9fcc: f9400285 ldr x5, [x20]
ffff8000113a9fcc: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
}
static inline bool skb_is_redirected(const struct sk_buff *skb)
{
#ifdef CONFIG_NET_REDIRECT
return skb->redirected;
ffff8000113a9fd0: 39420e64 ldrb w4, [x19,#131]
ffff8000113a9fd4: f9005fa5 str x5, [x29,#184]
if (skb_is_redirected(skb))
ffff8000113a9fd8: 363801a4 tbz w4, #7, ffff8000113aa00c <do_xdp_generic.part.132+0x70>
return XDP_PASS;
ffff8000113a9fdc: 52800040 mov w0, #0x2 // #2
}
ffff8000113a9fe0: f9405fa2 ldr x2, [x29,#184]
ffff8000113a9fe4: f9400281 ldr x1, [x20]
ffff8000113a9fe4: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113a9fe8: eb01005f cmp x2, x1
ffff8000113a9fec: 54001b41 b.ne ffff8000113aa354 <do_xdp_generic.part.132+0x3b8>
ffff8000113a9ff0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113a9ff4: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113a9ff8: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113a9ffc: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113aa000: a94573fb ldp x27, x28, [sp,#80]
ffff8000113aa004: a8cc7bfd ldp x29, x30, [sp],#192
ffff8000113aa008: d65f03c0 ret
return skb->cloned &&
ffff8000113aa00c: 3941fa60 ldrb w0, [x19,#126]
ffff8000113aa010: 360003e0 tbz w0, #0, ffff8000113aa08c <do_xdp_generic.part.132+0xf0>
static inline int skb_cloned(const struct sk_buff *skb)
ffff8000113aa014: b940be64 ldr w4, [x19,#188]
ffff8000113aa018: f9406263 ldr x3, [x19,#192]
return skb->head + skb->end;
ffff8000113aa01c: 8b244060 add x0, x3, w4, uxtw
ffff8000113aa020: b9402000 ldr w0, [x0,#32]
(atomic_read(&skb_shinfo(skb)->dataref) & SKB_DATAREF_MASK) != 1;
ffff8000113aa024: 12003c00 and w0, w0, #0xffff
return skb->cloned &&
ffff8000113aa028: 7100041f cmp w0, #0x1
ffff8000113aa02c: 54000320 b.eq ffff8000113aa090 <do_xdp_generic.part.132+0xf4>
ffff8000113aa030: f9406661 ldr x1, [x19,#200]
ffff8000113aa034: b9407660 ldr w0, [x19,#116]
ffff8000113aa038: 4b030021 sub w1, w1, w3
int troom = skb->tail + skb->data_len - skb->end;
ffff8000113aa03c: b940ba62 ldr w2, [x19,#184]
int hroom = XDP_PACKET_HEADROOM - skb_headroom(skb);
ffff8000113aa040: 52802003 mov w3, #0x100 // #256
ffff8000113aa044: 4b010061 sub w1, w3, w1
int troom = skb->tail + skb->data_len - skb->end;
ffff8000113aa048: 0b020000 add w0, w0, w2
if (pskb_expand_head(skb,
ffff8000113aa04c: 6b1f003f cmp w1, wzr
int troom = skb->tail + skb->data_len - skb->end;
ffff8000113aa050: 4b040000 sub w0, w0, w4
if (pskb_expand_head(skb,
ffff8000113aa054: 540010cd b.le ffff8000113aa26c <do_xdp_generic.part.132+0x2d0>
hroom > 0 ? ALIGN(hroom, NET_SKB_PAD) : 0,
ffff8000113aa058: 1100fc21 add w1, w1, #0x3f
if (pskb_expand_head(skb,
ffff8000113aa05c: 121a6421 and w1, w1, #0xffffffc0
ffff8000113aa060: 11020002 add w2, w0, #0x80
ffff8000113aa064: 6b1f001f cmp w0, wzr
ffff8000113aa068: 1a9fc042 csel w2, w2, wzr, gt
ffff8000113aa06c: aa1303e0 mov x0, x19
ffff8000113aa070: 52814403 mov w3, #0xa20 // #2592
ffff8000113aa074: 94000000 bl 0 <pskb_expand_head>
ffff8000113aa074: R_AARCH64_CALL26 pskb_expand_head
ffff8000113aa078: 340001e0 cbz w0, ffff8000113aa0b4 <do_xdp_generic.part.132+0x118>
kfree_skb(skb);
ffff8000113aa07c: aa1303e0 mov x0, x19
ffff8000113aa080: 94000000 bl 0 <kfree_skb>
ffff8000113aa080: R_AARCH64_CALL26 kfree_skb
return XDP_DROP;
ffff8000113aa084: 52800020 mov w0, #0x1 // #1
ffff8000113aa088: 17ffffd6 b ffff8000113a9fe0 <do_xdp_generic.part.132+0x44>
ffff8000113aa08c: f9406263 ldr x3, [x19,#192]
static u32 netif_receive_generic_xdp(struct sk_buff *skb,
ffff8000113aa090: b9407660 ldr w0, [x19,#116]
if (skb_cloned(skb) || skb_is_nonlinear(skb) ||
ffff8000113aa094: 35000e40 cbnz w0, ffff8000113aa25c <do_xdp_generic.part.132+0x2c0>
static u32 netif_receive_generic_xdp(struct sk_buff *skb,
ffff8000113aa098: f9406662 ldr x2, [x19,#200]
return skb->data - skb->head;
ffff8000113aa09c: cb030044 sub x4, x2, x3
if (skb_cloned(skb) || skb_is_nonlinear(skb) ||
ffff8000113aa0a0: 7103fc9f cmp w4, #0xff
ffff8000113aa0a4: 2a0403e1 mov w1, w4
ffff8000113aa0a8: 54000108 b.hi ffff8000113aa0c8 <do_xdp_generic.part.132+0x12c>
ffff8000113aa0ac: b940be64 ldr w4, [x19,#188]
ffff8000113aa0b0: 17ffffe3 b ffff8000113aa03c <do_xdp_generic.part.132+0xa0>
static inline int skb_linearize(struct sk_buff *skb)
ffff8000113aa0b4: b9407661 ldr w1, [x19,#116]
return skb_is_nonlinear(skb) ? __skb_linearize(skb) : 0;
ffff8000113aa0b8: 35001301 cbnz w1, ffff8000113aa318 <do_xdp_generic.part.132+0x37c>
ffff8000113aa0bc: f9406662 ldr x2, [x19,#200]
ffff8000113aa0c0: f9406263 ldr x3, [x19,#192]
ffff8000113aa0c4: cb030044 sub x4, x2, x3
return skb->head + skb->mac_header;
ffff8000113aa0c8: 79416e78 ldrh w24, [x19,#182]
return skb->len - skb->data_len;
ffff8000113aa0cc: b940727c ldr w28, [x19,#112]
return skb->head + skb->mac_header;
ffff8000113aa0d0: 8b180063 add x3, x3, x24
mac_len = skb->data - skb_mac_header(skb);
ffff8000113aa0d4: cb030058 sub x24, x2, x3
ffff8000113aa0d8: 92407f19 and x25, x24, #0xffffffff
xdp->data = skb->data - mac_len;
ffff8000113aa0dc: cb1903f9 neg x25, x25
return skb->len - skb->data_len;
ffff8000113aa0e0: 4b000380 sub w0, w28, w0
ffff8000113aa0e4: 8b190057 add x23, x2, x25
hlen = skb_headlen(skb) + mac_len;
ffff8000113aa0e8: 0b18001c add w28, w0, w24
xdp->data_end = xdp->data + hlen;
ffff8000113aa0ec: 8b3cc2fc add x28, x23, w28, sxtw
xdp->data_hard_start = skb->data - skb_headroom(skb);
ffff8000113aa0f0: cb244044 sub x4, x2, w4, uxtw
struct net_device *dev = skb->dev;
ffff8000113aa0f4: f9400a61 ldr x1, [x19,#16]
static struct netdev_rx_queue *netif_get_rxqueue(struct sk_buff *skb)
ffff8000113aa0f8: 7940fa60 ldrh w0, [x19,#124]
xdp->data_meta = xdp->data;
ffff8000113aa0fc: f9004fb7 str x23, [x29,#152]
xdp->data_end = xdp->data + hlen;
ffff8000113aa100: f9004bbc str x28, [x29,#144]
xdp->data_hard_start = skb->data - skb_headroom(skb);
ffff8000113aa104: f90053a4 str x4, [x29,#160]
xdp->data = skb->data - mac_len;
ffff8000113aa108: f90047b7 str x23, [x29,#136]
{
#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && BITS_PER_LONG == 64
#ifdef __BIG_ENDIAN
return 0x01 & ((*(const u64 *)addr) >> 56);
#else
return 0x01 & (*(const u64 *)addr);
ffff8000113aa10c: f879685b ldr x27, [x2,x25]
orig_eth_type = eth->h_proto;
ffff8000113aa110: 79401afa ldrh w26, [x23,#12]
rxqueue = dev->_rx;
ffff8000113aa114: f9419036 ldr x22, [x1,#800]
if (skb_rx_queue_recorded(skb)) {
ffff8000113aa118: 35000ba0 cbnz w0, ffff8000113aa28c <do_xdp_generic.part.132+0x2f0>
ffff8000113aa11c: 90000000 adrp x0, 0 <bpf_stats_enabled_key>
ffff8000113aa11c: R_AARCH64_ADR_PREL_PG_HI21 bpf_stats_enabled_key
ffff8000113aa120: b9400000 ldr w0, [x0]
ffff8000113aa120: R_AARCH64_LDST32_ABS_LO12_NC bpf_stats_enabled_key
xdp->rxq = &rxqueue->xdp_rxq;
ffff8000113aa124: 910202d6 add x22, x22, #0x80
ffff8000113aa128: f9005bb6 str x22, [x29,#176]
* can be released while still running, or map elements could be
* freed early while still having concurrent users. XDP fastpath
* already takes rcu_read_lock() when fetching the program, so
* it's not necessary here anymore.
*/
return __BPF_PROG_RUN(prog, xdp, BPF_DISPATCHER_FUNC(xdp));
ffff8000113aa12c: 6b1f001f cmp w0, wzr
ffff8000113aa130: 5400114c b.gt ffff8000113aa358 <do_xdp_generic.part.132+0x3bc>
ffff8000113aa134: f9401aa2 ldr x2, [x21,#48]
ffff8000113aa138: 910223a0 add x0, x29, #0x88
ffff8000113aa13c: 9100e2a1 add x1, x21, #0x38
ffff8000113aa140: 94000000 bl 0 <bpf_dispatcher_xdp_func>
ffff8000113aa140: R_AARCH64_CALL26 bpf_dispatcher_xdp_func
ffff8000113aa144: 2a0003f6 mov w22, w0
off = xdp->data - orig_data;
ffff8000113aa148: f94047a0 ldr x0, [x29,#136]
ffff8000113aa14c: cb170017 sub x23, x0, x23
if (off) {
ffff8000113aa150: 6b1f02ff cmp w23, wzr
ffff8000113aa154: 540001e0 b.eq ffff8000113aa190 <do_xdp_generic.part.132+0x1f4>
if (off > 0)
ffff8000113aa158: 54000eac b.gt ffff8000113aa32c <do_xdp_generic.part.132+0x390>
skb->data -= len;
ffff8000113aa15c: f9406661 ldr x1, [x19,#200]
skb->len += len;
ffff8000113aa160: b9407263 ldr w3, [x19,#112]
__skb_push(skb, -off);
ffff8000113aa164: 4b1703e2 neg w2, w23
skb->data -= len;
ffff8000113aa168: cb22c021 sub x1, x1, w2, sxtw
skb->len += len;
ffff8000113aa16c: 0b020062 add w2, w3, w2
skb->data -= len;
ffff8000113aa170: f9006661 str x1, [x19,#200]
skb->len += len;
ffff8000113aa174: b9007262 str w2, [x19,#112]
skb->mac_header += off;
ffff8000113aa178: 79416e63 ldrh w3, [x19,#182]
skb->network_header = skb->data - skb->head;
ffff8000113aa17c: f9406262 ldr x2, [x19,#192]
ffff8000113aa180: 0b0302f7 add w23, w23, w3
ffff8000113aa184: cb020021 sub x1, x1, x2
ffff8000113aa188: 79016e77 strh w23, [x19,#182]
ffff8000113aa18c: 79016a61 strh w1, [x19,#180]
off = orig_data_end - xdp->data_end;
ffff8000113aa190: f9404ba1 ldr x1, [x29,#144]
ffff8000113aa194: cb01039c sub x28, x28, x1
if (off != 0) {
ffff8000113aa198: 3400015c cbz w28, ffff8000113aa1c0 <do_xdp_generic.part.132+0x224>
skb->tail = skb->data - skb->head;
ffff8000113aa19c: f9406664 ldr x4, [x19,#200]
ffff8000113aa1a0: f9406263 ldr x3, [x19,#192]
skb->len -= off;
ffff8000113aa1a4: b9407262 ldr w2, [x19,#112]
skb_set_tail_pointer(skb, xdp->data_end - xdp->data);
ffff8000113aa1a8: cb000021 sub x1, x1, x0
ffff8000113aa1ac: cb030083 sub x3, x4, x3
skb->tail += offset;
ffff8000113aa1b0: 0b030021 add w1, w1, w3
skb->len -= off;
ffff8000113aa1b4: 4b1c005c sub w28, w2, w28
ffff8000113aa1b8: b900ba61 str w1, [x19,#184]
ffff8000113aa1bc: b900727c str w28, [x19,#112]
if ((orig_eth_type != eth->h_proto) ||
ffff8000113aa1c0: 79401801 ldrh w1, [x0,#12]
ffff8000113aa1c4: 6b1a003f cmp w1, w26
ffff8000113aa1c8: 54000720 b.eq ffff8000113aa2ac <do_xdp_generic.part.132+0x310>
skb->data -= len;
ffff8000113aa1cc: f9406662 ldr x2, [x19,#200]
skb->len += len;
ffff8000113aa1d0: b9407260 ldr w0, [x19,#112]
skb->data -= len;
ffff8000113aa1d4: d1003842 sub x2, x2, #0xe
skb->len += len;
ffff8000113aa1d8: 11003800 add w0, w0, #0xe
skb->protocol = eth_type_trans(skb, skb->dev);
ffff8000113aa1dc: f9400a61 ldr x1, [x19,#16]
ffff8000113aa1e0: b9007260 str w0, [x19,#112]
skb->data -= len;
ffff8000113aa1e4: f9006662 str x2, [x19,#200]
ffff8000113aa1e8: aa1303e0 mov x0, x19
ffff8000113aa1ec: 94000000 bl 0 <eth_type_trans>
ffff8000113aa1ec: R_AARCH64_CALL26 eth_type_trans
ffff8000113aa1f0: 79016260 strh w0, [x19,#176]
switch (act) {
ffff8000113aa1f4: 710012df cmp w22, #0x4
ffff8000113aa1f8: 540003e9 b.ls ffff8000113aa274 <do_xdp_generic.part.132+0x2d8>
bpf_warn_invalid_xdp_action(act);
ffff8000113aa1fc: 2a1603e0 mov w0, w22
ffff8000113aa200: 94000000 bl 0 <bpf_warn_invalid_xdp_action>
ffff8000113aa200: R_AARCH64_CALL26 bpf_warn_invalid_xdp_action
ffff8000113aa204: 90000000 adrp x0, 0 <__tracepoint_xdp_exception>
ffff8000113aa204: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_xdp_exception
ffff8000113aa208: 91000000 add x0, x0, #0x0
ffff8000113aa208: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_xdp_exception
ffff8000113aa20c: b9400801 ldr w1, [x0,#8]
trace_xdp_exception(skb->dev, xdp_prog, act);
ffff8000113aa210: f9400a78 ldr x24, [x19,#16]
ffff8000113aa214: 6b1f003f cmp w1, wzr
ffff8000113aa218: 54000f2c b.gt ffff8000113aa3fc <do_xdp_generic.part.132+0x460>
kfree_skb(skb);
ffff8000113aa21c: aa1303e0 mov x0, x19
ffff8000113aa220: 94000000 bl 0 <kfree_skb>
ffff8000113aa220: R_AARCH64_CALL26 kfree_skb
if (act != XDP_PASS) {
ffff8000113aa224: 71000adf cmp w22, #0x2
ffff8000113aa228: 54ffeda0 b.eq ffff8000113a9fdc <do_xdp_generic.part.132+0x40>
switch (act) {
ffff8000113aa22c: 71000edf cmp w22, #0x3
ffff8000113aa230: 540006a0 b.eq ffff8000113aa304 <do_xdp_generic.part.132+0x368>
ffff8000113aa234: 710012df cmp w22, #0x4
ffff8000113aa238: 54fff261 b.ne ffff8000113aa084 <do_xdp_generic.part.132+0xe8>
err = xdp_do_generic_redirect(skb->dev, skb,
ffff8000113aa23c: f9400a60 ldr x0, [x19,#16]
ffff8000113aa240: aa1303e1 mov x1, x19
ffff8000113aa244: 910223a2 add x2, x29, #0x88
ffff8000113aa248: aa1503e3 mov x3, x21
ffff8000113aa24c: 94000000 bl 0 <xdp_do_generic_redirect>
ffff8000113aa24c: R_AARCH64_CALL26 xdp_do_generic_redirect
if (err)
ffff8000113aa250: 35fff160 cbnz w0, ffff8000113aa07c <do_xdp_generic.part.132+0xe0>
return XDP_DROP;
ffff8000113aa254: 52800020 mov w0, #0x1 // #1
ffff8000113aa258: 17ffff62 b ffff8000113a9fe0 <do_xdp_generic.part.132+0x44>
ffff8000113aa25c: f9406661 ldr x1, [x19,#200]
ffff8000113aa260: b940be64 ldr w4, [x19,#188]
ffff8000113aa264: 4b030021 sub w1, w1, w3
ffff8000113aa268: 17ffff75 b ffff8000113aa03c <do_xdp_generic.part.132+0xa0>
if (pskb_expand_head(skb,
ffff8000113aa26c: 52800001 mov w1, #0x0 // #0
ffff8000113aa270: 17ffff7c b ffff8000113aa060 <do_xdp_generic.part.132+0xc4>
switch (act) {
ffff8000113aa274: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113aa274: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x14
ffff8000113aa278: 91000000 add x0, x0, #0x0
ffff8000113aa278: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x14
ffff8000113aa27c: 78765802 ldrh w2, [x0,w22,uxtw #1]
ffff8000113aa280: 10000061 adr x1, ffff8000113aa28c <do_xdp_generic.part.132+0x2f0>
ffff8000113aa284: 8b22a822 add x2, x1, w2, sxth #2
ffff8000113aa288: d61f0040 br x2
return skb->queue_mapping - 1;
ffff8000113aa28c: 51000400 sub w0, w0, #0x1
if (unlikely(index >= dev->real_num_rx_queues)) {
ffff8000113aa290: b9432c23 ldr w3, [x1,#812]
ffff8000113aa294: 53003c02 uxth w2, w0
ffff8000113aa298: 6b03005f cmp w2, w3
ffff8000113aa29c: 54000962 b.cs ffff8000113aa3c8 <do_xdp_generic.part.132+0x42c>
rxqueue += index;
ffff8000113aa2a0: d3783c42 ubfiz x2, x2, #8, #16
ffff8000113aa2a4: 8b0202d6 add x22, x22, x2
ffff8000113aa2a8: 17ffff9d b ffff8000113aa11c <do_xdp_generic.part.132+0x180>
ffff8000113aa2ac: f9400000 ldr x0, [x0]
if ((orig_eth_type != eth->h_proto) ||
ffff8000113aa2b0: 1200037b and w27, w27, #0x1
ffff8000113aa2b4: 12000000 and w0, w0, #0x1
ffff8000113aa2b8: 6b00037f cmp w27, w0
ffff8000113aa2bc: 54fff881 b.ne ffff8000113aa1cc <do_xdp_generic.part.132+0x230>
ffff8000113aa2c0: 17ffffcd b ffff8000113aa1f4 <do_xdp_generic.part.132+0x258>
metalen = xdp->data - xdp->data_meta;
ffff8000113aa2c4: f9404fa0 ldr x0, [x29,#152]
ffff8000113aa2c8: f94047a1 ldr x1, [x29,#136]
ffff8000113aa2cc: cb000020 sub x0, x1, x0
if (metalen)
ffff8000113aa2d0: 34ffe860 cbz w0, ffff8000113a9fdc <do_xdp_generic.part.132+0x40>
return skb->head + skb->end;
ffff8000113aa2d4: b940be61 ldr w1, [x19,#188]
skb_shinfo(skb)->meta_len = meta_len;
ffff8000113aa2d8: f9406262 ldr x2, [x19,#192]
ffff8000113aa2dc: 8b010041 add x1, x2, x1
skb_metadata_set(skb, metalen);
ffff8000113aa2e0: 39000420 strb w0, [x1,#1]
ffff8000113aa2e4: 17ffff3e b ffff8000113a9fdc <do_xdp_generic.part.132+0x40>
skb->data -= len;
ffff8000113aa2e8: f9406661 ldr x1, [x19,#200]
skb->len += len;
ffff8000113aa2ec: b9407260 ldr w0, [x19,#112]
skb->data -= len;
ffff8000113aa2f0: 8b190039 add x25, x1, x25
skb->len += len;
ffff8000113aa2f4: 0b180018 add w24, w0, w24
skb->data -= len;
ffff8000113aa2f8: f9006679 str x25, [x19,#200]
skb->len += len;
ffff8000113aa2fc: b9007278 str w24, [x19,#112]
ffff8000113aa300: 17ffffcb b ffff8000113aa22c <do_xdp_generic.part.132+0x290>
generic_xdp_tx(skb, xdp_prog);
ffff8000113aa304: aa1303e0 mov x0, x19
ffff8000113aa308: aa1503e1 mov x1, x21
ffff8000113aa30c: 94000000 bl ffff8000113a9de0 <generic_xdp_tx>
ffff8000113aa30c: R_AARCH64_CALL26 generic_xdp_tx
return XDP_DROP;
ffff8000113aa310: 52800020 mov w0, #0x1 // #1
ffff8000113aa314: 17ffff33 b ffff8000113a9fe0 <do_xdp_generic.part.132+0x44>
return __pskb_pull_tail(skb, skb->data_len) ? 0 : -ENOMEM;
ffff8000113aa318: aa1303e0 mov x0, x19
ffff8000113aa31c: 94000000 bl 0 <__pskb_pull_tail>
ffff8000113aa31c: R_AARCH64_CALL26 __pskb_pull_tail
ffff8000113aa320: b4ffeae0 cbz x0, ffff8000113aa07c <do_xdp_generic.part.132+0xe0>
ffff8000113aa324: b9407660 ldr w0, [x19,#116]
ffff8000113aa328: 17ffff65 b ffff8000113aa0bc <do_xdp_generic.part.132+0x120>
skb->len -= len;
ffff8000113aa32c: b9407261 ldr w1, [x19,#112]
BUG_ON(skb->len < skb->data_len);
ffff8000113aa330: b9407662 ldr w2, [x19,#116]
skb->len -= len;
ffff8000113aa334: 4b170021 sub w1, w1, w23
ffff8000113aa338: b9007261 str w1, [x19,#112]
BUG_ON(skb->len < skb->data_len);
ffff8000113aa33c: 6b02003f cmp w1, w2
ffff8000113aa340: 540008c3 b.cc ffff8000113aa458 <do_xdp_generic.part.132+0x4bc>
return skb->data += len;
ffff8000113aa344: f9406661 ldr x1, [x19,#200]
ffff8000113aa348: 8b374021 add x1, x1, w23, uxtw
ffff8000113aa34c: f9006661 str x1, [x19,#200]
ffff8000113aa350: 17ffff8a b ffff8000113aa178 <do_xdp_generic.part.132+0x1dc>
}
ffff8000113aa354: 94000000 bl 0 <__stack_chk_fail>
ffff8000113aa354: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113aa358: 94000000 bl 0 <sched_clock>
ffff8000113aa358: R_AARCH64_CALL26 sched_clock
ffff8000113aa35c: f9401aa2 ldr x2, [x21,#48]
ffff8000113aa360: aa0003e3 mov x3, x0
ffff8000113aa364: 9100e2a1 add x1, x21, #0x38
ffff8000113aa368: 910223a0 add x0, x29, #0x88
ffff8000113aa36c: f90037a3 str x3, [x29,#104]
ffff8000113aa370: 94000000 bl 0 <bpf_dispatcher_xdp_func>
ffff8000113aa370: R_AARCH64_CALL26 bpf_dispatcher_xdp_func
ffff8000113aa374: 2a0003f6 mov w22, w0
ffff8000113aa378: f94012a0 ldr x0, [x21,#32]
ffff8000113aa37c: f940fc01 ldr x1, [x0,#504]
ffff8000113aa380: f9003ba1 str x1, [x29,#112]
ffff8000113aa384: 97ffcffe bl ffff80001139e37c <__my_cpu_offset>
ffff8000113aa388: f9403ba1 ldr x1, [x29,#112]
ffff8000113aa38c: f8616804 ldr x4, [x0,x1]
ffff8000113aa390: 8b010002 add x2, x0, x1
ffff8000113aa394: 91000484 add x4, x4, #0x1
ffff8000113aa398: f8216804 str x4, [x0,x1]
ffff8000113aa39c: f9400441 ldr x1, [x2,#8]
ffff8000113aa3a0: f9003fa2 str x2, [x29,#120]
ffff8000113aa3a4: f9003ba1 str x1, [x29,#112]
ffff8000113aa3a8: 94000000 bl 0 <sched_clock>
ffff8000113aa3a8: R_AARCH64_CALL26 sched_clock
ffff8000113aa3ac: f9403ba1 ldr x1, [x29,#112]
ffff8000113aa3b0: f94037a3 ldr x3, [x29,#104]
ffff8000113aa3b4: 8b010000 add x0, x0, x1
ffff8000113aa3b8: f9403fa2 ldr x2, [x29,#120]
ffff8000113aa3bc: cb030003 sub x3, x0, x3
ffff8000113aa3c0: f9000443 str x3, [x2,#8]
ffff8000113aa3c4: 17ffff61 b ffff8000113aa148 <do_xdp_generic.part.132+0x1ac>
WARN_ONCE(dev->real_num_rx_queues > 1,
ffff8000113aa3c8: 7100047f cmp w3, #0x1
ffff8000113aa3cc: 54ffea89 b.ls ffff8000113aa11c <do_xdp_generic.part.132+0x180>
ffff8000113aa3d0: 90000004 adrp x4, ffff80001139e37c <__my_cpu_offset>
ffff8000113aa3d0: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113aa3d4: 91000084 add x4, x4, #0x0
ffff8000113aa3d4: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113aa3d8: 39405480 ldrb w0, [x4,#21]
ffff8000113aa3dc: 35ffea00 cbnz w0, ffff8000113aa11c <do_xdp_generic.part.132+0x180>
ffff8000113aa3e0: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113aa3e0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xe8
ffff8000113aa3e4: 52800025 mov w5, #0x1 // #1
ffff8000113aa3e8: 91000000 add x0, x0, #0x0
ffff8000113aa3e8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xe8
ffff8000113aa3ec: 39005485 strb w5, [x4,#21]
ffff8000113aa3f0: 94000000 bl 0 <__warn_printk>
ffff8000113aa3f0: R_AARCH64_CALL26 __warn_printk
ffff8000113aa3f4: d4210000 brk #0x800
ffff8000113aa3f8: 17ffff49 b ffff8000113aa11c <do_xdp_generic.part.132+0x180>
ffff8000113aa3fc: 90000001 adrp x1, 0 <cpu_number>
ffff8000113aa3fc: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113aa400: d538d082 mrs x2, tpidr_el1
ffff8000113aa404: 91000021 add x1, x1, #0x0
ffff8000113aa404: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113aa408: b8616841 ldr w1, [x2,x1]
ffff8000113aa40c: 52800803 mov w3, #0x40 // #64
ffff8000113aa410: 1ac30c23 sdiv w3, w1, w3
ffff8000113aa414: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113aa414: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113aa418: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113aa41c: 91000042 add x2, x2, #0x0
ffff8000113aa41c: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113aa420: f8626862 ldr x2, [x3,x2]
ffff8000113aa424: 9ac12441 lsr x1, x2, x1
ffff8000113aa428: 3607efa1 tbz w1, #0, ffff8000113aa21c <do_xdp_generic.part.132+0x280>
ffff8000113aa42c: f9401017 ldr x23, [x0,#32]
ffff8000113aa430: b4000137 cbz x23, ffff8000113aa454 <do_xdp_generic.part.132+0x4b8>
ffff8000113aa434: f94002e4 ldr x4, [x23]
ffff8000113aa438: f94006e0 ldr x0, [x23,#8]
ffff8000113aa43c: aa1803e1 mov x1, x24
ffff8000113aa440: aa1503e2 mov x2, x21
ffff8000113aa444: 2a1603e3 mov w3, w22
ffff8000113aa448: d63f0080 blr x4
ffff8000113aa44c: f8418ee4 ldr x4, [x23,#24]!
ffff8000113aa450: b5ffff44 cbnz x4, ffff8000113aa438 <do_xdp_generic.part.132+0x49c>
ffff8000113aa454: 17ffff72 b ffff8000113aa21c <do_xdp_generic.part.132+0x280>
ffff8000113aa458: 94000000 bl ffff80001139e37c <__my_cpu_offset>
ffff8000113aa458: R_AARCH64_CALL26 .text.unlikely+0xa0
ffff8000113aa45c <do_xdp_generic>:
{
ffff8000113aa45c: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113aa460: 910003fd mov x29, sp
ffff8000113aa464: f9000bf3 str x19, [sp,#16]
ffff8000113aa468: aa0003f3 mov x19, x0
ffff8000113aa46c: aa1e03e0 mov x0, x30
ffff8000113aa470: f90017a1 str x1, [x29,#40]
ffff8000113aa474: 94000000 bl 0 <_mcount>
ffff8000113aa474: R_AARCH64_CALL26 _mcount
return XDP_PASS;
ffff8000113aa478: 52800040 mov w0, #0x2 // #2
if (xdp_prog) {
ffff8000113aa47c: f94017a1 ldr x1, [x29,#40]
ffff8000113aa480: b4000073 cbz x19, ffff8000113aa48c <do_xdp_generic+0x30>
ffff8000113aa484: aa1303e0 mov x0, x19
ffff8000113aa488: 97fffec5 bl ffff8000113a9f9c <do_xdp_generic.part.132>
}
ffff8000113aa48c: f9400bf3 ldr x19, [sp,#16]
ffff8000113aa490: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113aa494: d65f03c0 ret
ffff8000113aa498 <__netif_receive_skb_core>:
{
ffff8000113aa498: a9b47bfd stp x29, x30, [sp,#-192]!
ffff8000113aa49c: 910003fd mov x29, sp
ffff8000113aa4a0: a90153f3 stp x19, x20, [sp,#16]
ffff8000113aa4a4: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113aa4a8: a90363f7 stp x23, x24, [sp,#48]
ffff8000113aa4ac: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113aa4b0: a90573fb stp x27, x28, [sp,#80]
ffff8000113aa4b4: f9003fa0 str x0, [x29,#120]
ffff8000113aa4b8: aa1e03e0 mov x0, x30
ffff8000113aa4bc: 9000001a adrp x26, 0 <__stack_chk_guard>
ffff8000113aa4bc: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113aa4c0: 53001c39 uxtb w25, w1
ffff8000113aa4c4: f90037a2 str x2, [x29,#104]
ffff8000113aa4c8: 94000000 bl 0 <_mcount>
ffff8000113aa4c8: R_AARCH64_CALL26 _mcount
ffff8000113aa4cc: f9400340 ldr x0, [x26]
ffff8000113aa4cc: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113aa4d0: 90000017 adrp x23, ffff80001139e37c <__my_cpu_offset>
ffff8000113aa4d0: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113aa4d4: f9005fa0 str x0, [x29,#184]
ffff8000113aa4d8: 910002e0 add x0, x23, #0x0
ffff8000113aa4d8: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113aa4dc: b9434800 ldr w0, [x0,#840]
ffff8000113aa4e0: f9403fb4 ldr x20, [x29,#120]
net_timestamp_check(!netdev_tstamp_prequeue, skb);
ffff8000113aa4e4: 6b1f001f cmp w0, wzr
ffff8000113aa4e8: 5400438c b.gt ffff8000113aad58 <__netif_receive_skb_core+0x8c0>
ffff8000113aa4ec: 90000001 adrp x1, 0 <__tracepoint_netif_receive_skb>
ffff8000113aa4ec: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_netif_receive_skb
ffff8000113aa4f0: 91000021 add x1, x1, #0x0
ffff8000113aa4f0: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_netif_receive_skb
ffff8000113aa4f4: b9400820 ldr w0, [x1,#8]
ffff8000113aa4f8: 6b1f001f cmp w0, wzr
ffff8000113aa4fc: 54003fcc b.gt ffff8000113aacf4 <__netif_receive_skb_core+0x85c>
ffff8000113aa500: aa1403e0 mov x0, x20
skb->network_header = skb->data - skb->head;
ffff8000113aa504: f9406402 ldr x2, [x0,#200]
ffff8000113aa508: f9406001 ldr x1, [x0,#192]
if (!skb_transport_header_was_set(skb))
ffff8000113aa50c: 79416403 ldrh w3, [x0,#178]
ffff8000113aa510: cb010041 sub x1, x2, x1
ffff8000113aa514: 53003c21 uxth w1, w1
ffff8000113aa518: 529fffe2 mov w2, #0xffff // #65535
ffff8000113aa51c: 79016801 strh w1, [x0,#180]
ffff8000113aa520: 6b02007f cmp w3, w2
orig_dev = skb->dev;
ffff8000113aa524: f9400813 ldr x19, [x0,#16]
if (!skb_transport_header_was_set(skb))
ffff8000113aa528: 54003260 b.eq ffff8000113aab74 <__netif_receive_skb_core+0x6dc>
skb->mac_len = skb->network_header - skb->mac_header;
ffff8000113aa52c: 79416c02 ldrh w2, [x0,#182]
ffff8000113aa530: 90000016 adrp x22, ffff80001139e37c <__my_cpu_offset>
ffff8000113aa530: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113aa534: 4b020021 sub w1, w1, w2
__this_cpu_inc(softnet_data.processed);
ffff8000113aa538: 90000015 adrp x21, ffff80001139e37c <__my_cpu_offset>
ffff8000113aa538: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
ffff8000113aa53c: 910002d6 add x22, x22, #0x0
ffff8000113aa53c: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113aa540: 910002b5 add x21, x21, #0x0
ffff8000113aa540: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113aa544: 7900f001 strh w1, [x0,#120]
int ret = NET_RX_DROP;
ffff8000113aa548: 52800034 mov w20, #0x1 // #1
orig_dev = skb->dev;
ffff8000113aa54c: aa1303e1 mov x1, x19
bool deliver_exact = false;
ffff8000113aa550: b90077bf str wzr, [x29,#116]
ffff8000113aa554: 912002d6 add x22, x22, #0x800
__this_cpu_inc(softnet_data.processed);
ffff8000113aa558: 9100a2b5 add x21, x21, #0x28
skb->skb_iif = skb->dev->ifindex;
ffff8000113aa55c: b9410022 ldr w2, [x1,#256]
ffff8000113aa560: 910002e1 add x1, x23, #0x0
ffff8000113aa560: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113aa564: b9009002 str w2, [x0,#144]
ffff8000113aa568: d538d080 mrs x0, tpidr_el1
__this_cpu_inc(softnet_data.processed);
ffff8000113aa56c: b8756802 ldr w2, [x0,x21]
ffff8000113aa570: 11000442 add w2, w2, #0x1
ffff8000113aa574: b8356802 str w2, [x0,x21]
ffff8000113aa578: b9435820 ldr w0, [x1,#856]
if (static_branch_unlikely(&generic_xdp_needed_key)) {
ffff8000113aa57c: 6b1f001f cmp w0, wzr
ffff8000113aa580: 540039ec b.gt ffff8000113aacbc <__netif_receive_skb_core+0x824>
ffff8000113aa584: f9403fbc ldr x28, [x29,#120]
if (skb->protocol == cpu_to_be16(ETH_P_8021Q) ||
ffff8000113aa588: 79416380 ldrh w0, [x28,#176]
ffff8000113aa58c: 52951101 mov w1, #0xa888 // #43144
ffff8000113aa590: 6b01001f cmp w0, w1
ffff8000113aa594: 540028e0 b.eq ffff8000113aaab0 <__netif_receive_skb_core+0x618>
ffff8000113aa598: 7102041f cmp w0, #0x81
ffff8000113aa59c: 540028a0 b.eq ffff8000113aaab0 <__netif_receive_skb_core+0x618>
if (skb->tc_skip_classify) {
ffff8000113aa5a0: 39420f80 ldrb w0, [x28,#131]
ffff8000113aa5a4: 36281a00 tbz w0, #5, ffff8000113aa8e4 <__netif_receive_skb_core+0x44c>
skb->tc_skip_classify = 0;
ffff8000113aa5a8: 121a7800 and w0, w0, #0xffffffdf
ffff8000113aa5ac: 39020f80 strb w0, [x28,#131]
ffff8000113aa5b0: d2800018 mov x24, #0x0 // #0
if (pfmemalloc && !skb_pfmemalloc_protocol(skb))
ffff8000113aa5b4: 35001ad9 cbnz w25, ffff8000113aa90c <__netif_receive_skb_core+0x474>
if (skb_vlan_tag_present(skb)) {
ffff8000113aa5b8: 39420b80 ldrb w0, [x28,#130]
ffff8000113aa5bc: 360014c0 tbz w0, #0, ffff8000113aa854 <__netif_receive_skb_core+0x3bc>
if (pt_prev) {
ffff8000113aa5c0: b4000378 cbz x24, ffff8000113aa62c <__netif_receive_skb_core+0x194>
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113aa5c4: b400011c cbz x28, ffff8000113aa5e4 <__netif_receive_skb_core+0x14c>
return skb->head + skb->end;
ffff8000113aa5c8: f9406381 ldr x1, [x28,#192]
ffff8000113aa5cc: b940bf80 ldr w0, [x28,#188]
ffff8000113aa5d0: 8b000020 add x0, x1, x0
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113aa5d4: 39400c01 ldrb w1, [x0,#3]
ffff8000113aa5d8: 36180061 tbz w1, #3, ffff8000113aa5e4 <__netif_receive_skb_core+0x14c>
if (likely(!skb_zcopy(skb)))
ffff8000113aa5dc: f9401400 ldr x0, [x0,#40]
ffff8000113aa5e0: b50047c0 cbnz x0, ffff8000113aaed8 <__netif_receive_skb_core+0xa40>
refcount_inc(&skb->users);
ffff8000113aa5e4: 91035380 add x0, x28, #0xd4
ATOMIC_OPS(add, add, I)
ffff8000113aa5e8: f9800011 prfm pstl1strm, [x0]
ffff8000113aa5ec: 885f7c01 ldxr w1, [x0]
ffff8000113aa5f0: 11000422 add w2, w1, #0x1
ffff8000113aa5f4: 88037c02 stxr w3, w2, [x0]
ffff8000113aa5f8: 35ffffa3 cbnz w3, ffff8000113aa5ec <__netif_receive_skb_core+0x154>
if (unlikely(!old))
ffff8000113aa5fc: 6b1f003f cmp w1, wzr
ffff8000113aa600: 54004b00 b.eq ffff8000113aaf60 <__netif_receive_skb_core+0xac8>
else if (unlikely(old < 0 || old + i < 0))
ffff8000113aa604: 540034cb b.lt ffff8000113aac9c <__netif_receive_skb_core+0x804>
ffff8000113aa608: 3100043f cmn w1, #0x1
ffff8000113aa60c: 54003484 b.mi ffff8000113aac9c <__netif_receive_skb_core+0x804>
return pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
ffff8000113aa610: f9400b04 ldr x4, [x24,#16]
ffff8000113aa614: f9400b81 ldr x1, [x28,#16]
ffff8000113aa618: aa1c03e0 mov x0, x28
ffff8000113aa61c: aa1803e2 mov x2, x24
ffff8000113aa620: aa1303e3 mov x3, x19
ffff8000113aa624: d63f0080 blr x4
ffff8000113aa628: 2a0003f4 mov w20, w0
if (vlan_do_receive(&skb))
ffff8000113aa62c: 9101e3b8 add x24, x29, #0x78
ffff8000113aa630: aa1803e0 mov x0, x24
ffff8000113aa634: 94000000 bl 0 <vlan_do_receive>
ffff8000113aa634: R_AARCH64_CALL26 vlan_do_receive
ffff8000113aa638: 53001c00 uxtb w0, w0
ffff8000113aa63c: 35001060 cbnz w0, ffff8000113aa848 <__netif_receive_skb_core+0x3b0>
else if (unlikely(!skb))
ffff8000113aa640: f9403fa5 ldr x5, [x29,#120]
ffff8000113aa644: b4000ea5 cbz x5, ffff8000113aa818 <__netif_receive_skb_core+0x380>
rx_handler = rcu_dereference(skb->dev->rx_handler);
ffff8000113aa648: f94008a0 ldr x0, [x5,#16]
ffff8000113aa64c: f941a004 ldr x4, [x0,#832]
if (rx_handler) {
ffff8000113aa650: b5001404 cbnz x4, ffff8000113aa8d0 <__netif_receive_skb_core+0x438>
ffff8000113aa654: 394208a0 ldrb w0, [x5,#130]
ffff8000113aa658: aa0503fc mov x28, x5
ffff8000113aa65c: 12000000 and w0, w0, #0x1
if (unlikely(skb_vlan_tag_present(skb))) {
ffff8000113aa660: 35002d20 cbnz w0, ffff8000113aac04 <__netif_receive_skb_core+0x76c>
ffff8000113aa664: d2800018 mov x24, #0x0 // #0
if (likely(!deliver_exact)) {
ffff8000113aa668: b94077a5 ldr w5, [x29,#116]
type = skb->protocol;
ffff8000113aa66c: 79416399 ldrh w25, [x28,#176]
if (likely(!deliver_exact)) {
ffff8000113aa670: 35000625 cbnz w5, ffff8000113aa734 <__netif_receive_skb_core+0x29c>
deliver_ptype_list_skb(skb, &pt_prev, orig_dev, type,
ffff8000113aa674: 90000016 adrp x22, ffff80001139e37c <__my_cpu_offset>
ffff8000113aa674: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113aa678: 5ac00720 rev16 w0, w25
ffff8000113aa67c: 910002d6 add x22, x22, #0x0
ffff8000113aa67c: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113aa680: 9120c2d6 add x22, x22, #0x830
ffff8000113aa684: d37c0c00 ubfiz x0, x0, #4, #4
ffff8000113aa688: f8606ad5 ldr x21, [x22,x0]
ffff8000113aa68c: 8b0002d6 add x22, x22, x0
list_for_each_entry_rcu(ptype, ptype_list, list) {
ffff8000113aa690: eb1502df cmp x22, x21
ffff8000113aa694: d100c2b5 sub x21, x21, #0x30
ffff8000113aa698: 540004e0 b.eq ffff8000113aa734 <__netif_receive_skb_core+0x29c>
refcount_inc(&skb->users);
ffff8000113aa69c: 91035397 add x23, x28, #0xd4
ffff8000113aa6a0: 14000005 b ffff8000113aa6b4 <__netif_receive_skb_core+0x21c>
ffff8000113aa6a4: f9401ab5 ldr x21, [x21,#48]
list_for_each_entry_rcu(ptype, ptype_list, list) {
ffff8000113aa6a8: eb1502df cmp x22, x21
ffff8000113aa6ac: d100c2b5 sub x21, x21, #0x30
ffff8000113aa6b0: 54000400 b.eq ffff8000113aa730 <__netif_receive_skb_core+0x298>
if (ptype->type != type)
ffff8000113aa6b4: 794002a1 ldrh w1, [x21]
ffff8000113aa6b8: 6b19003f cmp w1, w25
ffff8000113aa6bc: 54ffff41 b.ne ffff8000113aa6a4 <__netif_receive_skb_core+0x20c>
if (pt_prev)
ffff8000113aa6c0: b4001798 cbz x24, ffff8000113aa9b0 <__netif_receive_skb_core+0x518>
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113aa6c4: b40000dc cbz x28, ffff8000113aa6dc <__netif_receive_skb_core+0x244>
return skb->head + skb->end;
ffff8000113aa6c8: f9406381 ldr x1, [x28,#192]
ffff8000113aa6cc: b940bf80 ldr w0, [x28,#188]
ffff8000113aa6d0: 8b000020 add x0, x1, x0
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113aa6d4: 39400c01 ldrb w1, [x0,#3]
ffff8000113aa6d8: 37181601 tbnz w1, #3, ffff8000113aa998 <__netif_receive_skb_core+0x500>
ffff8000113aa6dc: f98002f1 prfm pstl1strm, [x23]
ffff8000113aa6e0: 885f7ee0 ldxr w0, [x23]
ffff8000113aa6e4: 11000401 add w1, w0, #0x1
ffff8000113aa6e8: 88027ee1 stxr w2, w1, [x23]
ffff8000113aa6ec: 35ffffa2 cbnz w2, ffff8000113aa6e0 <__netif_receive_skb_core+0x248>
if (unlikely(!old))
ffff8000113aa6f0: 6b1f001f cmp w0, wzr
ffff8000113aa6f4: 54002dc0 b.eq ffff8000113aacac <__netif_receive_skb_core+0x814>
else if (unlikely(old < 0 || old + i < 0))
ffff8000113aa6f8: 540035cb b.lt ffff8000113aadb0 <__netif_receive_skb_core+0x918>
ffff8000113aa6fc: 3100041f cmn w0, #0x1
ffff8000113aa700: 54003584 b.mi ffff8000113aadb0 <__netif_receive_skb_core+0x918>
return pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
ffff8000113aa704: f9400b04 ldr x4, [x24,#16]
ffff8000113aa708: f9400b81 ldr x1, [x28,#16]
ffff8000113aa70c: aa1803e2 mov x2, x24
ffff8000113aa710: aa1c03e0 mov x0, x28
ffff8000113aa714: aa1303e3 mov x3, x19
ffff8000113aa718: d63f0080 blr x4
ffff8000113aa71c: aa1503f8 mov x24, x21
ffff8000113aa720: f9401ab5 ldr x21, [x21,#48]
list_for_each_entry_rcu(ptype, ptype_list, list) {
ffff8000113aa724: eb1502df cmp x22, x21
ffff8000113aa728: d100c2b5 sub x21, x21, #0x30
ffff8000113aa72c: 54fffc41 b.ne ffff8000113aa6b4 <__netif_receive_skb_core+0x21c>
ffff8000113aa730: f9403fbc ldr x28, [x29,#120]
ffff8000113aa734: f9404e75 ldr x21, [x19,#152]
deliver_ptype_list_skb(skb, &pt_prev, orig_dev, type,
ffff8000113aa738: 91026276 add x22, x19, #0x98
list_for_each_entry_rcu(ptype, ptype_list, list) {
ffff8000113aa73c: eb1502df cmp x22, x21
ffff8000113aa740: d100c2b5 sub x21, x21, #0x30
ffff8000113aa744: 540004e0 b.eq ffff8000113aa7e0 <__netif_receive_skb_core+0x348>
refcount_inc(&skb->users);
ffff8000113aa748: 91035397 add x23, x28, #0xd4
ffff8000113aa74c: 14000005 b ffff8000113aa760 <__netif_receive_skb_core+0x2c8>
ffff8000113aa750: f9401ab5 ldr x21, [x21,#48]
list_for_each_entry_rcu(ptype, ptype_list, list) {
ffff8000113aa754: eb1502df cmp x22, x21
ffff8000113aa758: d100c2b5 sub x21, x21, #0x30
ffff8000113aa75c: 54000400 b.eq ffff8000113aa7dc <__netif_receive_skb_core+0x344>
if (ptype->type != type)
ffff8000113aa760: 794002a1 ldrh w1, [x21]
ffff8000113aa764: 6b19003f cmp w1, w25
ffff8000113aa768: 54ffff41 b.ne ffff8000113aa750 <__netif_receive_skb_core+0x2b8>
if (pt_prev)
ffff8000113aa76c: b4001138 cbz x24, ffff8000113aa990 <__netif_receive_skb_core+0x4f8>
ffff8000113aa770: b40000dc cbz x28, ffff8000113aa788 <__netif_receive_skb_core+0x2f0>
return skb->head + skb->end;
ffff8000113aa774: f9406381 ldr x1, [x28,#192]
ffff8000113aa778: b940bf80 ldr w0, [x28,#188]
ffff8000113aa77c: 8b000020 add x0, x1, x0
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113aa780: 39400c01 ldrb w1, [x0,#3]
ffff8000113aa784: 37180fa1 tbnz w1, #3, ffff8000113aa978 <__netif_receive_skb_core+0x4e0>
ffff8000113aa788: f98002f1 prfm pstl1strm, [x23]
ffff8000113aa78c: 885f7ee0 ldxr w0, [x23]
ffff8000113aa790: 11000401 add w1, w0, #0x1
ffff8000113aa794: 88027ee1 stxr w2, w1, [x23]
ffff8000113aa798: 35ffffa2 cbnz w2, ffff8000113aa78c <__netif_receive_skb_core+0x2f4>
if (unlikely(!old))
ffff8000113aa79c: 6b1f001f cmp w0, wzr
ffff8000113aa7a0: 54002f60 b.eq ffff8000113aad8c <__netif_receive_skb_core+0x8f4>
else if (unlikely(old < 0 || old + i < 0))
ffff8000113aa7a4: 54002ecb b.lt ffff8000113aad7c <__netif_receive_skb_core+0x8e4>
ffff8000113aa7a8: 3100041f cmn w0, #0x1
ffff8000113aa7ac: 54002e84 b.mi ffff8000113aad7c <__netif_receive_skb_core+0x8e4>
return pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
ffff8000113aa7b0: f9400b04 ldr x4, [x24,#16]
ffff8000113aa7b4: f9400b81 ldr x1, [x28,#16]
ffff8000113aa7b8: aa1803e2 mov x2, x24
ffff8000113aa7bc: aa1c03e0 mov x0, x28
ffff8000113aa7c0: aa1303e3 mov x3, x19
ffff8000113aa7c4: d63f0080 blr x4
ffff8000113aa7c8: aa1503f8 mov x24, x21
ffff8000113aa7cc: f9401ab5 ldr x21, [x21,#48]
list_for_each_entry_rcu(ptype, ptype_list, list) {
ffff8000113aa7d0: eb1502df cmp x22, x21
ffff8000113aa7d4: d100c2b5 sub x21, x21, #0x30
ffff8000113aa7d8: 54fffc41 b.ne ffff8000113aa760 <__netif_receive_skb_core+0x2c8>
ffff8000113aa7dc: f9403fbc ldr x28, [x29,#120]
if (unlikely(skb->dev != orig_dev)) {
ffff8000113aa7e0: f9400b97 ldr x23, [x28,#16]
ffff8000113aa7e4: eb17027f cmp x19, x23
ffff8000113aa7e8: 54003c21 b.ne ffff8000113aaf6c <__netif_receive_skb_core+0xad4>
if (pt_prev) {
ffff8000113aa7ec: b4000a18 cbz x24, ffff8000113aa92c <__netif_receive_skb_core+0x494>
ffff8000113aa7f0: b400011c cbz x28, ffff8000113aa810 <__netif_receive_skb_core+0x378>
return skb->head + skb->end;
ffff8000113aa7f4: f9406381 ldr x1, [x28,#192]
ffff8000113aa7f8: b940bf80 ldr w0, [x28,#188]
ffff8000113aa7fc: 8b000020 add x0, x1, x0
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113aa800: 39400c01 ldrb w1, [x0,#3]
ffff8000113aa804: 36180061 tbz w1, #3, ffff8000113aa810 <__netif_receive_skb_core+0x378>
if (likely(!skb_zcopy(skb)))
ffff8000113aa808: f9401400 ldr x0, [x0,#40]
ffff8000113aa80c: b50039e0 cbnz x0, ffff8000113aaf48 <__netif_receive_skb_core+0xab0>
*ppt_prev = pt_prev;
ffff8000113aa810: f94037a5 ldr x5, [x29,#104]
ffff8000113aa814: f90000b8 str x24, [x5]
return ret;
ffff8000113aa818: 2a1403e0 mov w0, w20
}
ffff8000113aa81c: f9405fa2 ldr x2, [x29,#184]
ffff8000113aa820: f9400341 ldr x1, [x26]
ffff8000113aa820: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113aa824: eb01005f cmp x2, x1
ffff8000113aa828: 54002401 b.ne ffff8000113aaca8 <__netif_receive_skb_core+0x810>
ffff8000113aa82c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113aa830: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113aa834: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113aa838: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113aa83c: a94573fb ldp x27, x28, [sp,#80]
ffff8000113aa840: a8cc7bfd ldp x29, x30, [sp],#192
ffff8000113aa844: d65f03c0 ret
ffff8000113aa848: f9403fa0 ldr x0, [x29,#120]
ffff8000113aa84c: f9400801 ldr x1, [x0,#16]
ffff8000113aa850: 17ffff43 b ffff8000113aa55c <__netif_receive_skb_core+0xc4>
rx_handler = rcu_dereference(skb->dev->rx_handler);
ffff8000113aa854: f9400b80 ldr x0, [x28,#16]
ffff8000113aa858: f941a004 ldr x4, [x0,#832]
if (rx_handler) {
ffff8000113aa85c: b4fff064 cbz x4, ffff8000113aa668 <__netif_receive_skb_core+0x1d0>
if (pt_prev) {
ffff8000113aa860: b40010d8 cbz x24, ffff8000113aaa78 <__netif_receive_skb_core+0x5e0>
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113aa864: b40000dc cbz x28, ffff8000113aa87c <__netif_receive_skb_core+0x3e4>
return skb->head + skb->end;
ffff8000113aa868: f9406381 ldr x1, [x28,#192]
ffff8000113aa86c: b940bf80 ldr w0, [x28,#188]
ffff8000113aa870: 8b000020 add x0, x1, x0
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113aa874: 39400c01 ldrb w1, [x0,#3]
ffff8000113aa878: 37180ee1 tbnz w1, #3, ffff8000113aaa54 <__netif_receive_skb_core+0x5bc>
refcount_inc(&skb->users);
ffff8000113aa87c: 91035380 add x0, x28, #0xd4
ffff8000113aa880: f9800011 prfm pstl1strm, [x0]
ffff8000113aa884: 885f7c01 ldxr w1, [x0]
ffff8000113aa888: 11000422 add w2, w1, #0x1
ffff8000113aa88c: 88037c02 stxr w3, w2, [x0]
ffff8000113aa890: 35ffffa3 cbnz w3, ffff8000113aa884 <__netif_receive_skb_core+0x3ec>
if (unlikely(!old))
ffff8000113aa894: 6b1f003f cmp w1, wzr
ffff8000113aa898: 54003e40 b.eq ffff8000113ab060 <__netif_receive_skb_core+0xbc8>
else if (unlikely(old < 0 || old + i < 0))
ffff8000113aa89c: 5400280b b.lt ffff8000113aad9c <__netif_receive_skb_core+0x904>
ffff8000113aa8a0: 3100043f cmn w1, #0x1
ffff8000113aa8a4: 540027c4 b.mi ffff8000113aad9c <__netif_receive_skb_core+0x904>
return pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
ffff8000113aa8a8: f9400b05 ldr x5, [x24,#16]
ffff8000113aa8ac: f9400b81 ldr x1, [x28,#16]
ffff8000113aa8b0: aa1803e2 mov x2, x24
ffff8000113aa8b4: f90033a4 str x4, [x29,#96]
ffff8000113aa8b8: aa1c03e0 mov x0, x28
ffff8000113aa8bc: aa1303e3 mov x3, x19
ffff8000113aa8c0: d63f00a0 blr x5
ffff8000113aa8c4: f94033a4 ldr x4, [x29,#96]
ffff8000113aa8c8: 2a0003f4 mov w20, w0
ffff8000113aa8cc: 9101e3b8 add x24, x29, #0x78
switch (rx_handler(&skb)) {
ffff8000113aa8d0: aa1803e0 mov x0, x24
ffff8000113aa8d4: d63f0080 blr x4
ffff8000113aa8d8: 71000c1f cmp w0, #0x3
ffff8000113aa8dc: 54000429 b.ls ffff8000113aa960 <__netif_receive_skb_core+0x4c8>
BUG();
ffff8000113aa8e0: d4210000 brk #0x800
ffff8000113aa8e4: d2800018 mov x24, #0x0 // #0
if (pfmemalloc)
ffff8000113aa8e8: 34000699 cbz w25, ffff8000113aa9b8 <__netif_receive_skb_core+0x520>
ffff8000113aa8ec: 910002e0 add x0, x23, #0x0
ffff8000113aa8ec: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113aa8f0: b9433800 ldr w0, [x0,#824]
if (static_branch_unlikely(&ingress_needed_key)) {
ffff8000113aa8f4: 6b1f001f cmp w0, wzr
ffff8000113aa8f8: 5400264c b.gt ffff8000113aadc0 <__netif_receive_skb_core+0x928>
}
static inline void skb_reset_redirect(struct sk_buff *skb)
{
#ifdef CONFIG_NET_REDIRECT
skb->redirected = 0;
ffff8000113aa8fc: 39420f80 ldrb w0, [x28,#131]
ffff8000113aa900: 12001800 and w0, w0, #0x7f
ffff8000113aa904: 39020f80 strb w0, [x28,#131]
if (pfmemalloc && !skb_pfmemalloc_protocol(skb))
ffff8000113aa908: 34ffe599 cbz w25, ffff8000113aa5b8 <__netif_receive_skb_core+0x120>
switch (skb->protocol) {
ffff8000113aa90c: 79416380 ldrh w0, [x28,#176]
ffff8000113aa910: 7118201f cmp w0, #0x608
ffff8000113aa914: 54ffe520 b.eq ffff8000113aa5b8 <__netif_receive_skb_core+0x120>
ffff8000113aa918: 54001408 b.hi ffff8000113aab98 <__netif_receive_skb_core+0x700>
ffff8000113aa91c: 7100201f cmp w0, #0x8
ffff8000113aa920: 54ffe4c0 b.eq ffff8000113aa5b8 <__netif_receive_skb_core+0x120>
ffff8000113aa924: 7102041f cmp w0, #0x81
ffff8000113aa928: 54ffe480 b.eq ffff8000113aa5b8 <__netif_receive_skb_core+0x120>
if (!deliver_exact)
ffff8000113aa92c: b94077a5 ldr w5, [x29,#116]
atomic_long_inc(&skb->dev->rx_dropped);
ffff8000113aa930: f9400b80 ldr x0, [x28,#16]
if (!deliver_exact)
ffff8000113aa934: 35001245 cbnz w5, ffff8000113aab7c <__netif_receive_skb_core+0x6e4>
ATOMIC64_OPS(add, add, I)
ffff8000113aa938: 91070006 add x6, x0, #0x1c0
ffff8000113aa93c: f98000d1 prfm pstl1strm, [x6]
ffff8000113aa940: c85f7cc1 ldxr x1, [x6]
ffff8000113aa944: 91000421 add x1, x1, #0x1
ffff8000113aa948: c8027cc1 stxr w2, x1, [x6]
ffff8000113aa94c: 35ffffa2 cbnz w2, ffff8000113aa940 <__netif_receive_skb_core+0x4a8>
kfree_skb(skb);
ffff8000113aa950: f9403fa0 ldr x0, [x29,#120]
ret = NET_RX_DROP;
ffff8000113aa954: 52800034 mov w20, #0x1 // #1
kfree_skb(skb);
ffff8000113aa958: 94000000 bl 0 <kfree_skb>
ffff8000113aa958: R_AARCH64_CALL26 kfree_skb
ffff8000113aa95c: 17ffffaf b ffff8000113aa818 <__netif_receive_skb_core+0x380>
switch (rx_handler(&skb)) {
ffff8000113aa960: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113aa960: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x20
ffff8000113aa964: 91000021 add x1, x1, #0x0
ffff8000113aa964: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x20
ffff8000113aa968: 38604823 ldrb w3, [x1,w0,uxtw]
ffff8000113aa96c: 10000064 adr x4, ffff8000113aa978 <__netif_receive_skb_core+0x4e0>
ffff8000113aa970: 8b238883 add x3, x4, w3, sxtb #2
ffff8000113aa974: d61f0060 br x3
if (likely(!skb_zcopy(skb)))
ffff8000113aa978: f9401400 ldr x0, [x0,#40]
ffff8000113aa97c: b4fff060 cbz x0, ffff8000113aa788 <__netif_receive_skb_core+0x2f0>
return skb_copy_ubufs(skb, gfp_mask);
ffff8000113aa980: aa1c03e0 mov x0, x28
ffff8000113aa984: 52814401 mov w1, #0xa20 // #2592
ffff8000113aa988: 94000000 bl 0 <skb_copy_ubufs>
ffff8000113aa988: R_AARCH64_CALL26 skb_copy_ubufs
if (unlikely(skb_orphan_frags_rx(skb, GFP_ATOMIC)))
ffff8000113aa98c: 34ffefe0 cbz w0, ffff8000113aa788 <__netif_receive_skb_core+0x2f0>
ffff8000113aa990: aa1503f8 mov x24, x21
ffff8000113aa994: 17ffff6f b ffff8000113aa750 <__netif_receive_skb_core+0x2b8>
if (likely(!skb_zcopy(skb)))
ffff8000113aa998: f9401400 ldr x0, [x0,#40]
ffff8000113aa99c: b4ffea00 cbz x0, ffff8000113aa6dc <__netif_receive_skb_core+0x244>
return skb_copy_ubufs(skb, gfp_mask);
ffff8000113aa9a0: aa1c03e0 mov x0, x28
ffff8000113aa9a4: 52814401 mov w1, #0xa20 // #2592
ffff8000113aa9a8: 94000000 bl 0 <skb_copy_ubufs>
ffff8000113aa9a8: R_AARCH64_CALL26 skb_copy_ubufs
ffff8000113aa9ac: 34ffe980 cbz w0, ffff8000113aa6dc <__netif_receive_skb_core+0x244>
ffff8000113aa9b0: aa1503f8 mov x24, x21
ffff8000113aa9b4: 17ffff3c b ffff8000113aa6a4 <__netif_receive_skb_core+0x20c>
ffff8000113aa9b8: f94002c4 ldr x4, [x22]
list_for_each_entry_rcu(ptype, &ptype_all, list) {
ffff8000113aa9bc: eb0402df cmp x22, x4
ffff8000113aa9c0: d100c09b sub x27, x4, #0x30
ffff8000113aa9c4: 54000820 b.eq ffff8000113aaac8 <__netif_receive_skb_core+0x630>
ffff8000113aa9c8: aa1803e2 mov x2, x24
if (pt_prev)
ffff8000113aa9cc: b4000362 cbz x2, ffff8000113aaa38 <__netif_receive_skb_core+0x5a0>
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113aa9d0: b400011c cbz x28, ffff8000113aa9f0 <__netif_receive_skb_core+0x558>
return skb->head + skb->end;
ffff8000113aa9d4: f9406381 ldr x1, [x28,#192]
ffff8000113aa9d8: b940bf80 ldr w0, [x28,#188]
ffff8000113aa9dc: 8b000020 add x0, x1, x0
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113aa9e0: 39400c01 ldrb w1, [x0,#3]
ffff8000113aa9e4: 36180061 tbz w1, #3, ffff8000113aa9f0 <__netif_receive_skb_core+0x558>
if (likely(!skb_zcopy(skb)))
ffff8000113aa9e8: f9401400 ldr x0, [x0,#40]
ffff8000113aa9ec: b50012c0 cbnz x0, ffff8000113aac44 <__netif_receive_skb_core+0x7ac>
refcount_inc(&skb->users);
ffff8000113aa9f0: 91035380 add x0, x28, #0xd4
ATOMIC_OPS(add, add, I)
ffff8000113aa9f4: f9800011 prfm pstl1strm, [x0]
ffff8000113aa9f8: 885f7c01 ldxr w1, [x0]
ffff8000113aa9fc: 11000423 add w3, w1, #0x1
ffff8000113aaa00: 88067c03 stxr w6, w3, [x0]
ffff8000113aaa04: 35ffffa6 cbnz w6, ffff8000113aa9f8 <__netif_receive_skb_core+0x560>
if (unlikely(!old))
ffff8000113aaa08: 6b1f003f cmp w1, wzr
ffff8000113aaa0c: 540013e0 b.eq ffff8000113aac88 <__netif_receive_skb_core+0x7f0>
else if (unlikely(old < 0 || old + i < 0))
ffff8000113aaa10: 5400110b b.lt ffff8000113aac30 <__netif_receive_skb_core+0x798>
ffff8000113aaa14: 3100043f cmn w1, #0x1
ffff8000113aaa18: 540010c4 b.mi ffff8000113aac30 <__netif_receive_skb_core+0x798>
return pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
ffff8000113aaa1c: f9400845 ldr x5, [x2,#16]
ffff8000113aaa20: f9400b81 ldr x1, [x28,#16]
ffff8000113aaa24: aa1c03e0 mov x0, x28
ffff8000113aaa28: aa1303e3 mov x3, x19
ffff8000113aaa2c: d63f00a0 blr x5
ffff8000113aaa30: 2a0003f4 mov w20, w0
ffff8000113aaa34: f9403fbc ldr x28, [x29,#120]
ffff8000113aaa38: f9401b60 ldr x0, [x27,#48]
list_for_each_entry_rcu(ptype, &ptype_all, list) {
ffff8000113aaa3c: eb0002df cmp x22, x0
ffff8000113aaa40: d100c000 sub x0, x0, #0x30
ffff8000113aaa44: 54000440 b.eq ffff8000113aaacc <__netif_receive_skb_core+0x634>
ffff8000113aaa48: aa1b03e2 mov x2, x27
ffff8000113aaa4c: aa0003fb mov x27, x0
ffff8000113aaa50: 17ffffdf b ffff8000113aa9cc <__netif_receive_skb_core+0x534>
ffff8000113aaa54: f9401400 ldr x0, [x0,#40]
ffff8000113aaa58: b4fff120 cbz x0, ffff8000113aa87c <__netif_receive_skb_core+0x3e4>
return skb_copy_ubufs(skb, gfp_mask);
ffff8000113aaa5c: aa1c03e0 mov x0, x28
ffff8000113aaa60: 52814401 mov w1, #0xa20 // #2592
ffff8000113aaa64: f90033a4 str x4, [x29,#96]
ffff8000113aaa68: 94000000 bl 0 <skb_copy_ubufs>
ffff8000113aaa68: R_AARCH64_CALL26 skb_copy_ubufs
if (unlikely(skb_orphan_frags_rx(skb, GFP_ATOMIC)))
ffff8000113aaa6c: f94033a4 ldr x4, [x29,#96]
return -ENOMEM;
ffff8000113aaa70: 12800174 mov w20, #0xfffffff4 // #-12
if (unlikely(skb_orphan_frags_rx(skb, GFP_ATOMIC)))
ffff8000113aaa74: 34fff040 cbz w0, ffff8000113aa87c <__netif_receive_skb_core+0x3e4>
ffff8000113aaa78: 9101e3b8 add x24, x29, #0x78
ffff8000113aaa7c: 17ffff95 b ffff8000113aa8d0 <__netif_receive_skb_core+0x438>
ret = NET_RX_SUCCESS;
ffff8000113aaa80: 52800014 mov w20, #0x0 // #0
ffff8000113aaa84: 17ffff65 b ffff8000113aa818 <__netif_receive_skb_core+0x380>
ffff8000113aaa88: f9403fbc ldr x28, [x29,#120]
deliver_exact = true;
ffff8000113aaa8c: 52800025 mov w5, #0x1 // #1
ffff8000113aaa90: 39420b80 ldrb w0, [x28,#130]
ffff8000113aaa94: b90077a5 str w5, [x29,#116]
ffff8000113aaa98: 0a050000 and w0, w0, w5
ffff8000113aaa9c: 17fffef1 b ffff8000113aa660 <__netif_receive_skb_core+0x1c8>
ffff8000113aaaa0: f9403fbc ldr x28, [x29,#120]
ffff8000113aaaa4: 39420b80 ldrb w0, [x28,#130]
ffff8000113aaaa8: 12000000 and w0, w0, #0x1
ffff8000113aaaac: 17fffeed b ffff8000113aa660 <__netif_receive_skb_core+0x1c8>
skb = skb_vlan_untag(skb);
ffff8000113aaab0: aa1c03e0 mov x0, x28
ffff8000113aaab4: 94000000 bl 0 <skb_vlan_untag>
ffff8000113aaab4: R_AARCH64_CALL26 skb_vlan_untag
ffff8000113aaab8: f9003fa0 str x0, [x29,#120]
if (unlikely(!skb))
ffff8000113aaabc: b4ffeae0 cbz x0, ffff8000113aa818 <__netif_receive_skb_core+0x380>
ffff8000113aaac0: aa0003fc mov x28, x0
ffff8000113aaac4: 17fffeb7 b ffff8000113aa5a0 <__netif_receive_skb_core+0x108>
list_for_each_entry_rcu(ptype, &ptype_all, list) {
ffff8000113aaac8: aa1803fb mov x27, x24
ffff8000113aaacc: f9400b80 ldr x0, [x28,#16]
ffff8000113aaad0: f8488c18 ldr x24, [x0,#136]!
list_for_each_entry_rcu(ptype, &skb->dev->ptype_all, list) {
ffff8000113aaad4: eb00031f cmp x24, x0
ffff8000113aaad8: d100c318 sub x24, x24, #0x30
ffff8000113aaadc: 540006c0 b.eq ffff8000113aabb4 <__netif_receive_skb_core+0x71c>
if (pt_prev)
ffff8000113aaae0: b400037b cbz x27, ffff8000113aab4c <__netif_receive_skb_core+0x6b4>
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113aaae4: b400011c cbz x28, ffff8000113aab04 <__netif_receive_skb_core+0x66c>
return skb->head + skb->end;
ffff8000113aaae8: f9406381 ldr x1, [x28,#192]
ffff8000113aaaec: b940bf80 ldr w0, [x28,#188]
ffff8000113aaaf0: 8b000020 add x0, x1, x0
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113aaaf4: 39400c01 ldrb w1, [x0,#3]
ffff8000113aaaf8: 36180061 tbz w1, #3, ffff8000113aab04 <__netif_receive_skb_core+0x66c>
if (likely(!skb_zcopy(skb)))
ffff8000113aaafc: f9401400 ldr x0, [x0,#40]
ffff8000113aab00: b5000b80 cbnz x0, ffff8000113aac70 <__netif_receive_skb_core+0x7d8>
refcount_inc(&skb->users);
ffff8000113aab04: 91035380 add x0, x28, #0xd4
ffff8000113aab08: f9800011 prfm pstl1strm, [x0]
ffff8000113aab0c: 885f7c01 ldxr w1, [x0]
ffff8000113aab10: 11000422 add w2, w1, #0x1
ffff8000113aab14: 88037c02 stxr w3, w2, [x0]
ffff8000113aab18: 35ffffa3 cbnz w3, ffff8000113aab0c <__netif_receive_skb_core+0x674>
if (unlikely(!old))
ffff8000113aab1c: 6b1f003f cmp w1, wzr
ffff8000113aab20: 54000a20 b.eq ffff8000113aac64 <__netif_receive_skb_core+0x7cc>
else if (unlikely(old < 0 || old + i < 0))
ffff8000113aab24: 5400080b b.lt ffff8000113aac24 <__netif_receive_skb_core+0x78c>
ffff8000113aab28: 3100043f cmn w1, #0x1
ffff8000113aab2c: 540007c4 b.mi ffff8000113aac24 <__netif_receive_skb_core+0x78c>
return pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
ffff8000113aab30: f9400b65 ldr x5, [x27,#16]
ffff8000113aab34: f9400b81 ldr x1, [x28,#16]
ffff8000113aab38: aa1c03e0 mov x0, x28
ffff8000113aab3c: aa1b03e2 mov x2, x27
ffff8000113aab40: aa1303e3 mov x3, x19
ffff8000113aab44: d63f00a0 blr x5
ffff8000113aab48: 2a0003f4 mov w20, w0
list_for_each_entry_rcu(ptype, &skb->dev->ptype_all, list) {
ffff8000113aab4c: f9403fbc ldr x28, [x29,#120]
ffff8000113aab50: f9401b00 ldr x0, [x24,#48]
ffff8000113aab54: f9400b81 ldr x1, [x28,#16]
ffff8000113aab58: d100c002 sub x2, x0, #0x30
ffff8000113aab5c: 91022021 add x1, x1, #0x88
ffff8000113aab60: eb01001f cmp x0, x1
ffff8000113aab64: 54ffec40 b.eq ffff8000113aa8ec <__netif_receive_skb_core+0x454>
ffff8000113aab68: aa1803fb mov x27, x24
ffff8000113aab6c: aa0203f8 mov x24, x2
ffff8000113aab70: 17ffffdc b ffff8000113aaae0 <__netif_receive_skb_core+0x648>
skb->transport_header = skb->data - skb->head;
ffff8000113aab74: 79016401 strh w1, [x0,#178]
ffff8000113aab78: 17fffe6d b ffff8000113aa52c <__netif_receive_skb_core+0x94>
ATOMIC64_OPS(add, add, I)
ffff8000113aab7c: 91074004 add x4, x0, #0x1d0
ffff8000113aab80: f9800091 prfm pstl1strm, [x4]
ffff8000113aab84: c85f7c81 ldxr x1, [x4]
ffff8000113aab88: 91000421 add x1, x1, #0x1
ffff8000113aab8c: c8027c81 stxr w2, x1, [x4]
ffff8000113aab90: 35ffffa2 cbnz w2, ffff8000113aab84 <__netif_receive_skb_core+0x6ec>
ffff8000113aab94: 17ffff6f b ffff8000113aa950 <__netif_receive_skb_core+0x4b8>
switch (skb->protocol) {
ffff8000113aab98: 52951101 mov w1, #0xa888 // #43144
ffff8000113aab9c: 6b01001f cmp w0, w1
ffff8000113aaba0: 54ffd0c0 b.eq ffff8000113aa5b8 <__netif_receive_skb_core+0x120>
ffff8000113aaba4: 529bb0c1 mov w1, #0xdd86 // #56710
ffff8000113aaba8: 6b01001f cmp w0, w1
ffff8000113aabac: 54ffec01 b.ne ffff8000113aa92c <__netif_receive_skb_core+0x494>
ffff8000113aabb0: 17fffe82 b ffff8000113aa5b8 <__netif_receive_skb_core+0x120>
list_for_each_entry_rcu(ptype, &skb->dev->ptype_all, list) {
ffff8000113aabb4: aa1b03f8 mov x24, x27
ffff8000113aabb8: 17ffff4d b ffff8000113aa8ec <__netif_receive_skb_core+0x454>
} else if (skb->protocol == cpu_to_be16(ETH_P_8021Q) ||
ffff8000113aabbc: 79416380 ldrh w0, [x28,#176]
ffff8000113aabc0: 52951106 mov w6, #0xa888 // #43144
ffff8000113aabc4: 6b06001f cmp w0, w6
ffff8000113aabc8: 54002301 b.ne ffff8000113ab028 <__netif_receive_skb_core+0xb90>
skb->vlan_present = 0;
ffff8000113aabcc: 39420b81 ldrb w1, [x28,#130]
skb = skb_vlan_untag(skb);
ffff8000113aabd0: aa1c03e0 mov x0, x28
ffff8000113aabd4: 121f7821 and w1, w1, #0xfffffffe
ffff8000113aabd8: 39020b81 strb w1, [x28,#130]
ffff8000113aabdc: 94000000 bl 0 <skb_vlan_untag>
ffff8000113aabdc: R_AARCH64_CALL26 skb_vlan_untag
ffff8000113aabe0: f9003fa0 str x0, [x29,#120]
if (unlikely(!skb))
ffff8000113aabe4: b4ffe1a0 cbz x0, ffff8000113aa818 <__netif_receive_skb_core+0x380>
if (vlan_do_receive(&skb))
ffff8000113aabe8: aa1803e0 mov x0, x24
ffff8000113aabec: 94000000 bl 0 <vlan_do_receive>
ffff8000113aabec: R_AARCH64_CALL26 vlan_do_receive
ffff8000113aabf0: 53001c00 uxtb w0, w0
ffff8000113aabf4: 35ffe2a0 cbnz w0, ffff8000113aa848 <__netif_receive_skb_core+0x3b0>
else if (unlikely(!skb))
ffff8000113aabf8: f9403fa5 ldr x5, [x29,#120]
ffff8000113aabfc: b4ffe0e5 cbz x5, ffff8000113aa818 <__netif_receive_skb_core+0x380>
ffff8000113aac00: aa0503fc mov x28, x5
if (skb_vlan_tag_get_id(skb)) {
ffff8000113aac04: 79413780 ldrh w0, [x28,#154]
ffff8000113aac08: 12002c00 and w0, w0, #0xfff
ffff8000113aac0c: 34fffd80 cbz w0, ffff8000113aabbc <__netif_receive_skb_core+0x724>
skb->pkt_type = PACKET_OTHERHOST;
ffff8000113aac10: 39420380 ldrb w0, [x28,#128]
ffff8000113aac14: 52800061 mov w1, #0x3 // #3
ffff8000113aac18: 33000820 bfxil w0, w1, #0, #3
ffff8000113aac1c: 39020380 strb w0, [x28,#128]
ffff8000113aac20: 14000104 b ffff8000113ab030 <__netif_receive_skb_core+0xb98>
refcount_warn_saturate(r, REFCOUNT_ADD_OVF);
ffff8000113aac24: 52800021 mov w1, #0x1 // #1
ffff8000113aac28: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113aac28: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113aac2c: 17ffffc1 b ffff8000113aab30 <__netif_receive_skb_core+0x698>
ffff8000113aac30: 52800021 mov w1, #0x1 // #1
ffff8000113aac34: f90033a2 str x2, [x29,#96]
ffff8000113aac38: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113aac38: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113aac3c: f94033a2 ldr x2, [x29,#96]
ffff8000113aac40: 17ffff77 b ffff8000113aaa1c <__netif_receive_skb_core+0x584>
return skb_copy_ubufs(skb, gfp_mask);
ffff8000113aac44: aa1c03e0 mov x0, x28
ffff8000113aac48: 52814401 mov w1, #0xa20 // #2592
ffff8000113aac4c: f90033a2 str x2, [x29,#96]
ffff8000113aac50: 94000000 bl 0 <skb_copy_ubufs>
ffff8000113aac50: R_AARCH64_CALL26 skb_copy_ubufs
return -ENOMEM;
ffff8000113aac54: 12800174 mov w20, #0xfffffff4 // #-12
if (unlikely(skb_orphan_frags_rx(skb, GFP_ATOMIC)))
ffff8000113aac58: f94033a2 ldr x2, [x29,#96]
ffff8000113aac5c: 35ffeec0 cbnz w0, ffff8000113aaa34 <__netif_receive_skb_core+0x59c>
ffff8000113aac60: 17ffff64 b ffff8000113aa9f0 <__netif_receive_skb_core+0x558>
refcount_warn_saturate(r, REFCOUNT_ADD_UAF);
ffff8000113aac64: 52800041 mov w1, #0x2 // #2
ffff8000113aac68: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113aac68: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113aac6c: 17ffffb1 b ffff8000113aab30 <__netif_receive_skb_core+0x698>
ffff8000113aac70: aa1c03e0 mov x0, x28
ffff8000113aac74: 52814401 mov w1, #0xa20 // #2592
ffff8000113aac78: 94000000 bl 0 <skb_copy_ubufs>
ffff8000113aac78: R_AARCH64_CALL26 skb_copy_ubufs
return -ENOMEM;
ffff8000113aac7c: 12800174 mov w20, #0xfffffff4 // #-12
if (unlikely(skb_orphan_frags_rx(skb, GFP_ATOMIC)))
ffff8000113aac80: 35fff660 cbnz w0, ffff8000113aab4c <__netif_receive_skb_core+0x6b4>
ffff8000113aac84: 17ffffa0 b ffff8000113aab04 <__netif_receive_skb_core+0x66c>
ffff8000113aac88: 52800041 mov w1, #0x2 // #2
ffff8000113aac8c: f90033a2 str x2, [x29,#96]
ffff8000113aac90: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113aac90: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113aac94: f94033a2 ldr x2, [x29,#96]
ffff8000113aac98: 17ffff61 b ffff8000113aaa1c <__netif_receive_skb_core+0x584>
refcount_warn_saturate(r, REFCOUNT_ADD_OVF);
ffff8000113aac9c: 52800021 mov w1, #0x1 // #1
ffff8000113aaca0: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113aaca0: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113aaca4: 17fffe5b b ffff8000113aa610 <__netif_receive_skb_core+0x178>
}
ffff8000113aaca8: 94000000 bl 0 <__stack_chk_fail>
ffff8000113aaca8: R_AARCH64_CALL26 __stack_chk_fail
refcount_warn_saturate(r, REFCOUNT_ADD_UAF);
ffff8000113aacac: aa1703e0 mov x0, x23
ffff8000113aacb0: 52800041 mov w1, #0x2 // #2
ffff8000113aacb4: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113aacb4: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113aacb8: 17fffe93 b ffff8000113aa704 <__netif_receive_skb_core+0x26c>
ret2 = do_xdp_generic(rcu_dereference(skb->dev->xdp_prog), skb);
ffff8000113aacbc: f9403fa1 ldr x1, [x29,#120]
ffff8000113aacc0: f9400820 ldr x0, [x1,#16]
ffff8000113aacc4: f9419800 ldr x0, [x0,#816]
if (xdp_prog) {
ffff8000113aacc8: b4001c20 cbz x0, ffff8000113ab04c <__netif_receive_skb_core+0xbb4>
ffff8000113aaccc: 97fffcb4 bl ffff8000113a9f9c <do_xdp_generic.part.132>
if (ret2 != XDP_PASS)
ffff8000113aacd0: 7100081f cmp w0, #0x2
ffff8000113aacd4: 54001b81 b.ne ffff8000113ab044 <__netif_receive_skb_core+0xbac>
skb_reset_mac_len(skb);
ffff8000113aacd8: f9403fa0 ldr x0, [x29,#120]
skb->mac_len = skb->network_header - skb->mac_header;
ffff8000113aacdc: 79416802 ldrh w2, [x0,#180]
ffff8000113aace0: 79416c01 ldrh w1, [x0,#182]
ffff8000113aace4: aa0003fc mov x28, x0
ffff8000113aace8: 4b010041 sub w1, w2, w1
ffff8000113aacec: 7900f001 strh w1, [x0,#120]
ffff8000113aacf0: 17fffe26 b ffff8000113aa588 <__netif_receive_skb_core+0xf0>
DEFINE_EVENT(net_dev_template, netif_receive_skb,
ffff8000113aacf4: 90000000 adrp x0, 0 <cpu_number>
ffff8000113aacf4: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113aacf8: 91000000 add x0, x0, #0x0
ffff8000113aacf8: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113aacfc: d538d082 mrs x2, tpidr_el1
ffff8000113aad00: b8606842 ldr w2, [x2,x0]
ffff8000113aad04: 90000000 adrp x0, 0 <__cpu_online_mask>
ffff8000113aad04: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113aad08: 1100fc43 add w3, w2, #0x3f
ffff8000113aad0c: 6b1f005f cmp w2, wzr
ffff8000113aad10: 1a82b063 csel w3, w3, w2, lt
ffff8000113aad14: 13067c63 asr w3, w3, #6
ffff8000113aad18: 91000000 add x0, x0, #0x0
ffff8000113aad18: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113aad1c: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113aad20: f8606863 ldr x3, [x3,x0]
ffff8000113aad24: aa1403e0 mov x0, x20
ffff8000113aad28: 9ac22462 lsr x2, x3, x2
ffff8000113aad2c: 3607bec2 tbz w2, #0, ffff8000113aa504 <__netif_receive_skb_core+0x6c>
ffff8000113aad30: f9401033 ldr x19, [x1,#32]
ffff8000113aad34: b40000f3 cbz x19, ffff8000113aad50 <__netif_receive_skb_core+0x8b8>
ffff8000113aad38: f9400262 ldr x2, [x19]
ffff8000113aad3c: f9400660 ldr x0, [x19,#8]
ffff8000113aad40: aa1403e1 mov x1, x20
ffff8000113aad44: d63f0040 blr x2
ffff8000113aad48: f8418e62 ldr x2, [x19,#24]!
ffff8000113aad4c: b5ffff82 cbnz x2, ffff8000113aad3c <__netif_receive_skb_core+0x8a4>
ffff8000113aad50: f9403fa0 ldr x0, [x29,#120]
ffff8000113aad54: 17fffdec b ffff8000113aa504 <__netif_receive_skb_core+0x6c>
net_timestamp_check(!netdev_tstamp_prequeue, skb);
ffff8000113aad58: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113aad58: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly+0x94c
ffff8000113aad5c: b9400000 ldr w0, [x0]
ffff8000113aad5c: R_AARCH64_LDST32_ABS_LO12_NC .data..read_mostly+0x94c
ffff8000113aad60: 35ffbc60 cbnz w0, ffff8000113aa4ec <__netif_receive_skb_core+0x54>
ffff8000113aad64: f9401280 ldr x0, [x20,#32]
ffff8000113aad68: b5ffbc20 cbnz x0, ffff8000113aa4ec <__netif_receive_skb_core+0x54>
ffff8000113aad6c: 94000000 bl 0 <ktime_get_with_offset>
ffff8000113aad6c: R_AARCH64_CALL26 ktime_get_with_offset
skb->tstamp = ktime_get_real();
ffff8000113aad70: f9001280 str x0, [x20,#32]
ffff8000113aad74: f9403fb4 ldr x20, [x29,#120]
ffff8000113aad78: 17fffddd b ffff8000113aa4ec <__netif_receive_skb_core+0x54>
refcount_warn_saturate(r, REFCOUNT_ADD_OVF);
ffff8000113aad7c: aa1703e0 mov x0, x23
ffff8000113aad80: 52800021 mov w1, #0x1 // #1
ffff8000113aad84: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113aad84: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113aad88: 17fffe8a b ffff8000113aa7b0 <__netif_receive_skb_core+0x318>
refcount_warn_saturate(r, REFCOUNT_ADD_UAF);
ffff8000113aad8c: aa1703e0 mov x0, x23
ffff8000113aad90: 52800041 mov w1, #0x2 // #2
ffff8000113aad94: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113aad94: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113aad98: 17fffe86 b ffff8000113aa7b0 <__netif_receive_skb_core+0x318>
refcount_warn_saturate(r, REFCOUNT_ADD_OVF);
ffff8000113aad9c: 52800021 mov w1, #0x1 // #1
ffff8000113aada0: f90033a4 str x4, [x29,#96]
ffff8000113aada4: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113aada4: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113aada8: f94033a4 ldr x4, [x29,#96]
ffff8000113aadac: 17fffebf b ffff8000113aa8a8 <__netif_receive_skb_core+0x410>
ffff8000113aadb0: aa1703e0 mov x0, x23
ffff8000113aadb4: 52800021 mov w1, #0x1 // #1
ffff8000113aadb8: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113aadb8: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113aadbc: 17fffe52 b ffff8000113aa704 <__netif_receive_skb_core+0x26c>
struct mini_Qdisc *miniq = rcu_dereference_bh(skb->dev->miniq_ingress);
ffff8000113aadc0: f9400b80 ldr x0, [x28,#16]
ffff8000113aadc4: f941a806 ldr x6, [x0,#848]
if (!miniq)
ffff8000113aadc8: b4000466 cbz x6, ffff8000113aae54 <__netif_receive_skb_core+0x9bc>
if (*pt_prev) {
ffff8000113aadcc: b4000118 cbz x24, ffff8000113aadec <__netif_receive_skb_core+0x954>
*ret = deliver_skb(skb, *pt_prev, orig_dev);
ffff8000113aadd0: aa1c03e0 mov x0, x28
ffff8000113aadd4: aa1803e1 mov x1, x24
ffff8000113aadd8: aa1303e2 mov x2, x19
ffff8000113aaddc: f90033a6 str x6, [x29,#96]
ffff8000113aade0: 97ffe020 bl ffff8000113a2e60 <deliver_skb>
ffff8000113aade4: f94033a6 ldr x6, [x29,#96]
ffff8000113aade8: 2a0003f4 mov w20, w0
skb->tc_at_ingress = 1;
ffff8000113aadec: 39420f80 ldrb w0, [x28,#131]
qdisc_skb_cb(skb)->pkt_len = skb->len;
ffff8000113aadf0: b9407381 ldr w1, [x28,#112]
skb->tc_at_ingress = 1;
ffff8000113aadf4: 321a0000 orr w0, w0, #0x40
qdisc_skb_cb(skb)->pkt_len = skb->len;
ffff8000113aadf8: b9002b81 str w1, [x28,#40]
skb->tc_at_ingress = 1;
ffff8000113aadfc: 39020f80 strb w0, [x28,#131]
mini_qdisc_bstats_cpu_update(miniq, skb);
ffff8000113aae00: f94008c0 ldr x0, [x6,#16]
ffff8000113aae04: aa1c03e1 mov x1, x28
ffff8000113aae08: f90033a6 str x6, [x29,#96]
ffff8000113aae0c: 94000000 bl ffff80001139e37c <__my_cpu_offset>
ffff8000113aae0c: R_AARCH64_CALL26 .text.unlikely
switch (tcf_classify_ingress(skb, miniq->block, miniq->filter_list,
ffff8000113aae10: f94033a6 ldr x6, [x29,#96]
ffff8000113aae14: aa1c03e0 mov x0, x28
ffff8000113aae18: f94004c1 ldr x1, [x6,#8]
ffff8000113aae1c: f94000c2 ldr x2, [x6]
ffff8000113aae20: 910223a3 add x3, x29, #0x88
ffff8000113aae24: 52800004 mov w4, #0x0 // #0
ffff8000113aae28: 94000000 bl 0 <tcf_classify_ingress>
ffff8000113aae28: R_AARCH64_CALL26 tcf_classify_ingress
ffff8000113aae2c: 7100241f cmp w0, #0x9
ffff8000113aae30: f94033a6 ldr x6, [x29,#96]
ffff8000113aae34: 540000e8 b.hi ffff8000113aae50 <__netif_receive_skb_core+0x9b8>
ffff8000113aae38: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113aae38: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x24
ffff8000113aae3c: 91000021 add x1, x1, #0x0
ffff8000113aae3c: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x24
ffff8000113aae40: 78605821 ldrh w1, [x1,w0,uxtw #1]
ffff8000113aae44: 10000062 adr x2, ffff8000113aae50 <__netif_receive_skb_core+0x9b8>
ffff8000113aae48: 8b21a841 add x1, x2, w1, sxth #2
ffff8000113aae4c: d61f0020 br x1
ffff8000113aae50: d2800018 mov x24, #0x0 // #0
skb = sch_handle_ingress(skb, &pt_prev, &ret, orig_dev);
ffff8000113aae54: f9003fbc str x28, [x29,#120]
if (!skb)
ffff8000113aae58: b4ffce1c cbz x28, ffff8000113aa818 <__netif_receive_skb_core+0x380>
static inline int nf_ingress(struct sk_buff *skb, struct packet_type **pt_prev,
ffff8000113aae5c: f9400b80 ldr x0, [x28,#16]
ffff8000113aae60: f941b000 ldr x0, [x0,#864]
if (nf_hook_ingress_active(skb)) {
ffff8000113aae64: b4ffd4c0 cbz x0, ffff8000113aa8fc <__netif_receive_skb_core+0x464>
if (*pt_prev) {
ffff8000113aae68: b40000d8 cbz x24, ffff8000113aae80 <__netif_receive_skb_core+0x9e8>
*ret = deliver_skb(skb, *pt_prev, orig_dev);
ffff8000113aae6c: aa1c03e0 mov x0, x28
ffff8000113aae70: aa1803e1 mov x1, x24
ffff8000113aae74: aa1303e2 mov x2, x19
ffff8000113aae78: 97ffdffa bl ffff8000113a2e60 <deliver_skb>
ffff8000113aae7c: 2a0003f4 mov w20, w0
}
/* caller must hold rcu_read_lock */
static inline int nf_hook_ingress(struct sk_buff *skb)
{
struct nf_hook_entries *e = rcu_dereference(skb->dev->nf_hooks_ingress);
ffff8000113aae80: f9400b84 ldr x4, [x28,#16]
ffff8000113aae84: f941b082 ldr x2, [x4,#864]
int ret;
/* Must recheck the ingress hook head, in the event it became NULL
* after the check in nf_hook_ingress_active evaluated to true.
*/
if (unlikely(!e))
ffff8000113aae88: b4000202 cbz x2, ffff8000113aaec8 <__netif_receive_skb_core+0xa30>
return pnet->net;
ffff8000113aae8c: f9427886 ldr x6, [x4,#1264]
return 0;
nf_hook_state_init(&state, NF_NETDEV_INGRESS,
NFPROTO_NETDEV, skb->dev, NULL, NULL,
dev_net(skb->dev), NULL);
ret = nf_hook_slow(skb, &state, e, 0);
ffff8000113aae90: 52800003 mov w3, #0x0 // #0
struct sock *sk,
struct net *net,
int (*okfn)(struct net *, struct sock *, struct sk_buff *))
{
p->hook = hook;
p->pf = pf;
ffff8000113aae94: 528000a5 mov w5, #0x5 // #5
ffff8000113aae98: aa1c03e0 mov x0, x28
ffff8000113aae9c: 910223a1 add x1, x29, #0x88
p->hook = hook;
ffff8000113aaea0: b9008ba3 str w3, [x29,#136]
p->pf = pf;
ffff8000113aaea4: 390233a5 strb w5, [x29,#140]
p->in = indev;
ffff8000113aaea8: f9004ba4 str x4, [x29,#144]
p->out = outdev;
ffff8000113aaeac: f9004fbf str xzr, [x29,#152]
p->sk = sk;
ffff8000113aaeb0: f90053bf str xzr, [x29,#160]
p->net = net;
ffff8000113aaeb4: f90057a6 str x6, [x29,#168]
p->okfn = okfn;
ffff8000113aaeb8: f9005bbf str xzr, [x29,#176]
ffff8000113aaebc: 94000000 bl 0 <nf_hook_slow>
ffff8000113aaebc: R_AARCH64_CALL26 nf_hook_slow
if (ret == 0)
return -1;
ffff8000113aaec0: 6b1f001f cmp w0, wzr
ffff8000113aaec4: 5a9f1002 csinv w2, w0, wzr, ne
if (nf_ingress(skb, &pt_prev, &ret, orig_dev) < 0)
ffff8000113aaec8: 37ffca82 tbnz w2, #31, ffff8000113aa818 <__netif_receive_skb_core+0x380>
ffff8000113aaecc: f9403fbc ldr x28, [x29,#120]
ffff8000113aaed0: d2800018 mov x24, #0x0 // #0
ffff8000113aaed4: 17fffe8a b ffff8000113aa8fc <__netif_receive_skb_core+0x464>
return skb_copy_ubufs(skb, gfp_mask);
ffff8000113aaed8: aa1c03e0 mov x0, x28
ffff8000113aaedc: 52814401 mov w1, #0xa20 // #2592
ffff8000113aaee0: 94000000 bl 0 <skb_copy_ubufs>
ffff8000113aaee0: R_AARCH64_CALL26 skb_copy_ubufs
return -ENOMEM;
ffff8000113aaee4: 12800174 mov w20, #0xfffffff4 // #-12
if (unlikely(skb_orphan_frags_rx(skb, GFP_ATOMIC)))
ffff8000113aaee8: 35ffba20 cbnz w0, ffff8000113aa62c <__netif_receive_skb_core+0x194>
ffff8000113aaeec: 17fffdbe b ffff8000113aa5e4 <__netif_receive_skb_core+0x14c>
__skb_push(skb, skb->mac_len);
ffff8000113aaef0: 7940f380 ldrh w0, [x28,#120]
skb->data -= len;
ffff8000113aaef4: f9406781 ldr x1, [x28,#200]
skb->len += len;
ffff8000113aaef8: b9407382 ldr w2, [x28,#112]
skb->data -= len;
ffff8000113aaefc: cb202021 sub x1, x1, w0, uxth
skb->len += len;
ffff8000113aaf00: 0b000040 add w0, w2, w0
ffff8000113aaf04: b9007380 str w0, [x28,#112]
skb->data -= len;
ffff8000113aaf08: f9006781 str x1, [x28,#200]
skb_do_redirect(skb);
ffff8000113aaf0c: aa1c03e0 mov x0, x28
ffff8000113aaf10: 94000000 bl 0 <skb_do_redirect>
ffff8000113aaf10: R_AARCH64_CALL26 skb_do_redirect
ffff8000113aaf14: 17fffe41 b ffff8000113aa818 <__netif_receive_skb_core+0x380>
consume_skb(skb);
ffff8000113aaf18: aa1c03e0 mov x0, x28
ffff8000113aaf1c: 94000000 bl 0 <consume_skb>
ffff8000113aaf1c: R_AARCH64_CALL26 consume_skb
ffff8000113aaf20: 17fffe3e b ffff8000113aa818 <__netif_receive_skb_core+0x380>
mini_qdisc_qstats_cpu_drop(miniq);
ffff8000113aaf24: 910060c0 add x0, x6, #0x18
ffff8000113aaf28: 94000000 bl ffff80001139e37c <__my_cpu_offset>
ffff8000113aaf28: R_AARCH64_CALL26 .text.unlikely+0x64
kfree_skb(skb);
ffff8000113aaf2c: aa1c03e0 mov x0, x28
ffff8000113aaf30: 94000000 bl 0 <kfree_skb>
ffff8000113aaf30: R_AARCH64_CALL26 kfree_skb
ffff8000113aaf34: 17fffe39 b ffff8000113aa818 <__netif_receive_skb_core+0x380>
skb->tc_index = TC_H_MIN(cl_res.classid);
ffff8000113aaf38: b94093a0 ldr w0, [x29,#144]
ffff8000113aaf3c: d2800018 mov x24, #0x0 // #0
ffff8000113aaf40: 79010f80 strh w0, [x28,#134]
ffff8000113aaf44: 17ffffc4 b ffff8000113aae54 <__netif_receive_skb_core+0x9bc>
return skb_copy_ubufs(skb, gfp_mask);
ffff8000113aaf48: aa1c03e0 mov x0, x28
ffff8000113aaf4c: 52814401 mov w1, #0xa20 // #2592
ffff8000113aaf50: 94000000 bl 0 <skb_copy_ubufs>
ffff8000113aaf50: R_AARCH64_CALL26 skb_copy_ubufs
if (unlikely(skb_orphan_frags_rx(skb, GFP_ATOMIC)))
ffff8000113aaf54: 34ffc5e0 cbz w0, ffff8000113aa810 <__netif_receive_skb_core+0x378>
ffff8000113aaf58: f9403fbc ldr x28, [x29,#120]
ffff8000113aaf5c: 17fffe74 b ffff8000113aa92c <__netif_receive_skb_core+0x494>
refcount_warn_saturate(r, REFCOUNT_ADD_UAF);
ffff8000113aaf60: 52800041 mov w1, #0x2 // #2
ffff8000113aaf64: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113aaf64: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113aaf68: 17fffdaa b ffff8000113aa610 <__netif_receive_skb_core+0x178>
ffff8000113aaf6c: f9404ef6 ldr x22, [x23,#152]
deliver_ptype_list_skb(skb, &pt_prev, orig_dev, type,
ffff8000113aaf70: 910262f7 add x23, x23, #0x98
list_for_each_entry_rcu(ptype, ptype_list, list) {
ffff8000113aaf74: eb1602ff cmp x23, x22
ffff8000113aaf78: d100c2d6 sub x22, x22, #0x30
ffff8000113aaf7c: 540006c0 b.eq ffff8000113ab054 <__netif_receive_skb_core+0xbbc>
refcount_inc(&skb->users);
ffff8000113aaf80: 91035395 add x21, x28, #0xd4
ffff8000113aaf84: 14000005 b ffff8000113aaf98 <__netif_receive_skb_core+0xb00>
ffff8000113aaf88: f9401ad6 ldr x22, [x22,#48]
list_for_each_entry_rcu(ptype, ptype_list, list) {
ffff8000113aaf8c: eb1602ff cmp x23, x22
ffff8000113aaf90: d100c2d6 sub x22, x22, #0x30
ffff8000113aaf94: 54000600 b.eq ffff8000113ab054 <__netif_receive_skb_core+0xbbc>
if (ptype->type != type)
ffff8000113aaf98: 794002c0 ldrh w0, [x22]
ffff8000113aaf9c: 6b19001f cmp w0, w25
ffff8000113aafa0: 54ffff41 b.ne ffff8000113aaf88 <__netif_receive_skb_core+0xaf0>
if (pt_prev)
ffff8000113aafa4: b40003f8 cbz x24, ffff8000113ab020 <__netif_receive_skb_core+0xb88>
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113aafa8: b400011c cbz x28, ffff8000113aafc8 <__netif_receive_skb_core+0xb30>
return skb->head + skb->end;
ffff8000113aafac: f9406381 ldr x1, [x28,#192]
ffff8000113aafb0: b940bf80 ldr w0, [x28,#188]
ffff8000113aafb4: 8b000020 add x0, x1, x0
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
ffff8000113aafb8: 39400c01 ldrb w1, [x0,#3]
ffff8000113aafbc: 36180061 tbz w1, #3, ffff8000113aafc8 <__netif_receive_skb_core+0xb30>
if (likely(!skb_zcopy(skb)))
ffff8000113aafc0: f9401400 ldr x0, [x0,#40]
ffff8000113aafc4: b5000260 cbnz x0, ffff8000113ab010 <__netif_receive_skb_core+0xb78>
ATOMIC_OPS(add, add, I)
ffff8000113aafc8: f98002b1 prfm pstl1strm, [x21]
ffff8000113aafcc: 885f7ea0 ldxr w0, [x21]
ffff8000113aafd0: 11000401 add w1, w0, #0x1
ffff8000113aafd4: 88027ea1 stxr w2, w1, [x21]
ffff8000113aafd8: 35ffffa2 cbnz w2, ffff8000113aafcc <__netif_receive_skb_core+0xb34>
if (unlikely(!old))
ffff8000113aafdc: 6b1f001f cmp w0, wzr
ffff8000113aafe0: 54000520 b.eq ffff8000113ab084 <__netif_receive_skb_core+0xbec>
else if (unlikely(old < 0 || old + i < 0))
ffff8000113aafe4: 5400048b b.lt ffff8000113ab074 <__netif_receive_skb_core+0xbdc>
ffff8000113aafe8: 3100041f cmn w0, #0x1
ffff8000113aafec: 54000444 b.mi ffff8000113ab074 <__netif_receive_skb_core+0xbdc>
return pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
ffff8000113aaff0: f9400b04 ldr x4, [x24,#16]
ffff8000113aaff4: f9400b81 ldr x1, [x28,#16]
ffff8000113aaff8: aa1803e2 mov x2, x24
ffff8000113aaffc: aa1c03e0 mov x0, x28
ffff8000113ab000: aa1303e3 mov x3, x19
ffff8000113ab004: d63f0080 blr x4
ffff8000113ab008: aa1603f8 mov x24, x22
ffff8000113ab00c: 17ffffdf b ffff8000113aaf88 <__netif_receive_skb_core+0xaf0>
return skb_copy_ubufs(skb, gfp_mask);
ffff8000113ab010: aa1c03e0 mov x0, x28
ffff8000113ab014: 52814401 mov w1, #0xa20 // #2592
ffff8000113ab018: 94000000 bl 0 <skb_copy_ubufs>
ffff8000113ab018: R_AARCH64_CALL26 skb_copy_ubufs
if (unlikely(skb_orphan_frags_rx(skb, GFP_ATOMIC)))
ffff8000113ab01c: 34fffd60 cbz w0, ffff8000113aafc8 <__netif_receive_skb_core+0xb30>
ffff8000113ab020: aa1603f8 mov x24, x22
ffff8000113ab024: 17ffffd9 b ffff8000113aaf88 <__netif_receive_skb_core+0xaf0>
} else if (skb->protocol == cpu_to_be16(ETH_P_8021Q) ||
ffff8000113ab028: 7102041f cmp w0, #0x81
ffff8000113ab02c: 54ffdd00 b.eq ffff8000113aabcc <__netif_receive_skb_core+0x734>
ffff8000113ab030: 39420b80 ldrb w0, [x28,#130]
ffff8000113ab034: d2800018 mov x24, #0x0 // #0
ffff8000113ab038: 121f7800 and w0, w0, #0xfffffffe
ffff8000113ab03c: 39020b80 strb w0, [x28,#130]
ffff8000113ab040: 17fffd8a b ffff8000113aa668 <__netif_receive_skb_core+0x1d0>
return NET_RX_DROP;
ffff8000113ab044: 52800020 mov w0, #0x1 // #1
ffff8000113ab048: 17fffdf5 b ffff8000113aa81c <__netif_receive_skb_core+0x384>
return XDP_PASS;
ffff8000113ab04c: 52800040 mov w0, #0x2 // #2
ffff8000113ab050: 17ffff20 b ffff8000113aacd0 <__netif_receive_skb_core+0x838>
ffff8000113ab054: f9403fbc ldr x28, [x29,#120]
if (pt_prev) {
ffff8000113ab058: b5ffbcd8 cbnz x24, ffff8000113aa7f0 <__netif_receive_skb_core+0x358>
ffff8000113ab05c: 17fffe34 b ffff8000113aa92c <__netif_receive_skb_core+0x494>
refcount_warn_saturate(r, REFCOUNT_ADD_UAF);
ffff8000113ab060: 52800041 mov w1, #0x2 // #2
ffff8000113ab064: f90033a4 str x4, [x29,#96]
ffff8000113ab068: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113ab068: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113ab06c: f94033a4 ldr x4, [x29,#96]
ffff8000113ab070: 17fffe0e b ffff8000113aa8a8 <__netif_receive_skb_core+0x410>
refcount_warn_saturate(r, REFCOUNT_ADD_OVF);
ffff8000113ab074: aa1503e0 mov x0, x21
ffff8000113ab078: 52800021 mov w1, #0x1 // #1
ffff8000113ab07c: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113ab07c: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113ab080: 17ffffdc b ffff8000113aaff0 <__netif_receive_skb_core+0xb58>
refcount_warn_saturate(r, REFCOUNT_ADD_UAF);
ffff8000113ab084: aa1503e0 mov x0, x21
ffff8000113ab088: 52800041 mov w1, #0x2 // #2
ffff8000113ab08c: 94000000 bl 0 <refcount_warn_saturate>
ffff8000113ab08c: R_AARCH64_CALL26 refcount_warn_saturate
ffff8000113ab090: 17ffffd8 b ffff8000113aaff0 <__netif_receive_skb_core+0xb58>
ffff8000113ab094 <__netif_receive_skb_one_core>:
{
ffff8000113ab094: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113ab098: 910003fd mov x29, sp
ffff8000113ab09c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ab0a0: f90013f5 str x21, [sp,#32]
ffff8000113ab0a4: aa0003f3 mov x19, x0
ffff8000113ab0a8: aa1e03e0 mov x0, x30
ffff8000113ab0ac: 53001c35 uxtb w21, w1
ffff8000113ab0b0: 90000014 adrp x20, 0 <__stack_chk_guard>
ffff8000113ab0b0: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ab0b4: 94000000 bl 0 <_mcount>
ffff8000113ab0b4: R_AARCH64_CALL26 _mcount
struct packet_type *pt_prev = NULL;
ffff8000113ab0b8: 910103a2 add x2, x29, #0x40
{
ffff8000113ab0bc: f9400283 ldr x3, [x20]
ffff8000113ab0bc: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
struct packet_type *pt_prev = NULL;
ffff8000113ab0c0: f81f0c5f str xzr, [x2,#-16]!
ret = __netif_receive_skb_core(skb, pfmemalloc, &pt_prev);
ffff8000113ab0c4: 2a1503e1 mov w1, w21
ffff8000113ab0c8: aa1303e0 mov x0, x19
{
ffff8000113ab0cc: f9001fa3 str x3, [x29,#56]
struct net_device *orig_dev = skb->dev;
ffff8000113ab0d0: f9400a75 ldr x21, [x19,#16]
ret = __netif_receive_skb_core(skb, pfmemalloc, &pt_prev);
ffff8000113ab0d4: 97fffcf1 bl ffff8000113aa498 <__netif_receive_skb_core>
if (pt_prev)
ffff8000113ab0d8: f9401ba2 ldr x2, [x29,#48]
ffff8000113ab0dc: b40000c2 cbz x2, ffff8000113ab0f4 <__netif_receive_skb_one_core+0x60>
ret = INDIRECT_CALL_INET(pt_prev->func, ipv6_rcv, ip_rcv, skb,
ffff8000113ab0e0: f9400844 ldr x4, [x2,#16]
ffff8000113ab0e4: f9400a61 ldr x1, [x19,#16]
ffff8000113ab0e8: aa1303e0 mov x0, x19
ffff8000113ab0ec: aa1503e3 mov x3, x21
ffff8000113ab0f0: d63f0080 blr x4
}
ffff8000113ab0f4: f9401fa2 ldr x2, [x29,#56]
ffff8000113ab0f8: f9400281 ldr x1, [x20]
ffff8000113ab0f8: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ab0fc: eb01005f cmp x2, x1
ffff8000113ab100: 540000a1 b.ne ffff8000113ab114 <__netif_receive_skb_one_core+0x80>
ffff8000113ab104: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ab108: f94013f5 ldr x21, [sp,#32]
ffff8000113ab10c: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113ab110: d65f03c0 ret
ffff8000113ab114: 94000000 bl 0 <__stack_chk_fail>
ffff8000113ab114: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113ab118 <netif_receive_skb_core>:
{
ffff8000113ab118: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113ab11c: 910003fd mov x29, sp
ffff8000113ab120: f9000bf3 str x19, [sp,#16]
ffff8000113ab124: aa0003f3 mov x19, x0
ffff8000113ab128: aa1e03e0 mov x0, x30
ffff8000113ab12c: 94000000 bl 0 <_mcount>
ffff8000113ab12c: R_AARCH64_CALL26 _mcount
ret = __netif_receive_skb_one_core(skb, false);
ffff8000113ab130: 52800001 mov w1, #0x0 // #0
ffff8000113ab134: aa1303e0 mov x0, x19
ffff8000113ab138: 97ffffd7 bl ffff8000113ab094 <__netif_receive_skb_one_core>
}
ffff8000113ab13c: f9400bf3 ldr x19, [sp,#16]
ffff8000113ab140: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113ab144: d65f03c0 ret
ffff8000113ab148 <__netif_receive_skb>:
{
ffff8000113ab148: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113ab14c: 910003fd mov x29, sp
ffff8000113ab150: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ab154: aa0003f3 mov x19, x0
ffff8000113ab158: aa1e03e0 mov x0, x30
ffff8000113ab15c: 94000000 bl 0 <_mcount>
ffff8000113ab15c: R_AARCH64_CALL26 _mcount
ffff8000113ab160: 90000000 adrp x0, 0 <memalloc_socks_key>
ffff8000113ab160: R_AARCH64_ADR_PREL_PG_HI21 memalloc_socks_key
ffff8000113ab164: b9400000 ldr w0, [x0]
ffff8000113ab164: R_AARCH64_LDST32_ABS_LO12_NC memalloc_socks_key
if (sk_memalloc_socks() && skb_pfmemalloc(skb)) {
ffff8000113ab168: 6b1f001f cmp w0, wzr
ffff8000113ab16c: 540000ec b.gt ffff8000113ab188 <__netif_receive_skb+0x40>
ret = __netif_receive_skb_one_core(skb, false);
ffff8000113ab170: aa1303e0 mov x0, x19
ffff8000113ab174: 52800001 mov w1, #0x0 // #0
ffff8000113ab178: 97ffffc7 bl ffff8000113ab094 <__netif_receive_skb_one_core>
}
ffff8000113ab17c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ab180: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113ab184: d65f03c0 ret
return unlikely(skb->pfmemalloc);
ffff8000113ab188: 3941fa60 ldrb w0, [x19,#126]
if (sk_memalloc_socks() && skb_pfmemalloc(skb)) {
ffff8000113ab18c: 3637ff20 tbz w0, #6, ffff8000113ab170 <__netif_receive_skb+0x28>
ffff8000113ab190: d5384114 mrs x20, sp_el0
current->flags = (current->flags & ~PF_MEMALLOC_NOFS) | flags;
}
static inline unsigned int memalloc_noreclaim_save(void)
{
unsigned int flags = current->flags & PF_MEMALLOC;
ffff8000113ab194: b9403682 ldr w2, [x20,#52]
ret = __netif_receive_skb_one_core(skb, true);
ffff8000113ab198: aa1303e0 mov x0, x19
current->flags |= PF_MEMALLOC;
ffff8000113ab19c: 32150041 orr w1, w2, #0x800
ffff8000113ab1a0: b9003681 str w1, [x20,#52]
ffff8000113ab1a4: 52800021 mov w1, #0x1 // #1
unsigned int flags = current->flags & PF_MEMALLOC;
ffff8000113ab1a8: 12150053 and w19, w2, #0x800
ffff8000113ab1ac: 97ffffba bl ffff8000113ab094 <__netif_receive_skb_one_core>
return flags;
}
static inline void memalloc_noreclaim_restore(unsigned int flags)
{
current->flags = (current->flags & ~PF_MEMALLOC) | flags;
ffff8000113ab1b0: b9403681 ldr w1, [x20,#52]
ffff8000113ab1b4: 12147821 and w1, w1, #0xfffff7ff
ffff8000113ab1b8: 2a130033 orr w19, w1, w19
ffff8000113ab1bc: b9003693 str w19, [x20,#52]
ffff8000113ab1c0: 17ffffef b ffff8000113ab17c <__netif_receive_skb+0x34>
ffff8000113ab1c4 <netif_receive_skb>:
{
ffff8000113ab1c4: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113ab1c8: 910003fd mov x29, sp
ffff8000113ab1cc: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ab1d0: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113ab1d4: aa0003f4 mov x20, x0
ffff8000113ab1d8: aa1e03e0 mov x0, x30
ffff8000113ab1dc: 94000000 bl 0 <_mcount>
ffff8000113ab1dc: R_AARCH64_CALL26 _mcount
ffff8000113ab1e0: 90000016 adrp x22, 0 <__stack_chk_guard>
ffff8000113ab1e0: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ab1e4: f94002c0 ldr x0, [x22]
ffff8000113ab1e4: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ab1e8: f90027a0 str x0, [x29,#72]
ffff8000113ab1ec: 90000000 adrp x0, 0 <__tracepoint_netif_receive_skb_entry>
ffff8000113ab1ec: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_netif_receive_skb_entry
ffff8000113ab1f0: 91000000 add x0, x0, #0x0
ffff8000113ab1f0: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_netif_receive_skb_entry
ffff8000113ab1f4: b9400801 ldr w1, [x0,#8]
ffff8000113ab1f8: 6b1f003f cmp w1, wzr
ffff8000113ab1fc: 5400080c b.gt ffff8000113ab2fc <netif_receive_skb+0x138>
ffff8000113ab200: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ab200: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113ab204: 91000000 add x0, x0, #0x0
ffff8000113ab204: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113ab208: b9434800 ldr w0, [x0,#840]
net_timestamp_check(netdev_tstamp_prequeue, skb);
ffff8000113ab20c: 6b1f001f cmp w0, wzr
ffff8000113ab210: 5400066c b.gt ffff8000113ab2dc <netif_receive_skb+0x118>
if (skb_defer_rx_timestamp(skb))
ffff8000113ab214: aa1403e0 mov x0, x20
ffff8000113ab218: 94000000 bl 0 <skb_defer_rx_timestamp>
ffff8000113ab218: R_AARCH64_CALL26 skb_defer_rx_timestamp
ffff8000113ab21c: 53001c00 uxtb w0, w0
return NET_RX_SUCCESS;
ffff8000113ab220: 52800015 mov w21, #0x0 // #0
if (skb_defer_rx_timestamp(skb))
ffff8000113ab224: 340001e0 cbz w0, ffff8000113ab260 <netif_receive_skb+0x9c>
ffff8000113ab228: 90000000 adrp x0, 0 <__tracepoint_netif_receive_skb_exit>
ffff8000113ab228: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_netif_receive_skb_exit
ffff8000113ab22c: 91000000 add x0, x0, #0x0
ffff8000113ab22c: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_netif_receive_skb_exit
ffff8000113ab230: b9400801 ldr w1, [x0,#8]
ffff8000113ab234: 6b1f003f cmp w1, wzr
ffff8000113ab238: 5400028c b.gt ffff8000113ab288 <netif_receive_skb+0xc4>
}
ffff8000113ab23c: f94027a2 ldr x2, [x29,#72]
ffff8000113ab240: f94002c1 ldr x1, [x22]
ffff8000113ab240: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ab244: 2a1503e0 mov w0, w21
ffff8000113ab248: eb01005f cmp x2, x1
ffff8000113ab24c: 540001c1 b.ne ffff8000113ab284 <netif_receive_skb+0xc0>
ffff8000113ab250: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ab254: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113ab258: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113ab25c: d65f03c0 ret
ffff8000113ab260: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ab260: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113ab264: 91000000 add x0, x0, #0x0
ffff8000113ab264: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113ab268: b9495000 ldr w0, [x0,#2384]
if (static_branch_unlikely(&rps_needed)) {
ffff8000113ab26c: 6b15001f cmp w0, w21
ffff8000113ab270: 5400070c b.gt ffff8000113ab350 <netif_receive_skb+0x18c>
ret = __netif_receive_skb(skb);
ffff8000113ab274: aa1403e0 mov x0, x20
ffff8000113ab278: 97ffffb4 bl ffff8000113ab148 <__netif_receive_skb>
return ret;
ffff8000113ab27c: 2a0003f5 mov w21, w0
ffff8000113ab280: 17ffffea b ffff8000113ab228 <netif_receive_skb+0x64>
}
ffff8000113ab284: 94000000 bl 0 <__stack_chk_fail>
ffff8000113ab284: R_AARCH64_CALL26 __stack_chk_fail
DEFINE_EVENT(net_dev_rx_exit_template, netif_receive_skb_exit,
ffff8000113ab288: 90000001 adrp x1, 0 <cpu_number>
ffff8000113ab288: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113ab28c: d538d082 mrs x2, tpidr_el1
ffff8000113ab290: 91000021 add x1, x1, #0x0
ffff8000113ab290: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113ab294: b8616841 ldr w1, [x2,x1]
ffff8000113ab298: 52800803 mov w3, #0x40 // #64
ffff8000113ab29c: 1ac30c23 sdiv w3, w1, w3
ffff8000113ab2a0: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113ab2a0: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113ab2a4: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113ab2a8: 91000042 add x2, x2, #0x0
ffff8000113ab2a8: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113ab2ac: f8626862 ldr x2, [x3,x2]
ffff8000113ab2b0: 9ac12441 lsr x1, x2, x1
ffff8000113ab2b4: 3607fc41 tbz w1, #0, ffff8000113ab23c <netif_receive_skb+0x78>
ffff8000113ab2b8: f9401013 ldr x19, [x0,#32]
ffff8000113ab2bc: b40000f3 cbz x19, ffff8000113ab2d8 <netif_receive_skb+0x114>
ffff8000113ab2c0: f9400262 ldr x2, [x19]
ffff8000113ab2c4: f9400660 ldr x0, [x19,#8]
ffff8000113ab2c8: 2a1503e1 mov w1, w21
ffff8000113ab2cc: d63f0040 blr x2
ffff8000113ab2d0: f8418e62 ldr x2, [x19,#24]!
ffff8000113ab2d4: b5ffff82 cbnz x2, ffff8000113ab2c4 <netif_receive_skb+0x100>
ffff8000113ab2d8: 17ffffd9 b ffff8000113ab23c <netif_receive_skb+0x78>
net_timestamp_check(netdev_tstamp_prequeue, skb);
ffff8000113ab2dc: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ab2dc: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly+0x94c
ffff8000113ab2e0: b9400000 ldr w0, [x0]
ffff8000113ab2e0: R_AARCH64_LDST32_ABS_LO12_NC .data..read_mostly+0x94c
ffff8000113ab2e4: 34fff980 cbz w0, ffff8000113ab214 <netif_receive_skb+0x50>
ffff8000113ab2e8: f9401280 ldr x0, [x20,#32]
ffff8000113ab2ec: b5fff940 cbnz x0, ffff8000113ab214 <netif_receive_skb+0x50>
ffff8000113ab2f0: 94000000 bl 0 <ktime_get_with_offset>
ffff8000113ab2f0: R_AARCH64_CALL26 ktime_get_with_offset
skb->tstamp = ktime_get_real();
ffff8000113ab2f4: f9001280 str x0, [x20,#32]
ffff8000113ab2f8: 17ffffc7 b ffff8000113ab214 <netif_receive_skb+0x50>
DEFINE_EVENT(net_dev_rx_verbose_template, netif_receive_skb_entry,
ffff8000113ab2fc: 90000001 adrp x1, 0 <cpu_number>
ffff8000113ab2fc: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113ab300: d538d082 mrs x2, tpidr_el1
ffff8000113ab304: 91000021 add x1, x1, #0x0
ffff8000113ab304: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113ab308: b8616841 ldr w1, [x2,x1]
ffff8000113ab30c: 52800803 mov w3, #0x40 // #64
ffff8000113ab310: 1ac30c23 sdiv w3, w1, w3
ffff8000113ab314: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113ab314: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113ab318: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113ab31c: 91000042 add x2, x2, #0x0
ffff8000113ab31c: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113ab320: f8626862 ldr x2, [x3,x2]
ffff8000113ab324: 9ac12441 lsr x1, x2, x1
ffff8000113ab328: 3607f6c1 tbz w1, #0, ffff8000113ab200 <netif_receive_skb+0x3c>
ffff8000113ab32c: f9401013 ldr x19, [x0,#32]
ffff8000113ab330: b40000f3 cbz x19, ffff8000113ab34c <netif_receive_skb+0x188>
ffff8000113ab334: f9400262 ldr x2, [x19]
ffff8000113ab338: f9400660 ldr x0, [x19,#8]
ffff8000113ab33c: aa1403e1 mov x1, x20
ffff8000113ab340: d63f0040 blr x2
ffff8000113ab344: f8418e62 ldr x2, [x19,#24]!
ffff8000113ab348: b5ffff82 cbnz x2, ffff8000113ab338 <netif_receive_skb+0x174>
ffff8000113ab34c: 17ffffad b ffff8000113ab200 <netif_receive_skb+0x3c>
struct rps_dev_flow voidflow, *rflow = &voidflow;
ffff8000113ab350: 910143a2 add x2, x29, #0x50
ffff8000113ab354: 9100e3a0 add x0, x29, #0x38
ffff8000113ab358: f81f0c40 str x0, [x2,#-16]!
int cpu = get_rps_cpu(skb->dev, skb, &rflow);
ffff8000113ab35c: f9400a80 ldr x0, [x20,#16]
ffff8000113ab360: aa1403e1 mov x1, x20
ffff8000113ab364: 97ffd549 bl ffff8000113a0888 <get_rps_cpu>
ffff8000113ab368: 2a0003e1 mov w1, w0
if (cpu >= 0) {
ffff8000113ab36c: 37fff841 tbnz w1, #31, ffff8000113ab274 <netif_receive_skb+0xb0>
ret = enqueue_to_backlog(skb, cpu, &rflow->last_qtail);
ffff8000113ab370: f94023a2 ldr x2, [x29,#64]
ffff8000113ab374: aa1403e0 mov x0, x20
ffff8000113ab378: 91001042 add x2, x2, #0x4
ffff8000113ab37c: 97ffec97 bl ffff8000113a65d8 <enqueue_to_backlog>
return ret;
ffff8000113ab380: 2a0003f5 mov w21, w0
ffff8000113ab384: 17ffffa9 b ffff8000113ab228 <netif_receive_skb+0x64>
ffff8000113ab388 <process_backlog>:
{
ffff8000113ab388: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff8000113ab38c: 910003fd mov x29, sp
ffff8000113ab390: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ab394: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113ab398: a90363f7 stp x23, x24, [sp,#48]
ffff8000113ab39c: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113ab3a0: a90573fb stp x27, x28, [sp,#80]
ffff8000113ab3a4: aa0003f3 mov x19, x0
ffff8000113ab3a8: aa1e03e0 mov x0, x30
ffff8000113ab3ac: 2a0103f6 mov w22, w1
ffff8000113ab3b0: 94000000 bl 0 <_mcount>
ffff8000113ab3b0: R_AARCH64_CALL26 _mcount
if (sd_has_rps_ipi_waiting(sd)) {
ffff8000113ab3b4: f8528260 ldur x0, [x19,#-216]
ffff8000113ab3b8: b4000120 cbz x0, ffff8000113ab3dc <process_backlog+0x54>
asm volatile(ALTERNATIVE(
ffff8000113ab3bc: d2800c00 mov x0, #0x60 // #96
ffff8000113ab3c0: d50342df msr daifset, #0x2
struct softnet_data *remsd = sd->rps_ipi_list;
ffff8000113ab3c4: f8528260 ldur x0, [x19,#-216]
if (remsd) {
ffff8000113ab3c8: b4000a00 cbz x0, ffff8000113ab508 <process_backlog+0x180>
sd->rps_ipi_list = NULL;
ffff8000113ab3cc: f812827f stur xzr, [x19,#-216]
asm volatile(ALTERNATIVE(
ffff8000113ab3d0: d2801c01 mov x1, #0xe0 // #224
ffff8000113ab3d4: d50342ff msr daifclr, #0x2
net_rps_send_ipi(remsd);
ffff8000113ab3d8: 97ffd814 bl ffff8000113a1428 <net_rps_send_ipi>
napi->weight = dev_rx_weight;
ffff8000113ab3dc: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ab3dc: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly+0x954
ffff8000113ab3e0: b9400000 ldr w0, [x0]
ffff8000113ab3e0: R_AARCH64_LDST32_ABS_LO12_NC .data..read_mostly+0x954
ffff8000113ab3e4: d104427b sub x27, x19, #0x110
ffff8000113ab3e8: 91004375 add x21, x27, #0x10
ffff8000113ab3ec: b9001a60 str w0, [x19,#24]
int work = 0;
ffff8000113ab3f0: 52800014 mov w20, #0x0 // #0
ffff8000113ab3f4: d104027c sub x28, x19, #0x100
asm volatile(ALTERNATIVE(
ffff8000113ab3f8: d2800c1a mov x26, #0x60 // #96
#if defined(arch_atomic_cmpxchg_acquire)
static inline int
atomic_cmpxchg_acquire(atomic_t *v, int old, int new)
{
kasan_check_write(v, sizeof(*v));
return arch_atomic_cmpxchg_acquire(v, old, new);
ffff8000113ab3fc: d1001277 sub x23, x19, #0x4
__CMPXCHG_CASE(w, , acq_, 32, , a, , "memory", K)
ffff8000113ab400: d2800019 mov x25, #0x0 // #0
ffff8000113ab404: 52800038 mov w24, #0x1 // #1
if (skb_queue_empty(&sd->input_pkt_queue)) {
ffff8000113ab408: 9103e37b add x27, x27, #0xf8
ffff8000113ab40c: 14000012 b ffff8000113ab454 <process_backlog+0xcc>
if (skb)
ffff8000113ab410: b4000280 cbz x0, ffff8000113ab460 <process_backlog+0xd8>
WRITE_ONCE(list->qlen, list->qlen - 1);
ffff8000113ab414: b9401381 ldr w1, [x28,#16]
ffff8000113ab418: 51000421 sub w1, w1, #0x1
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff8000113ab41c: b8110261 stur w1, [x19,#-240]
next = skb->next;
ffff8000113ab420: f9400002 ldr x2, [x0]
prev = skb->prev;
ffff8000113ab424: f9400401 ldr x1, [x0,#8]
skb->next = skb->prev = NULL;
ffff8000113ab428: f900001f str xzr, [x0]
ffff8000113ab42c: f900041f str xzr, [x0,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113ab430: f9000441 str x1, [x2,#8]
ffff8000113ab434: f9000022 str x2, [x1]
__netif_receive_skb(skb);
ffff8000113ab438: 97ffff44 bl ffff8000113ab148 <__netif_receive_skb>
sd->input_queue_head++;
ffff8000113ab43c: b8570260 ldur w0, [x19,#-144]
if (++work >= quota)
ffff8000113ab440: 11000694 add w20, w20, #0x1
ffff8000113ab444: 11000400 add w0, w0, #0x1
ffff8000113ab448: b8170260 stur w0, [x19,#-144]
ffff8000113ab44c: 6b16029f cmp w20, w22
ffff8000113ab450: 5400046a b.ge ffff8000113ab4dc <process_backlog+0x154>
struct sk_buff *skb = list_->next;
ffff8000113ab454: f9400380 ldr x0, [x28]
if (skb == (struct sk_buff *)list_)
ffff8000113ab458: eb15001f cmp x0, x21
ffff8000113ab45c: 54fffda1 b.ne ffff8000113ab410 <process_backlog+0x88>
ffff8000113ab460: d50342df msr daifset, #0x2
ffff8000113ab464: f98002f1 prfm pstl1strm, [x23]
ffff8000113ab468: 885ffee1 ldaxr w1, [x23]
ffff8000113ab46c: 4a190020 eor w0, w1, w25
ffff8000113ab470: 35000060 cbnz w0, ffff8000113ab47c <process_backlog+0xf4>
ffff8000113ab474: 88007ef8 stxr w0, w24, [x23]
ffff8000113ab478: 35ffff80 cbnz w0, ffff8000113ab468 <process_backlog+0xe0>
ffff8000113ab47c: 350004c1 cbnz w1, ffff8000113ab514 <process_backlog+0x18c>
return list->next == (const struct sk_buff *) list;
ffff8000113ab480: f85e8260 ldur x0, [x19,#-24]
list->qlen = 0;
ffff8000113ab484: 52800021 mov w1, #0x1 // #1
if (skb_queue_empty(&sd->input_pkt_queue)) {
ffff8000113ab488: eb00037f cmp x27, x0
ffff8000113ab48c: 54000380 b.eq ffff8000113ab4fc <process_backlog+0x174>
__skb_queue_splice(list, head->prev, (struct sk_buff *) head);
ffff8000113ab490: f9400783 ldr x3, [x28,#8]
static inline void skb_queue_splice_tail_init(struct sk_buff_head *list,
ffff8000113ab494: f85f0262 ldur x2, [x19,#-16]
ffff8000113ab498: f9000403 str x3, [x0,#8]
ffff8000113ab49c: f9000060 str x0, [x3]
ffff8000113ab4a0: f9000055 str x21, [x2]
ffff8000113ab4a4: f8108262 stur x2, [x19,#-248]
head->qlen += list->qlen;
ffff8000113ab4a8: b9401380 ldr w0, [x28,#16]
ffff8000113ab4ac: b85f8262 ldur w2, [x19,#-8]
ffff8000113ab4b0: 0b000040 add w0, w2, w0
ffff8000113ab4b4: b9001380 str w0, [x28,#16]
list->prev = list->next = (struct sk_buff *)list;
ffff8000113ab4b8: f81e827b stur x27, [x19,#-24]
ffff8000113ab4bc: f81f027b stur x27, [x19,#-16]
list->qlen = 0;
ffff8000113ab4c0: b81f827f stur wzr, [x19,#-8]
smp_store_release(&lock->locked, 0);
ffff8000113ab4c4: 52800000 mov w0, #0x0 // #0
ffff8000113ab4c8: d1001262 sub x2, x19, #0x4
ffff8000113ab4cc: 089ffc40 stlrb w0, [x2]
asm volatile(ALTERNATIVE(
ffff8000113ab4d0: d2801c00 mov x0, #0xe0 // #224
ffff8000113ab4d4: d50342ff msr daifclr, #0x2
while (again) {
ffff8000113ab4d8: 35fffbe1 cbnz w1, ffff8000113ab454 <process_backlog+0xcc>
}
ffff8000113ab4dc: 2a1403e0 mov w0, w20
ffff8000113ab4e0: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113ab4e4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ab4e8: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113ab4ec: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113ab4f0: a94573fb ldp x27, x28, [sp,#80]
ffff8000113ab4f4: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113ab4f8: d65f03c0 ret
napi->state = 0;
ffff8000113ab4fc: f9000a7f str xzr, [x19,#16]
again = false;
ffff8000113ab500: 52800001 mov w1, #0x0 // #0
ffff8000113ab504: 17fffff0 b ffff8000113ab4c4 <process_backlog+0x13c>
ffff8000113ab508: d2801c00 mov x0, #0xe0 // #224
ffff8000113ab50c: d50342ff msr daifclr, #0x2
ffff8000113ab510: 17ffffb3 b ffff8000113ab3dc <process_backlog+0x54>
queued_spin_lock_slowpath(lock, val);
ffff8000113ab514: aa1703e0 mov x0, x23
ffff8000113ab518: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113ab518: R_AARCH64_CALL26 queued_spin_lock_slowpath
ffff8000113ab51c: 17ffffd9 b ffff8000113ab480 <process_backlog+0xf8>
ffff8000113ab520 <__netif_receive_skb_list_core>:
{
ffff8000113ab520: a9b77bfd stp x29, x30, [sp,#-144]!
ffff8000113ab524: 910003fd mov x29, sp
ffff8000113ab528: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ab52c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113ab530: a90363f7 stp x23, x24, [sp,#48]
ffff8000113ab534: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113ab538: a90573fb stp x27, x28, [sp,#80]
ffff8000113ab53c: aa0003fa mov x26, x0
ffff8000113ab540: 53001c21 uxtb w1, w1
ffff8000113ab544: aa1e03e0 mov x0, x30
ffff8000113ab548: b9006fa1 str w1, [x29,#108]
ffff8000113ab54c: 94000000 bl 0 <_mcount>
ffff8000113ab54c: R_AARCH64_CALL26 _mcount
ffff8000113ab550: 90000001 adrp x1, 0 <__stack_chk_guard>
ffff8000113ab550: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ab554: f9400020 ldr x0, [x1]
ffff8000113ab554: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
list_for_each_entry_safe(skb, next, head, list) {
ffff8000113ab558: f9400355 ldr x21, [x26]
WRITE_ONCE(list->next, list);
ffff8000113ab55c: 9101e3b3 add x19, x29, #0x78
{
ffff8000113ab560: f90047a0 str x0, [x29,#136]
ffff8000113ab564: f9003fb3 str x19, [x29,#120]
list->prev = list;
ffff8000113ab568: f90043b3 str x19, [x29,#128]
list_for_each_entry_safe(skb, next, head, list) {
ffff8000113ab56c: eb1a02bf cmp x21, x26
ffff8000113ab570: f94002b6 ldr x22, [x21]
ffff8000113ab574: aa1503f8 mov x24, x21
ffff8000113ab578: 54000c40 b.eq ffff8000113ab700 <__netif_receive_skb_list_core+0x1e0>
struct net_device *od_curr = NULL;
ffff8000113ab57c: d2800017 mov x23, #0x0 // #0
struct packet_type *pt_curr = NULL;
ffff8000113ab580: aa1703f4 mov x20, x23
ffff8000113ab584: 1400001a b ffff8000113ab5ec <__netif_receive_skb_list_core+0xcc>
INDIRECT_CALL_INET(pt_prev->list_func, ipv6_list_rcv,
ffff8000113ab588: aa1403e1 mov x1, x20
ffff8000113ab58c: aa1303e0 mov x0, x19
ffff8000113ab590: aa1703e2 mov x2, x23
ffff8000113ab594: d63f0060 blr x3
ffff8000113ab598: f9403bb4 ldr x20, [x29,#112]
struct net_device *orig_dev = skb->dev;
ffff8000113ab59c: aa1903f7 mov x23, x25
ffff8000113ab5a0: f9003fb3 str x19, [x29,#120]
ffff8000113ab5a4: f9000673 str x19, [x19,#8]
ffff8000113ab5a8: aa1303f9 mov x25, x19
if (!__list_add_valid(new, prev, next))
ffff8000113ab5ac: aa1803e0 mov x0, x24
ffff8000113ab5b0: aa1903e1 mov x1, x25
ffff8000113ab5b4: aa1303e2 mov x2, x19
ffff8000113ab5b8: 94000000 bl 0 <__list_add_valid>
ffff8000113ab5b8: R_AARCH64_CALL26 __list_add_valid
ffff8000113ab5bc: 53001c00 uxtb w0, w0
ffff8000113ab5c0: 340000a0 cbz w0, ffff8000113ab5d4 <__netif_receive_skb_list_core+0xb4>
next->prev = new;
ffff8000113ab5c4: f9000678 str x24, [x19,#8]
new->next = next;
ffff8000113ab5c8: f90002b3 str x19, [x21]
new->prev = prev;
ffff8000113ab5cc: f90006b9 str x25, [x21,#8]
ffff8000113ab5d0: f9000338 str x24, [x25]
list_for_each_entry_safe(skb, next, head, list) {
ffff8000113ab5d4: eb1a02df cmp x22, x26
ffff8000113ab5d8: f94002c0 ldr x0, [x22]
ffff8000113ab5dc: aa1603f8 mov x24, x22
ffff8000113ab5e0: 540007c0 b.eq ffff8000113ab6d8 <__netif_receive_skb_list_core+0x1b8>
ffff8000113ab5e4: aa1603f5 mov x21, x22
ffff8000113ab5e8: aa0003f6 mov x22, x0
if (!__list_del_entry_valid(entry))
ffff8000113ab5ec: aa1803e0 mov x0, x24
struct net_device *orig_dev = skb->dev;
ffff8000113ab5f0: f9400ab9 ldr x25, [x21,#16]
struct packet_type *pt_prev = NULL;
ffff8000113ab5f4: f9003bbf str xzr, [x29,#112]
ffff8000113ab5f8: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113ab5f8: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113ab5fc: 53001c00 uxtb w0, w0
ffff8000113ab600: 340000a0 cbz w0, ffff8000113ab614 <__netif_receive_skb_list_core+0xf4>
__list_del(entry->prev, entry->next);
ffff8000113ab604: f94006a0 ldr x0, [x21,#8]
ffff8000113ab608: f94002a1 ldr x1, [x21]
next->prev = prev;
ffff8000113ab60c: f9000420 str x0, [x1,#8]
ffff8000113ab610: f9000001 str x1, [x0]
__netif_receive_skb_core(skb, pfmemalloc, &pt_prev);
ffff8000113ab614: 3941b3a1 ldrb w1, [x29,#108]
ffff8000113ab618: 9101c3a2 add x2, x29, #0x70
skb->next = NULL;
ffff8000113ab61c: f90002bf str xzr, [x21]
ffff8000113ab620: aa1503e0 mov x0, x21
ffff8000113ab624: 97fffb9d bl ffff8000113aa498 <__netif_receive_skb_core>
if (!pt_prev)
ffff8000113ab628: f9403ba2 ldr x2, [x29,#112]
ffff8000113ab62c: b4fffd42 cbz x2, ffff8000113ab5d4 <__netif_receive_skb_list_core+0xb4>
if (pt_curr != pt_prev || od_curr != orig_dev) {
ffff8000113ab630: eb02029f cmp x20, x2
ffff8000113ab634: 54000460 b.eq ffff8000113ab6c0 <__netif_receive_skb_list_core+0x1a0>
if (!pt_prev)
ffff8000113ab638: b40004d4 cbz x20, ffff8000113ab6d0 <__netif_receive_skb_list_core+0x1b0>
__READ_ONCE_SIZE;
ffff8000113ab63c: f9403fa0 ldr x0, [x29,#120]
if (list_empty(head))
ffff8000113ab640: eb00027f cmp x19, x0
ffff8000113ab644: 54000460 b.eq ffff8000113ab6d0 <__netif_receive_skb_list_core+0x1b0>
if (pt_prev->list_func != NULL)
ffff8000113ab648: f9400e83 ldr x3, [x20,#24]
ffff8000113ab64c: b5fff9e3 cbnz x3, ffff8000113ab588 <__netif_receive_skb_list_core+0x68>
list_for_each_entry_safe(skb, next, head, list) {
ffff8000113ab650: f940027c ldr x28, [x19]
ffff8000113ab654: eb13039f cmp x28, x19
ffff8000113ab658: f940039b ldr x27, [x28]
ffff8000113ab65c: aa1c03e0 mov x0, x28
ffff8000113ab660: 54000081 b.ne ffff8000113ab670 <__netif_receive_skb_list_core+0x150>
ffff8000113ab664: 1400001b b ffff8000113ab6d0 <__netif_receive_skb_list_core+0x1b0>
ffff8000113ab668: aa1b03fc mov x28, x27
ffff8000113ab66c: aa0203fb mov x27, x2
if (!__list_del_entry_valid(entry))
ffff8000113ab670: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113ab670: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113ab674: 53001c00 uxtb w0, w0
ffff8000113ab678: 340000a0 cbz w0, ffff8000113ab68c <__netif_receive_skb_list_core+0x16c>
__list_del(entry->prev, entry->next);
ffff8000113ab67c: f9400780 ldr x0, [x28,#8]
ffff8000113ab680: f9400382 ldr x2, [x28]
next->prev = prev;
ffff8000113ab684: f9000440 str x0, [x2,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113ab688: f9000002 str x2, [x0]
ffff8000113ab68c: f900039f str xzr, [x28]
pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
ffff8000113ab690: f9400a85 ldr x5, [x20,#16]
ffff8000113ab694: f9400b81 ldr x1, [x28,#16]
ffff8000113ab698: aa1403e2 mov x2, x20
ffff8000113ab69c: aa1c03e0 mov x0, x28
ffff8000113ab6a0: aa1703e3 mov x3, x23
ffff8000113ab6a4: d63f00a0 blr x5
list_for_each_entry_safe(skb, next, head, list) {
ffff8000113ab6a8: eb13037f cmp x27, x19
ffff8000113ab6ac: f9400362 ldr x2, [x27]
ffff8000113ab6b0: aa1b03e0 mov x0, x27
ffff8000113ab6b4: 54fffda1 b.ne ffff8000113ab668 <__netif_receive_skb_list_core+0x148>
ffff8000113ab6b8: f9403bb4 ldr x20, [x29,#112]
ffff8000113ab6bc: 17ffffb8 b ffff8000113ab59c <__netif_receive_skb_list_core+0x7c>
if (pt_curr != pt_prev || od_curr != orig_dev) {
ffff8000113ab6c0: eb1902ff cmp x23, x25
ffff8000113ab6c4: 54fffbc1 b.ne ffff8000113ab63c <__netif_receive_skb_list_core+0x11c>
ffff8000113ab6c8: f9400679 ldr x25, [x19,#8]
ffff8000113ab6cc: 17ffffb8 b ffff8000113ab5ac <__netif_receive_skb_list_core+0x8c>
list_for_each_entry_safe(skb, next, head, list) {
ffff8000113ab6d0: aa0203f4 mov x20, x2
ffff8000113ab6d4: 17ffffb2 b ffff8000113ab59c <__netif_receive_skb_list_core+0x7c>
if (!pt_prev)
ffff8000113ab6d8: b4000154 cbz x20, ffff8000113ab700 <__netif_receive_skb_list_core+0x1e0>
__READ_ONCE_SIZE;
ffff8000113ab6dc: f9403fa0 ldr x0, [x29,#120]
if (list_empty(head))
ffff8000113ab6e0: eb00027f cmp x19, x0
ffff8000113ab6e4: 540000e0 b.eq ffff8000113ab700 <__netif_receive_skb_list_core+0x1e0>
if (pt_prev->list_func != NULL)
ffff8000113ab6e8: f9400e83 ldr x3, [x20,#24]
ffff8000113ab6ec: b4000223 cbz x3, ffff8000113ab730 <__netif_receive_skb_list_core+0x210>
INDIRECT_CALL_INET(pt_prev->list_func, ipv6_list_rcv,
ffff8000113ab6f0: aa1303e0 mov x0, x19
ffff8000113ab6f4: aa1403e1 mov x1, x20
ffff8000113ab6f8: aa1703e2 mov x2, x23
ffff8000113ab6fc: d63f0060 blr x3
}
ffff8000113ab700: 90000002 adrp x2, 0 <__stack_chk_guard>
ffff8000113ab700: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ab704: f94047a1 ldr x1, [x29,#136]
ffff8000113ab708: f9400040 ldr x0, [x2]
ffff8000113ab708: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ab70c: eb00003f cmp x1, x0
ffff8000113ab710: 54000461 b.ne ffff8000113ab79c <__netif_receive_skb_list_core+0x27c>
ffff8000113ab714: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ab718: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113ab71c: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113ab720: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113ab724: a94573fb ldp x27, x28, [sp,#80]
ffff8000113ab728: a8c97bfd ldp x29, x30, [sp],#144
ffff8000113ab72c: d65f03c0 ret
list_for_each_entry_safe(skb, next, head, list) {
ffff8000113ab730: f9400276 ldr x22, [x19]
ffff8000113ab734: eb1302df cmp x22, x19
ffff8000113ab738: f94002d5 ldr x21, [x22]
ffff8000113ab73c: aa1603e0 mov x0, x22
ffff8000113ab740: 54000081 b.ne ffff8000113ab750 <__netif_receive_skb_list_core+0x230>
ffff8000113ab744: 17ffffef b ffff8000113ab700 <__netif_receive_skb_list_core+0x1e0>
ffff8000113ab748: aa1503f6 mov x22, x21
ffff8000113ab74c: aa0103f5 mov x21, x1
if (!__list_del_entry_valid(entry))
ffff8000113ab750: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113ab750: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113ab754: 53001c00 uxtb w0, w0
ffff8000113ab758: 340000a0 cbz w0, ffff8000113ab76c <__netif_receive_skb_list_core+0x24c>
__list_del(entry->prev, entry->next);
ffff8000113ab75c: f94006c0 ldr x0, [x22,#8]
ffff8000113ab760: f94002c1 ldr x1, [x22]
next->prev = prev;
ffff8000113ab764: f9000420 str x0, [x1,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113ab768: f9000001 str x1, [x0]
ffff8000113ab76c: f90002df str xzr, [x22]
pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
ffff8000113ab770: f9400ac1 ldr x1, [x22,#16]
ffff8000113ab774: f9400a84 ldr x4, [x20,#16]
ffff8000113ab778: aa1603e0 mov x0, x22
ffff8000113ab77c: aa1403e2 mov x2, x20
ffff8000113ab780: aa1703e3 mov x3, x23
ffff8000113ab784: d63f0080 blr x4
list_for_each_entry_safe(skb, next, head, list) {
ffff8000113ab788: eb1302bf cmp x21, x19
ffff8000113ab78c: f94002a1 ldr x1, [x21]
ffff8000113ab790: aa1503e0 mov x0, x21
ffff8000113ab794: 54fffda1 b.ne ffff8000113ab748 <__netif_receive_skb_list_core+0x228>
ffff8000113ab798: 17ffffda b ffff8000113ab700 <__netif_receive_skb_list_core+0x1e0>
}
ffff8000113ab79c: 94000000 bl 0 <__stack_chk_fail>
ffff8000113ab79c: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113ab7a0 <netif_receive_skb_list_internal>:
{
ffff8000113ab7a0: a9b67bfd stp x29, x30, [sp,#-160]!
ffff8000113ab7a4: 910003fd mov x29, sp
ffff8000113ab7a8: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ab7ac: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113ab7b0: a90363f7 stp x23, x24, [sp,#48]
ffff8000113ab7b4: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113ab7b8: f9002bfb str x27, [sp,#80]
ffff8000113ab7bc: aa0003f3 mov x19, x0
ffff8000113ab7c0: aa1e03e0 mov x0, x30
ffff8000113ab7c4: 94000000 bl 0 <_mcount>
ffff8000113ab7c4: R_AARCH64_CALL26 _mcount
ffff8000113ab7c8: 90000017 adrp x23, 0 <__stack_chk_guard>
ffff8000113ab7c8: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ab7cc: f94002e0 ldr x0, [x23]
ffff8000113ab7cc: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
list_for_each_entry_safe(skb, next, head, list) {
ffff8000113ab7d0: f9400275 ldr x21, [x19]
WRITE_ONCE(list->next, list);
ffff8000113ab7d4: 9101e3b8 add x24, x29, #0x78
{
ffff8000113ab7d8: f9004fa0 str x0, [x29,#152]
ffff8000113ab7dc: f9003fb8 str x24, [x29,#120]
list->prev = list;
ffff8000113ab7e0: f90043b8 str x24, [x29,#128]
list_for_each_entry_safe(skb, next, head, list) {
ffff8000113ab7e4: eb1302bf cmp x21, x19
ffff8000113ab7e8: f94002b4 ldr x20, [x21]
ffff8000113ab7ec: aa1503f6 mov x22, x21
ffff8000113ab7f0: 90000019 adrp x25, ffff80001139e37c <__my_cpu_offset>
ffff8000113ab7f0: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113ab7f4: 9000001a adrp x26, ffff80001139e37c <__my_cpu_offset>
ffff8000113ab7f4: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113ab7f8: 54000101 b.ne ffff8000113ab818 <netif_receive_skb_list_internal+0x78>
ffff8000113ab7fc: 14000027 b ffff8000113ab898 <netif_receive_skb_list_internal+0xf8>
ffff8000113ab800: eb13029f cmp x20, x19
ffff8000113ab804: f9400280 ldr x0, [x20]
ffff8000113ab808: aa1403f6 mov x22, x20
ffff8000113ab80c: 54000460 b.eq ffff8000113ab898 <netif_receive_skb_list_internal+0xf8>
ffff8000113ab810: aa1403f5 mov x21, x20
ffff8000113ab814: aa0003f4 mov x20, x0
__READ_ONCE_SIZE;
ffff8000113ab818: 91000320 add x0, x25, #0x0
ffff8000113ab818: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113ab81c: b9434800 ldr w0, [x0,#840]
net_timestamp_check(netdev_tstamp_prequeue, skb);
ffff8000113ab820: 6b1f001f cmp w0, wzr
ffff8000113ab824: 540010ac b.gt ffff8000113aba38 <netif_receive_skb_list_internal+0x298>
if (!__list_del_entry_valid(entry))
ffff8000113ab828: aa1603e0 mov x0, x22
ffff8000113ab82c: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113ab82c: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113ab830: 53001c00 uxtb w0, w0
ffff8000113ab834: 340000a0 cbz w0, ffff8000113ab848 <netif_receive_skb_list_internal+0xa8>
__list_del(entry->prev, entry->next);
ffff8000113ab838: f94006a0 ldr x0, [x21,#8]
ffff8000113ab83c: f94002a1 ldr x1, [x21]
next->prev = prev;
ffff8000113ab840: f9000420 str x0, [x1,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113ab844: f9000001 str x1, [x0]
ffff8000113ab848: f90002bf str xzr, [x21]
if (!skb_defer_rx_timestamp(skb))
ffff8000113ab84c: aa1503e0 mov x0, x21
ffff8000113ab850: 94000000 bl 0 <skb_defer_rx_timestamp>
ffff8000113ab850: R_AARCH64_CALL26 skb_defer_rx_timestamp
ffff8000113ab854: 53001c00 uxtb w0, w0
ffff8000113ab858: 35fffd40 cbnz w0, ffff8000113ab800 <netif_receive_skb_list_internal+0x60>
__list_add(new, head->prev, head);
ffff8000113ab85c: f940071b ldr x27, [x24,#8]
if (!__list_add_valid(new, prev, next))
ffff8000113ab860: aa1603e0 mov x0, x22
ffff8000113ab864: aa1b03e1 mov x1, x27
ffff8000113ab868: aa1803e2 mov x2, x24
ffff8000113ab86c: 94000000 bl 0 <__list_add_valid>
ffff8000113ab86c: R_AARCH64_CALL26 __list_add_valid
ffff8000113ab870: 53001c00 uxtb w0, w0
ffff8000113ab874: 34fffc60 cbz w0, ffff8000113ab800 <netif_receive_skb_list_internal+0x60>
next->prev = new;
ffff8000113ab878: f9000716 str x22, [x24,#8]
new->next = next;
ffff8000113ab87c: f90002b8 str x24, [x21]
new->prev = prev;
ffff8000113ab880: f90006bb str x27, [x21,#8]
ffff8000113ab884: f9000376 str x22, [x27]
list_for_each_entry_safe(skb, next, head, list) {
ffff8000113ab888: eb13029f cmp x20, x19
ffff8000113ab88c: f9400280 ldr x0, [x20]
ffff8000113ab890: aa1403f6 mov x22, x20
ffff8000113ab894: 54fffbe1 b.ne ffff8000113ab810 <netif_receive_skb_list_internal+0x70>
__READ_ONCE_SIZE;
ffff8000113ab898: f9403fa0 ldr x0, [x29,#120]
if (!list_empty(list)) {
ffff8000113ab89c: eb00031f cmp x24, x0
ffff8000113ab8a0: 54000140 b.eq ffff8000113ab8c8 <netif_receive_skb_list_internal+0x128>
struct list_head *first = list->next;
ffff8000113ab8a4: f9403fa2 ldr x2, [x29,#120]
__list_splice(list, head, head->next);
ffff8000113ab8a8: f9400260 ldr x0, [x19]
struct list_head *last = list->prev;
ffff8000113ab8ac: f94043a1 ldr x1, [x29,#128]
first->prev = prev;
ffff8000113ab8b0: f9000453 str x19, [x2,#8]
prev->next = first;
ffff8000113ab8b4: f9000262 str x2, [x19]
last->next = next;
ffff8000113ab8b8: f9000020 str x0, [x1]
next->prev = last;
ffff8000113ab8bc: f9000401 str x1, [x0,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113ab8c0: f9003fb8 str x24, [x29,#120]
list->prev = list;
ffff8000113ab8c4: f90043b8 str x24, [x29,#128]
__READ_ONCE_SIZE;
ffff8000113ab8c8: 9100035a add x26, x26, #0x0
ffff8000113ab8c8: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113ab8cc: b9495340 ldr w0, [x26,#2384]
if (static_branch_unlikely(&rps_needed)) {
ffff8000113ab8d0: 6b1f001f cmp w0, wzr
ffff8000113ab8d4: 54000c2c b.gt ffff8000113aba58 <netif_receive_skb_list_internal+0x2b8>
list_for_each_entry_safe(skb, next, head, list) {
ffff8000113ab8d8: f9400261 ldr x1, [x19]
ffff8000113ab8dc: eb01027f cmp x19, x1
ffff8000113ab8e0: f9400034 ldr x20, [x1]
ffff8000113ab8e4: aa0103e2 mov x2, x1
ffff8000113ab8e8: 540009c0 b.eq ffff8000113aba20 <netif_receive_skb_list_internal+0x280>
unsigned long noreclaim_flag = 0;
ffff8000113ab8ec: d2800018 mov x24, #0x0 // #0
ffff8000113ab8f0: 90000019 adrp x25, 0 <memalloc_socks_key>
ffff8000113ab8f0: R_AARCH64_ADR_PREL_PG_HI21 memalloc_socks_key
ffff8000113ab8f4: d538411a mrs x26, sp_el0
bool pfmemalloc = false; /* Is current sublist PF_MEMALLOC? */
ffff8000113ab8f8: 2a1803f6 mov w22, w24
ffff8000113ab8fc: 91000339 add x25, x25, #0x0
ffff8000113ab8fc: R_AARCH64_ADD_ABS_LO12_NC memalloc_socks_key
ffff8000113ab900: aa1a03fb mov x27, x26
list->next = head->next;
ffff8000113ab904: 910223b5 add x21, x29, #0x88
ffff8000113ab908: 1400000c b ffff8000113ab938 <netif_receive_skb_list_internal+0x198>
unsigned int flags = current->flags & PF_MEMALLOC;
ffff8000113ab90c: b9403760 ldr w0, [x27,#52]
ffff8000113ab910: 12150018 and w24, w0, #0x800
current->flags |= PF_MEMALLOC;
ffff8000113ab914: 32150000 orr w0, w0, #0x800
ffff8000113ab918: b9003760 str w0, [x27,#52]
noreclaim_flag = memalloc_noreclaim_save();
ffff8000113ab91c: 2a1803f8 mov w24, w24
list_for_each_entry_safe(skb, next, head, list) {
ffff8000113ab920: eb14027f cmp x19, x20
ffff8000113ab924: f9400280 ldr x0, [x20]
ffff8000113ab928: aa1403e2 mov x2, x20
ffff8000113ab92c: 54000460 b.eq ffff8000113ab9b8 <netif_receive_skb_list_internal+0x218>
ffff8000113ab930: aa1403e1 mov x1, x20
ffff8000113ab934: aa0003f4 mov x20, x0
ffff8000113ab938: b9400323 ldr w3, [x25]
if ((sk_memalloc_socks() && skb_pfmemalloc(skb)) != pfmemalloc) {
ffff8000113ab93c: 52800000 mov w0, #0x0 // #0
ffff8000113ab940: 6b00007f cmp w3, w0
ffff8000113ab944: 5400074c b.gt ffff8000113aba2c <netif_receive_skb_list_internal+0x28c>
ffff8000113ab948: 6b0002df cmp w22, w0
ffff8000113ab94c: 54fffea0 b.eq ffff8000113ab920 <netif_receive_skb_list_internal+0x180>
if (head->next == entry) {
ffff8000113ab950: f9400260 ldr x0, [x19]
ffff8000113ab954: eb02001f cmp x0, x2
ffff8000113ab958: 540005e0 b.eq ffff8000113aba14 <netif_receive_skb_list_internal+0x274>
list->next = head->next;
ffff8000113ab95c: f90002a0 str x0, [x21]
list->next->prev = list;
ffff8000113ab960: f9000415 str x21, [x0,#8]
list->prev = entry->prev;
ffff8000113ab964: f9400420 ldr x0, [x1,#8]
ffff8000113ab968: f90006a0 str x0, [x21,#8]
list->prev->next = list;
ffff8000113ab96c: f9000015 str x21, [x0]
head->next = entry;
ffff8000113ab970: f9000262 str x2, [x19]
entry->prev = head;
ffff8000113ab974: f9000433 str x19, [x1,#8]
ffff8000113ab978: f94047a0 ldr x0, [x29,#136]
if (!list_empty(&sublist))
ffff8000113ab97c: eb0002bf cmp x21, x0
ffff8000113ab980: 54000080 b.eq ffff8000113ab990 <netif_receive_skb_list_internal+0x1f0>
__netif_receive_skb_list_core(&sublist, pfmemalloc);
ffff8000113ab984: aa1503e0 mov x0, x21
ffff8000113ab988: 2a1603e1 mov w1, w22
ffff8000113ab98c: 97fffee5 bl ffff8000113ab520 <__netif_receive_skb_list_core>
pfmemalloc = !pfmemalloc;
ffff8000113ab990: 520002d6 eor w22, w22, #0x1
if (pfmemalloc)
ffff8000113ab994: 35fffbd6 cbnz w22, ffff8000113ab90c <netif_receive_skb_list_internal+0x16c>
current->flags = (current->flags & ~PF_MEMALLOC) | flags;
ffff8000113ab998: b9403740 ldr w0, [x26,#52]
list_for_each_entry_safe(skb, next, head, list) {
ffff8000113ab99c: eb14027f cmp x19, x20
ffff8000113ab9a0: 12147800 and w0, w0, #0xfffff7ff
ffff8000113ab9a4: 2a180000 orr w0, w0, w24
ffff8000113ab9a8: b9003740 str w0, [x26,#52]
ffff8000113ab9ac: f9400280 ldr x0, [x20]
ffff8000113ab9b0: aa1403e2 mov x2, x20
ffff8000113ab9b4: 54fffbe1 b.ne ffff8000113ab930 <netif_receive_skb_list_internal+0x190>
ffff8000113ab9b8: f9400260 ldr x0, [x19]
if (!list_empty(head))
ffff8000113ab9bc: eb00027f cmp x19, x0
ffff8000113ab9c0: 54000080 b.eq ffff8000113ab9d0 <netif_receive_skb_list_internal+0x230>
__netif_receive_skb_list_core(head, pfmemalloc);
ffff8000113ab9c4: aa1303e0 mov x0, x19
ffff8000113ab9c8: 2a1603e1 mov w1, w22
ffff8000113ab9cc: 97fffed5 bl ffff8000113ab520 <__netif_receive_skb_list_core>
if (pfmemalloc)
ffff8000113ab9d0: 340000d6 cbz w22, ffff8000113ab9e8 <netif_receive_skb_list_internal+0x248>
ffff8000113ab9d4: d5384100 mrs x0, sp_el0
ffff8000113ab9d8: b9403401 ldr w1, [x0,#52]
ffff8000113ab9dc: 12147821 and w1, w1, #0xfffff7ff
ffff8000113ab9e0: 2a180038 orr w24, w1, w24
ffff8000113ab9e4: b9003418 str w24, [x0,#52]
}
ffff8000113ab9e8: f9404fa1 ldr x1, [x29,#152]
ffff8000113ab9ec: f94002e0 ldr x0, [x23]
ffff8000113ab9ec: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ab9f0: eb00003f cmp x1, x0
ffff8000113ab9f4: 540007a1 b.ne ffff8000113abae8 <netif_receive_skb_list_internal+0x348>
ffff8000113ab9f8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ab9fc: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113aba00: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113aba04: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113aba08: f9402bfb ldr x27, [sp,#80]
ffff8000113aba0c: a8ca7bfd ldp x29, x30, [sp],#160
ffff8000113aba10: d65f03c0 ret
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113aba14: f90047b5 str x21, [x29,#136]
list->prev = list;
ffff8000113aba18: f90006b5 str x21, [x21,#8]
ffff8000113aba1c: 17ffffd7 b ffff8000113ab978 <netif_receive_skb_list_internal+0x1d8>
unsigned long noreclaim_flag = 0;
ffff8000113aba20: d2800018 mov x24, #0x0 // #0
bool pfmemalloc = false; /* Is current sublist PF_MEMALLOC? */
ffff8000113aba24: 2a1803f6 mov w22, w24
ffff8000113aba28: 17ffffe4 b ffff8000113ab9b8 <netif_receive_skb_list_internal+0x218>
return unlikely(skb->pfmemalloc);
ffff8000113aba2c: 3941f820 ldrb w0, [x1,#126]
if ((sk_memalloc_socks() && skb_pfmemalloc(skb)) != pfmemalloc) {
ffff8000113aba30: d3461800 ubfx x0, x0, #6, #1
ffff8000113aba34: 17ffffc5 b ffff8000113ab948 <netif_receive_skb_list_internal+0x1a8>
net_timestamp_check(netdev_tstamp_prequeue, skb);
ffff8000113aba38: 91000340 add x0, x26, #0x0
ffff8000113aba38: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113aba3c: b9494c00 ldr w0, [x0,#2380]
ffff8000113aba40: 34ffef40 cbz w0, ffff8000113ab828 <netif_receive_skb_list_internal+0x88>
ffff8000113aba44: f94012a0 ldr x0, [x21,#32]
ffff8000113aba48: b5ffef00 cbnz x0, ffff8000113ab828 <netif_receive_skb_list_internal+0x88>
ffff8000113aba4c: 94000000 bl 0 <ktime_get_with_offset>
ffff8000113aba4c: R_AARCH64_CALL26 ktime_get_with_offset
skb->tstamp = ktime_get_real();
ffff8000113aba50: f90012a0 str x0, [x21,#32]
ffff8000113aba54: 17ffff75 b ffff8000113ab828 <netif_receive_skb_list_internal+0x88>
list_for_each_entry_safe(skb, next, head, list) {
ffff8000113aba58: f9400274 ldr x20, [x19]
ffff8000113aba5c: 9101c3b8 add x24, x29, #0x70
ffff8000113aba60: eb13029f cmp x20, x19
ffff8000113aba64: f9400295 ldr x21, [x20]
ffff8000113aba68: aa1403f6 mov x22, x20
ffff8000113aba6c: 54000081 b.ne ffff8000113aba7c <netif_receive_skb_list_internal+0x2dc>
ffff8000113aba70: 17ffffec b ffff8000113aba20 <netif_receive_skb_list_internal+0x280>
ffff8000113aba74: aa1503f4 mov x20, x21
ffff8000113aba78: aa0003f5 mov x21, x0
struct rps_dev_flow voidflow, *rflow = &voidflow;
ffff8000113aba7c: f90047b8 str x24, [x29,#136]
int cpu = get_rps_cpu(skb->dev, skb, &rflow);
ffff8000113aba80: f9400a80 ldr x0, [x20,#16]
ffff8000113aba84: aa1403e1 mov x1, x20
ffff8000113aba88: 910223a2 add x2, x29, #0x88
ffff8000113aba8c: 97ffd37f bl ffff8000113a0888 <get_rps_cpu>
ffff8000113aba90: 2a0003e1 mov w1, w0
if (cpu >= 0) {
ffff8000113aba94: 37f80201 tbnz w1, #31, ffff8000113abad4 <netif_receive_skb_list_internal+0x334>
if (!__list_del_entry_valid(entry))
ffff8000113aba98: aa1603e0 mov x0, x22
ffff8000113aba9c: f90037a1 str x1, [x29,#104]
ffff8000113abaa0: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113abaa0: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113abaa4: 53001c00 uxtb w0, w0
ffff8000113abaa8: f94037a1 ldr x1, [x29,#104]
ffff8000113abaac: 340000a0 cbz w0, ffff8000113abac0 <netif_receive_skb_list_internal+0x320>
__list_del(entry->prev, entry->next);
ffff8000113abab0: f9400680 ldr x0, [x20,#8]
ffff8000113abab4: f9400282 ldr x2, [x20]
next->prev = prev;
ffff8000113abab8: f9000440 str x0, [x2,#8]
ffff8000113ababc: f9000002 str x2, [x0]
skb->next = NULL;
ffff8000113abac0: f900029f str xzr, [x20]
enqueue_to_backlog(skb, cpu, &rflow->last_qtail);
ffff8000113abac4: f94047a2 ldr x2, [x29,#136]
ffff8000113abac8: aa1403e0 mov x0, x20
ffff8000113abacc: 91001042 add x2, x2, #0x4
ffff8000113abad0: 97ffeac2 bl ffff8000113a65d8 <enqueue_to_backlog>
list_for_each_entry_safe(skb, next, head, list) {
ffff8000113abad4: eb1302bf cmp x21, x19
ffff8000113abad8: f94002a0 ldr x0, [x21]
ffff8000113abadc: aa1503f6 mov x22, x21
ffff8000113abae0: 54fffca1 b.ne ffff8000113aba74 <netif_receive_skb_list_internal+0x2d4>
ffff8000113abae4: 17ffff7d b ffff8000113ab8d8 <netif_receive_skb_list_internal+0x138>
}
ffff8000113abae8: 94000000 bl 0 <__stack_chk_fail>
ffff8000113abae8: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113abaec <netif_receive_skb_list>:
{
ffff8000113abaec: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113abaf0: 910003fd mov x29, sp
ffff8000113abaf4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113abaf8: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113abafc: a90363f7 stp x23, x24, [sp,#48]
ffff8000113abb00: aa0003f5 mov x21, x0
ffff8000113abb04: aa1e03e0 mov x0, x30
ffff8000113abb08: 94000000 bl 0 <_mcount>
ffff8000113abb08: R_AARCH64_CALL26 _mcount
__READ_ONCE_SIZE;
ffff8000113abb0c: f94002a0 ldr x0, [x21]
if (list_empty(head))
ffff8000113abb10: eb0002bf cmp x21, x0
ffff8000113abb14: 540001a0 b.eq ffff8000113abb48 <netif_receive_skb_list+0x5c>
ffff8000113abb18: 90000016 adrp x22, 0 <__tracepoint_netif_receive_skb_list_entry>
ffff8000113abb18: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_netif_receive_skb_list_entry
ffff8000113abb1c: 910002c0 add x0, x22, #0x0
ffff8000113abb1c: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_netif_receive_skb_list_entry
ffff8000113abb20: b9400800 ldr w0, [x0,#8]
ffff8000113abb24: 6b1f001f cmp w0, wzr
ffff8000113abb28: 540001ac b.gt ffff8000113abb5c <netif_receive_skb_list+0x70>
netif_receive_skb_list_internal(head);
ffff8000113abb2c: aa1503e0 mov x0, x21
ffff8000113abb30: 97ffff1c bl ffff8000113ab7a0 <netif_receive_skb_list_internal>
ffff8000113abb34: 90000000 adrp x0, 0 <__tracepoint_netif_receive_skb_list_exit>
ffff8000113abb34: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_netif_receive_skb_list_exit
ffff8000113abb38: 91000000 add x0, x0, #0x0
ffff8000113abb38: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_netif_receive_skb_list_exit
ffff8000113abb3c: b9400801 ldr w1, [x0,#8]
ffff8000113abb40: 6b1f003f cmp w1, wzr
ffff8000113abb44: 5400050c b.gt ffff8000113abbe4 <netif_receive_skb_list+0xf8>
}
ffff8000113abb48: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113abb4c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113abb50: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113abb54: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113abb58: d65f03c0 ret
list_for_each_entry(skb, head, list)
ffff8000113abb5c: f94002b4 ldr x20, [x21]
ffff8000113abb60: eb15029f cmp x20, x21
ffff8000113abb64: 54fffe40 b.eq ffff8000113abb2c <netif_receive_skb_list+0x40>
DEFINE_EVENT(net_dev_rx_verbose_template, netif_receive_skb_list_entry,
ffff8000113abb68: 90000017 adrp x23, 0 <cpu_number>
ffff8000113abb68: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113abb6c: 90000018 adrp x24, 0 <__cpu_online_mask>
ffff8000113abb6c: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113abb70: 910002f7 add x23, x23, #0x0
ffff8000113abb70: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113abb74: 91000318 add x24, x24, #0x0
ffff8000113abb74: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113abb78: 14000004 b ffff8000113abb88 <netif_receive_skb_list+0x9c>
ffff8000113abb7c: f9400294 ldr x20, [x20]
ffff8000113abb80: eb15029f cmp x20, x21
ffff8000113abb84: 54fffd40 b.eq ffff8000113abb2c <netif_receive_skb_list+0x40>
ffff8000113abb88: 910002c1 add x1, x22, #0x0
ffff8000113abb88: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_netif_receive_skb_list_entry
ffff8000113abb8c: b9400820 ldr w0, [x1,#8]
ffff8000113abb90: 6b1f001f cmp w0, wzr
ffff8000113abb94: 54ffff4d b.le ffff8000113abb7c <netif_receive_skb_list+0x90>
ffff8000113abb98: d538d080 mrs x0, tpidr_el1
ffff8000113abb9c: b8776800 ldr w0, [x0,x23]
ffff8000113abba0: 1100fc02 add w2, w0, #0x3f
ffff8000113abba4: 6b1f001f cmp w0, wzr
ffff8000113abba8: 1a80b042 csel w2, w2, w0, lt
ffff8000113abbac: 13067c42 asr w2, w2, #6
ffff8000113abbb0: 937d7c42 sbfiz x2, x2, #3, #32
ffff8000113abbb4: f8786842 ldr x2, [x2,x24]
ffff8000113abbb8: 9ac02440 lsr x0, x2, x0
ffff8000113abbbc: 3607fe00 tbz w0, #0, ffff8000113abb7c <netif_receive_skb_list+0x90>
ffff8000113abbc0: f9401033 ldr x19, [x1,#32]
ffff8000113abbc4: b40000f3 cbz x19, ffff8000113abbe0 <netif_receive_skb_list+0xf4>
ffff8000113abbc8: f9400262 ldr x2, [x19]
ffff8000113abbcc: f9400660 ldr x0, [x19,#8]
ffff8000113abbd0: aa1403e1 mov x1, x20
ffff8000113abbd4: d63f0040 blr x2
ffff8000113abbd8: f8418e62 ldr x2, [x19,#24]!
ffff8000113abbdc: b5ffff82 cbnz x2, ffff8000113abbcc <netif_receive_skb_list+0xe0>
ffff8000113abbe0: 17ffffe7 b ffff8000113abb7c <netif_receive_skb_list+0x90>
TP_PROTO(int ret),
TP_ARGS(ret)
);
DEFINE_EVENT(net_dev_rx_exit_template, netif_receive_skb_list_exit,
ffff8000113abbe4: 90000001 adrp x1, 0 <cpu_number>
ffff8000113abbe4: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113abbe8: d538d082 mrs x2, tpidr_el1
ffff8000113abbec: 91000021 add x1, x1, #0x0
ffff8000113abbec: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113abbf0: b8616841 ldr w1, [x2,x1]
ffff8000113abbf4: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113abbf4: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113abbf8: 1100fc23 add w3, w1, #0x3f
ffff8000113abbfc: 6b1f003f cmp w1, wzr
ffff8000113abc00: 1a81b063 csel w3, w3, w1, lt
ffff8000113abc04: 13067c63 asr w3, w3, #6
ffff8000113abc08: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113abc0c: 91000042 add x2, x2, #0x0
ffff8000113abc0c: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113abc10: f8626862 ldr x2, [x3,x2]
ffff8000113abc14: 9ac12441 lsr x1, x2, x1
ffff8000113abc18: 3607f981 tbz w1, #0, ffff8000113abb48 <netif_receive_skb_list+0x5c>
ffff8000113abc1c: f9401013 ldr x19, [x0,#32]
ffff8000113abc20: b40000f3 cbz x19, ffff8000113abc3c <netif_receive_skb_list+0x150>
ffff8000113abc24: f9400262 ldr x2, [x19]
ffff8000113abc28: f9400660 ldr x0, [x19,#8]
ffff8000113abc2c: 52800001 mov w1, #0x0 // #0
ffff8000113abc30: d63f0040 blr x2
ffff8000113abc34: f8418e62 ldr x2, [x19,#24]!
ffff8000113abc38: b5ffff82 cbnz x2, ffff8000113abc28 <netif_receive_skb_list+0x13c>
}
ffff8000113abc3c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113abc40: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113abc44: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113abc48: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113abc4c: d65f03c0 ret
ffff8000113abc50 <gro_normal_list.part.134>:
static void gro_normal_list(struct napi_struct *napi)
ffff8000113abc50: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113abc54: 910003fd mov x29, sp
ffff8000113abc58: a90153f3 stp x19, x20, [sp,#16]
ffff8000113abc5c: aa0003f4 mov x20, x0
ffff8000113abc60: aa1e03e0 mov x0, x30
netif_receive_skb_list_internal(&napi->rx_list);
ffff8000113abc64: 91042293 add x19, x20, #0x108
static void gro_normal_list(struct napi_struct *napi)
ffff8000113abc68: 94000000 bl 0 <_mcount>
ffff8000113abc68: R_AARCH64_CALL26 _mcount
netif_receive_skb_list_internal(&napi->rx_list);
ffff8000113abc6c: aa1303e0 mov x0, x19
ffff8000113abc70: 97fffecc bl ffff8000113ab7a0 <netif_receive_skb_list_internal>
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113abc74: f9008693 str x19, [x20,#264]
list->prev = list;
ffff8000113abc78: f9000673 str x19, [x19,#8]
napi->rx_count = 0;
ffff8000113abc7c: b9011a9f str wzr, [x20,#280]
}
ffff8000113abc80: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113abc84: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113abc88: d65f03c0 ret
ffff8000113abc8c <gro_normal_one>:
{
ffff8000113abc8c: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113abc90: 910003fd mov x29, sp
ffff8000113abc94: a90153f3 stp x19, x20, [sp,#16]
ffff8000113abc98: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113abc9c: aa0003f4 mov x20, x0
list_add_tail(&skb->list, &napi->rx_list);
ffff8000113abca0: 91042015 add x21, x0, #0x108
{
ffff8000113abca4: aa1e03e0 mov x0, x30
ffff8000113abca8: aa0103f3 mov x19, x1
ffff8000113abcac: 94000000 bl 0 <_mcount>
ffff8000113abcac: R_AARCH64_CALL26 _mcount
__list_add(new, head->prev, head);
ffff8000113abcb0: f9408a96 ldr x22, [x20,#272]
if (!__list_add_valid(new, prev, next))
ffff8000113abcb4: aa1303e0 mov x0, x19
ffff8000113abcb8: aa1603e1 mov x1, x22
ffff8000113abcbc: aa1503e2 mov x2, x21
ffff8000113abcc0: 94000000 bl 0 <__list_add_valid>
ffff8000113abcc0: R_AARCH64_CALL26 __list_add_valid
ffff8000113abcc4: 53001c00 uxtb w0, w0
ffff8000113abcc8: 340000a0 cbz w0, ffff8000113abcdc <gro_normal_one+0x50>
next->prev = new;
ffff8000113abccc: f9008a93 str x19, [x20,#272]
new->next = next;
ffff8000113abcd0: f9000275 str x21, [x19]
new->prev = prev;
ffff8000113abcd4: f9000676 str x22, [x19,#8]
ffff8000113abcd8: f90002d3 str x19, [x22]
if (++napi->rx_count >= gro_normal_batch)
ffff8000113abcdc: b9411a80 ldr w0, [x20,#280]
ffff8000113abce0: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113abce0: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly+0x958
ffff8000113abce4: b9400021 ldr w1, [x1]
ffff8000113abce4: R_AARCH64_LDST32_ABS_LO12_NC .data..read_mostly+0x958
ffff8000113abce8: 11000400 add w0, w0, #0x1
ffff8000113abcec: b9011a80 str w0, [x20,#280]
ffff8000113abcf0: 6b01001f cmp w0, w1
ffff8000113abcf4: 5400004b b.lt ffff8000113abcfc <gro_normal_one+0x70>
if (!napi->rx_count)
ffff8000113abcf8: 350000a0 cbnz w0, ffff8000113abd0c <gro_normal_one+0x80>
}
ffff8000113abcfc: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113abd00: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113abd04: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113abd08: d65f03c0 ret
ffff8000113abd0c: aa1403e0 mov x0, x20
ffff8000113abd10: 97ffffd0 bl ffff8000113abc50 <gro_normal_list.part.134>
ffff8000113abd14: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113abd18: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113abd1c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113abd20: d65f03c0 ret
ffff8000113abd24 <napi_gro_complete.constprop.161>:
static int napi_gro_complete(struct napi_struct *napi, struct sk_buff *skb)
ffff8000113abd24: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113abd28: 910003fd mov x29, sp
ffff8000113abd2c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113abd30: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113abd34: aa0003f5 mov x21, x0
ffff8000113abd38: aa1e03e0 mov x0, x30
ffff8000113abd3c: aa0103f3 mov x19, x1
ffff8000113abd40: 94000000 bl 0 <_mcount>
ffff8000113abd40: R_AARCH64_CALL26 _mcount
if (NAPI_GRO_CB(skb)->count == 1) {
ffff8000113abd44: 79407a61 ldrh w1, [x19,#60]
__be16 type = skb->protocol;
ffff8000113abd48: 79416263 ldrh w3, [x19,#176]
if (NAPI_GRO_CB(skb)->count == 1) {
ffff8000113abd4c: 7100043f cmp w1, #0x1
ffff8000113abd50: 54000580 b.eq ffff8000113abe00 <napi_gro_complete.constprop.161+0xdc>
__READ_ONCE_SIZE;
ffff8000113abd54: 90000016 adrp x22, ffff80001139e37c <__my_cpu_offset>
ffff8000113abd54: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113abd58: 910002c4 add x4, x22, #0x0
ffff8000113abd58: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113abd5c: f9440882 ldr x2, [x4,#2064]
ffff8000113abd60: 91204084 add x4, x4, #0x810
list_for_each_entry_rcu(ptype, head, list) {
ffff8000113abd64: eb04005f cmp x2, x4
ffff8000113abd68: aa0203f4 mov x20, x2
ffff8000113abd6c: d1008042 sub x2, x2, #0x20
ffff8000113abd70: 54000120 b.eq ffff8000113abd94 <napi_gro_complete.constprop.161+0x70>
if (ptype->type != type || !ptype->callbacks.gro_complete)
ffff8000113abd74: 79400041 ldrh w1, [x2]
ffff8000113abd78: 6b03003f cmp w1, w3
ffff8000113abd7c: 54000260 b.eq ffff8000113abdc8 <napi_gro_complete.constprop.161+0xa4>
ffff8000113abd80: f9401042 ldr x2, [x2,#32]
list_for_each_entry_rcu(ptype, head, list) {
ffff8000113abd84: eb04005f cmp x2, x4
ffff8000113abd88: aa0203f4 mov x20, x2
ffff8000113abd8c: d1008042 sub x2, x2, #0x20
ffff8000113abd90: 54ffff21 b.ne ffff8000113abd74 <napi_gro_complete.constprop.161+0x50>
int err = -ENOENT;
ffff8000113abd94: 12800020 mov w0, #0xfffffffe // #-2
if (err) {
ffff8000113abd98: 34000240 cbz w0, ffff8000113abde0 <napi_gro_complete.constprop.161+0xbc>
WARN_ON(&ptype->list == head);
ffff8000113abd9c: 910002d6 add x22, x22, #0x0
ffff8000113abd9c: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113abda0: 912042d6 add x22, x22, #0x810
ffff8000113abda4: eb16029f cmp x20, x22
ffff8000113abda8: 540003c0 b.eq ffff8000113abe20 <napi_gro_complete.constprop.161+0xfc>
kfree_skb(skb);
ffff8000113abdac: aa1303e0 mov x0, x19
ffff8000113abdb0: 94000000 bl 0 <kfree_skb>
ffff8000113abdb0: R_AARCH64_CALL26 kfree_skb
}
ffff8000113abdb4: 52800000 mov w0, #0x0 // #0
ffff8000113abdb8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113abdbc: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113abdc0: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113abdc4: d65f03c0 ret
if (ptype->type != type || !ptype->callbacks.gro_complete)
ffff8000113abdc8: f9400c45 ldr x5, [x2,#24]
ffff8000113abdcc: b4fffda5 cbz x5, ffff8000113abd80 <napi_gro_complete.constprop.161+0x5c>
err = INDIRECT_CALL_INET(ptype->callbacks.gro_complete,
ffff8000113abdd0: aa1303e0 mov x0, x19
ffff8000113abdd4: 52800001 mov w1, #0x0 // #0
ffff8000113abdd8: d63f00a0 blr x5
if (err) {
ffff8000113abddc: 35fffe00 cbnz w0, ffff8000113abd9c <napi_gro_complete.constprop.161+0x78>
gro_normal_one(napi, skb);
ffff8000113abde0: aa1503e0 mov x0, x21
ffff8000113abde4: aa1303e1 mov x1, x19
ffff8000113abde8: 97ffffa9 bl ffff8000113abc8c <gro_normal_one>
}
ffff8000113abdec: 52800000 mov w0, #0x0 // #0
ffff8000113abdf0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113abdf4: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113abdf8: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113abdfc: d65f03c0 ret
skb_shinfo(skb)->gso_size = 0;
ffff8000113abe00: f9406261 ldr x1, [x19,#192]
return skb->head + skb->end;
ffff8000113abe04: b940be60 ldr w0, [x19,#188]
ffff8000113abe08: 8b000020 add x0, x1, x0
ffff8000113abe0c: 7900081f strh wzr, [x0,#4]
gro_normal_one(napi, skb);
ffff8000113abe10: aa1303e1 mov x1, x19
ffff8000113abe14: aa1503e0 mov x0, x21
ffff8000113abe18: 97ffff9d bl ffff8000113abc8c <gro_normal_one>
ffff8000113abe1c: 17fffff4 b ffff8000113abdec <napi_gro_complete.constprop.161+0xc8>
WARN_ON(&ptype->list == head);
ffff8000113abe20: d4210000 brk #0x800
ffff8000113abe24: 17ffffe2 b ffff8000113abdac <napi_gro_complete.constprop.161+0x88>
ffff8000113abe28 <dev_gro_receive>:
{
ffff8000113abe28: a9b87bfd stp x29, x30, [sp,#-128]!
ffff8000113abe2c: 910003fd mov x29, sp
ffff8000113abe30: a90153f3 stp x19, x20, [sp,#16]
ffff8000113abe34: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113abe38: a90363f7 stp x23, x24, [sp,#48]
ffff8000113abe3c: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113abe40: a90573fb stp x27, x28, [sp,#80]
ffff8000113abe44: aa0003f6 mov x22, x0
ffff8000113abe48: aa1e03e0 mov x0, x30
ffff8000113abe4c: aa0103f5 mov x21, x1
ffff8000113abe50: 94000000 bl 0 <_mcount>
ffff8000113abe50: R_AARCH64_CALL26 _mcount
if (netif_elide_gro(skb->dev))
ffff8000113abe54: f9400aa0 ldr x0, [x21,#16]
static enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
ffff8000113abe58: b94096ba ldr w26, [x21,#148]
if (!(dev->features & NETIF_F_GRO) || dev->xdp_prog)
ffff8000113abe5c: f9406401 ldr x1, [x0,#200]
u32 hash = skb_get_hash_raw(skb) & (GRO_HASH_BUCKETS - 1);
ffff8000113abe60: 12000b59 and w25, w26, #0x7
__be16 type = skb->protocol;
ffff8000113abe64: 794162b7 ldrh w23, [x21,#176]
ffff8000113abe68: 36700061 tbz w1, #14, ffff8000113abe74 <dev_gro_receive+0x4c>
ffff8000113abe6c: f9419801 ldr x1, [x0,#816]
ffff8000113abe70: b4000621 cbz x1, ffff8000113abf34 <dev_gro_receive+0x10c>
ffff8000113abe74: 9100a2b3 add x19, x21, #0x28
ffff8000113abe78: 2a1903f8 mov w24, w25
ret = GRO_NORMAL;
ffff8000113abe7c: 52800074 mov w20, #0x3 // #3
return skb->len - skb->data_len;
ffff8000113abe80: b94072a2 ldr w2, [x21,#112]
ffff8000113abe84: b94076a1 ldr w1, [x21,#116]
grow = skb_gro_offset(skb) - skb_headlen(skb);
ffff8000113abe88: b9400e60 ldr w0, [x19,#12]
ffff8000113abe8c: 4b010041 sub w1, w2, w1
ffff8000113abe90: 4b010001 sub w1, w0, w1
if (grow > 0)
ffff8000113abe94: 6b1f003f cmp w1, wzr
ffff8000113abe98: 5400006d b.le ffff8000113abea4 <dev_gro_receive+0x7c>
gro_pull_from_frag0(skb, grow);
ffff8000113abe9c: aa1503e0 mov x0, x21
ffff8000113abea0: 97ffd3d9 bl ffff8000113a0e04 <gro_pull_from_frag0>
if (napi->gro_hash[hash].count) {
ffff8000113abea4: 8b180707 add x7, x24, x24, lsl #1
ffff8000113abea8: 8b070ec7 add x7, x22, x7, lsl #3
ffff8000113abeac: b94050e0 ldr w0, [x7,#80]
ffff8000113abeb0: 34000220 cbz w0, ffff8000113abef4 <dev_gro_receive+0xcc>
ffff8000113abeb4: f94012c0 ldr x0, [x22,#32]
ffff8000113abeb8: 9ad92400 lsr x0, x0, x25
if (!test_bit(hash, &napi->gro_bitmask))
ffff8000113abebc: 370000c0 tbnz w0, #0, ffff8000113abed4 <dev_gro_receive+0xac>
*p |= mask;
ffff8000113abec0: f94012c0 ldr x0, [x22,#32]
unsigned long mask = BIT_MASK(nr);
ffff8000113abec4: d2800021 mov x1, #0x1 // #1
ffff8000113abec8: 9ad92026 lsl x6, x1, x25
*p |= mask;
ffff8000113abecc: aa060006 orr x6, x0, x6
ffff8000113abed0: f90012c6 str x6, [x22,#32]
}
ffff8000113abed4: 2a1403e0 mov w0, w20
ffff8000113abed8: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113abedc: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113abee0: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113abee4: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113abee8: a94573fb ldp x27, x28, [sp,#80]
ffff8000113abeec: a8c87bfd ldp x29, x30, [sp],#128
ffff8000113abef0: d65f03c0 ret
return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
ffff8000113abef4: f94012c0 ldr x0, [x22,#32]
ffff8000113abef8: 9ad92400 lsr x0, x0, x25
} else if (test_bit(hash, &napi->gro_bitmask)) {
ffff8000113abefc: 3607fec0 tbz w0, #0, ffff8000113abed4 <dev_gro_receive+0xac>
*p &= ~mask;
ffff8000113abf00: f94012c0 ldr x0, [x22,#32]
unsigned long mask = BIT_MASK(nr);
ffff8000113abf04: d2800021 mov x1, #0x1 // #1
ffff8000113abf08: 9ad92026 lsl x6, x1, x25
*p &= ~mask;
ffff8000113abf0c: 8a260006 bic x6, x0, x6
ffff8000113abf10: f90012c6 str x6, [x22,#32]
}
ffff8000113abf14: 2a1403e0 mov w0, w20
ffff8000113abf18: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113abf1c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113abf20: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113abf24: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113abf28: a94573fb ldp x27, x28, [sp,#80]
ffff8000113abf2c: a8c87bfd ldp x29, x30, [sp],#128
ffff8000113abf30: d65f03c0 ret
head = &napi->gro_hash[hash & (GRO_HASH_BUCKETS - 1)].list;
ffff8000113abf34: 2a1903f8 mov w24, w25
ffff8000113abf38: 8b180701 add x1, x24, x24, lsl #1
ffff8000113abf3c: d37df021 lsl x1, x1, #3
ffff8000113abf40: 91010021 add x1, x1, #0x40
list_for_each_entry(p, head, list) {
ffff8000113abf44: f8616ad3 ldr x19, [x22,x1]
head = &napi->gro_hash[hash & (GRO_HASH_BUCKETS - 1)].list;
ffff8000113abf48: 8b0102db add x27, x22, x1
ffff8000113abf4c: f9003ba1 str x1, [x29,#112]
list_for_each_entry(p, head, list) {
ffff8000113abf50: eb13037f cmp x27, x19
unsigned int maclen = skb->dev->hard_header_len;
ffff8000113abf54: 79448c06 ldrh w6, [x0,#582]
list_for_each_entry(p, head, list) {
ffff8000113abf58: 54000a60 b.eq ffff8000113ac0a4 <dev_gro_receive+0x27c>
diffs = memcmp(skb_mac_header(p),
ffff8000113abf5c: 53003cc7 uxth w7, w6
ffff8000113abf60: f9003fa7 str x7, [x29,#120]
ffff8000113abf64: 14000007 b ffff8000113abf80 <dev_gro_receive+0x158>
NAPI_GRO_CB(p)->same_flow = 0;
ffff8000113abf68: 39408a83 ldrb w3, [x20,#34]
ffff8000113abf6c: 121f7863 and w3, w3, #0xfffffffe
ffff8000113abf70: 39008a83 strb w3, [x20,#34]
list_for_each_entry(p, head, list) {
ffff8000113abf74: f9400273 ldr x19, [x19]
ffff8000113abf78: eb13037f cmp x27, x19
ffff8000113abf7c: 54000940 b.eq ffff8000113ac0a4 <dev_gro_receive+0x27c>
NAPI_GRO_CB(p)->flush = 0;
ffff8000113abf80: 9100a274 add x20, x19, #0x28
ffff8000113abf84: 7900229f strh wzr, [x20,#16]
if (hash != skb_get_hash_raw(p)) {
ffff8000113abf88: b9409663 ldr w3, [x19,#148]
ffff8000113abf8c: 6b03035f cmp w26, w3
ffff8000113abf90: 54fffec1 b.ne ffff8000113abf68 <dev_gro_receive+0x140>
diffs |= skb_vlan_tag_present(p) ^ skb_vlan_tag_present(skb);
ffff8000113abf94: 39420a60 ldrb w0, [x19,#130]
ffff8000113abf98: 39420abc ldrb w28, [x21,#130]
diffs = (unsigned long)p->dev ^ (unsigned long)skb->dev;
ffff8000113abf9c: f9400aa2 ldr x2, [x21,#16]
ffff8000113abfa0: f9400a61 ldr x1, [x19,#16]
diffs |= skb_vlan_tag_present(p) ^ skb_vlan_tag_present(skb);
ffff8000113abfa4: 12000000 and w0, w0, #0x1
ffff8000113abfa8: ca00039c eor x28, x28, x0
diffs = (unsigned long)p->dev ^ (unsigned long)skb->dev;
ffff8000113abfac: ca010041 eor x1, x2, x1
diffs |= skb_vlan_tag_present(p) ^ skb_vlan_tag_present(skb);
ffff8000113abfb0: 9240039c and x28, x28, #0x1
ffff8000113abfb4: aa01039c orr x28, x28, x1
if (skb_vlan_tag_present(p))
ffff8000113abfb8: 340000c0 cbz w0, ffff8000113abfd0 <dev_gro_receive+0x1a8>
diffs |= skb_vlan_tag_get(p) ^ skb_vlan_tag_get(skb);
ffff8000113abfbc: 794136a1 ldrh w1, [x21,#154]
ffff8000113abfc0: 79413660 ldrh w0, [x19,#154]
ffff8000113abfc4: 4a000020 eor w0, w1, w0
ffff8000113abfc8: 53003c00 uxth w0, w0
ffff8000113abfcc: aa00039c orr x28, x28, x0
struct sk_buff *p;
ffff8000113abfd0: f9402e60 ldr x0, [x19,#88]
struct sk_buff *skb)
ffff8000113abfd4: f9402ea1 ldr x1, [x21,#88]
if (!(skb_a->_skb_refdst | skb_b->_skb_refdst))
ffff8000113abfd8: aa010002 orr x2, x0, x1
ffff8000113abfdc: b40001c2 cbz x2, ffff8000113ac014 <dev_gro_receive+0x1ec>
return (struct dst_entry *)(skb->_skb_refdst & SKB_DST_PTRMASK);
ffff8000113abfe0: 927ff800 and x0, x0, #0xfffffffffffffffe
if (!a != !b || a->type != b->type)
ffff8000113abfe4: eb1f001f cmp x0, xzr
ffff8000113abfe8: 927ff821 and x1, x1, #0xfffffffffffffffe
ffff8000113abfec: 1a9f17e3 cset w3, eq
ffff8000113abff0: eb1f003f cmp x1, xzr
ffff8000113abff4: 1a9f17e2 cset w2, eq
ffff8000113abff8: 6b02007f cmp w3, w2
ffff8000113abffc: d2800022 mov x2, #0x1 // #1
ffff8000113ac000: 540000a1 b.ne ffff8000113ac014 <dev_gro_receive+0x1ec>
ffff8000113ac004: b9407003 ldr w3, [x0,#112]
ffff8000113ac008: b9407024 ldr w4, [x1,#112]
ffff8000113ac00c: 6b04007f cmp w3, w4
ffff8000113ac010: 54001500 b.eq ffff8000113ac2b0 <dev_gro_receive+0x488>
static inline u8 skb_metadata_len(const struct sk_buff *skb)
ffff8000113ac014: f9406260 ldr x0, [x19,#192]
return skb->head + skb->end;
ffff8000113ac018: b940be63 ldr w3, [x19,#188]
static inline u8 skb_metadata_len(const struct sk_buff *skb)
ffff8000113ac01c: f94062a1 ldr x1, [x21,#192]
return skb->head + skb->end;
ffff8000113ac020: b940bea4 ldr w4, [x21,#188]
return skb_shinfo(skb)->meta_len;
ffff8000113ac024: 8b030003 add x3, x0, x3
ffff8000113ac028: 8b040024 add x4, x1, x4
ffff8000113ac02c: 39400485 ldrb w5, [x4,#1]
ffff8000113ac030: 39400463 ldrb w3, [x3,#1]
diffs |= skb_metadata_dst_cmp(p, skb);
ffff8000113ac034: aa1c0042 orr x2, x2, x28
if (!(len_a | len_b))
ffff8000113ac038: 2a0300aa orr w10, w5, w3
ffff8000113ac03c: d2800004 mov x4, #0x0 // #0
ffff8000113ac040: 3400008a cbz w10, ffff8000113ac050 <dev_gro_receive+0x228>
true : __skb_metadata_differs(skb_a, skb_b, len_a);
ffff8000113ac044: 6b05007f cmp w3, w5
ffff8000113ac048: d2800024 mov x4, #0x1 // #1
ffff8000113ac04c: 540006a0 b.eq ffff8000113ac120 <dev_gro_receive+0x2f8>
if (maclen == ETH_HLEN)
ffff8000113ac050: 710038df cmp w6, #0xe
diffs |= skb_metadata_differs(p, skb);
ffff8000113ac054: aa040042 orr x2, x2, x4
if (maclen == ETH_HLEN)
ffff8000113ac058: 540004a0 b.eq ffff8000113ac0ec <dev_gro_receive+0x2c4>
else if (!diffs)
ffff8000113ac05c: b5000142 cbnz x2, ffff8000113ac084 <dev_gro_receive+0x25c>
return skb->head + skb->mac_header;
ffff8000113ac060: 79416ea2 ldrh w2, [x21,#182]
ffff8000113ac064: 79416e63 ldrh w3, [x19,#182]
return __builtin_memcmp(p, q, size);
ffff8000113ac068: 8b020021 add x1, x1, x2
ffff8000113ac06c: f9403fa2 ldr x2, [x29,#120]
ffff8000113ac070: 8b030000 add x0, x0, x3
ffff8000113ac074: f90037a6 str x6, [x29,#104]
ffff8000113ac078: 94000000 bl 0 <memcmp>
ffff8000113ac078: R_AARCH64_CALL26 memcmp
diffs = memcmp(skb_mac_header(p),
ffff8000113ac07c: f94037a6 ldr x6, [x29,#104]
ffff8000113ac080: 93407c02 sxtw x2, w0
NAPI_GRO_CB(p)->same_flow = !diffs;
ffff8000113ac084: 39408a80 ldrb w0, [x20,#34]
ffff8000113ac088: eb1f005f cmp x2, xzr
ffff8000113ac08c: 1a9f17e1 cset w1, eq
ffff8000113ac090: 33000020 bfxil w0, w1, #0, #1
ffff8000113ac094: 39008a80 strb w0, [x20,#34]
list_for_each_entry(p, head, list) {
ffff8000113ac098: f9400273 ldr x19, [x19]
ffff8000113ac09c: eb13037f cmp x27, x19
ffff8000113ac0a0: 54fff701 b.ne ffff8000113abf80 <dev_gro_receive+0x158>
ffff8000113ac0a4: 9000001a adrp x26, ffff80001139e37c <__my_cpu_offset>
ffff8000113ac0a4: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113ac0a8: 91000342 add x2, x26, #0x0
ffff8000113ac0a8: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113ac0ac: f9440840 ldr x0, [x2,#2064]
ffff8000113ac0b0: 91204042 add x2, x2, #0x810
list_for_each_entry_rcu(ptype, head, list) {
ffff8000113ac0b4: eb02001f cmp x0, x2
ffff8000113ac0b8: aa0003f4 mov x20, x0
ffff8000113ac0bc: d1008000 sub x0, x0, #0x20
ffff8000113ac0c0: 54000120 b.eq ffff8000113ac0e4 <dev_gro_receive+0x2bc>
if (ptype->type != type || !ptype->callbacks.gro_receive)
ffff8000113ac0c4: 79400001 ldrh w1, [x0]
ffff8000113ac0c8: 6b17003f cmp w1, w23
ffff8000113ac0cc: 54000480 b.eq ffff8000113ac15c <dev_gro_receive+0x334>
ffff8000113ac0d0: f9401000 ldr x0, [x0,#32]
list_for_each_entry_rcu(ptype, head, list) {
ffff8000113ac0d4: eb02001f cmp x0, x2
ffff8000113ac0d8: aa0003f4 mov x20, x0
ffff8000113ac0dc: d1008000 sub x0, x0, #0x20
ffff8000113ac0e0: 54ffff21 b.ne ffff8000113ac0c4 <dev_gro_receive+0x29c>
struct sk_buff *pp = NULL;
ffff8000113ac0e4: d2800001 mov x1, #0x0 // #0
ffff8000113ac0e8: 1400004f b ffff8000113ac224 <dev_gro_receive+0x3fc>
ffff8000113ac0ec: 79416ea3 ldrh w3, [x21,#182]
ffff8000113ac0f0: 79416e64 ldrh w4, [x19,#182]
ffff8000113ac0f4: 8b030025 add x5, x1, x3
ffff8000113ac0f8: 8b04000a add x10, x0, x4
* Use two long XOR, ORed together, with an overlap of two bytes.
* [a0 a1 a2 a3 a4 a5 a6 a7 ] ^ [b0 b1 b2 b3 b4 b5 b6 b7 ] |
* [a6 a7 a8 a9 a10 a11 a12 a13] ^ [b6 b7 b8 b9 b10 b11 b12 b13]
* This means the [a6 a7] ^ [b6 b7] part is done two times.
*/
fold = *(unsigned long *)a ^ *(unsigned long *)b;
ffff8000113ac0fc: f8636821 ldr x1, [x1,x3]
ffff8000113ac100: f8646804 ldr x4, [x0,x4]
fold |= *(unsigned long *)(a + 6) ^ *(unsigned long *)(b + 6);
ffff8000113ac104: f84060a3 ldur x3, [x5,#6]
ffff8000113ac108: f8406140 ldur x0, [x10,#6]
fold = *(unsigned long *)a ^ *(unsigned long *)b;
ffff8000113ac10c: ca010081 eor x1, x4, x1
fold |= *(unsigned long *)(a + 6) ^ *(unsigned long *)(b + 6);
ffff8000113ac110: ca030000 eor x0, x0, x3
ffff8000113ac114: aa010000 orr x0, x0, x1
diffs |= compare_ether_header(skb_mac_header(p),
ffff8000113ac118: aa000042 orr x2, x2, x0
ffff8000113ac11c: 17ffffda b ffff8000113ac084 <dev_gro_receive+0x25c>
ffff8000113ac120: 79416e64 ldrh w4, [x19,#182]
ffff8000113ac124: 79416ea5 ldrh w5, [x21,#182]
switch (meta_len) {
ffff8000113ac128: 51001063 sub w3, w3, #0x4
ffff8000113ac12c: 7100707f cmp w3, #0x1c
return skb->head + skb->mac_header;
ffff8000113ac130: 8b040004 add x4, x0, x4
ffff8000113ac134: 8b050025 add x5, x1, x5
switch (meta_len) {
ffff8000113ac138: 54000069 b.ls ffff8000113ac144 <dev_gro_receive+0x31c>
ffff8000113ac13c: d2800004 mov x4, #0x0 // #0
ffff8000113ac140: 17ffffc4 b ffff8000113ac050 <dev_gro_receive+0x228>
ffff8000113ac144: 90000007 adrp x7, ffff80001139e37c <__my_cpu_offset>
ffff8000113ac144: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x38
ffff8000113ac148: 910000e7 add x7, x7, #0x0
ffff8000113ac148: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x38
ffff8000113ac14c: 786358e7 ldrh w7, [x7,w3,uxtw #1]
ffff8000113ac150: 10000068 adr x8, ffff8000113ac15c <dev_gro_receive+0x334>
ffff8000113ac154: 8b27a907 add x7, x8, w7, sxth #2
ffff8000113ac158: d61f00e0 br x7
if (ptype->type != type || !ptype->callbacks.gro_receive)
ffff8000113ac15c: f9400801 ldr x1, [x0,#16]
ffff8000113ac160: b4fffb81 cbz x1, ffff8000113ac0d0 <dev_gro_receive+0x2a8>
skb->network_header = skb->data - skb->head;
ffff8000113ac164: f94062a1 ldr x1, [x21,#192]
return NAPI_GRO_CB(skb)->data_offset;
ffff8000113ac168: 9100a2b3 add x19, x21, #0x28
ffff8000113ac16c: f94066a2 ldr x2, [x21,#200]
skb->network_header += offset;
ffff8000113ac170: b9400e64 ldr w4, [x19,#12]
skb->network_header = skb->data - skb->head;
ffff8000113ac174: cb010042 sub x2, x2, x1
skb->mac_len = skb->network_header - skb->mac_header;
ffff8000113ac178: 79416ea3 ldrh w3, [x21,#182]
skb->network_header += offset;
ffff8000113ac17c: 0b020082 add w2, w4, w2
ffff8000113ac180: 53003c42 uxth w2, w2
skb->mac_len = skb->network_header - skb->mac_header;
ffff8000113ac184: 4b030043 sub w3, w2, w3
ffff8000113ac188: 7900f2a3 strh w3, [x21,#120]
skb->network_header += offset;
ffff8000113ac18c: 79016aa2 strh w2, [x21,#180]
NAPI_GRO_CB(skb)->same_flow = 0;
ffff8000113ac190: 39408a62 ldrb w2, [x19,#34]
ffff8000113ac194: 52800023 mov w3, #0x1 // #1
ffff8000113ac198: 121f7842 and w2, w2, #0xfffffffe
ffff8000113ac19c: 39008a62 strb w2, [x19,#34]
return skb->head + skb->end;
ffff8000113ac1a0: b940bea2 ldr w2, [x21,#188]
ffff8000113ac1a4: 8b020021 add x1, x1, x2
NAPI_GRO_CB(skb)->flush = skb_is_gso(skb) || skb_has_frag_list(skb);
ffff8000113ac1a8: 79400822 ldrh w2, [x1,#4]
ffff8000113ac1ac: 35000082 cbnz w2, ffff8000113ac1bc <dev_gro_receive+0x394>
ffff8000113ac1b0: f9400421 ldr x1, [x1,#8]
ffff8000113ac1b4: eb1f003f cmp x1, xzr
ffff8000113ac1b8: 1a9f07e3 cset w3, ne
NAPI_GRO_CB(skb)->free = 0;
ffff8000113ac1bc: 39408a64 ldrb w4, [x19,#34]
NAPI_GRO_CB(skb)->recursion_counter = 0;
ffff8000113ac1c0: 39408e61 ldrb w1, [x19,#35]
NAPI_GRO_CB(skb)->free = 0;
ffff8000113ac1c4: 12001484 and w4, w4, #0x3f
NAPI_GRO_CB(skb)->is_fou = 0;
ffff8000113ac1c8: 12196421 and w1, w1, #0xffffff81
NAPI_GRO_CB(skb)->is_atomic = 1;
ffff8000113ac1cc: 321e0021 orr w1, w1, #0x4
NAPI_GRO_CB(skb)->encap_mark = 0;
ffff8000113ac1d0: 121e7882 and w2, w4, #0xfffffffd
NAPI_GRO_CB(skb)->flush = skb_is_gso(skb) || skb_has_frag_list(skb);
ffff8000113ac1d4: 79002263 strh w3, [x19,#16]
NAPI_GRO_CB(skb)->encap_mark = 0;
ffff8000113ac1d8: 39008a62 strb w2, [x19,#34]
NAPI_GRO_CB(skb)->is_atomic = 1;
ffff8000113ac1dc: 39008e61 strb w1, [x19,#35]
NAPI_GRO_CB(skb)->gro_remcsum_start = 0;
ffff8000113ac1e0: 79002e7f strh wzr, [x19,#22]
switch (skb->ip_summed) {
ffff8000113ac1e4: 394202a1 ldrb w1, [x21,#128]
ffff8000113ac1e8: d3451821 ubfx x1, x1, #5, #2
ffff8000113ac1ec: 7100043f cmp w1, #0x1
ffff8000113ac1f0: 540008e0 b.eq ffff8000113ac30c <dev_gro_receive+0x4e4>
ffff8000113ac1f4: 7100083f cmp w1, #0x2
ffff8000113ac1f8: 54000721 b.ne ffff8000113ac2dc <dev_gro_receive+0x4b4>
NAPI_GRO_CB(skb)->csum = skb->csum;
ffff8000113ac1fc: b9408aa1 ldr w1, [x21,#136]
NAPI_GRO_CB(skb)->csum_valid = 1;
ffff8000113ac200: 321e0042 orr w2, w2, #0x4
NAPI_GRO_CB(skb)->csum_cnt = 0;
ffff8000113ac204: 121a7042 and w2, w2, #0xffffffc7
NAPI_GRO_CB(skb)->csum = skb->csum;
ffff8000113ac208: b9002661 str w1, [x19,#36]
NAPI_GRO_CB(skb)->csum_cnt = 0;
ffff8000113ac20c: 39008a62 strb w2, [x19,#34]
pp = INDIRECT_CALL_INET(ptype->callbacks.gro_receive,
ffff8000113ac210: f9400802 ldr x2, [x0,#16]
ffff8000113ac214: aa1503e1 mov x1, x21
ffff8000113ac218: aa1b03e0 mov x0, x27
ffff8000113ac21c: d63f0040 blr x2
ffff8000113ac220: aa0003e1 mov x1, x0
if (&ptype->list == head)
ffff8000113ac224: 91000357 add x23, x26, #0x0
ffff8000113ac224: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113ac228: 912042f7 add x23, x23, #0x810
ffff8000113ac22c: eb17029f cmp x20, x23
ffff8000113ac230: 9100a2b3 add x19, x21, #0x28
ffff8000113ac234: 54ffe240 b.eq ffff8000113abe7c <dev_gro_receive+0x54>
if (PTR_ERR(pp) == -EINPROGRESS) {
ffff8000113ac238: b101cc3f cmn x1, #0x73
ret = GRO_CONSUMED;
ffff8000113ac23c: 528000b4 mov w20, #0x5 // #5
if (PTR_ERR(pp) == -EINPROGRESS) {
ffff8000113ac240: 54ffe320 b.eq ffff8000113abea4 <dev_gro_receive+0x7c>
same_flow = NAPI_GRO_CB(skb)->same_flow;
ffff8000113ac244: 9100a2b3 add x19, x21, #0x28
ffff8000113ac248: 39408a60 ldrb w0, [x19,#34]
ffff8000113ac24c: 12000014 and w20, w0, #0x1
ret = NAPI_GRO_CB(skb)->free ? GRO_MERGED_FREE : GRO_MERGED;
ffff8000113ac250: d3461c17 ubfx x23, x0, #6, #2
if (pp) {
ffff8000113ac254: b4000261 cbz x1, ffff8000113ac2a0 <dev_gro_receive+0x478>
if (!__list_del_entry_valid(entry))
ffff8000113ac258: aa0103e0 mov x0, x1
ffff8000113ac25c: f90037a1 str x1, [x29,#104]
ffff8000113ac260: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113ac260: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113ac264: 53001c00 uxtb w0, w0
ffff8000113ac268: f94037a1 ldr x1, [x29,#104]
ffff8000113ac26c: 340000a0 cbz w0, ffff8000113ac280 <dev_gro_receive+0x458>
__list_del(entry->prev, entry->next);
ffff8000113ac270: f9400420 ldr x0, [x1,#8]
ffff8000113ac274: f9400022 ldr x2, [x1]
next->prev = prev;
ffff8000113ac278: f9000440 str x0, [x2,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113ac27c: f9000002 str x2, [x0]
skb->next = NULL;
ffff8000113ac280: f900003f str xzr, [x1]
napi_gro_complete(napi, pp);
ffff8000113ac284: aa1603e0 mov x0, x22
ffff8000113ac288: 97fffea7 bl ffff8000113abd24 <napi_gro_complete.constprop.161>
napi->gro_hash[hash].count--;
ffff8000113ac28c: 8b180700 add x0, x24, x24, lsl #1
ffff8000113ac290: 8b000ec0 add x0, x22, x0, lsl #3
ffff8000113ac294: b9405001 ldr w1, [x0,#80]
ffff8000113ac298: 51000421 sub w1, w1, #0x1
ffff8000113ac29c: b9005001 str w1, [x0,#80]
if (same_flow)
ffff8000113ac2a0: 34000454 cbz w20, ffff8000113ac328 <dev_gro_receive+0x500>
ret = NAPI_GRO_CB(skb)->free ? GRO_MERGED_FREE : GRO_MERGED;
ffff8000113ac2a4: 6b1f02ff cmp w23, wzr
ffff8000113ac2a8: 1a9f07f4 cset w20, ne
ffff8000113ac2ac: 17fffefe b ffff8000113abea4 <dev_gro_receive+0x7c>
switch (a->type) {
ffff8000113ac2b0: 340001c3 cbz w3, ffff8000113ac2e8 <dev_gro_receive+0x4c0>
ffff8000113ac2b4: 7100047f cmp w3, #0x1
ffff8000113ac2b8: 54ffeae1 b.ne ffff8000113ac014 <dev_gro_receive+0x1ec>
ffff8000113ac2bc: d2800202 mov x2, #0x10 // #16
ffff8000113ac2c0: 9101e000 add x0, x0, #0x78
ffff8000113ac2c4: 9101e021 add x1, x1, #0x78
ffff8000113ac2c8: f90037a6 str x6, [x29,#104]
ffff8000113ac2cc: 94000000 bl 0 <memcmp>
ffff8000113ac2cc: R_AARCH64_CALL26 memcmp
ffff8000113ac2d0: 93407c02 sxtw x2, w0
ffff8000113ac2d4: f94037a6 ldr x6, [x29,#104]
ffff8000113ac2d8: 17ffff4f b ffff8000113ac014 <dev_gro_receive+0x1ec>
NAPI_GRO_CB(skb)->csum_valid = 0;
ffff8000113ac2dc: 121a6884 and w4, w4, #0xffffffc1
ffff8000113ac2e0: 39008a64 strb w4, [x19,#34]
ffff8000113ac2e4: 17ffffcb b ffff8000113ac210 <dev_gro_receive+0x3e8>
return memcmp(&a->u.tun_info, &b->u.tun_info,
ffff8000113ac2e8: 39430002 ldrb w2, [x0,#192]
ffff8000113ac2ec: 9101e021 add x1, x1, #0x78
ffff8000113ac2f0: 91014042 add x2, x2, #0x50
ffff8000113ac2f4: 9101e000 add x0, x0, #0x78
ffff8000113ac2f8: f90037a6 str x6, [x29,#104]
ffff8000113ac2fc: 94000000 bl 0 <memcmp>
ffff8000113ac2fc: R_AARCH64_CALL26 memcmp
ffff8000113ac300: 93407c02 sxtw x2, w0
ffff8000113ac304: f94037a6 ldr x6, [x29,#104]
ffff8000113ac308: 17ffff43 b ffff8000113ac014 <dev_gro_receive+0x1ec>
NAPI_GRO_CB(skb)->csum_cnt = skb->csum_level + 1;
ffff8000113ac30c: 39420aa1 ldrb w1, [x21,#130]
ffff8000113ac310: d3420c21 ubfx x1, x1, #2, #2
ffff8000113ac314: 11000421 add w1, w1, #0x1
ffff8000113ac318: 331d0822 bfi w2, w1, #3, #3
NAPI_GRO_CB(skb)->csum_valid = 0;
ffff8000113ac31c: 121d7842 and w2, w2, #0xfffffffb
ffff8000113ac320: 39008a62 strb w2, [x19,#34]
break;
ffff8000113ac324: 17ffffbb b ffff8000113ac210 <dev_gro_receive+0x3e8>
if (NAPI_GRO_CB(skb)->flush)
ffff8000113ac328: 79402260 ldrh w0, [x19,#16]
ffff8000113ac32c: 35ffda80 cbnz w0, ffff8000113abe7c <dev_gro_receive+0x54>
if (unlikely(napi->gro_hash[hash].count >= MAX_GRO_SKBS)) {
ffff8000113ac330: 8b180700 add x0, x24, x24, lsl #1
ffff8000113ac334: 8b000ec0 add x0, x22, x0, lsl #3
ffff8000113ac338: b9405001 ldr w1, [x0,#80]
ffff8000113ac33c: 71001c3f cmp w1, #0x7
ffff8000113ac340: 54000b2c b.gt ffff8000113ac4a4 <dev_gro_receive+0x67c>
napi->gro_hash[hash].count++;
ffff8000113ac344: 11000421 add w1, w1, #0x1
ffff8000113ac348: b9005001 str w1, [x0,#80]
NAPI_GRO_CB(skb)->age = jiffies;
ffff8000113ac34c: 90000000 adrp x0, 0 <jiffies>
ffff8000113ac34c: R_AARCH64_ADR_PREL_PG_HI21 jiffies
ffff8000113ac350: f9400000 ldr x0, [x0]
ffff8000113ac350: R_AARCH64_LDST64_ABS_LO12_NC jiffies
NAPI_GRO_CB(skb)->count = 1;
ffff8000113ac354: 52800021 mov w1, #0x1 // #1
ffff8000113ac358: 79002a61 strh w1, [x19,#20]
NAPI_GRO_CB(skb)->age = jiffies;
ffff8000113ac35c: f9000e60 str x0, [x19,#24]
NAPI_GRO_CB(skb)->last = skb;
ffff8000113ac360: f9001675 str x21, [x19,#40]
return skb->len - NAPI_GRO_CB(skb)->data_offset;
ffff8000113ac364: b94072a2 ldr w2, [x21,#112]
return skb->head + skb->end;
ffff8000113ac368: b940bea0 ldr w0, [x21,#188]
skb_shinfo(skb)->gso_size = skb_gro_len(skb);
ffff8000113ac36c: f94062a3 ldr x3, [x21,#192]
ffff8000113ac370: b9400e61 ldr w1, [x19,#12]
ffff8000113ac374: 8b000060 add x0, x3, x0
ffff8000113ac378: 4b010041 sub w1, w2, w1
__list_add(new, head, head->next);
ffff8000113ac37c: f9403ba7 ldr x7, [x29,#112]
ffff8000113ac380: 79000801 strh w1, [x0,#4]
ffff8000113ac384: f8676ad7 ldr x23, [x22,x7]
if (!__list_add_valid(new, prev, next))
ffff8000113ac388: aa1503e0 mov x0, x21
ffff8000113ac38c: aa1b03e1 mov x1, x27
ffff8000113ac390: aa1703e2 mov x2, x23
ffff8000113ac394: 94000000 bl 0 <__list_add_valid>
ffff8000113ac394: R_AARCH64_CALL26 __list_add_valid
ffff8000113ac398: 53001c00 uxtb w0, w0
ret = GRO_HELD;
ffff8000113ac39c: 52800054 mov w20, #0x2 // #2
ffff8000113ac3a0: 34ffd700 cbz w0, ffff8000113abe80 <dev_gro_receive+0x58>
next->prev = new;
ffff8000113ac3a4: f90006f5 str x21, [x23,#8]
ffff8000113ac3a8: f9403ba8 ldr x8, [x29,#112]
new->next = next;
ffff8000113ac3ac: f90002b7 str x23, [x21]
new->prev = prev;
ffff8000113ac3b0: f90006bb str x27, [x21,#8]
ffff8000113ac3b4: f8286ad5 str x21, [x22,x8]
ffff8000113ac3b8: 17fffeb2 b ffff8000113abe80 <dev_gro_receive+0x58>
u64 diffs = 0;
ffff8000113ac3bc: d280000a mov x10, #0x0 // #0
case 8: diffs |= __it_diff(a, b, 64);
ffff8000113ac3c0: f85f80a5 ldur x5, [x5,#-8]
ffff8000113ac3c4: f85f8083 ldur x3, [x4,#-8]
ffff8000113ac3c8: ca0300a3 eor x3, x5, x3
ffff8000113ac3cc: aa0a0063 orr x3, x3, x10
true : __skb_metadata_differs(skb_a, skb_b, len_a);
ffff8000113ac3d0: eb1f007f cmp x3, xzr
ffff8000113ac3d4: 9a9f07e4 cset x4, ne
ffff8000113ac3d8: 17ffff1e b ffff8000113ac050 <dev_gro_receive+0x228>
u64 diffs = 0;
ffff8000113ac3dc: d280000a mov x10, #0x0 // #0
case 24: diffs |= __it_diff(a, b, 64);
ffff8000113ac3e0: f85f80ab ldur x11, [x5,#-8]
ffff8000113ac3e4: f85f8083 ldur x3, [x4,#-8]
ffff8000113ac3e8: d10020a5 sub x5, x5, #0x8
ffff8000113ac3ec: ca030163 eor x3, x11, x3
ffff8000113ac3f0: aa0a0063 orr x3, x3, x10
ffff8000113ac3f4: d1002084 sub x4, x4, #0x8
case 16: diffs |= __it_diff(a, b, 64);
ffff8000113ac3f8: f85f80ab ldur x11, [x5,#-8]
ffff8000113ac3fc: f85f808a ldur x10, [x4,#-8]
ffff8000113ac400: d10020a5 sub x5, x5, #0x8
ffff8000113ac404: ca0a016a eor x10, x11, x10
ffff8000113ac408: d1002084 sub x4, x4, #0x8
ffff8000113ac40c: aa03014a orr x10, x10, x3
ffff8000113ac410: 17ffffec b ffff8000113ac3c0 <dev_gro_receive+0x598>
u64 diffs = 0;
ffff8000113ac414: d280000a mov x10, #0x0 // #0
case 20: diffs |= __it_diff(a, b, 64);
ffff8000113ac418: f85f80ab ldur x11, [x5,#-8]
ffff8000113ac41c: f85f8083 ldur x3, [x4,#-8]
ffff8000113ac420: d10020a5 sub x5, x5, #0x8
ffff8000113ac424: ca030163 eor x3, x11, x3
ffff8000113ac428: aa0a0063 orr x3, x3, x10
ffff8000113ac42c: d1002084 sub x4, x4, #0x8
case 12: diffs |= __it_diff(a, b, 64);
ffff8000113ac430: f85f80ab ldur x11, [x5,#-8]
ffff8000113ac434: f85f808a ldur x10, [x4,#-8]
ffff8000113ac438: d10020a5 sub x5, x5, #0x8
ffff8000113ac43c: ca0a016a eor x10, x11, x10
ffff8000113ac440: d1002084 sub x4, x4, #0x8
ffff8000113ac444: aa03014a orr x10, x10, x3
case 4: diffs |= __it_diff(a, b, 32);
ffff8000113ac448: b85fc0a5 ldur w5, [x5,#-4]
ffff8000113ac44c: b85fc083 ldur w3, [x4,#-4]
ffff8000113ac450: 4a0300a3 eor w3, w5, w3
ffff8000113ac454: aa0a0063 orr x3, x3, x10
ffff8000113ac458: 17ffffde b ffff8000113ac3d0 <dev_gro_receive+0x5a8>
u64 diffs = 0;
ffff8000113ac45c: d2800003 mov x3, #0x0 // #0
ffff8000113ac460: 17ffffe6 b ffff8000113ac3f8 <dev_gro_receive+0x5d0>
ffff8000113ac464: d2800003 mov x3, #0x0 // #0
ffff8000113ac468: 17fffff2 b ffff8000113ac430 <dev_gro_receive+0x608>
ffff8000113ac46c: d280000a mov x10, #0x0 // #0
ffff8000113ac470: 17fffff6 b ffff8000113ac448 <dev_gro_receive+0x620>
case 32: diffs |= __it_diff(a, b, 64);
ffff8000113ac474: f85f808a ldur x10, [x4,#-8]
ffff8000113ac478: f85f80a3 ldur x3, [x5,#-8]
ffff8000113ac47c: d1002084 sub x4, x4, #0x8
ffff8000113ac480: ca03014a eor x10, x10, x3
ffff8000113ac484: d10020a5 sub x5, x5, #0x8
ffff8000113ac488: 17ffffd6 b ffff8000113ac3e0 <dev_gro_receive+0x5b8>
case 28: diffs |= __it_diff(a, b, 64);
ffff8000113ac48c: f85f808a ldur x10, [x4,#-8]
ffff8000113ac490: f85f80a3 ldur x3, [x5,#-8]
ffff8000113ac494: d1002084 sub x4, x4, #0x8
ffff8000113ac498: ca03014a eor x10, x10, x3
ffff8000113ac49c: d10020a5 sub x5, x5, #0x8
ffff8000113ac4a0: 17ffffde b ffff8000113ac418 <dev_gro_receive+0x5f0>
struct list_head *gro_head;
ffff8000113ac4a4: f9400761 ldr x1, [x27,#8]
if (WARN_ON_ONCE(!oldest))
ffff8000113ac4a8: b4000121 cbz x1, ffff8000113ac4cc <dev_gro_receive+0x6a4>
__list_del_entry(&skb->list);
ffff8000113ac4ac: aa0103e0 mov x0, x1
ffff8000113ac4b0: f90037a1 str x1, [x29,#104]
ffff8000113ac4b4: 97ffd512 bl ffff8000113a18fc <__list_del_entry>
skb->next = NULL;
ffff8000113ac4b8: f94037a1 ldr x1, [x29,#104]
napi_gro_complete(napi, oldest);
ffff8000113ac4bc: aa1603e0 mov x0, x22
ffff8000113ac4c0: f900003f str xzr, [x1]
ffff8000113ac4c4: 97fffe18 bl ffff8000113abd24 <napi_gro_complete.constprop.161>
ffff8000113ac4c8: 17ffffa1 b ffff8000113ac34c <dev_gro_receive+0x524>
if (WARN_ON_ONCE(!oldest))
ffff8000113ac4cc: d4210000 brk #0x800
ffff8000113ac4d0: 17ffff9f b ffff8000113ac34c <dev_gro_receive+0x524>
ffff8000113ac4d4 <napi_gro_receive>:
{
ffff8000113ac4d4: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113ac4d8: 910003fd mov x29, sp
ffff8000113ac4dc: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ac4e0: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113ac4e4: aa0003f6 mov x22, x0
ffff8000113ac4e8: aa1e03e0 mov x0, x30
ffff8000113ac4ec: aa0103f5 mov x21, x1
ffff8000113ac4f0: 94000000 bl 0 <_mcount>
ffff8000113ac4f0: R_AARCH64_CALL26 _mcount
__READ_ONCE_SIZE;
ffff8000113ac4f4: 90000000 adrp x0, 0 <__tracepoint_napi_gro_receive_entry>
ffff8000113ac4f4: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_napi_gro_receive_entry
ffff8000113ac4f8: 91000000 add x0, x0, #0x0
ffff8000113ac4f8: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_napi_gro_receive_entry
gro_result_t napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
ffff8000113ac4fc: b94182c2 ldr w2, [x22,#384]
ffff8000113ac500: b9400801 ldr w1, [x0,#8]
ffff8000113ac504: b9009ea2 str w2, [x21,#156]
ffff8000113ac508: 6b1f003f cmp w1, wzr
ffff8000113ac50c: 5400080c b.gt ffff8000113ac60c <napi_gro_receive+0x138>
skb_gro_reset_offset(skb);
ffff8000113ac510: aa1503e0 mov x0, x21
ffff8000113ac514: 97ffd3e3 bl ffff8000113a14a0 <skb_gro_reset_offset>
ret = napi_skb_finish(napi, skb, dev_gro_receive(napi, skb));
ffff8000113ac518: aa1603e0 mov x0, x22
ffff8000113ac51c: aa1503e1 mov x1, x21
ffff8000113ac520: 97fffe42 bl ffff8000113abe28 <dev_gro_receive>
switch (ret) {
ffff8000113ac524: 71000c1f cmp w0, #0x3
ret = napi_skb_finish(napi, skb, dev_gro_receive(napi, skb));
ffff8000113ac528: 2a0003f4 mov w20, w0
switch (ret) {
ffff8000113ac52c: 54000320 b.eq ffff8000113ac590 <napi_gro_receive+0xbc>
ffff8000113ac530: 7100101f cmp w0, #0x4
ffff8000113ac534: 54000280 b.eq ffff8000113ac584 <napi_gro_receive+0xb0>
ffff8000113ac538: 7100041f cmp w0, #0x1
ffff8000113ac53c: 54000160 b.eq ffff8000113ac568 <napi_gro_receive+0x94>
ffff8000113ac540: 90000000 adrp x0, 0 <__tracepoint_napi_gro_receive_exit>
ffff8000113ac540: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_napi_gro_receive_exit
ffff8000113ac544: 91000000 add x0, x0, #0x0
ffff8000113ac544: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_napi_gro_receive_exit
ffff8000113ac548: b9400801 ldr w1, [x0,#8]
ffff8000113ac54c: 6b1f003f cmp w1, wzr
ffff8000113ac550: 540002cc b.gt ffff8000113ac5a8 <napi_gro_receive+0xd4>
}
ffff8000113ac554: 2a1403e0 mov w0, w20
ffff8000113ac558: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113ac55c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ac560: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113ac564: d65f03c0 ret
if (NAPI_GRO_CB(skb)->free == NAPI_GRO_FREE_STOLEN_HEAD)
ffff8000113ac568: 39412aa0 ldrb w0, [x21,#74]
ffff8000113ac56c: d3461c00 ubfx x0, x0, #6, #2
ffff8000113ac570: 7100081f cmp w0, #0x2
napi_skb_free_stolen_head(skb);
ffff8000113ac574: aa1503e0 mov x0, x21
if (NAPI_GRO_CB(skb)->free == NAPI_GRO_FREE_STOLEN_HEAD)
ffff8000113ac578: 54000140 b.eq ffff8000113ac5a0 <napi_gro_receive+0xcc>
__kfree_skb(skb);
ffff8000113ac57c: 94000000 bl 0 <__kfree_skb>
ffff8000113ac57c: R_AARCH64_CALL26 __kfree_skb
ffff8000113ac580: 17fffff0 b ffff8000113ac540 <napi_gro_receive+0x6c>
kfree_skb(skb);
ffff8000113ac584: aa1503e0 mov x0, x21
ffff8000113ac588: 94000000 bl 0 <kfree_skb>
ffff8000113ac588: R_AARCH64_CALL26 kfree_skb
ffff8000113ac58c: 17ffffed b ffff8000113ac540 <napi_gro_receive+0x6c>
gro_normal_one(napi, skb);
ffff8000113ac590: aa1603e0 mov x0, x22
ffff8000113ac594: aa1503e1 mov x1, x21
ffff8000113ac598: 97fffdbd bl ffff8000113abc8c <gro_normal_one>
ffff8000113ac59c: 17ffffe9 b ffff8000113ac540 <napi_gro_receive+0x6c>
napi_skb_free_stolen_head(skb);
ffff8000113ac5a0: 97ffd878 bl ffff8000113a2780 <napi_skb_free_stolen_head>
ffff8000113ac5a4: 17ffffe7 b ffff8000113ac540 <napi_gro_receive+0x6c>
DEFINE_EVENT(net_dev_rx_exit_template, napi_gro_receive_exit,
ffff8000113ac5a8: 90000001 adrp x1, 0 <cpu_number>
ffff8000113ac5a8: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113ac5ac: d538d082 mrs x2, tpidr_el1
ffff8000113ac5b0: 91000021 add x1, x1, #0x0
ffff8000113ac5b0: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113ac5b4: b8616841 ldr w1, [x2,x1]
return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
ffff8000113ac5b8: 52800803 mov w3, #0x40 // #64
ffff8000113ac5bc: 1ac30c23 sdiv w3, w1, w3
ffff8000113ac5c0: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113ac5c0: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113ac5c4: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113ac5c8: 91000042 add x2, x2, #0x0
ffff8000113ac5c8: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113ac5cc: f8626862 ldr x2, [x3,x2]
ffff8000113ac5d0: 9ac12441 lsr x1, x2, x1
ffff8000113ac5d4: 3607fc01 tbz w1, #0, ffff8000113ac554 <napi_gro_receive+0x80>
ffff8000113ac5d8: f9401013 ldr x19, [x0,#32]
ffff8000113ac5dc: b40000f3 cbz x19, ffff8000113ac5f8 <napi_gro_receive+0x124>
ffff8000113ac5e0: f9400262 ldr x2, [x19]
ffff8000113ac5e4: f9400660 ldr x0, [x19,#8]
ffff8000113ac5e8: 2a1403e1 mov w1, w20
ffff8000113ac5ec: d63f0040 blr x2
ffff8000113ac5f0: f8418e62 ldr x2, [x19,#24]!
ffff8000113ac5f4: b5ffff82 cbnz x2, ffff8000113ac5e4 <napi_gro_receive+0x110>
}
ffff8000113ac5f8: 2a1403e0 mov w0, w20
ffff8000113ac5fc: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113ac600: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ac604: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113ac608: d65f03c0 ret
DEFINE_EVENT(net_dev_rx_verbose_template, napi_gro_receive_entry,
ffff8000113ac60c: 90000001 adrp x1, 0 <cpu_number>
ffff8000113ac60c: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113ac610: d538d082 mrs x2, tpidr_el1
ffff8000113ac614: 91000021 add x1, x1, #0x0
ffff8000113ac614: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113ac618: b8616841 ldr w1, [x2,x1]
ffff8000113ac61c: 52800803 mov w3, #0x40 // #64
ffff8000113ac620: 1ac30c23 sdiv w3, w1, w3
ffff8000113ac624: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113ac624: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113ac628: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113ac62c: 91000042 add x2, x2, #0x0
ffff8000113ac62c: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113ac630: f8626862 ldr x2, [x3,x2]
ffff8000113ac634: 9ac12441 lsr x1, x2, x1
ffff8000113ac638: 3607f6c1 tbz w1, #0, ffff8000113ac510 <napi_gro_receive+0x3c>
ffff8000113ac63c: f9401013 ldr x19, [x0,#32]
ffff8000113ac640: b40000f3 cbz x19, ffff8000113ac65c <napi_gro_receive+0x188>
ffff8000113ac644: f9400262 ldr x2, [x19]
ffff8000113ac648: f9400660 ldr x0, [x19,#8]
ffff8000113ac64c: aa1503e1 mov x1, x21
ffff8000113ac650: d63f0040 blr x2
ffff8000113ac654: f8418e62 ldr x2, [x19,#24]!
ffff8000113ac658: b5ffff82 cbnz x2, ffff8000113ac648 <napi_gro_receive+0x174>
ffff8000113ac65c: 17ffffad b ffff8000113ac510 <napi_gro_receive+0x3c>
ffff8000113ac660 <napi_gro_frags>:
{
ffff8000113ac660: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113ac664: 910003fd mov x29, sp
ffff8000113ac668: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ac66c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113ac670: aa0003f6 mov x22, x0
ffff8000113ac674: aa1e03e0 mov x0, x30
ffff8000113ac678: 94000000 bl 0 <_mcount>
ffff8000113ac678: R_AARCH64_CALL26 _mcount
struct sk_buff *skb = napi->skb;
ffff8000113ac67c: f94082d3 ldr x19, [x22,#256]
napi->skb = NULL;
ffff8000113ac680: f90082df str xzr, [x22,#256]
skb->mac_header = skb->data - skb->head;
ffff8000113ac684: f9406662 ldr x2, [x19,#200]
ffff8000113ac688: f9406261 ldr x1, [x19,#192]
skb_gro_reset_offset(skb);
ffff8000113ac68c: aa1303e0 mov x0, x19
ffff8000113ac690: cb010041 sub x1, x2, x1
ffff8000113ac694: 79016e61 strh w1, [x19,#182]
ffff8000113ac698: 97ffd382 bl ffff8000113a14a0 <skb_gro_reset_offset>
return NAPI_GRO_CB(skb)->frag0_len < hlen;
ffff8000113ac69c: 9100a275 add x21, x19, #0x28
if (unlikely(skb_gro_header_hard(skb, hlen))) {
ffff8000113ac6a0: b9400aa0 ldr w0, [x21,#8]
if (!pskb_may_pull(skb, hlen))
ffff8000113ac6a4: 528001c1 mov w1, #0xe // #14
ffff8000113ac6a8: 7100341f cmp w0, #0xd
ffff8000113ac6ac: aa1303e0 mov x0, x19
ffff8000113ac6b0: 54000d49 b.ls ffff8000113ac858 <napi_gro_frags+0x1f8>
eth = (const struct ethhdr *)skb->data;
ffff8000113ac6b4: f9406674 ldr x20, [x19,#200]
gro_pull_from_frag0(skb, hlen);
ffff8000113ac6b8: 97ffd1d3 bl ffff8000113a0e04 <gro_pull_from_frag0>
NAPI_GRO_CB(skb)->frag0 += hlen;
ffff8000113ac6bc: f9401660 ldr x0, [x19,#40]
ffff8000113ac6c0: 91003800 add x0, x0, #0xe
ffff8000113ac6c4: f9001660 str x0, [x19,#40]
NAPI_GRO_CB(skb)->frag0_len -= hlen;
ffff8000113ac6c8: b9400aa0 ldr w0, [x21,#8]
ffff8000113ac6cc: 51003800 sub w0, w0, #0xe
ffff8000113ac6d0: b9000aa0 str w0, [x21,#8]
skb->len -= len;
ffff8000113ac6d4: b9407260 ldr w0, [x19,#112]
BUG_ON(skb->len < skb->data_len);
ffff8000113ac6d8: b9407661 ldr w1, [x19,#116]
skb->len -= len;
ffff8000113ac6dc: 51003800 sub w0, w0, #0xe
ffff8000113ac6e0: b9007260 str w0, [x19,#112]
BUG_ON(skb->len < skb->data_len);
ffff8000113ac6e4: 6b01001f cmp w0, w1
ffff8000113ac6e8: 54000b63 b.cc ffff8000113ac854 <napi_gro_frags+0x1f4>
return skb->data += len;
ffff8000113ac6ec: f9406661 ldr x1, [x19,#200]
return GRO_DROP;
ffff8000113ac6f0: 52800080 mov w0, #0x4 // #4
ffff8000113ac6f4: 91003821 add x1, x1, #0xe
ffff8000113ac6f8: f9006661 str x1, [x19,#200]
skb->protocol = eth->h_proto;
ffff8000113ac6fc: 79401a81 ldrh w1, [x20,#12]
ffff8000113ac700: 79016261 strh w1, [x19,#176]
if (!skb)
ffff8000113ac704: b4000273 cbz x19, ffff8000113ac750 <napi_gro_frags+0xf0>
ffff8000113ac708: 90000000 adrp x0, 0 <__tracepoint_napi_gro_frags_entry>
ffff8000113ac708: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_napi_gro_frags_entry
ffff8000113ac70c: 91000000 add x0, x0, #0x0
ffff8000113ac70c: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_napi_gro_frags_entry
ffff8000113ac710: b9400801 ldr w1, [x0,#8]
ffff8000113ac714: 6b1f003f cmp w1, wzr
ffff8000113ac718: 54000b6c b.gt ffff8000113ac884 <napi_gro_frags+0x224>
ret = napi_frags_finish(napi, skb, dev_gro_receive(napi, skb));
ffff8000113ac71c: aa1603e0 mov x0, x22
ffff8000113ac720: aa1303e1 mov x1, x19
ffff8000113ac724: 97fffdc1 bl ffff8000113abe28 <dev_gro_receive>
ffff8000113ac728: 2a0003f4 mov w20, w0
switch (ret) {
ffff8000113ac72c: 51000400 sub w0, w0, #0x1
ffff8000113ac730: 71000c1f cmp w0, #0x3
ffff8000113ac734: 54000169 b.ls ffff8000113ac760 <napi_gro_frags+0x100>
ffff8000113ac738: 90000001 adrp x1, 0 <__tracepoint_napi_gro_frags_exit>
ffff8000113ac738: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_napi_gro_frags_exit
ffff8000113ac73c: 91000021 add x1, x1, #0x0
ffff8000113ac73c: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_napi_gro_frags_exit
ffff8000113ac740: b9400820 ldr w0, [x1,#8]
ffff8000113ac744: 6b1f001f cmp w0, wzr
ffff8000113ac748: 540005ac b.gt ffff8000113ac7fc <napi_gro_frags+0x19c>
ret = napi_frags_finish(napi, skb, dev_gro_receive(napi, skb));
ffff8000113ac74c: 2a1403e0 mov w0, w20
}
ffff8000113ac750: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ac754: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113ac758: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113ac75c: d65f03c0 ret
switch (ret) {
ffff8000113ac760: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113ac760: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x74
ffff8000113ac764: 91000021 add x1, x1, #0x0
ffff8000113ac764: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x74
ffff8000113ac768: 38604822 ldrb w2, [x1,w0,uxtw]
ffff8000113ac76c: 10000063 adr x3, ffff8000113ac778 <napi_gro_frags+0x118>
ffff8000113ac770: 8b228862 add x2, x3, w2, sxtb #2
ffff8000113ac774: d61f0040 br x2
if (NAPI_GRO_CB(skb)->free == NAPI_GRO_FREE_STOLEN_HEAD)
ffff8000113ac778: 39408aa0 ldrb w0, [x21,#34]
ffff8000113ac77c: d3461c00 ubfx x0, x0, #6, #2
ffff8000113ac780: 7100081f cmp w0, #0x2
ffff8000113ac784: 54000360 b.eq ffff8000113ac7f0 <napi_gro_frags+0x190>
napi_reuse_skb(napi, skb);
ffff8000113ac788: 9100e2c0 add x0, x22, #0x38
ffff8000113ac78c: 910402c1 add x1, x22, #0x100
ffff8000113ac790: aa1303e2 mov x2, x19
ffff8000113ac794: 97ffd813 bl ffff8000113a27e0 <napi_reuse_skb.isra.123>
ffff8000113ac798: 90000001 adrp x1, 0 <__tracepoint_napi_gro_frags_exit>
ffff8000113ac798: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_napi_gro_frags_exit
ffff8000113ac79c: 91000021 add x1, x1, #0x0
ffff8000113ac79c: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_napi_gro_frags_exit
ffff8000113ac7a0: b9400820 ldr w0, [x1,#8]
ffff8000113ac7a4: 6b1f001f cmp w0, wzr
ffff8000113ac7a8: 54fffd2d b.le ffff8000113ac74c <napi_gro_frags+0xec>
ffff8000113ac7ac: 14000014 b ffff8000113ac7fc <napi_gro_frags+0x19c>
skb->data -= len;
ffff8000113ac7b0: f9406662 ldr x2, [x19,#200]
skb->len += len;
ffff8000113ac7b4: b9407260 ldr w0, [x19,#112]
skb->data -= len;
ffff8000113ac7b8: d1003842 sub x2, x2, #0xe
skb->len += len;
ffff8000113ac7bc: 11003800 add w0, w0, #0xe
skb->protocol = eth_type_trans(skb, skb->dev);
ffff8000113ac7c0: f9400a61 ldr x1, [x19,#16]
ffff8000113ac7c4: b9007260 str w0, [x19,#112]
skb->data -= len;
ffff8000113ac7c8: f9006662 str x2, [x19,#200]
ffff8000113ac7cc: aa1303e0 mov x0, x19
ffff8000113ac7d0: 94000000 bl 0 <eth_type_trans>
ffff8000113ac7d0: R_AARCH64_CALL26 eth_type_trans
ffff8000113ac7d4: 79016260 strh w0, [x19,#176]
if (ret == GRO_NORMAL)
ffff8000113ac7d8: 71000e9f cmp w20, #0x3
ffff8000113ac7dc: 54fffae1 b.ne ffff8000113ac738 <napi_gro_frags+0xd8>
gro_normal_one(napi, skb);
ffff8000113ac7e0: aa1603e0 mov x0, x22
ffff8000113ac7e4: aa1303e1 mov x1, x19
ffff8000113ac7e8: 97fffd29 bl ffff8000113abc8c <gro_normal_one>
ffff8000113ac7ec: 17ffffd3 b ffff8000113ac738 <napi_gro_frags+0xd8>
napi_skb_free_stolen_head(skb);
ffff8000113ac7f0: aa1303e0 mov x0, x19
ffff8000113ac7f4: 97ffd7e3 bl ffff8000113a2780 <napi_skb_free_stolen_head>
ffff8000113ac7f8: 17ffffd0 b ffff8000113ac738 <napi_gro_frags+0xd8>
DEFINE_EVENT(net_dev_rx_exit_template, napi_gro_frags_exit,
ffff8000113ac7fc: 90000000 adrp x0, 0 <cpu_number>
ffff8000113ac7fc: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113ac800: 91000000 add x0, x0, #0x0
ffff8000113ac800: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113ac804: d538d082 mrs x2, tpidr_el1
ffff8000113ac808: b8606842 ldr w2, [x2,x0]
ffff8000113ac80c: 52800803 mov w3, #0x40 // #64
ffff8000113ac810: 1ac30c43 sdiv w3, w2, w3
ffff8000113ac814: 90000000 adrp x0, 0 <__cpu_online_mask>
ffff8000113ac814: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113ac818: 91000000 add x0, x0, #0x0
ffff8000113ac818: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113ac81c: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113ac820: f8606863 ldr x3, [x3,x0]
ret = napi_frags_finish(napi, skb, dev_gro_receive(napi, skb));
ffff8000113ac824: 2a1403e0 mov w0, w20
ffff8000113ac828: 9ac22462 lsr x2, x3, x2
ffff8000113ac82c: 3607f922 tbz w2, #0, ffff8000113ac750 <napi_gro_frags+0xf0>
ffff8000113ac830: f9401033 ldr x19, [x1,#32]
ffff8000113ac834: b40000f3 cbz x19, ffff8000113ac850 <napi_gro_frags+0x1f0>
ffff8000113ac838: f9400262 ldr x2, [x19]
ffff8000113ac83c: f9400660 ldr x0, [x19,#8]
ffff8000113ac840: 2a1403e1 mov w1, w20
ffff8000113ac844: d63f0040 blr x2
ffff8000113ac848: f8418e62 ldr x2, [x19,#24]!
ffff8000113ac84c: b5ffff82 cbnz x2, ffff8000113ac83c <napi_gro_frags+0x1dc>
ffff8000113ac850: 17ffffbf b ffff8000113ac74c <napi_gro_frags+0xec>
ffff8000113ac854: 94000000 bl ffff80001139e37c <__my_cpu_offset>
ffff8000113ac854: R_AARCH64_CALL26 .text.unlikely+0xa0
ffff8000113ac858: 97ffd137 bl ffff8000113a0d34 <pskb_may_pull>
ffff8000113ac85c: 53001c00 uxtb w0, w0
ffff8000113ac860: 350003c0 cbnz w0, ffff8000113ac8d8 <napi_gro_frags+0x278>
net_warn_ratelimited("%s: dropping impossible skb from %s\n",
ffff8000113ac864: 94000000 bl 0 <net_ratelimit>
ffff8000113ac864: R_AARCH64_CALL26 net_ratelimit
ffff8000113ac868: 35000420 cbnz w0, ffff8000113ac8ec <napi_gro_frags+0x28c>
napi_reuse_skb(napi, skb);
ffff8000113ac86c: 9100e2c0 add x0, x22, #0x38
ffff8000113ac870: 910402c1 add x1, x22, #0x100
ffff8000113ac874: aa1303e2 mov x2, x19
ffff8000113ac878: 97ffd7da bl ffff8000113a27e0 <napi_reuse_skb.isra.123>
return GRO_DROP;
ffff8000113ac87c: 52800080 mov w0, #0x4 // #4
ffff8000113ac880: 17ffffb4 b ffff8000113ac750 <napi_gro_frags+0xf0>
DEFINE_EVENT(net_dev_rx_verbose_template, napi_gro_frags_entry,
ffff8000113ac884: 90000001 adrp x1, 0 <cpu_number>
ffff8000113ac884: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113ac888: d538d082 mrs x2, tpidr_el1
ffff8000113ac88c: 91000021 add x1, x1, #0x0
ffff8000113ac88c: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113ac890: b8616841 ldr w1, [x2,x1]
ffff8000113ac894: 52800803 mov w3, #0x40 // #64
ffff8000113ac898: 1ac30c23 sdiv w3, w1, w3
ffff8000113ac89c: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113ac89c: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113ac8a0: 937d7c63 sbfiz x3, x3, #3, #32
ffff8000113ac8a4: 91000042 add x2, x2, #0x0
ffff8000113ac8a4: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113ac8a8: f8626862 ldr x2, [x3,x2]
ffff8000113ac8ac: 9ac12441 lsr x1, x2, x1
ffff8000113ac8b0: 3607f361 tbz w1, #0, ffff8000113ac71c <napi_gro_frags+0xbc>
ffff8000113ac8b4: f9401014 ldr x20, [x0,#32]
ffff8000113ac8b8: b40000f4 cbz x20, ffff8000113ac8d4 <napi_gro_frags+0x274>
ffff8000113ac8bc: f9400282 ldr x2, [x20]
ffff8000113ac8c0: f9400680 ldr x0, [x20,#8]
ffff8000113ac8c4: aa1303e1 mov x1, x19
ffff8000113ac8c8: d63f0040 blr x2
ffff8000113ac8cc: f8418e82 ldr x2, [x20,#24]!
ffff8000113ac8d0: b5ffff82 cbnz x2, ffff8000113ac8c0 <napi_gro_frags+0x260>
ffff8000113ac8d4: 17ffff92 b ffff8000113ac71c <napi_gro_frags+0xbc>
NAPI_GRO_CB(skb)->frag0 = NULL;
ffff8000113ac8d8: f900167f str xzr, [x19,#40]
NAPI_GRO_CB(skb)->frag0_len = 0;
ffff8000113ac8dc: b9000abf str wzr, [x21,#8]
return skb->data + offset;
ffff8000113ac8e0: f9406674 ldr x20, [x19,#200]
if (unlikely(!eth)) {
ffff8000113ac8e4: b5ffef94 cbnz x20, ffff8000113ac6d4 <napi_gro_frags+0x74>
ffff8000113ac8e8: 17ffffdf b ffff8000113ac864 <napi_gro_frags+0x204>
net_warn_ratelimited("%s: dropping impossible skb from %s\n",
ffff8000113ac8ec: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113ac8ec: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113ac8f0: f9401ec2 ldr x2, [x22,#56]
ffff8000113ac8f4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ac8f4: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x6f8
ffff8000113ac8f8: 91000021 add x1, x1, #0x0
ffff8000113ac8f8: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113ac8fc: 91020021 add x1, x1, #0x80
ffff8000113ac900: 91000000 add x0, x0, #0x0
ffff8000113ac900: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x6f8
ffff8000113ac904: 94000000 bl 0 <printk>
ffff8000113ac904: R_AARCH64_CALL26 printk
ffff8000113ac908: 17ffffd9 b ffff8000113ac86c <napi_gro_frags+0x20c>
ffff8000113ac90c <napi_gro_flush>:
{
ffff8000113ac90c: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff8000113ac910: 910003fd mov x29, sp
ffff8000113ac914: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ac918: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113ac91c: a90363f7 stp x23, x24, [sp,#48]
ffff8000113ac920: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113ac924: a90573fb stp x27, x28, [sp,#80]
unsigned long bitmask = napi->gro_bitmask;
ffff8000113ac928: aa0003fb mov x27, x0
{
ffff8000113ac92c: aa0003f6 mov x22, x0
ffff8000113ac930: aa1e03e0 mov x0, x30
ffff8000113ac934: 53001c37 uxtb w23, w1
ffff8000113ac938: 94000000 bl 0 <_mcount>
ffff8000113ac938: R_AARCH64_CALL26 _mcount
unsigned long bitmask = napi->gro_bitmask;
ffff8000113ac93c: f8420f7a ldr x26, [x27,#32]!
unsigned int i, base = ~0U;
ffff8000113ac940: 12800019 mov w25, #0xffffffff // #-1
if (flush_old && NAPI_GRO_CB(skb)->age == jiffies)
ffff8000113ac944: 90000018 adrp x24, 0 <jiffies>
ffff8000113ac944: R_AARCH64_ADR_PREL_PG_HI21 jiffies
* the libc and compiler builtin ffs routines, therefore
* differs in spirit from the above ffz (man ffs).
*/
static __always_inline int ffs(int x)
{
return __builtin_ffs(x);
ffff8000113ac948: 5ac00340 rbit w0, w26
ffff8000113ac94c: 6b1f035f cmp w26, wzr
ffff8000113ac950: 5ac01000 clz w0, w0
ffff8000113ac954: 1a8007e0 csinc w0, wzr, w0, eq
while ((i = ffs(bitmask)) != 0) {
ffff8000113ac958: 340007c0 cbz w0, ffff8000113aca50 <napi_gro_flush+0x144>
base += i;
ffff8000113ac95c: 0b000339 add w25, w25, w0
struct list_head *head = &napi->gro_hash[index].list;
ffff8000113ac960: 2a1903e1 mov w1, w25
ffff8000113ac964: 8b010421 add x1, x1, x1, lsl #1
ffff8000113ac968: d37df021 lsl x1, x1, #3
ffff8000113ac96c: 91010035 add x21, x1, #0x40
ffff8000113ac970: 8b1502d5 add x21, x22, x21
list_for_each_entry_safe_reverse(skb, p, head, list) {
ffff8000113ac974: f94006b3 ldr x19, [x21,#8]
bitmask >>= i;
ffff8000113ac978: 9ac0275a lsr x26, x26, x0
list_for_each_entry_safe_reverse(skb, p, head, list) {
ffff8000113ac97c: eb1302bf cmp x21, x19
ffff8000113ac980: f940067c ldr x28, [x19,#8]
ffff8000113ac984: aa1303e0 mov x0, x19
napi->gro_hash[index].count--;
ffff8000113ac988: 8b0102d4 add x20, x22, x1
list_for_each_entry_safe_reverse(skb, p, head, list) {
ffff8000113ac98c: 54000360 b.eq ffff8000113ac9f8 <napi_gro_flush+0xec>
if (flush_old && NAPI_GRO_CB(skb)->age == jiffies)
ffff8000113ac990: 340000b7 cbz w23, ffff8000113ac9a4 <napi_gro_flush+0x98>
ffff8000113ac994: f9402263 ldr x3, [x19,#64]
ffff8000113ac998: f9400301 ldr x1, [x24]
ffff8000113ac998: R_AARCH64_LDST64_ABS_LO12_NC jiffies
ffff8000113ac99c: eb01007f cmp x3, x1
ffff8000113ac9a0: 54fffd40 b.eq ffff8000113ac948 <napi_gro_flush+0x3c>
if (!__list_del_entry_valid(entry))
ffff8000113ac9a4: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113ac9a4: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113ac9a8: 53001c03 uxtb w3, w0
napi_gro_complete(napi, skb);
ffff8000113ac9ac: aa1303e1 mov x1, x19
ffff8000113ac9b0: aa1603e0 mov x0, x22
ffff8000113ac9b4: 340000a3 cbz w3, ffff8000113ac9c8 <napi_gro_flush+0xbc>
__list_del(entry->prev, entry->next);
ffff8000113ac9b8: f9400264 ldr x4, [x19]
ffff8000113ac9bc: f9400663 ldr x3, [x19,#8]
next->prev = prev;
ffff8000113ac9c0: f9000483 str x3, [x4,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113ac9c4: f9000064 str x4, [x3]
skb->next = NULL;
ffff8000113ac9c8: f900027f str xzr, [x19]
ffff8000113ac9cc: 97fffcd6 bl ffff8000113abd24 <napi_gro_complete.constprop.161>
napi->gro_hash[index].count--;
ffff8000113ac9d0: b9405281 ldr w1, [x20,#80]
list_for_each_entry_safe_reverse(skb, p, head, list) {
ffff8000113ac9d4: eb1c02bf cmp x21, x28
napi->gro_hash[index].count--;
ffff8000113ac9d8: 51000421 sub w1, w1, #0x1
ffff8000113ac9dc: b9005281 str w1, [x20,#80]
list_for_each_entry_safe_reverse(skb, p, head, list) {
ffff8000113ac9e0: f9400783 ldr x3, [x28,#8]
ffff8000113ac9e4: aa1c03e0 mov x0, x28
ffff8000113ac9e8: 540000a0 b.eq ffff8000113ac9fc <napi_gro_flush+0xf0>
ffff8000113ac9ec: aa1c03f3 mov x19, x28
ffff8000113ac9f0: aa0303fc mov x28, x3
ffff8000113ac9f4: 17ffffe7 b ffff8000113ac990 <napi_gro_flush+0x84>
ffff8000113ac9f8: b9405281 ldr w1, [x20,#80]
if (!napi->gro_hash[index].count)
ffff8000113ac9fc: 35fffa61 cbnz w1, ffff8000113ac948 <napi_gro_flush+0x3c>
unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
ffff8000113aca00: 6b1f033f cmp w25, wzr
ffff8000113aca04: 1100ff20 add w0, w25, #0x3f
unsigned long mask = BIT_MASK(nr);
ffff8000113aca08: 131f7f21 asr w1, w25, #31
ffff8000113aca0c: 531a7c21 lsr w1, w1, #26
unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
ffff8000113aca10: 1a99b000 csel w0, w0, w25, lt
unsigned long mask = BIT_MASK(nr);
ffff8000113aca14: 0b010323 add w3, w25, w1
unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
ffff8000113aca18: 13067c00 asr w0, w0, #6
ffff8000113aca1c: 937d7c00 sbfiz x0, x0, #3, #32
unsigned long mask = BIT_MASK(nr);
ffff8000113aca20: 12001463 and w3, w3, #0x3f
*p &= ~mask;
ffff8000113aca24: f8606b62 ldr x2, [x27,x0]
unsigned long mask = BIT_MASK(nr);
ffff8000113aca28: 4b010061 sub w1, w3, w1
ffff8000113aca2c: d2800023 mov x3, #0x1 // #1
ffff8000113aca30: 9ac12061 lsl x1, x3, x1
*p &= ~mask;
ffff8000113aca34: 8a210041 bic x1, x2, x1
ffff8000113aca38: f8206b61 str x1, [x27,x0]
ffff8000113aca3c: 5ac00340 rbit w0, w26
ffff8000113aca40: 6b1f035f cmp w26, wzr
ffff8000113aca44: 5ac01000 clz w0, w0
ffff8000113aca48: 1a8007e0 csinc w0, wzr, w0, eq
while ((i = ffs(bitmask)) != 0) {
ffff8000113aca4c: 35fff880 cbnz w0, ffff8000113ac95c <napi_gro_flush+0x50>
}
ffff8000113aca50: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113aca54: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113aca58: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113aca5c: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113aca60: a94573fb ldp x27, x28, [sp,#80]
ffff8000113aca64: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113aca68: d65f03c0 ret
ffff8000113aca6c <napi_complete_done>:
{
ffff8000113aca6c: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113aca70: 910003fd mov x29, sp
ffff8000113aca74: a90153f3 stp x19, x20, [sp,#16]
ffff8000113aca78: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113aca7c: aa0003f3 mov x19, x0
ffff8000113aca80: aa1e03e0 mov x0, x30
ffff8000113aca84: f9001fa1 str x1, [x29,#56]
ffff8000113aca88: 94000000 bl 0 <_mcount>
ffff8000113aca88: R_AARCH64_CALL26 _mcount
if (unlikely(n->state & (NAPIF_STATE_NPSVC |
ffff8000113aca8c: f9400a74 ldr x20, [x19,#16]
ffff8000113aca90: d2800900 mov x0, #0x48 // #72
ffff8000113aca94: 8a000294 and x20, x20, x0
ffff8000113aca98: f9401fa1 ldr x1, [x29,#56]
ffff8000113aca9c: b5000694 cbnz x20, ffff8000113acb6c <napi_complete_done+0x100>
if (n->gro_bitmask) {
ffff8000113acaa0: f9401260 ldr x0, [x19,#32]
ffff8000113acaa4: b40001e0 cbz x0, ffff8000113acae0 <napi_complete_done+0x74>
if (work_done)
ffff8000113acaa8: 34000501 cbz w1, ffff8000113acb48 <napi_complete_done+0xdc>
timeout = n->dev->gro_flush_timeout;
ffff8000113acaac: f9401e61 ldr x1, [x19,#56]
napi_gro_flush(n, !!timeout);
ffff8000113acab0: aa1303e0 mov x0, x19
timeout = n->dev->gro_flush_timeout;
ffff8000113acab4: f9419c36 ldr x22, [x1,#824]
napi_gro_flush(n, !!timeout);
ffff8000113acab8: eb1f02df cmp x22, xzr
ffff8000113acabc: 1a9f07f5 cset w21, ne
ffff8000113acac0: 2a1503e1 mov w1, w21
ffff8000113acac4: 94000000 bl ffff8000113ac90c <napi_gro_flush>
ffff8000113acac4: R_AARCH64_CALL26 napi_gro_flush
if (timeout)
ffff8000113acac8: 340000d5 cbz w21, ffff8000113acae0 <napi_complete_done+0x74>
* softirq based mode is considered for debug purpose only!
*/
static inline void hrtimer_start(struct hrtimer *timer, ktime_t tim,
const enum hrtimer_mode mode)
{
hrtimer_start_range_ns(timer, tim, 0, mode);
ffff8000113acacc: 91048260 add x0, x19, #0x120
ffff8000113acad0: aa1603e1 mov x1, x22
ffff8000113acad4: aa1403e2 mov x2, x20
ffff8000113acad8: 52800063 mov w3, #0x3 // #3
ffff8000113acadc: 94000000 bl 0 <hrtimer_start_range_ns>
ffff8000113acadc: R_AARCH64_CALL26 hrtimer_start_range_ns
if (!napi->rx_count)
ffff8000113acae0: b9411a60 ldr w0, [x19,#280]
ffff8000113acae4: 350003a0 cbnz w0, ffff8000113acb58 <napi_complete_done+0xec>
__READ_ONCE_SIZE;
ffff8000113acae8: f9400260 ldr x0, [x19]
if (unlikely(!list_empty(&n->poll_list))) {
ffff8000113acaec: eb00027f cmp x19, x0
ffff8000113acaf0: 54000421 b.ne ffff8000113acb74 <napi_complete_done+0x108>
ffff8000113acaf4: 91004262 add x2, x19, #0x10
ffff8000113acaf8: f9400a61 ldr x1, [x19,#16]
WARN_ON_ONCE(!(val & NAPIF_STATE_SCHED));
ffff8000113acafc: 36000341 tbz w1, #0, ffff8000113acb64 <napi_complete_done+0xf8>
new = val & ~(NAPIF_STATE_MISSED | NAPIF_STATE_SCHED);
ffff8000113acb00: 927ef423 and x3, x1, #0xfffffffffffffffc
new |= (val & NAPIF_STATE_MISSED) / NAPIF_STATE_MISSED *
ffff8000113acb04: 927f0024 and x4, x1, #0x2
ffff8000113acb08: aa440463 orr x3, x3, x4, lsr #1
__CMPXCHG_CASE( , , mb_, 64, dmb ish, , l, "memory", L)
ffff8000113acb0c: f9800051 prfm pstl1strm, [x2]
ffff8000113acb10: c85f7c45 ldxr x5, [x2]
ffff8000113acb14: ca0100a0 eor x0, x5, x1
ffff8000113acb18: b5000080 cbnz x0, ffff8000113acb28 <napi_complete_done+0xbc>
ffff8000113acb1c: c800fc43 stlxr w0, x3, [x2]
ffff8000113acb20: 35ffff80 cbnz w0, ffff8000113acb10 <napi_complete_done+0xa4>
ffff8000113acb24: d5033bbf dmb ish
} while (cmpxchg(&n->state, val, new) != val);
ffff8000113acb28: eb05003f cmp x1, x5
ffff8000113acb2c: 54fffe61 b.ne ffff8000113acaf8 <napi_complete_done+0x8c>
return true;
ffff8000113acb30: 52800020 mov w0, #0x1 // #1
if (unlikely(val & NAPIF_STATE_MISSED)) {
ffff8000113acb34: b5000364 cbnz x4, ffff8000113acba0 <napi_complete_done+0x134>
}
ffff8000113acb38: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113acb3c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113acb40: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113acb44: d65f03c0 ret
napi_gro_flush(n, !!timeout);
ffff8000113acb48: aa1303e0 mov x0, x19
ffff8000113acb4c: 94000000 bl ffff8000113ac90c <napi_gro_flush>
ffff8000113acb4c: R_AARCH64_CALL26 napi_gro_flush
if (!napi->rx_count)
ffff8000113acb50: b9411a60 ldr w0, [x19,#280]
ffff8000113acb54: 34fffca0 cbz w0, ffff8000113acae8 <napi_complete_done+0x7c>
ffff8000113acb58: aa1303e0 mov x0, x19
ffff8000113acb5c: 97fffc3d bl ffff8000113abc50 <gro_normal_list.part.134>
ffff8000113acb60: 17ffffe2 b ffff8000113acae8 <napi_complete_done+0x7c>
WARN_ON_ONCE(!(val & NAPIF_STATE_SCHED));
ffff8000113acb64: d4210000 brk #0x800
ffff8000113acb68: 17ffffe6 b ffff8000113acb00 <napi_complete_done+0x94>
return false;
ffff8000113acb6c: 52800000 mov w0, #0x0 // #0
ffff8000113acb70: 17fffff2 b ffff8000113acb38 <napi_complete_done+0xcc>
asm volatile(ALTERNATIVE(
ffff8000113acb74: d53b4234 mrs x20, daif
asm volatile(ALTERNATIVE(
ffff8000113acb78: 12190280 and w0, w20, #0x80
if (!arch_irqs_disabled_flags(flags))
ffff8000113acb7c: 35000060 cbnz w0, ffff8000113acb88 <napi_complete_done+0x11c>
asm volatile(ALTERNATIVE(
ffff8000113acb80: d2800c00 mov x0, #0x60 // #96
ffff8000113acb84: d50342df msr daifset, #0x2
__list_del_entry(entry);
ffff8000113acb88: aa1303e0 mov x0, x19
ffff8000113acb8c: 97ffd35c bl ffff8000113a18fc <__list_del_entry>
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113acb90: f9000273 str x19, [x19]
list->prev = list;
ffff8000113acb94: f9000673 str x19, [x19,#8]
asm volatile(ALTERNATIVE(
ffff8000113acb98: d51b4234 msr daif, x20
ffff8000113acb9c: 17ffffd6 b ffff8000113acaf4 <napi_complete_done+0x88>
__napi_schedule(n);
ffff8000113acba0: aa1303e0 mov x0, x19
ffff8000113acba4: 94000000 bl ffff8000113a5864 <__napi_schedule>
ffff8000113acba4: R_AARCH64_CALL26 __napi_schedule
return false;
ffff8000113acba8: 52800000 mov w0, #0x0 // #0
ffff8000113acbac: 17ffffe3 b ffff8000113acb38 <napi_complete_done+0xcc>
ffff8000113acbb0 <busy_poll_stop>:
{
ffff8000113acbb0: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113acbb4: 910003fd mov x29, sp
ffff8000113acbb8: a90153f3 stp x19, x20, [sp,#16]
ffff8000113acbbc: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113acbc0: aa0003f3 mov x19, x0
ffff8000113acbc4: aa1e03e0 mov x0, x30
ffff8000113acbc8: aa0103f6 mov x22, x1
ffff8000113acbcc: 94000000 bl 0 <_mcount>
ffff8000113acbcc: R_AARCH64_CALL26 _mcount
ATOMIC64_OPS(andnot, bic, )
ffff8000113acbd0: d2800040 mov x0, #0x2 // #2
ffff8000113acbd4: 91004263 add x3, x19, #0x10
ffff8000113acbd8: f9800071 prfm pstl1strm, [x3]
ffff8000113acbdc: c85f7c61 ldxr x1, [x3]
ffff8000113acbe0: 8a200021 bic x1, x1, x0
ffff8000113acbe4: c8027c61 stxr w2, x1, [x3]
ffff8000113acbe8: 35ffffa2 cbnz w2, ffff8000113acbdc <busy_poll_stop+0x2c>
ffff8000113acbec: d2800814 mov x20, #0x40 // #64
ffff8000113acbf0: f9800071 prfm pstl1strm, [x3]
ffff8000113acbf4: c85f7c60 ldxr x0, [x3]
ffff8000113acbf8: 8a340000 bic x0, x0, x20
ffff8000113acbfc: c8017c60 stxr w1, x0, [x3]
ffff8000113acc00: 35ffffa1 cbnz w1, ffff8000113acbf4 <busy_poll_stop+0x44>
ffff8000113acc04: d5384100 mrs x0, sp_el0
__READ_ONCE_SIZE;
ffff8000113acc08: b9401801 ldr w1, [x0,#24]
ffff8000113acc0c: 11080021 add w1, w1, #0x200
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff8000113acc10: b9001801 str w1, [x0,#24]
rc = napi->poll(napi, BUSY_POLL_BUDGET);
ffff8000113acc14: f9401662 ldr x2, [x19,#40]
ffff8000113acc18: 52800101 mov w1, #0x8 // #8
ffff8000113acc1c: aa1303e0 mov x0, x19
ffff8000113acc20: d63f0040 blr x2
ffff8000113acc24: 2a0003f5 mov w21, w0
__READ_ONCE_SIZE;
ffff8000113acc28: 90000000 adrp x0, 0 <__tracepoint_napi_poll>
ffff8000113acc28: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_napi_poll
ffff8000113acc2c: 91000000 add x0, x0, #0x0
ffff8000113acc2c: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_napi_poll
ffff8000113acc30: b9400801 ldr w1, [x0,#8]
ffff8000113acc34: 6b1f003f cmp w1, wzr
ffff8000113acc38: 540003cc b.gt ffff8000113accb0 <busy_poll_stop+0x100>
static inline void netpoll_poll_unlock(void *have)
{
struct napi_struct *napi = have;
if (napi)
ffff8000113acc3c: b4000096 cbz x22, ffff8000113acc4c <busy_poll_stop+0x9c>
smp_store_release(&napi->poll_owner, -1);
ffff8000113acc40: 12800000 mov w0, #0xffffffff // #-1
ffff8000113acc44: 9100c2d6 add x22, x22, #0x30
ffff8000113acc48: 889ffec0 stlr w0, [x22]
if (rc == BUSY_POLL_BUDGET) {
ffff8000113acc4c: 710022bf cmp w21, #0x8
ffff8000113acc50: 54000120 b.eq ffff8000113acc74 <busy_poll_stop+0xc4>
ffff8000113acc54: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113acc54: R_AARCH64_ADR_PREL_PG_HI21 .text+0xe8d8
ffff8000113acc58: 91000000 add x0, x0, #0x0
ffff8000113acc58: R_AARCH64_ADD_ABS_LO12_NC .text+0xe8d8
ffff8000113acc5c: 52804001 mov w1, #0x200 // #512
ffff8000113acc60: 94000000 bl 0 <__local_bh_enable_ip>
ffff8000113acc60: R_AARCH64_CALL26 __local_bh_enable_ip
}
ffff8000113acc64: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113acc68: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113acc6c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113acc70: d65f03c0 ret
if (!napi->rx_count)
ffff8000113acc74: b9411a60 ldr w0, [x19,#280]
ffff8000113acc78: 35000160 cbnz w0, ffff8000113acca4 <busy_poll_stop+0xf4>
__napi_schedule(napi);
ffff8000113acc7c: aa1303e0 mov x0, x19
ffff8000113acc80: 94000000 bl ffff8000113a5864 <__napi_schedule>
ffff8000113acc80: R_AARCH64_CALL26 __napi_schedule
ffff8000113acc84: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113acc84: R_AARCH64_ADR_PREL_PG_HI21 .text+0xe8d8
ffff8000113acc88: 91000000 add x0, x0, #0x0
ffff8000113acc88: R_AARCH64_ADD_ABS_LO12_NC .text+0xe8d8
ffff8000113acc8c: 52804001 mov w1, #0x200 // #512
ffff8000113acc90: 94000000 bl 0 <__local_bh_enable_ip>
ffff8000113acc90: R_AARCH64_CALL26 __local_bh_enable_ip
}
ffff8000113acc94: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113acc98: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113acc9c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113acca0: d65f03c0 ret
ffff8000113acca4: aa1303e0 mov x0, x19
ffff8000113acca8: 97fffbea bl ffff8000113abc50 <gro_normal_list.part.134>
ffff8000113accac: 17fffff4 b ffff8000113acc7c <busy_poll_stop+0xcc>
#include <linux/tracepoint.h>
#include <linux/ftrace.h>
#define NO_DEV "(no_device)"
TRACE_EVENT(napi_poll,
ffff8000113accb0: 90000001 adrp x1, 0 <cpu_number>
ffff8000113accb0: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113accb4: d538d082 mrs x2, tpidr_el1
ffff8000113accb8: 91000021 add x1, x1, #0x0
ffff8000113accb8: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113accbc: b8616841 ldr w1, [x2,x1]
return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
ffff8000113accc0: 90000002 adrp x2, 0 <__cpu_online_mask>
ffff8000113accc0: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113accc4: 1ad40c34 sdiv w20, w1, w20
ffff8000113accc8: 937d7e94 sbfiz x20, x20, #3, #32
ffff8000113acccc: 91000042 add x2, x2, #0x0
ffff8000113acccc: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113accd0: f8626a82 ldr x2, [x20,x2]
ffff8000113accd4: 9ac12441 lsr x1, x2, x1
ffff8000113accd8: 3607fb21 tbz w1, #0, ffff8000113acc3c <busy_poll_stop+0x8c>
ffff8000113accdc: f9401014 ldr x20, [x0,#32]
ffff8000113acce0: b4000134 cbz x20, ffff8000113acd04 <busy_poll_stop+0x154>
ffff8000113acce4: f9400284 ldr x4, [x20]
ffff8000113acce8: f9400680 ldr x0, [x20,#8]
ffff8000113accec: aa1303e1 mov x1, x19
ffff8000113accf0: 2a1503e2 mov w2, w21
ffff8000113accf4: 52800103 mov w3, #0x8 // #8
ffff8000113accf8: d63f0080 blr x4
ffff8000113accfc: f8418e84 ldr x4, [x20,#24]!
ffff8000113acd00: b5ffff44 cbnz x4, ffff8000113acce8 <busy_poll_stop+0x138>
ffff8000113acd04: 17ffffce b ffff8000113acc3c <busy_poll_stop+0x8c>
ffff8000113acd08 <napi_busy_loop>:
{
ffff8000113acd08: a9b87bfd stp x29, x30, [sp,#-128]!
ffff8000113acd0c: 910003fd mov x29, sp
ffff8000113acd10: a90153f3 stp x19, x20, [sp,#16]
ffff8000113acd14: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113acd18: a90363f7 stp x23, x24, [sp,#48]
ffff8000113acd1c: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113acd20: a90573fb stp x27, x28, [sp,#80]
ffff8000113acd24: 2a0003f6 mov w22, w0
ffff8000113acd28: aa0103f4 mov x20, x1
ffff8000113acd2c: aa1e03e0 mov x0, x30
ffff8000113acd30: aa0203f8 mov x24, x2
ffff8000113acd34: 94000000 bl 0 <_mcount>
ffff8000113acd34: R_AARCH64_CALL26 _mcount
unsigned long start_time = loop_end ? busy_loop_current_time() : 0;
ffff8000113acd38: b4001054 cbz x20, ffff8000113acf40 <napi_busy_loop+0x238>
return sched_clock();
}
static inline u64 local_clock(void)
{
return sched_clock();
ffff8000113acd3c: 94000000 bl 0 <sched_clock>
ffff8000113acd3c: R_AARCH64_CALL26 sched_clock
return (unsigned long)(local_clock() >> 10);
ffff8000113acd40: d34afc19 lsr x25, x0, #10
ffff8000113acd44: 9000001c adrp x28, ffff80001139e37c <__my_cpu_offset>
ffff8000113acd44: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113acd48: 9100039c add x28, x28, #0x0
ffff8000113acd48: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff8000113acd4c: 9000001a adrp x26, 0 <cpu_number>
ffff8000113acd4c: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113acd50: 8b360f9c add x28, x28, w22, uxtb #3
ffff8000113acd54: 90000017 adrp x23, ffff80001139e37c <__my_cpu_offset>
ffff8000113acd54: R_AARCH64_ADR_PREL_PG_HI21 .text+0xea9c
ffff8000113acd58: 9100035a add x26, x26, #0x0
ffff8000113acd58: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113acd5c: f9003bbc str x28, [x29,#112]
void *have_poll_lock = NULL;
ffff8000113acd60: f9003fbf str xzr, [x29,#120]
ffff8000113acd64: 910002f7 add x23, x23, #0x0
ffff8000113acd64: R_AARCH64_ADD_ABS_LO12_NC .text+0xea9c
int owner = smp_processor_id();
ffff8000113acd68: f90037ba str x26, [x29,#104]
ffff8000113acd6c: f9403ba5 ldr x5, [x29,#112]
ffff8000113acd70: f94000a4 ldr x4, [x5]
hlist_for_each_entry_rcu(napi, &napi_hash[hash], napi_hash_node)
ffff8000113acd74: b4000ea4 cbz x4, ffff8000113acf48 <napi_busy_loop+0x240>
ffff8000113acd78: d105c09b sub x27, x4, #0x170
ffff8000113acd7c: b40000db cbz x27, ffff8000113acd94 <napi_busy_loop+0x8c>
if (napi->napi_id == napi_id)
ffff8000113acd80: b9418360 ldr w0, [x27,#384]
ffff8000113acd84: 6b0002df cmp w22, w0
ffff8000113acd88: 54000140 b.eq ffff8000113acdb0 <napi_busy_loop+0xa8>
ffff8000113acd8c: f940bb64 ldr x4, [x27,#368]
hlist_for_each_entry_rcu(napi, &napi_hash[hash], napi_hash_node)
ffff8000113acd90: b5ffff44 cbnz x4, ffff8000113acd78 <napi_busy_loop+0x70>
}
ffff8000113acd94: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113acd98: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113acd9c: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113acda0: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113acda4: a94573fb ldp x27, x28, [sp,#80]
ffff8000113acda8: a8c87bfd ldp x29, x30, [sp],#128
ffff8000113acdac: d65f03c0 ret
ffff8000113acdb0: 90000000 adrp x0, 0 <__cpu_online_mask>
ffff8000113acdb0: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
ffff8000113acdb4: 91000000 add x0, x0, #0x0
ffff8000113acdb4: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
napi_poll = NULL;
ffff8000113acdb8: d2800015 mov x21, #0x0 // #0
ffff8000113acdbc: f90033a0 str x0, [x29,#96]
ffff8000113acdc0: 14000023 b ffff8000113ace4c <napi_busy_loop+0x144>
work = napi_poll(napi, BUSY_POLL_BUDGET);
ffff8000113acdc4: 52800101 mov w1, #0x8 // #8
ffff8000113acdc8: aa1b03e0 mov x0, x27
ffff8000113acdcc: d63f02a0 blr x21
ffff8000113acdd0: 2a0003f3 mov w19, w0
ffff8000113acdd4: 90000000 adrp x0, 0 <__tracepoint_napi_poll>
ffff8000113acdd4: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_napi_poll
ffff8000113acdd8: 91000000 add x0, x0, #0x0
ffff8000113acdd8: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_napi_poll
ffff8000113acddc: b9400801 ldr w1, [x0,#8]
ffff8000113acde0: 6b1f003f cmp w1, wzr
ffff8000113acde4: 54000d2c b.gt ffff8000113acf88 <napi_busy_loop+0x280>
if (!napi->rx_count)
ffff8000113acde8: b9411b60 ldr w0, [x27,#280]
ffff8000113acdec: 350009a0 cbnz w0, ffff8000113acf20 <napi_busy_loop+0x218>
if (work > 0)
ffff8000113acdf0: 6b1f027f cmp w19, wzr
ffff8000113acdf4: 5400012d b.le ffff8000113ace18 <napi_busy_loop+0x110>
ffff8000113acdf8: f9401f60 ldr x0, [x27,#56]
ffff8000113acdfc: d538d081 mrs x1, tpidr_el1
__NET_ADD_STATS(dev_net(napi->dev),
ffff8000113ace00: f9427800 ldr x0, [x0,#1264]
ffff8000113ace04: f940c800 ldr x0, [x0,#400]
ffff8000113ace08: 910b8000 add x0, x0, #0x2e0
ffff8000113ace0c: f8606822 ldr x2, [x1,x0]
ffff8000113ace10: 8b33c053 add x19, x2, w19, sxtw
ffff8000113ace14: f8206833 str x19, [x1,x0]
ffff8000113ace18: aa1703e0 mov x0, x23
ffff8000113ace1c: 52804001 mov w1, #0x200 // #512
ffff8000113ace20: 94000000 bl 0 <__local_bh_enable_ip>
ffff8000113ace20: R_AARCH64_CALL26 __local_bh_enable_ip
if (!loop_end || loop_end(loop_end_arg, start_time))
ffff8000113ace24: b4000854 cbz x20, ffff8000113acf2c <napi_busy_loop+0x224>
ffff8000113ace28: aa1803e0 mov x0, x24
ffff8000113ace2c: aa1903e1 mov x1, x25
ffff8000113ace30: d63f0280 blr x20
ffff8000113ace34: 53001c00 uxtb w0, w0
ffff8000113ace38: 350007a0 cbnz w0, ffff8000113acf2c <napi_busy_loop+0x224>
ffff8000113ace3c: d5384100 mrs x0, sp_el0
ffff8000113ace40: f9400000 ldr x0, [x0]
if (unlikely(need_resched())) {
ffff8000113ace44: 370808c0 tbnz w0, #1, ffff8000113acf5c <napi_busy_loop+0x254>
#ifndef __ASSEMBLY__
static inline void cpu_relax(void)
{
asm volatile("yield" ::: "memory");
ffff8000113ace48: d503203f yield
ffff8000113ace4c: d5384100 mrs x0, sp_el0
ffff8000113ace50: b9401801 ldr w1, [x0,#24]
ffff8000113ace54: 11080021 add w1, w1, #0x200
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff8000113ace58: b9001801 str w1, [x0,#24]
if (!napi_poll) {
ffff8000113ace5c: b5fffb55 cbnz x21, ffff8000113acdc4 <napi_busy_loop+0xbc>
__READ_ONCE_SIZE;
ffff8000113ace60: f9400b60 ldr x0, [x27,#16]
if (val & (NAPIF_STATE_DISABLE | NAPIF_STATE_SCHED |
ffff8000113ace64: d28008a1 mov x1, #0x45 // #69
ffff8000113ace68: ea01001f tst x0, x1
ffff8000113ace6c: 54fffd61 b.ne ffff8000113ace18 <napi_busy_loop+0x110>
if (cmpxchg(&napi->state, val,
ffff8000113ace70: d2800821 mov x1, #0x41 // #65
ffff8000113ace74: aa010001 orr x1, x0, x1
__CMPXCHG_CASE( , , mb_, 64, dmb ish, , l, "memory", L)
ffff8000113ace78: 91004367 add x7, x27, #0x10
ffff8000113ace7c: f98000f1 prfm pstl1strm, [x7]
ffff8000113ace80: c85f7ce2 ldxr x2, [x7]
ffff8000113ace84: ca000043 eor x3, x2, x0
ffff8000113ace88: b5000083 cbnz x3, ffff8000113ace98 <napi_busy_loop+0x190>
ffff8000113ace8c: c803fce1 stlxr w3, x1, [x7]
ffff8000113ace90: 35ffff83 cbnz w3, ffff8000113ace80 <napi_busy_loop+0x178>
ffff8000113ace94: d5033bbf dmb ish
ffff8000113ace98: eb02001f cmp x0, x2
ffff8000113ace9c: 54fffbe1 b.ne ffff8000113ace18 <napi_busy_loop+0x110>
struct net_device *dev = napi->dev;
ffff8000113acea0: f9401f60 ldr x0, [x27,#56]
if (dev && dev->npinfo) {
ffff8000113acea4: b4000560 cbz x0, ffff8000113acf50 <napi_busy_loop+0x248>
ffff8000113acea8: f9427400 ldr x0, [x0,#1256]
ffff8000113aceac: b4000520 cbz x0, ffff8000113acf50 <napi_busy_loop+0x248>
while (cmpxchg(&napi->poll_owner, -1, owner) != -1)
ffff8000113aceb0: f94037a5 ldr x5, [x29,#104]
ffff8000113aceb4: d538d080 mrs x0, tpidr_el1
ffff8000113aceb8: b8a56803 ldrsw x3, [x0,x5]
__CMPXCHG_CASE(w, , mb_, 32, dmb ish, , l, "memory", K)
ffff8000113acebc: b2407fe1 mov x1, #0xffffffff // #4294967295
ffff8000113acec0: 9100c360 add x0, x27, #0x30
}
__CMPXCHG_GEN()
__CMPXCHG_GEN(_acq)
__CMPXCHG_GEN(_rel)
__CMPXCHG_GEN(_mb)
ffff8000113acec4: 2a0303e2 mov w2, w3
ffff8000113acec8: f9800011 prfm pstl1strm, [x0]
ffff8000113acecc: 885f7c05 ldxr w5, [x0]
ffff8000113aced0: 4a0100a6 eor w6, w5, w1
ffff8000113aced4: 35000086 cbnz w6, ffff8000113acee4 <napi_busy_loop+0x1dc>
ffff8000113aced8: 8806fc03 stlxr w6, w3, [x0]
ffff8000113acedc: 35ffff86 cbnz w6, ffff8000113acecc <napi_busy_loop+0x1c4>
ffff8000113acee0: d5033bbf dmb ish
ffff8000113acee4: 310004bf cmn w5, #0x1
ffff8000113acee8: 54000160 b.eq ffff8000113acf14 <napi_busy_loop+0x20c>
ffff8000113aceec: d503203f yield
ffff8000113acef0: f9800011 prfm pstl1strm, [x0]
ffff8000113acef4: 885f7c03 ldxr w3, [x0]
ffff8000113acef8: 4a010065 eor w5, w3, w1
ffff8000113acefc: 35000085 cbnz w5, ffff8000113acf0c <napi_busy_loop+0x204>
ffff8000113acf00: 8805fc02 stlxr w5, w2, [x0]
ffff8000113acf04: 35ffff85 cbnz w5, ffff8000113acef4 <napi_busy_loop+0x1ec>
ffff8000113acf08: d5033bbf dmb ish
ffff8000113acf0c: 3100047f cmn w3, #0x1
ffff8000113acf10: 54fffee1 b.ne ffff8000113aceec <napi_busy_loop+0x1e4>
ffff8000113acf14: f9003fbb str x27, [x29,#120]
napi_poll = napi->poll;
ffff8000113acf18: f9401775 ldr x21, [x27,#40]
ffff8000113acf1c: 17ffffaa b ffff8000113acdc4 <napi_busy_loop+0xbc>
ffff8000113acf20: aa1b03e0 mov x0, x27
ffff8000113acf24: 97fffb4b bl ffff8000113abc50 <gro_normal_list.part.134>
ffff8000113acf28: 17ffffb2 b ffff8000113acdf0 <napi_busy_loop+0xe8>
if (napi_poll)
ffff8000113acf2c: b4000095 cbz x21, ffff8000113acf3c <napi_busy_loop+0x234>
busy_poll_stop(napi, have_poll_lock);
ffff8000113acf30: f9403fa1 ldr x1, [x29,#120]
ffff8000113acf34: aa1b03e0 mov x0, x27
ffff8000113acf38: 97ffff1e bl ffff8000113acbb0 <busy_poll_stop>
preempt_enable();
ffff8000113acf3c: 17ffff96 b ffff8000113acd94 <napi_busy_loop+0x8c>
unsigned long start_time = loop_end ? busy_loop_current_time() : 0;
ffff8000113acf40: aa1403f9 mov x25, x20
ffff8000113acf44: 17ffff80 b ffff8000113acd44 <napi_busy_loop+0x3c>
hlist_for_each_entry_rcu(napi, &napi_hash[hash], napi_hash_node)
ffff8000113acf48: aa0403fb mov x27, x4
ffff8000113acf4c: 17ffff8c b ffff8000113acd7c <napi_busy_loop+0x74>
return NULL;
ffff8000113acf50: f9003fb5 str x21, [x29,#120]
napi_poll = napi->poll;
ffff8000113acf54: f9401775 ldr x21, [x27,#40]
ffff8000113acf58: 17ffff9b b ffff8000113acdc4 <napi_busy_loop+0xbc>
if (napi_poll)
ffff8000113acf5c: b4000095 cbz x21, ffff8000113acf6c <napi_busy_loop+0x264>
busy_poll_stop(napi, have_poll_lock);
ffff8000113acf60: f9403fa1 ldr x1, [x29,#120]
ffff8000113acf64: aa1b03e0 mov x0, x27
ffff8000113acf68: 97ffff12 bl ffff8000113acbb0 <busy_poll_stop>
cond_resched();
ffff8000113acf6c: 94000000 bl 0 <_cond_resched>
ffff8000113acf6c: R_AARCH64_CALL26 _cond_resched
if (loop_end(loop_end_arg, start_time))
ffff8000113acf70: aa1803e0 mov x0, x24
ffff8000113acf74: aa1903e1 mov x1, x25
ffff8000113acf78: d63f0280 blr x20
ffff8000113acf7c: 53001c00 uxtb w0, w0
ffff8000113acf80: 34ffef60 cbz w0, ffff8000113acd6c <napi_busy_loop+0x64>
ffff8000113acf84: 17ffff84 b ffff8000113acd94 <napi_busy_loop+0x8c>
ffff8000113acf88: d538d081 mrs x1, tpidr_el1
ffff8000113acf8c: b87a6821 ldr w1, [x1,x26]
ffff8000113acf90: f94033a7 ldr x7, [x29,#96]
ffff8000113acf94: 1100fc22 add w2, w1, #0x3f
ffff8000113acf98: 6b1f003f cmp w1, wzr
ffff8000113acf9c: 1a81b042 csel w2, w2, w1, lt
ffff8000113acfa0: 13067c42 asr w2, w2, #6
ffff8000113acfa4: 937d7c42 sbfiz x2, x2, #3, #32
ffff8000113acfa8: f8676842 ldr x2, [x2,x7]
ffff8000113acfac: 9ac12441 lsr x1, x2, x1
ffff8000113acfb0: 3607f1c1 tbz w1, #0, ffff8000113acde8 <napi_busy_loop+0xe0>
ffff8000113acfb4: f940101c ldr x28, [x0,#32]
ffff8000113acfb8: b400013c cbz x28, ffff8000113acfdc <napi_busy_loop+0x2d4>
ffff8000113acfbc: f9400386 ldr x6, [x28]
ffff8000113acfc0: f9400780 ldr x0, [x28,#8]
ffff8000113acfc4: aa1b03e1 mov x1, x27
ffff8000113acfc8: 2a1303e2 mov w2, w19
ffff8000113acfcc: 52800103 mov w3, #0x8 // #8
ffff8000113acfd0: d63f00c0 blr x6
ffff8000113acfd4: f8418f86 ldr x6, [x28,#24]!
ffff8000113acfd8: b5ffff46 cbnz x6, ffff8000113acfc0 <napi_busy_loop+0x2b8>
ffff8000113acfdc: 17ffff83 b ffff8000113acde8 <napi_busy_loop+0xe0>
ffff8000113acfe0 <net_rx_action>:
{
ffff8000113acfe0: a9b47bfd stp x29, x30, [sp,#-192]!
ffff8000113acfe4: 910003fd mov x29, sp
ffff8000113acfe8: a90153f3 stp x19, x20, [sp,#16]
ffff8000113acfec: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113acff0: a90363f7 stp x23, x24, [sp,#48]
ffff8000113acff4: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113acff8: a90573fb stp x27, x28, [sp,#80]
ffff8000113acffc: aa1e03e0 mov x0, x30
ffff8000113ad000: 94000000 bl 0 <_mcount>
ffff8000113ad000: R_AARCH64_CALL26 _mcount
usecs_to_jiffies(netdev_budget_usecs);
ffff8000113ad004: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff8000113ad004: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
ffff8000113ad008: 91000273 add x19, x19, #0x0
ffff8000113ad008: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
{
ffff8000113ad00c: 90000000 adrp x0, 0 <__stack_chk_guard>
ffff8000113ad00c: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ad010: f9400001 ldr x1, [x0]
ffff8000113ad010: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
struct softnet_data *sd = this_cpu_ptr(&softnet_data);
ffff8000113ad014: 90000019 adrp x25, ffff80001139e37c <__my_cpu_offset>
ffff8000113ad014: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
if (__builtin_constant_p(u)) {
if (u > jiffies_to_usecs(MAX_JIFFY_OFFSET))
return MAX_JIFFY_OFFSET;
return _usecs_to_jiffies(u);
} else {
return __usecs_to_jiffies(u);
ffff8000113ad018: b9495e60 ldr w0, [x19,#2396]
ffff8000113ad01c: 91000339 add x25, x25, #0x0
ffff8000113ad01c: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff8000113ad020: d538d084 mrs x4, tpidr_el1
ffff8000113ad024: f9003fb9 str x25, [x29,#120]
ffff8000113ad028: f9003ba4 str x4, [x29,#112]
{
ffff8000113ad02c: f9005fa1 str x1, [x29,#184]
ffff8000113ad030: 94000000 bl 0 <__usecs_to_jiffies>
ffff8000113ad030: R_AARCH64_CALL26 __usecs_to_jiffies
unsigned long time_limit = jiffies +
ffff8000113ad034: 90000016 adrp x22, 0 <jiffies>
ffff8000113ad034: R_AARCH64_ADR_PREL_PG_HI21 jiffies
struct softnet_data *sd = this_cpu_ptr(&softnet_data);
ffff8000113ad038: f9403ba4 ldr x4, [x29,#112]
unsigned long time_limit = jiffies +
ffff8000113ad03c: f94002d7 ldr x23, [x22]
ffff8000113ad03c: R_AARCH64_LDST64_ABS_LO12_NC jiffies
LIST_HEAD(repoll);
ffff8000113ad040: 9102a3a6 add x6, x29, #0xa8
LIST_HEAD(list);
ffff8000113ad044: 910263b4 add x20, x29, #0x98
struct softnet_data *sd = this_cpu_ptr(&softnet_data);
ffff8000113ad048: f9403fa7 ldr x7, [x29,#120]
ffff8000113ad04c: 8b070084 add x4, x4, x7
unsigned long time_limit = jiffies +
ffff8000113ad050: 8b170017 add x23, x0, x23
LIST_HEAD(repoll);
ffff8000113ad054: f90047a6 str x6, [x29,#136]
struct softnet_data *sd = this_cpu_ptr(&softnet_data);
ffff8000113ad058: f9003fa7 str x7, [x29,#120]
ffff8000113ad05c: f90043a4 str x4, [x29,#128]
int budget = netdev_budget;
ffff8000113ad060: b9496273 ldr w19, [x19,#2400]
LIST_HEAD(list);
ffff8000113ad064: f9004fb4 str x20, [x29,#152]
ffff8000113ad068: f90053b4 str x20, [x29,#160]
LIST_HEAD(repoll);
ffff8000113ad06c: f90057a6 str x6, [x29,#168]
ffff8000113ad070: f9005ba6 str x6, [x29,#176]
asm volatile(ALTERNATIVE(
ffff8000113ad074: d2800c00 mov x0, #0x60 // #96
ffff8000113ad078: d50342df msr daifset, #0x2
ffff8000113ad07c: f9403ba6 ldr x6, [x29,#112]
ffff8000113ad080: f9403fa4 ldr x4, [x29,#120]
if (!list_empty(list)) {
ffff8000113ad084: f94043a7 ldr x7, [x29,#128]
ffff8000113ad088: f86468c0 ldr x0, [x6,x4]
ffff8000113ad08c: eb0000ff cmp x7, x0
ffff8000113ad090: 54000140 b.eq ffff8000113ad0b8 <net_rx_action+0xd8>
struct list_head *first = list->next;
ffff8000113ad094: f86468c2 ldr x2, [x6,x4]
struct list_head *last = list->prev;
ffff8000113ad098: f94004e1 ldr x1, [x7,#8]
__list_splice(list, head, head->next);
ffff8000113ad09c: f9404fa0 ldr x0, [x29,#152]
first->prev = prev;
ffff8000113ad0a0: f9000454 str x20, [x2,#8]
prev->next = first;
ffff8000113ad0a4: f9004fa2 str x2, [x29,#152]
last->next = next;
ffff8000113ad0a8: f9000020 str x0, [x1]
next->prev = last;
ffff8000113ad0ac: f9000401 str x1, [x0,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113ad0b0: f82468c7 str x7, [x6,x4]
list->prev = list;
ffff8000113ad0b4: f90004e7 str x7, [x7,#8]
asm volatile(ALTERNATIVE(
ffff8000113ad0b8: d2801c00 mov x0, #0xe0 // #224
ffff8000113ad0bc: d50342ff msr daifclr, #0x2
ffff8000113ad0c0: 90000000 adrp x0, 0 <__cpu_online_mask>
ffff8000113ad0c0: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
int owner = smp_processor_id();
ffff8000113ad0c4: 90000015 adrp x21, 0 <cpu_number>
ffff8000113ad0c4: R_AARCH64_ADR_PREL_PG_HI21 cpu_number
ffff8000113ad0c8: 91000000 add x0, x0, #0x0
ffff8000113ad0c8: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113ad0cc: 910002b5 add x21, x21, #0x0
ffff8000113ad0cc: R_AARCH64_ADD_ABS_LO12_NC cpu_number
ffff8000113ad0d0: f90033a0 str x0, [x29,#96]
ffff8000113ad0d4: f90037b5 str x21, [x29,#104]
__READ_ONCE_SIZE;
ffff8000113ad0d8: f9404fa0 ldr x0, [x29,#152]
if (list_empty(&list)) {
ffff8000113ad0dc: eb00029f cmp x20, x0
ffff8000113ad0e0: 540014a0 b.eq ffff8000113ad374 <net_rx_action+0x394>
n = list_first_entry(&list, struct napi_struct, poll_list);
ffff8000113ad0e4: f940029c ldr x28, [x20]
if (!__list_del_entry_valid(entry))
ffff8000113ad0e8: aa1c03e0 mov x0, x28
ffff8000113ad0ec: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113ad0ec: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113ad0f0: 53001c00 uxtb w0, w0
ffff8000113ad0f4: 340000a0 cbz w0, ffff8000113ad108 <net_rx_action+0x128>
__list_del(entry->prev, entry->next);
ffff8000113ad0f8: f9400780 ldr x0, [x28,#8]
ffff8000113ad0fc: f9400381 ldr x1, [x28]
next->prev = prev;
ffff8000113ad100: f9000420 str x0, [x1,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113ad104: f9000001 str x1, [x0]
struct net_device *dev = napi->dev;
ffff8000113ad108: f9401f80 ldr x0, [x28,#56]
ffff8000113ad10c: f900039c str x28, [x28]
list->prev = list;
ffff8000113ad110: f900079c str x28, [x28,#8]
if (dev && dev->npinfo) {
ffff8000113ad114: b4001440 cbz x0, ffff8000113ad39c <net_rx_action+0x3bc>
ffff8000113ad118: f9427409 ldr x9, [x0,#1256]
ffff8000113ad11c: b40013c9 cbz x9, ffff8000113ad394 <net_rx_action+0x3b4>
ffff8000113ad120: d538d080 mrs x0, tpidr_el1
while (cmpxchg(&napi->poll_owner, -1, owner) != -1)
ffff8000113ad124: b8b56800 ldrsw x0, [x0,x21]
ffff8000113ad128: 9100c382 add x2, x28, #0x30
ffff8000113ad12c: 2a0003e3 mov w3, w0
ffff8000113ad130: b2407fe4 mov x4, #0xffffffff // #4294967295
ffff8000113ad134: f9800051 prfm pstl1strm, [x2]
ffff8000113ad138: 885f7c41 ldxr w1, [x2]
ffff8000113ad13c: 4a040025 eor w5, w1, w4
ffff8000113ad140: 35000085 cbnz w5, ffff8000113ad150 <net_rx_action+0x170>
ffff8000113ad144: 8805fc40 stlxr w5, w0, [x2]
ffff8000113ad148: 35ffff85 cbnz w5, ffff8000113ad138 <net_rx_action+0x158>
ffff8000113ad14c: d5033bbf dmb ish
ffff8000113ad150: 3100043f cmn w1, #0x1
ffff8000113ad154: 54000160 b.eq ffff8000113ad180 <net_rx_action+0x1a0>
ffff8000113ad158: d503203f yield
ffff8000113ad15c: f9800051 prfm pstl1strm, [x2]
ffff8000113ad160: 885f7c45 ldxr w5, [x2]
ffff8000113ad164: 4a0400a0 eor w0, w5, w4
ffff8000113ad168: 35000080 cbnz w0, ffff8000113ad178 <net_rx_action+0x198>
ffff8000113ad16c: 8800fc43 stlxr w0, w3, [x2]
ffff8000113ad170: 35ffff80 cbnz w0, ffff8000113ad160 <net_rx_action+0x180>
ffff8000113ad174: d5033bbf dmb ish
ffff8000113ad178: 310004bf cmn w5, #0x1
ffff8000113ad17c: 54fffee1 b.ne ffff8000113ad158 <net_rx_action+0x178>
return napi;
ffff8000113ad180: aa1c03f9 mov x25, x28
ffff8000113ad184: f9400b80 ldr x0, [x28,#16]
weight = n->weight;
ffff8000113ad188: b9401b9b ldr w27, [x28,#24]
work = 0;
ffff8000113ad18c: 5280001a mov w26, #0x0 // #0
if (test_bit(NAPI_STATE_SCHED, &n->state)) {
ffff8000113ad190: 37000b00 tbnz w0, #0, ffff8000113ad2f0 <net_rx_action+0x310>
WARN_ON_ONCE(work > weight);
ffff8000113ad194: 6b1a037f cmp w27, w26
ffff8000113ad198: 540010cb b.lt ffff8000113ad3b0 <net_rx_action+0x3d0>
if (likely(work < weight))
ffff8000113ad19c: 6b1a037f cmp w27, w26
ffff8000113ad1a0: 540010ed b.le ffff8000113ad3bc <net_rx_action+0x3dc>
if (napi)
ffff8000113ad1a4: b4000099 cbz x25, ffff8000113ad1b4 <net_rx_action+0x1d4>
smp_store_release(&napi->poll_owner, -1);
ffff8000113ad1a8: 12800000 mov w0, #0xffffffff // #-1
ffff8000113ad1ac: 9100c339 add x25, x25, #0x30
ffff8000113ad1b0: 889fff20 stlr w0, [x25]
budget -= napi_poll(n, &repoll);
ffff8000113ad1b4: 4b1a0273 sub w19, w19, w26
if (unlikely(budget <= 0 ||
ffff8000113ad1b8: 6b1f027f cmp w19, wzr
ffff8000113ad1bc: 5400008d b.le ffff8000113ad1cc <net_rx_action+0x1ec>
ffff8000113ad1c0: f94002c0 ldr x0, [x22]
ffff8000113ad1c0: R_AARCH64_LDST64_ABS_LO12_NC jiffies
ffff8000113ad1c4: cb170000 sub x0, x0, x23
ffff8000113ad1c8: b7fff880 tbnz x0, #63, ffff8000113ad0d8 <net_rx_action+0xf8>
sd->time_squeeze++;
ffff8000113ad1cc: f94043a4 ldr x4, [x29,#128]
ffff8000113ad1d0: b9402c80 ldr w0, [x4,#44]
ffff8000113ad1d4: 11000400 add w0, w0, #0x1
ffff8000113ad1d8: b9002c80 str w0, [x4,#44]
asm volatile(ALTERNATIVE(
ffff8000113ad1dc: d2800c00 mov x0, #0x60 // #96
ffff8000113ad1e0: d50342df msr daifset, #0x2
__READ_ONCE_SIZE;
ffff8000113ad1e4: f9403ba7 ldr x7, [x29,#112]
ffff8000113ad1e8: f9403fa6 ldr x6, [x29,#120]
if (!list_empty(list)) {
ffff8000113ad1ec: f94043a4 ldr x4, [x29,#128]
ffff8000113ad1f0: f86668e0 ldr x0, [x7,x6]
ffff8000113ad1f4: eb00009f cmp x4, x0
ffff8000113ad1f8: 54000140 b.eq ffff8000113ad220 <net_rx_action+0x240>
__list_splice(list, head->prev, head);
ffff8000113ad1fc: f94053a1 ldr x1, [x29,#160]
struct list_head *first = list->next;
ffff8000113ad200: f86668e2 ldr x2, [x7,x6]
struct list_head *last = list->prev;
ffff8000113ad204: f9400480 ldr x0, [x4,#8]
first->prev = prev;
ffff8000113ad208: f9000441 str x1, [x2,#8]
prev->next = first;
ffff8000113ad20c: f9000022 str x2, [x1]
last->next = next;
ffff8000113ad210: f9000014 str x20, [x0]
next->prev = last;
ffff8000113ad214: f90053a0 str x0, [x29,#160]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113ad218: f82668e4 str x4, [x7,x6]
list->prev = list;
ffff8000113ad21c: f9000484 str x4, [x4,#8]
__READ_ONCE_SIZE;
ffff8000113ad220: f94057a0 ldr x0, [x29,#168]
if (!list_empty(list))
ffff8000113ad224: f94047a6 ldr x6, [x29,#136]
ffff8000113ad228: eb0000df cmp x6, x0
ffff8000113ad22c: 54000100 b.eq ffff8000113ad24c <net_rx_action+0x26c>
__list_splice(list, head->prev, head);
ffff8000113ad230: f94053a1 ldr x1, [x29,#160]
struct list_head *first = list->next;
ffff8000113ad234: f94057a2 ldr x2, [x29,#168]
struct list_head *last = list->prev;
ffff8000113ad238: f9405ba0 ldr x0, [x29,#176]
first->prev = prev;
ffff8000113ad23c: f9000441 str x1, [x2,#8]
prev->next = first;
ffff8000113ad240: f9000022 str x2, [x1]
last->next = next;
ffff8000113ad244: f9000014 str x20, [x0]
next->prev = last;
ffff8000113ad248: f90053a0 str x0, [x29,#160]
ffff8000113ad24c: f9404fa0 ldr x0, [x29,#152]
if (!list_empty(list))
ffff8000113ad250: eb00029f cmp x20, x0
ffff8000113ad254: 54000160 b.eq ffff8000113ad280 <net_rx_action+0x2a0>
struct list_head *first = list->next;
ffff8000113ad258: f9404fa2 ldr x2, [x29,#152]
__list_splice(list, head, head->next);
ffff8000113ad25c: f9403ba4 ldr x4, [x29,#112]
ffff8000113ad260: f9403fa7 ldr x7, [x29,#120]
first->prev = prev;
ffff8000113ad264: f94043a6 ldr x6, [x29,#128]
__list_splice(list, head, head->next);
ffff8000113ad268: f8676880 ldr x0, [x4,x7]
struct list_head *last = list->prev;
ffff8000113ad26c: f94053a1 ldr x1, [x29,#160]
first->prev = prev;
ffff8000113ad270: f9000446 str x6, [x2,#8]
prev->next = first;
ffff8000113ad274: f8276882 str x2, [x4,x7]
last->next = next;
ffff8000113ad278: f9000020 str x0, [x1]
next->prev = last;
ffff8000113ad27c: f9000401 str x1, [x0,#8]
ffff8000113ad280: f9403ba4 ldr x4, [x29,#112]
ffff8000113ad284: f9403fa7 ldr x7, [x29,#120]
if (!list_empty(&sd->poll_list))
ffff8000113ad288: f94043a6 ldr x6, [x29,#128]
ffff8000113ad28c: f8676880 ldr x0, [x4,x7]
ffff8000113ad290: eb0000df cmp x6, x0
ffff8000113ad294: 54000060 b.eq ffff8000113ad2a0 <net_rx_action+0x2c0>
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
ffff8000113ad298: 52800060 mov w0, #0x3 // #3
ffff8000113ad29c: 94000000 bl 0 <__raise_softirq_irqoff>
ffff8000113ad29c: R_AARCH64_CALL26 __raise_softirq_irqoff
struct softnet_data *remsd = sd->rps_ipi_list;
ffff8000113ad2a0: f94043a7 ldr x7, [x29,#128]
ffff8000113ad2a4: f9401ce0 ldr x0, [x7,#56]
if (remsd) {
ffff8000113ad2a8: b40007e0 cbz x0, ffff8000113ad3a4 <net_rx_action+0x3c4>
sd->rps_ipi_list = NULL;
ffff8000113ad2ac: f9001cff str xzr, [x7,#56]
asm volatile(ALTERNATIVE(
ffff8000113ad2b0: d2801c01 mov x1, #0xe0 // #224
ffff8000113ad2b4: d50342ff msr daifclr, #0x2
net_rps_send_ipi(remsd);
ffff8000113ad2b8: 97ffd05c bl ffff8000113a1428 <net_rps_send_ipi>
__kfree_skb_flush();
ffff8000113ad2bc: 94000000 bl 0 <__kfree_skb_flush>
ffff8000113ad2bc: R_AARCH64_CALL26 __kfree_skb_flush
}
ffff8000113ad2c0: 90000002 adrp x2, 0 <__stack_chk_guard>
ffff8000113ad2c0: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ad2c4: f9405fa1 ldr x1, [x29,#184]
ffff8000113ad2c8: f9400040 ldr x0, [x2]
ffff8000113ad2c8: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ad2cc: eb00003f cmp x1, x0
ffff8000113ad2d0: 54000741 b.ne ffff8000113ad3b8 <net_rx_action+0x3d8>
ffff8000113ad2d4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ad2d8: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113ad2dc: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113ad2e0: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113ad2e4: a94573fb ldp x27, x28, [sp,#80]
ffff8000113ad2e8: a8cc7bfd ldp x29, x30, [sp],#192
ffff8000113ad2ec: d65f03c0 ret
work = n->poll(n, weight);
ffff8000113ad2f0: f9401782 ldr x2, [x28,#40]
ffff8000113ad2f4: 2a1b03e1 mov w1, w27
ffff8000113ad2f8: aa1c03e0 mov x0, x28
ffff8000113ad2fc: d63f0040 blr x2
ffff8000113ad300: 2a0003fa mov w26, w0
ffff8000113ad304: 90000000 adrp x0, 0 <__tracepoint_napi_poll>
ffff8000113ad304: R_AARCH64_ADR_PREL_PG_HI21 __tracepoint_napi_poll
ffff8000113ad308: 91000000 add x0, x0, #0x0
ffff8000113ad308: R_AARCH64_ADD_ABS_LO12_NC __tracepoint_napi_poll
ffff8000113ad30c: b9400801 ldr w1, [x0,#8]
ffff8000113ad310: 6b1f003f cmp w1, wzr
ffff8000113ad314: 54fff40d b.le ffff8000113ad194 <net_rx_action+0x1b4>
ffff8000113ad318: f94037a4 ldr x4, [x29,#104]
ffff8000113ad31c: d538d081 mrs x1, tpidr_el1
ffff8000113ad320: b8646821 ldr w1, [x1,x4]
ffff8000113ad324: f94033a6 ldr x6, [x29,#96]
ffff8000113ad328: 1100fc22 add w2, w1, #0x3f
ffff8000113ad32c: 6b1f003f cmp w1, wzr
ffff8000113ad330: 1a81b042 csel w2, w2, w1, lt
ffff8000113ad334: 13067c42 asr w2, w2, #6
ffff8000113ad338: 937d7c42 sbfiz x2, x2, #3, #32
ffff8000113ad33c: f8666842 ldr x2, [x2,x6]
ffff8000113ad340: 9ac12441 lsr x1, x2, x1
ffff8000113ad344: 3607f281 tbz w1, #0, ffff8000113ad194 <net_rx_action+0x1b4>
ffff8000113ad348: f9401018 ldr x24, [x0,#32]
ffff8000113ad34c: b4000138 cbz x24, ffff8000113ad370 <net_rx_action+0x390>
ffff8000113ad350: f9400308 ldr x8, [x24]
ffff8000113ad354: f9400700 ldr x0, [x24,#8]
ffff8000113ad358: aa1c03e1 mov x1, x28
ffff8000113ad35c: 2a1a03e2 mov w2, w26
ffff8000113ad360: 2a1b03e3 mov w3, w27
ffff8000113ad364: d63f0100 blr x8
ffff8000113ad368: f8418f08 ldr x8, [x24,#24]!
ffff8000113ad36c: b5ffff48 cbnz x8, ffff8000113ad354 <net_rx_action+0x374>
ffff8000113ad370: 17ffff89 b ffff8000113ad194 <net_rx_action+0x1b4>
if (!sd_has_rps_ipi_waiting(sd) && list_empty(&repoll))
ffff8000113ad374: f94043a4 ldr x4, [x29,#128]
ffff8000113ad378: f9401c80 ldr x0, [x4,#56]
ffff8000113ad37c: b5fff300 cbnz x0, ffff8000113ad1dc <net_rx_action+0x1fc>
ffff8000113ad380: f94057a0 ldr x0, [x29,#168]
ffff8000113ad384: f94047a6 ldr x6, [x29,#136]
ffff8000113ad388: eb0000df cmp x6, x0
ffff8000113ad38c: 54fff281 b.ne ffff8000113ad1dc <net_rx_action+0x1fc>
ffff8000113ad390: 17ffffcb b ffff8000113ad2bc <net_rx_action+0x2dc>
return NULL;
ffff8000113ad394: aa0903f9 mov x25, x9
ffff8000113ad398: 17ffff7b b ffff8000113ad184 <net_rx_action+0x1a4>
ffff8000113ad39c: aa0003f9 mov x25, x0
ffff8000113ad3a0: 17ffff79 b ffff8000113ad184 <net_rx_action+0x1a4>
ffff8000113ad3a4: d2801c00 mov x0, #0xe0 // #224
ffff8000113ad3a8: d50342ff msr daifclr, #0x2
ffff8000113ad3ac: 17ffffc4 b ffff8000113ad2bc <net_rx_action+0x2dc>
WARN_ON_ONCE(work > weight);
ffff8000113ad3b0: d4210000 brk #0x800
ffff8000113ad3b4: 17ffff7a b ffff8000113ad19c <net_rx_action+0x1bc>
}
ffff8000113ad3b8: 94000000 bl 0 <__stack_chk_fail>
ffff8000113ad3b8: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113ad3bc: f9400b81 ldr x1, [x28,#16]
ffff8000113ad3c0: 927e0021 and x1, x1, #0x4
if (unlikely(napi_disable_pending(n))) {
ffff8000113ad3c4: b5000321 cbnz x1, ffff8000113ad428 <net_rx_action+0x448>
if (n->gro_bitmask) {
ffff8000113ad3c8: f9401380 ldr x0, [x28,#32]
ffff8000113ad3cc: b4000060 cbz x0, ffff8000113ad3d8 <net_rx_action+0x3f8>
napi_gro_flush(n, HZ >= 1000);
ffff8000113ad3d0: aa1c03e0 mov x0, x28
ffff8000113ad3d4: 94000000 bl ffff8000113ac90c <napi_gro_flush>
ffff8000113ad3d4: R_AARCH64_CALL26 napi_gro_flush
if (!napi->rx_count)
ffff8000113ad3d8: b9411b80 ldr w0, [x28,#280]
ffff8000113ad3dc: 34000060 cbz w0, ffff8000113ad3e8 <net_rx_action+0x408>
ffff8000113ad3e0: aa1c03e0 mov x0, x28
ffff8000113ad3e4: 97fffa1b bl ffff8000113abc50 <gro_normal_list.part.134>
ffff8000113ad3e8: f9400380 ldr x0, [x28]
if (unlikely(!list_empty(&n->poll_list))) {
ffff8000113ad3ec: eb00039f cmp x28, x0
ffff8000113ad3f0: 54000241 b.ne ffff8000113ad438 <net_rx_action+0x458>
__list_add(new, head->prev, head);
ffff8000113ad3f4: f9405bbb ldr x27, [x29,#176]
if (!__list_add_valid(new, prev, next))
ffff8000113ad3f8: aa1c03e0 mov x0, x28
ffff8000113ad3fc: aa1b03e1 mov x1, x27
ffff8000113ad400: 9102a3a2 add x2, x29, #0xa8
ffff8000113ad404: 94000000 bl 0 <__list_add_valid>
ffff8000113ad404: R_AARCH64_CALL26 __list_add_valid
ffff8000113ad408: 53001c00 uxtb w0, w0
ffff8000113ad40c: 34ffecc0 cbz w0, ffff8000113ad1a4 <net_rx_action+0x1c4>
next->prev = new;
ffff8000113ad410: f9005bbc str x28, [x29,#176]
new->next = next;
ffff8000113ad414: 9102a3a0 add x0, x29, #0xa8
ffff8000113ad418: f9000380 str x0, [x28]
new->prev = prev;
ffff8000113ad41c: f900079b str x27, [x28,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113ad420: f900037c str x28, [x27]
ffff8000113ad424: 17ffff60 b ffff8000113ad1a4 <net_rx_action+0x1c4>
return napi_complete_done(n, 0);
ffff8000113ad428: aa1c03e0 mov x0, x28
ffff8000113ad42c: 52800001 mov w1, #0x0 // #0
ffff8000113ad430: 94000000 bl ffff8000113aca6c <napi_complete_done>
ffff8000113ad430: R_AARCH64_CALL26 napi_complete_done
ffff8000113ad434: 17ffff5c b ffff8000113ad1a4 <net_rx_action+0x1c4>
pr_warn_once("%s: Budget exhausted after napi rescheduled\n",
ffff8000113ad438: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ad438: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113ad43c: 91000000 add x0, x0, #0x0
ffff8000113ad43c: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113ad440: 39405801 ldrb w1, [x0,#22]
ffff8000113ad444: 35ffeb01 cbnz w1, ffff8000113ad1a4 <net_rx_action+0x1c4>
ffff8000113ad448: 52800022 mov w2, #0x1 // #1
ffff8000113ad44c: f9401f81 ldr x1, [x28,#56]
ffff8000113ad450: 39005802 strb w2, [x0,#22]
ffff8000113ad454: b5000061 cbnz x1, ffff8000113ad460 <net_rx_action+0x480>
ffff8000113ad458: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113ad458: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x720
ffff8000113ad45c: 91000021 add x1, x1, #0x0
ffff8000113ad45c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x720
ffff8000113ad460: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ad460: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x728
ffff8000113ad464: 91000000 add x0, x0, #0x0
ffff8000113ad464: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x728
ffff8000113ad468: 94000000 bl 0 <printk>
ffff8000113ad468: R_AARCH64_CALL26 printk
ffff8000113ad46c: 17ffff4e b ffff8000113ad1a4 <net_rx_action+0x1c4>
ffff8000113ad470 <netdev_adjacent_rename_links>:
{
ffff8000113ad470: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113ad474: 910003fd mov x29, sp
ffff8000113ad478: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ad47c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113ad480: f9001bf7 str x23, [sp,#48]
list_for_each_entry(iter, &dev->adj_list.upper, list) {
ffff8000113ad484: aa0003f7 mov x23, x0
{
ffff8000113ad488: aa0003f5 mov x21, x0
ffff8000113ad48c: aa1e03e0 mov x0, x30
ffff8000113ad490: aa0103f6 mov x22, x1
ffff8000113ad494: 94000000 bl 0 <_mcount>
ffff8000113ad494: R_AARCH64_CALL26 _mcount
list_for_each_entry(iter, &dev->adj_list.upper, list) {
ffff8000113ad498: f84a8ef3 ldr x19, [x23,#168]!
ffff8000113ad49c: f9427ab4 ldr x20, [x21,#1264]
ffff8000113ad4a0: eb1302ff cmp x23, x19
ffff8000113ad4a4: d1006273 sub x19, x19, #0x18
ffff8000113ad4a8: 54000120 b.eq ffff8000113ad4cc <netdev_adjacent_rename_links+0x5c>
if (!net_eq(net, dev_net(iter->dev)))
ffff8000113ad4ac: f9400260 ldr x0, [x19]
ffff8000113ad4b0: f9427801 ldr x1, [x0,#1264]
ffff8000113ad4b4: eb01029f cmp x20, x1
ffff8000113ad4b8: 540002e0 b.eq ffff8000113ad514 <netdev_adjacent_rename_links+0xa4>
list_for_each_entry(iter, &dev->adj_list.upper, list) {
ffff8000113ad4bc: f9400e73 ldr x19, [x19,#24]
ffff8000113ad4c0: eb1302ff cmp x23, x19
ffff8000113ad4c4: d1006273 sub x19, x19, #0x18
ffff8000113ad4c8: 54ffff21 b.ne ffff8000113ad4ac <netdev_adjacent_rename_links+0x3c>
list_for_each_entry(iter, &dev->adj_list.lower, list) {
ffff8000113ad4cc: aa1503f7 mov x23, x21
ffff8000113ad4d0: f84b8ef3 ldr x19, [x23,#184]!
ffff8000113ad4d4: eb1302ff cmp x23, x19
ffff8000113ad4d8: d1006273 sub x19, x19, #0x18
ffff8000113ad4dc: 54000120 b.eq ffff8000113ad500 <netdev_adjacent_rename_links+0x90>
if (!net_eq(net, dev_net(iter->dev)))
ffff8000113ad4e0: f9400260 ldr x0, [x19]
ffff8000113ad4e4: f9427803 ldr x3, [x0,#1264]
ffff8000113ad4e8: eb03029f cmp x20, x3
ffff8000113ad4ec: 54000240 b.eq ffff8000113ad534 <netdev_adjacent_rename_links+0xc4>
list_for_each_entry(iter, &dev->adj_list.lower, list) {
ffff8000113ad4f0: f9400e73 ldr x19, [x19,#24]
ffff8000113ad4f4: eb1302ff cmp x23, x19
ffff8000113ad4f8: d1006273 sub x19, x19, #0x18
ffff8000113ad4fc: 54ffff21 b.ne ffff8000113ad4e0 <netdev_adjacent_rename_links+0x70>
}
ffff8000113ad500: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ad504: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113ad508: f9401bf7 ldr x23, [sp,#48]
ffff8000113ad50c: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113ad510: d65f03c0 ret
netdev_adjacent_sysfs_del(iter->dev, oldname,
ffff8000113ad514: 9102e002 add x2, x0, #0xb8
ffff8000113ad518: aa1603e1 mov x1, x22
ffff8000113ad51c: 97ffcea0 bl ffff8000113a0f9c <netdev_adjacent_sysfs_del>
&iter->dev->adj_list.lower);
ffff8000113ad520: f9400260 ldr x0, [x19]
netdev_adjacent_sysfs_add(iter->dev, dev,
ffff8000113ad524: aa1503e1 mov x1, x21
ffff8000113ad528: 9102e002 add x2, x0, #0xb8
ffff8000113ad52c: 97ffce77 bl ffff8000113a0f08 <netdev_adjacent_sysfs_add>
ffff8000113ad530: 17ffffe3 b ffff8000113ad4bc <netdev_adjacent_rename_links+0x4c>
netdev_adjacent_sysfs_del(iter->dev, oldname,
ffff8000113ad534: 9102a002 add x2, x0, #0xa8
ffff8000113ad538: aa1603e1 mov x1, x22
ffff8000113ad53c: 97ffce98 bl ffff8000113a0f9c <netdev_adjacent_sysfs_del>
&iter->dev->adj_list.upper);
ffff8000113ad540: f9400260 ldr x0, [x19]
netdev_adjacent_sysfs_add(iter->dev, dev,
ffff8000113ad544: aa1503e1 mov x1, x21
ffff8000113ad548: 9102a002 add x2, x0, #0xa8
ffff8000113ad54c: 97ffce6f bl ffff8000113a0f08 <netdev_adjacent_sysfs_add>
ffff8000113ad550: 17ffffe8 b ffff8000113ad4f0 <netdev_adjacent_rename_links+0x80>
ffff8000113ad554 <dev_change_name>:
{
ffff8000113ad554: a9b57bfd stp x29, x30, [sp,#-176]!
ffff8000113ad558: 910003fd mov x29, sp
ffff8000113ad55c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ad560: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113ad564: a90363f7 stp x23, x24, [sp,#48]
ffff8000113ad568: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113ad56c: a90573fb stp x27, x28, [sp,#80]
ffff8000113ad570: aa0003f4 mov x20, x0
ffff8000113ad574: aa1e03e0 mov x0, x30
ffff8000113ad578: aa0103fc mov x28, x1
ffff8000113ad57c: aa1e03f9 mov x25, x30
ffff8000113ad580: 94000000 bl 0 <_mcount>
ffff8000113ad580: R_AARCH64_CALL26 _mcount
ffff8000113ad584: 90000001 adrp x1, 0 <__stack_chk_guard>
ffff8000113ad584: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ad588: f9400020 ldr x0, [x1]
ffff8000113ad588: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ad58c: f90057a0 str x0, [x29,#168]
ASSERT_RTNL();
ffff8000113ad590: 94000000 bl 0 <rtnl_is_locked>
ffff8000113ad590: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113ad594: 340016e0 cbz w0, ffff8000113ad870 <dev_change_name+0x31c>
ffff8000113ad598: f9427a83 ldr x3, [x20,#1264]
ffff8000113ad59c: f9003ba3 str x3, [x29,#112]
BUG_ON(!dev_net(dev));
ffff8000113ad5a0: b4001663 cbz x3, ffff8000113ad86c <dev_change_name+0x318>
if (dev->flags & IFF_UP &&
ffff8000113ad5a4: b9422a80 ldr w0, [x20,#552]
ffff8000113ad5a8: 36000200 tbz w0, #0, ffff8000113ad5e8 <dev_change_name+0x94>
likely(!(dev->priv_flags & IFF_LIVE_RENAME_OK)))
ffff8000113ad5ac: b9422e81 ldr w1, [x20,#556]
return -EBUSY;
ffff8000113ad5b0: 128001e0 mov w0, #0xfffffff0 // #-16
if (dev->flags & IFF_UP &&
ffff8000113ad5b4: 37f001a1 tbnz w1, #30, ffff8000113ad5e8 <dev_change_name+0x94>
}
ffff8000113ad5b8: 90000003 adrp x3, 0 <__stack_chk_guard>
ffff8000113ad5b8: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ad5bc: f94057a2 ldr x2, [x29,#168]
ffff8000113ad5c0: f9400061 ldr x1, [x3]
ffff8000113ad5c0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ad5c4: eb01005f cmp x2, x1
ffff8000113ad5c8: 54001501 b.ne ffff8000113ad868 <dev_change_name+0x314>
ffff8000113ad5cc: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ad5d0: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113ad5d4: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113ad5d8: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113ad5dc: a94573fb ldp x27, x28, [sp,#80]
ffff8000113ad5e0: a8cb7bfd ldp x29, x30, [sp],#176
ffff8000113ad5e4: d65f03c0 ret
s->sequence++;
ffff8000113ad5e8: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113ad5e8: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113ad5ec: 91000073 add x19, x3, #0x0
ffff8000113ad5ec: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113ad5f0: b9435260 ldr w0, [x19,#848]
ffff8000113ad5f4: 11000400 add w0, w0, #0x1
ffff8000113ad5f8: b9035260 str w0, [x19,#848]
smp_wmb();
ffff8000113ad5fc: d5033abf dmb ishst
if (strncmp(newname, dev->name, IFNAMSIZ) == 0) {
ffff8000113ad600: d2800202 mov x2, #0x10 // #16
ffff8000113ad604: aa1c03e0 mov x0, x28
ffff8000113ad608: aa1403e1 mov x1, x20
ffff8000113ad60c: 94000000 bl 0 <strncmp>
ffff8000113ad60c: R_AARCH64_CALL26 strncmp
ffff8000113ad610: 34000d40 cbz w0, ffff8000113ad7b8 <dev_change_name+0x264>
return __builtin_memcpy(p, q, size);
ffff8000113ad614: a9401684 ldp x4, x5, [x20]
err = dev_get_valid_name(net, dev, newname);
ffff8000113ad618: f9403ba0 ldr x0, [x29,#112]
ffff8000113ad61c: 910263b8 add x24, x29, #0x98
ffff8000113ad620: aa1403e1 mov x1, x20
ffff8000113ad624: aa1c03e2 mov x2, x28
ffff8000113ad628: a9001704 stp x4, x5, [x24]
ffff8000113ad62c: 97ffd13a bl ffff8000113a1b14 <dev_get_valid_name>
ffff8000113ad630: 2a0003fa mov w26, w0
if (err < 0) {
ffff8000113ad634: 37f80f7a tbnz w26, #31, ffff8000113ad820 <dev_change_name+0x2cc>
if (oldname[0] && !strchr(oldname, '%'))
ffff8000113ad638: 394263a0 ldrb w0, [x29,#152]
ffff8000113ad63c: 35000c80 cbnz w0, ffff8000113ad7cc <dev_change_name+0x278>
old_assign_type = dev->name_assign_type;
ffff8000113ad640: 3949f282 ldrb w2, [x20,#636]
s->sequence++;
ffff8000113ad644: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113ad644: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113ad648: 91000037 add x23, x1, #0x0
ffff8000113ad648: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113ad64c: 91144283 add x3, x20, #0x510
dev->name_assign_type = NET_NAME_RENAMED;
ffff8000113ad650: 52800080 mov w0, #0x4 // #4
old_assign_type = dev->name_assign_type;
ffff8000113ad654: b9007fa2 str w2, [x29,#124]
ffff8000113ad658: f90037a3 str x3, [x29,#104]
dev->name_assign_type = NET_NAME_RENAMED;
ffff8000113ad65c: 3909f280 strb w0, [x20,#636]
__CMPXCHG_CASE(w, , acq_, 32, , a, , "memory", K)
ffff8000113ad660: 910cc2f3 add x19, x23, #0x330
ffff8000113ad664: d2800016 mov x22, #0x0 // #0
ffff8000113ad668: 52801ff5 mov w21, #0xff // #255
ffff8000113ad66c: d538411b mrs x27, sp_el0
ffff8000113ad670: 14000011 b ffff8000113ad6b4 <dev_change_name+0x160>
ffff8000113ad674: 52800022 mov w2, #0x1 // #1
ffff8000113ad678: 4b000042 sub w2, w2, w0
if (err >= 0) {
ffff8000113ad67c: 37f80dfa tbnz w26, #31, ffff8000113ad838 <dev_change_name+0x2e4>
s->sequence++;
ffff8000113ad680: b94352e1 ldr w1, [x23,#848]
ffff8000113ad684: 11000421 add w1, w1, #0x1
ffff8000113ad688: b90352e1 str w1, [x23,#848]
smp_wmb();
ffff8000113ad68c: d5033abf dmb ishst
ffff8000113ad690: a9401704 ldp x4, x5, [x24]
dev->name_assign_type = old_assign_type;
ffff8000113ad694: 3941f3a0 ldrb w0, [x29,#124]
ffff8000113ad698: a9001684 stp x4, x5, [x20]
ffff8000113ad69c: a9401784 ldp x4, x5, [x28]
ffff8000113ad6a0: 2a0203fa mov w26, w2
old_assign_type = NET_NAME_RENAMED;
ffff8000113ad6a4: 52800082 mov w2, #0x4 // #4
ffff8000113ad6a8: a9001704 stp x4, x5, [x24]
dev->name_assign_type = old_assign_type;
ffff8000113ad6ac: 3909f280 strb w0, [x20,#636]
old_assign_type = NET_NAME_RENAMED;
ffff8000113ad6b0: b9007fa2 str w2, [x29,#124]
ret = device_rename(&dev->dev, dev->name);
ffff8000113ad6b4: f94037a0 ldr x0, [x29,#104]
ffff8000113ad6b8: aa1403e1 mov x1, x20
ffff8000113ad6bc: 94000000 bl 0 <device_rename>
ffff8000113ad6bc: R_AARCH64_CALL26 device_rename
if (ret) {
ffff8000113ad6c0: 350009a0 cbnz w0, ffff8000113ad7f4 <dev_change_name+0x2a0>
smp_wmb();
ffff8000113ad6c4: d5033abf dmb ishst
s->sequence++;
ffff8000113ad6c8: b94352e2 ldr w2, [x23,#848]
netdev_adjacent_rename_links(dev, oldname);
ffff8000113ad6cc: aa1403e0 mov x0, x20
ffff8000113ad6d0: 11000442 add w2, w2, #0x1
ffff8000113ad6d4: aa1803e1 mov x1, x24
ffff8000113ad6d8: b90352e2 str w2, [x23,#848]
ffff8000113ad6dc: 94000000 bl ffff8000113ad470 <netdev_adjacent_rename_links>
ffff8000113ad6dc: R_AARCH64_CALL26 netdev_adjacent_rename_links
__READ_ONCE_SIZE;
ffff8000113ad6e0: b9401b60 ldr w0, [x27,#24]
ffff8000113ad6e4: 11080000 add w0, w0, #0x200
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff8000113ad6e8: b9001b60 str w0, [x27,#24]
ffff8000113ad6ec: f9800271 prfm pstl1strm, [x19]
ffff8000113ad6f0: 885ffe60 ldaxr w0, [x19]
ffff8000113ad6f4: 4a160001 eor w1, w0, w22
ffff8000113ad6f8: 35000061 cbnz w1, ffff8000113ad704 <dev_change_name+0x1b0>
ffff8000113ad6fc: 88017e75 stxr w1, w21, [x19]
ffff8000113ad700: 35ffff81 cbnz w1, ffff8000113ad6f0 <dev_change_name+0x19c>
if (likely(atomic_try_cmpxchg_acquire(&lock->cnts, &cnts, _QW_LOCKED)))
ffff8000113ad704: 35000a60 cbnz w0, ffff8000113ad850 <dev_change_name+0x2fc>
netdev_name_node_del(dev->name_node);
ffff8000113ad708: f9400a80 ldr x0, [x20,#16]
struct hlist_node *next = n->next;
ffff8000113ad70c: f9400001 ldr x1, [x0]
struct hlist_node **pprev = n->pprev;
ffff8000113ad710: f9400402 ldr x2, [x0,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113ad714: f9000041 str x1, [x2]
if (next)
ffff8000113ad718: b4000041 cbz x1, ffff8000113ad720 <dev_change_name+0x1cc>
ffff8000113ad71c: f9000422 str x2, [x1,#8]
ffff8000113ad720: d2802441 mov x1, #0x122 // #290
ffff8000113ad724: f2fbd5a1 movk x1, #0xdead, lsl #48
ffff8000113ad728: f9000401 str x1, [x0,#8]
smp_store_release(&lock->wlocked, 0);
ffff8000113ad72c: 52800000 mov w0, #0x0 // #0
ffff8000113ad730: 089ffe60 stlrb w0, [x19]
ffff8000113ad734: 52804001 mov w1, #0x200 // #512
ffff8000113ad738: aa1903e0 mov x0, x25
ffff8000113ad73c: 94000000 bl 0 <__local_bh_enable_ip>
ffff8000113ad73c: R_AARCH64_CALL26 __local_bh_enable_ip
synchronize_rcu();
ffff8000113ad740: 94000000 bl 0 <synchronize_rcu>
ffff8000113ad740: R_AARCH64_CALL26 synchronize_rcu
ffff8000113ad744: d5384100 mrs x0, sp_el0
__READ_ONCE_SIZE;
ffff8000113ad748: b9401801 ldr w1, [x0,#24]
ffff8000113ad74c: 11080021 add w1, w1, #0x200
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff8000113ad750: b9001801 str w1, [x0,#24]
ffff8000113ad754: f9800271 prfm pstl1strm, [x19]
ffff8000113ad758: 885ffe60 ldaxr w0, [x19]
ffff8000113ad75c: 4a160001 eor w1, w0, w22
ffff8000113ad760: 35000061 cbnz w1, ffff8000113ad76c <dev_change_name+0x218>
ffff8000113ad764: 88017e75 stxr w1, w21, [x19]
ffff8000113ad768: 35ffff81 cbnz w1, ffff8000113ad758 <dev_change_name+0x204>
if (likely(atomic_try_cmpxchg_acquire(&lock->cnts, &cnts, _QW_LOCKED)))
ffff8000113ad76c: 35000780 cbnz w0, ffff8000113ad85c <dev_change_name+0x308>
netdev_name_node_add(net, dev->name_node);
ffff8000113ad770: f9403ba0 ldr x0, [x29,#112]
ffff8000113ad774: f9400a81 ldr x1, [x20,#16]
ffff8000113ad778: 97ffd60a bl ffff8000113a2fa0 <netdev_name_node_add>
smp_store_release(&lock->wlocked, 0);
ffff8000113ad77c: 52800000 mov w0, #0x0 // #0
ffff8000113ad780: 089ffe60 stlrb w0, [x19]
ffff8000113ad784: 52804001 mov w1, #0x200 // #512
ffff8000113ad788: aa1903e0 mov x0, x25
ffff8000113ad78c: 94000000 bl 0 <__local_bh_enable_ip>
ffff8000113ad78c: R_AARCH64_CALL26 __local_bh_enable_ip
return call_netdevice_notifiers_info(val, &info);
ffff8000113ad790: d2800160 mov x0, #0xb // #11
ffff8000113ad794: 910223a1 add x1, x29, #0x88
struct netdev_notifier_info info = {
ffff8000113ad798: f90047b4 str x20, [x29,#136]
ffff8000113ad79c: f9004bbf str xzr, [x29,#144]
return call_netdevice_notifiers_info(val, &info);
ffff8000113ad7a0: 97ffca56 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ret &= ~NOTIFY_STOP_MASK;
ffff8000113ad7a4: 12107800 and w0, w0, #0xffff7fff
return ret > NOTIFY_OK ? NOTIFY_OK - ret : 0;
ffff8000113ad7a8: 7100041f cmp w0, #0x1
ffff8000113ad7ac: 54fff64c b.gt ffff8000113ad674 <dev_change_name+0x120>
ffff8000113ad7b0: 2a1a03e0 mov w0, w26
ffff8000113ad7b4: 17ffff81 b ffff8000113ad5b8 <dev_change_name+0x64>
smp_wmb();
ffff8000113ad7b8: d5033abf dmb ishst
s->sequence++;
ffff8000113ad7bc: b9435261 ldr w1, [x19,#848]
ffff8000113ad7c0: 11000421 add w1, w1, #0x1
ffff8000113ad7c4: b9035261 str w1, [x19,#848]
return 0;
ffff8000113ad7c8: 17ffff7c b ffff8000113ad5b8 <dev_change_name+0x64>
if (oldname[0] && !strchr(oldname, '%'))
ffff8000113ad7cc: aa1803e0 mov x0, x24
ffff8000113ad7d0: 528004a1 mov w1, #0x25 // #37
ffff8000113ad7d4: 94000000 bl 0 <strchr>
ffff8000113ad7d4: R_AARCH64_CALL26 strchr
ffff8000113ad7d8: b5fff340 cbnz x0, ffff8000113ad640 <dev_change_name+0xec>
netdev_info(dev, "renamed from %s\n", oldname);
ffff8000113ad7dc: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113ad7dc: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x758
ffff8000113ad7e0: aa1403e0 mov x0, x20
ffff8000113ad7e4: 91000021 add x1, x1, #0x0
ffff8000113ad7e4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x758
ffff8000113ad7e8: aa1803e2 mov x2, x24
ffff8000113ad7ec: 94000000 bl ffff80001139eaac <__netdev_walk_all_upper_dev+0x30>
ffff8000113ad7ec: R_AARCH64_CALL26 netdev_info
ffff8000113ad7f0: 17ffff94 b ffff8000113ad640 <dev_change_name+0xec>
ffff8000113ad7f4: a9400f02 ldp x2, x3, [x24]
dev->name_assign_type = old_assign_type;
ffff8000113ad7f8: 3941f3a1 ldrb w1, [x29,#124]
ffff8000113ad7fc: a9000e82 stp x2, x3, [x20]
ffff8000113ad800: 3909f281 strb w1, [x20,#636]
smp_wmb();
ffff8000113ad804: d5033abf dmb ishst
s->sequence++;
ffff8000113ad808: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113ad808: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113ad80c: 91000041 add x1, x2, #0x0
ffff8000113ad80c: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113ad810: b9435022 ldr w2, [x1,#848]
ffff8000113ad814: 11000442 add w2, w2, #0x1
ffff8000113ad818: b9035022 str w2, [x1,#848]
return ret;
ffff8000113ad81c: 17ffff67 b ffff8000113ad5b8 <dev_change_name+0x64>
smp_wmb();
ffff8000113ad820: d5033abf dmb ishst
s->sequence++;
ffff8000113ad824: b9435261 ldr w1, [x19,#848]
return err;
ffff8000113ad828: 2a1a03e0 mov w0, w26
ffff8000113ad82c: 11000421 add w1, w1, #0x1
ffff8000113ad830: b9035261 str w1, [x19,#848]
ffff8000113ad834: 17ffff61 b ffff8000113ad5b8 <dev_change_name+0x64>
pr_err("%s: name change rollback failed: %d\n",
ffff8000113ad838: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ad838: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x770
ffff8000113ad83c: 91000000 add x0, x0, #0x0
ffff8000113ad83c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x770
ffff8000113ad840: aa1403e1 mov x1, x20
ffff8000113ad844: 94000000 bl 0 <printk>
ffff8000113ad844: R_AARCH64_CALL26 printk
ffff8000113ad848: 2a1a03e0 mov w0, w26
ffff8000113ad84c: 17ffff5b b ffff8000113ad5b8 <dev_change_name+0x64>
queued_write_lock_slowpath(lock);
ffff8000113ad850: aa1303e0 mov x0, x19
ffff8000113ad854: 94000000 bl 0 <queued_write_lock_slowpath>
ffff8000113ad854: R_AARCH64_CALL26 queued_write_lock_slowpath
ffff8000113ad858: 17ffffac b ffff8000113ad708 <dev_change_name+0x1b4>
ffff8000113ad85c: aa1303e0 mov x0, x19
ffff8000113ad860: 94000000 bl 0 <queued_write_lock_slowpath>
ffff8000113ad860: R_AARCH64_CALL26 queued_write_lock_slowpath
ffff8000113ad864: 17ffffc3 b ffff8000113ad770 <dev_change_name+0x21c>
}
ffff8000113ad868: 94000000 bl 0 <__stack_chk_fail>
ffff8000113ad868: R_AARCH64_CALL26 __stack_chk_fail
BUG_ON(!dev_net(dev));
ffff8000113ad86c: d4210000 brk #0x800
ASSERT_RTNL();
ffff8000113ad870: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113ad870: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113ad874: 91000063 add x3, x3, #0x0
ffff8000113ad874: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113ad878: 39405c60 ldrb w0, [x3,#23]
ffff8000113ad87c: 35ffe8e0 cbnz w0, ffff8000113ad598 <dev_change_name+0x44>
ffff8000113ad880: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ad880: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113ad884: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113ad884: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113ad888: 52800024 mov w4, #0x1 // #1
ffff8000113ad88c: 91000000 add x0, x0, #0x0
ffff8000113ad88c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113ad890: 91000021 add x1, x1, #0x0
ffff8000113ad890: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113ad894: 52809742 mov w2, #0x4ba // #1210
ffff8000113ad898: 39005c64 strb w4, [x3,#23]
ffff8000113ad89c: 94000000 bl 0 <__warn_printk>
ffff8000113ad89c: R_AARCH64_CALL26 __warn_printk
ffff8000113ad8a0: d4210000 brk #0x800
ffff8000113ad8a4: 17ffff3d b ffff8000113ad598 <dev_change_name+0x44>
ffff8000113ad8a8 <__dev_notify_flags>:
{
ffff8000113ad8a8: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff8000113ad8ac: 910003fd mov x29, sp
ffff8000113ad8b0: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ad8b4: f90013f5 str x21, [sp,#32]
ffff8000113ad8b8: aa0003f3 mov x19, x0
ffff8000113ad8bc: aa1e03e0 mov x0, x30
ffff8000113ad8c0: 2a0103f5 mov w21, w1
ffff8000113ad8c4: f9001fa2 str x2, [x29,#56]
ffff8000113ad8c8: 90000014 adrp x20, 0 <__stack_chk_guard>
ffff8000113ad8c8: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ad8cc: 94000000 bl 0 <_mcount>
ffff8000113ad8cc: R_AARCH64_CALL26 _mcount
ffff8000113ad8d0: f9400280 ldr x0, [x20]
ffff8000113ad8d0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
unsigned int changes = dev->flags ^ old_flags;
ffff8000113ad8d4: b9422a63 ldr w3, [x19,#552]
if (gchanges)
ffff8000113ad8d8: f9401fa2 ldr x2, [x29,#56]
{
ffff8000113ad8dc: f9002fa0 str x0, [x29,#88]
unsigned int changes = dev->flags ^ old_flags;
ffff8000113ad8e0: 4a0302b5 eor w21, w21, w3
if (gchanges)
ffff8000113ad8e4: 350002c2 cbnz w2, ffff8000113ad93c <__dev_notify_flags+0x94>
if (changes & IFF_UP) {
ffff8000113ad8e8: 36000115 tbz w21, #0, ffff8000113ad908 <__dev_notify_flags+0x60>
if (dev->flags & IFF_UP)
ffff8000113ad8ec: 37000343 tbnz w3, #0, ffff8000113ad954 <__dev_notify_flags+0xac>
return call_netdevice_notifiers_info(val, &info);
ffff8000113ad8f0: d2800040 mov x0, #0x2 // #2
ffff8000113ad8f4: 910103a1 add x1, x29, #0x40
struct netdev_notifier_info info = {
ffff8000113ad8f8: f90023b3 str x19, [x29,#64]
ffff8000113ad8fc: f90027bf str xzr, [x29,#72]
return call_netdevice_notifiers_info(val, &info);
ffff8000113ad900: 97ffc9fe bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ffff8000113ad904: b9422a63 ldr w3, [x19,#552]
if (dev->flags & IFF_UP &&
ffff8000113ad908: 360000a3 tbz w3, #0, ffff8000113ad91c <__dev_notify_flags+0x74>
(changes & ~(IFF_UP | IFF_PROMISC | IFF_ALLMULTI | IFF_VOLATILE))) {
ffff8000113ad90c: 529e1480 mov w0, #0xf0a4 // #61604
ffff8000113ad910: 72bfff00 movk w0, #0xfff8, lsl #16
if (dev->flags & IFF_UP &&
ffff8000113ad914: 6a0002bf tst w21, w0
ffff8000113ad918: 54000221 b.ne ffff8000113ad95c <__dev_notify_flags+0xb4>
}
ffff8000113ad91c: f9402fa1 ldr x1, [x29,#88]
ffff8000113ad920: f9400280 ldr x0, [x20]
ffff8000113ad920: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ad924: eb00003f cmp x1, x0
ffff8000113ad928: 540002a1 b.ne ffff8000113ad97c <__dev_notify_flags+0xd4>
ffff8000113ad92c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ad930: f94013f5 ldr x21, [sp,#32]
ffff8000113ad934: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113ad938: d65f03c0 ret
rtmsg_ifinfo(RTM_NEWLINK, dev, gchanges, GFP_ATOMIC);
ffff8000113ad93c: 52814403 mov w3, #0xa20 // #2592
ffff8000113ad940: 52800200 mov w0, #0x10 // #16
ffff8000113ad944: aa1303e1 mov x1, x19
ffff8000113ad948: 94000000 bl 0 <rtmsg_ifinfo>
ffff8000113ad948: R_AARCH64_CALL26 rtmsg_ifinfo
ffff8000113ad94c: b9422a63 ldr w3, [x19,#552]
ffff8000113ad950: 17ffffe6 b ffff8000113ad8e8 <__dev_notify_flags+0x40>
return call_netdevice_notifiers_info(val, &info);
ffff8000113ad954: d2800020 mov x0, #0x1 // #1
ffff8000113ad958: 17ffffe7 b ffff8000113ad8f4 <__dev_notify_flags+0x4c>
struct netdev_notifier_change_info change_info = {
ffff8000113ad95c: a9047fbf stp xzr, xzr, [x29,#64]
ffff8000113ad960: f9002bbf str xzr, [x29,#80]
call_netdevice_notifiers_info(NETDEV_CHANGE, &change_info.info);
ffff8000113ad964: 910103a1 add x1, x29, #0x40
ffff8000113ad968: d2800080 mov x0, #0x4 // #4
struct netdev_notifier_change_info change_info = {
ffff8000113ad96c: f90023b3 str x19, [x29,#64]
ffff8000113ad970: b90053b5 str w21, [x29,#80]
call_netdevice_notifiers_info(NETDEV_CHANGE, &change_info.info);
ffff8000113ad974: 97ffc9e1 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ffff8000113ad978: 17ffffe9 b ffff8000113ad91c <__dev_notify_flags+0x74>
}
ffff8000113ad97c: 94000000 bl 0 <__stack_chk_fail>
ffff8000113ad97c: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113ad980 <__dev_set_promiscuity>:
{
ffff8000113ad980: d10203ff sub sp, sp, #0x80
ffff8000113ad984: a9027bfd stp x29, x30, [sp,#32]
ffff8000113ad988: 910083fd add x29, sp, #0x20
ffff8000113ad98c: a90353f3 stp x19, x20, [sp,#48]
ffff8000113ad990: a9045bf5 stp x21, x22, [sp,#64]
ffff8000113ad994: a90563f7 stp x23, x24, [sp,#80]
ffff8000113ad998: a9066bf9 stp x25, x26, [sp,#96]
ffff8000113ad99c: aa0003f3 mov x19, x0
ffff8000113ad9a0: aa1e03e0 mov x0, x30
ffff8000113ad9a4: 2a0103f4 mov w20, w1
ffff8000113ad9a8: 53001c56 uxtb w22, w2
ffff8000113ad9ac: 94000000 bl 0 <_mcount>
ffff8000113ad9ac: R_AARCH64_CALL26 _mcount
unsigned int old_flags = dev->flags;
ffff8000113ad9b0: b9422a75 ldr w21, [x19,#552]
ASSERT_RTNL();
ffff8000113ad9b4: 94000000 bl 0 <rtnl_is_locked>
ffff8000113ad9b4: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113ad9b8: 34000460 cbz w0, ffff8000113ada44 <__dev_set_promiscuity+0xc4>
dev->flags |= IFF_PROMISC;
ffff8000113ad9bc: b9422a64 ldr w4, [x19,#552]
dev->promiscuity += inc;
ffff8000113ad9c0: b942d261 ldr w1, [x19,#720]
dev->flags |= IFF_PROMISC;
ffff8000113ad9c4: 32180080 orr w0, w4, #0x100
dev->promiscuity += inc;
ffff8000113ad9c8: 0b010283 add w3, w20, w1
dev->flags |= IFF_PROMISC;
ffff8000113ad9cc: b9022a60 str w0, [x19,#552]
dev->promiscuity += inc;
ffff8000113ad9d0: b902d263 str w3, [x19,#720]
if (dev->promiscuity == 0) {
ffff8000113ad9d4: 35000083 cbnz w3, ffff8000113ad9e4 <__dev_set_promiscuity+0x64>
if (inc < 0)
ffff8000113ad9d8: 36f80294 tbz w20, #31, ffff8000113ada28 <__dev_set_promiscuity+0xa8>
dev->flags &= ~IFF_PROMISC;
ffff8000113ad9dc: 12177880 and w0, w4, #0xfffffeff
ffff8000113ad9e0: b9022a60 str w0, [x19,#552]
if (dev->flags != old_flags) {
ffff8000113ad9e4: 6b0002bf cmp w21, w0
ffff8000113ad9e8: 540004a1 b.ne ffff8000113ada7c <__dev_set_promiscuity+0xfc>
return 0;
ffff8000113ad9ec: 52800014 mov w20, #0x0 // #0
if (notify)
ffff8000113ad9f0: 340000b6 cbz w22, ffff8000113ada04 <__dev_set_promiscuity+0x84>
__dev_notify_flags(dev, old_flags, IFF_PROMISC);
ffff8000113ad9f4: aa1303e0 mov x0, x19
ffff8000113ad9f8: 2a1503e1 mov w1, w21
ffff8000113ad9fc: 52802002 mov w2, #0x100 // #256
ffff8000113ada00: 94000000 bl ffff8000113ad8a8 <__dev_notify_flags>
ffff8000113ada00: R_AARCH64_CALL26 __dev_notify_flags
}
ffff8000113ada04: d10083bf sub sp, x29, #0x20
ffff8000113ada08: 2a1403e0 mov w0, w20
ffff8000113ada0c: a9445bf5 ldp x21, x22, [sp,#64]
ffff8000113ada10: a94353f3 ldp x19, x20, [sp,#48]
ffff8000113ada14: a94563f7 ldp x23, x24, [sp,#80]
ffff8000113ada18: a9466bf9 ldp x25, x26, [sp,#96]
ffff8000113ada1c: a9427bfd ldp x29, x30, [sp,#32]
ffff8000113ada20: 910203ff add sp, sp, #0x80
ffff8000113ada24: d65f03c0 ret
pr_warn("%s: promiscuity touches roof, set promiscuity failed. promiscuity feature of device might be broken.\n",
ffff8000113ada28: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ada28: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x7a8
dev->promiscuity -= inc;
ffff8000113ada2c: b902d261 str w1, [x19,#720]
pr_warn("%s: promiscuity touches roof, set promiscuity failed. promiscuity feature of device might be broken.\n",
ffff8000113ada30: 91000000 add x0, x0, #0x0
ffff8000113ada30: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x7a8
ffff8000113ada34: aa1303e1 mov x1, x19
ffff8000113ada38: 94000000 bl 0 <printk>
ffff8000113ada38: R_AARCH64_CALL26 printk
return -EOVERFLOW;
ffff8000113ada3c: 12800954 mov w20, #0xffffffb5 // #-75
ffff8000113ada40: 17fffff1 b ffff8000113ada04 <__dev_set_promiscuity+0x84>
ASSERT_RTNL();
ffff8000113ada44: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113ada44: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113ada48: 91000063 add x3, x3, #0x0
ffff8000113ada48: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113ada4c: 39406060 ldrb w0, [x3,#24]
ffff8000113ada50: 35fffb60 cbnz w0, ffff8000113ad9bc <__dev_set_promiscuity+0x3c>
ffff8000113ada54: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ada54: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113ada58: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113ada58: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113ada5c: 52800024 mov w4, #0x1 // #1
ffff8000113ada60: 91000000 add x0, x0, #0x0
ffff8000113ada60: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113ada64: 91000021 add x1, x1, #0x0
ffff8000113ada64: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113ada68: 5283dd82 mov w2, #0x1eec // #7916
ffff8000113ada6c: 39006064 strb w4, [x3,#24]
ffff8000113ada70: 94000000 bl 0 <__warn_printk>
ffff8000113ada70: R_AARCH64_CALL26 __warn_printk
ffff8000113ada74: d4210000 brk #0x800
ffff8000113ada78: 17ffffd1 b ffff8000113ad9bc <__dev_set_promiscuity+0x3c>
pr_info("device %s %s promiscuous mode\n",
ffff8000113ada7c: 36400220 tbz w0, #8, ffff8000113adac0 <__dev_set_promiscuity+0x140>
ffff8000113ada80: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113ada80: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x798
ffff8000113ada84: 91000042 add x2, x2, #0x0
ffff8000113ada84: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x798
ffff8000113ada88: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ada88: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x810
ffff8000113ada8c: 91000000 add x0, x0, #0x0
ffff8000113ada8c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x810
ffff8000113ada90: aa1303e1 mov x1, x19
ffff8000113ada94: 94000000 bl 0 <printk>
ffff8000113ada94: R_AARCH64_CALL26 printk
if (audit_enabled) {
ffff8000113ada98: 90000000 adrp x0, 0 <audit_enabled>
ffff8000113ada98: R_AARCH64_ADR_PREL_PG_HI21 audit_enabled
ffff8000113ada9c: b9400000 ldr w0, [x0]
ffff8000113ada9c: R_AARCH64_LDST32_ABS_LO12_NC audit_enabled
ffff8000113adaa0: 35000160 cbnz w0, ffff8000113adacc <__dev_set_promiscuity+0x14c>
if (ops->ndo_change_rx_flags)
ffff8000113adaa4: f940fa60 ldr x0, [x19,#496]
ffff8000113adaa8: f9401c02 ldr x2, [x0,#56]
ffff8000113adaac: b4fffa02 cbz x2, ffff8000113ad9ec <__dev_set_promiscuity+0x6c>
ops->ndo_change_rx_flags(dev, flags);
ffff8000113adab0: aa1303e0 mov x0, x19
ffff8000113adab4: 52802001 mov w1, #0x100 // #256
ffff8000113adab8: d63f0040 blr x2
ffff8000113adabc: 17ffffcc b ffff8000113ad9ec <__dev_set_promiscuity+0x6c>
pr_info("device %s %s promiscuous mode\n",
ffff8000113adac0: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113adac0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x7a0
ffff8000113adac4: 91000042 add x2, x2, #0x0
ffff8000113adac4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x7a0
ffff8000113adac8: 17fffff0 b ffff8000113ada88 <__dev_set_promiscuity+0x108>
ffff8000113adacc: d5384114 mrs x20, sp_el0
audit_log(audit_context(), GFP_ATOMIC,
ffff8000113adad0: b9422a65 ldr w5, [x19,#552]
current_uid_gid(&uid, &gid);
ffff8000113adad4: f9446680 ldr x0, [x20,#2248]
audit_log(audit_context(), GFP_ATOMIC,
ffff8000113adad8: 90000017 adrp x23, 0 <init_user_ns>
ffff8000113adad8: R_AARCH64_ADR_PREL_PG_HI21 init_user_ns
ffff8000113adadc: 910002f7 add x23, x23, #0x0
ffff8000113adadc: R_AARCH64_ADD_ABS_LO12_NC init_user_ns
ffff8000113adae0: b9498a81 ldr w1, [x20,#2440]
current_uid_gid(&uid, &gid);
ffff8000113adae4: b9400419 ldr w25, [x0,#4]
ffff8000113adae8: b940081a ldr w26, [x0,#8]
audit_log(audit_context(), GFP_ATOMIC,
ffff8000113adaec: 121800a5 and w5, w5, #0x100
ffff8000113adaf0: aa1703e0 mov x0, x23
task->audit_context = ctx;
}
static inline struct audit_context *audit_context(void)
{
return current->audit_context;
ffff8000113adaf4: f944c298 ldr x24, [x20,#2432]
ffff8000113adaf8: f9002ba5 str x5, [x29,#80]
ffff8000113adafc: 94000000 bl 0 <from_kuid>
ffff8000113adafc: R_AARCH64_CALL26 from_kuid
ffff8000113adb00: 2a0003e7 mov w7, w0
ffff8000113adb04: 2a1903e1 mov w1, w25
ffff8000113adb08: aa1703e0 mov x0, x23
ffff8000113adb0c: f9002fa7 str x7, [x29,#88]
ffff8000113adb10: 94000000 bl 0 <from_kuid>
ffff8000113adb10: R_AARCH64_CALL26 from_kuid
ffff8000113adb14: 2a0003f9 mov w25, w0
ffff8000113adb18: 2a1a03e1 mov w1, w26
ffff8000113adb1c: aa1703e0 mov x0, x23
ffff8000113adb20: 94000000 bl 0 <from_kgid>
ffff8000113adb20: R_AARCH64_CALL26 from_kgid
ffff8000113adb24: b90003f9 str w25, [sp]
ffff8000113adb28: b9000be0 str w0, [sp,#8]
ffff8000113adb2c: b9498e80 ldr w0, [x20,#2444]
ffff8000113adb30: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113adb30: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x838
ffff8000113adb34: f9402ba5 ldr x5, [x29,#80]
ffff8000113adb38: f9402fa7 ldr x7, [x29,#88]
ffff8000113adb3c: b90013e0 str w0, [sp,#16]
ffff8000113adb40: 52814401 mov w1, #0xa20 // #2592
ffff8000113adb44: aa1803e0 mov x0, x24
ffff8000113adb48: 5280d482 mov w2, #0x6a4 // #1700
ffff8000113adb4c: 91000063 add x3, x3, #0x0
ffff8000113adb4c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x838
ffff8000113adb50: aa1303e4 mov x4, x19
ffff8000113adb54: 121802a6 and w6, w21, #0x100
ffff8000113adb58: 94000000 bl 0 <audit_log>
ffff8000113adb58: R_AARCH64_CALL26 audit_log
ffff8000113adb5c: 17ffffd2 b ffff8000113adaa4 <__dev_set_promiscuity+0x124>
ffff8000113adb60 <__dev_set_rx_mode>:
{
ffff8000113adb60: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113adb64: 910003fd mov x29, sp
ffff8000113adb68: a90153f3 stp x19, x20, [sp,#16]
ffff8000113adb6c: f90013f5 str x21, [sp,#32]
ffff8000113adb70: aa0003f3 mov x19, x0
ffff8000113adb74: aa1e03e0 mov x0, x30
ffff8000113adb78: 94000000 bl 0 <_mcount>
ffff8000113adb78: R_AARCH64_CALL26 _mcount
if (!(dev->flags&IFF_UP))
ffff8000113adb7c: b9422a60 ldr w0, [x19,#552]
const struct net_device_ops *ops = dev->netdev_ops;
ffff8000113adb80: f940fa74 ldr x20, [x19,#496]
if (!(dev->flags&IFF_UP))
ffff8000113adb84: 360001a0 tbz w0, #0, ffff8000113adbb8 <__dev_set_rx_mode+0x58>
ffff8000113adb88: f9402260 ldr x0, [x19,#64]
if (!netif_device_present(dev))
ffff8000113adb8c: 36080160 tbz w0, #1, ffff8000113adbb8 <__dev_set_rx_mode+0x58>
if (!(dev->priv_flags & IFF_UNICAST_FLT)) {
ffff8000113adb90: b9422e60 ldr w0, [x19,#556]
ffff8000113adb94: 376000a0 tbnz w0, #12, ffff8000113adba8 <__dev_set_rx_mode+0x48>
if (!netdev_uc_empty(dev) && !dev->uc_promisc) {
ffff8000113adb98: b9429275 ldr w21, [x19,#656]
ffff8000113adb9c: 35000175 cbnz w21, ffff8000113adbc8 <__dev_set_rx_mode+0x68>
} else if (netdev_uc_empty(dev) && dev->uc_promisc) {
ffff8000113adba0: 3949f660 ldrb w0, [x19,#637]
ffff8000113adba4: 35000220 cbnz w0, ffff8000113adbe8 <__dev_set_rx_mode+0x88>
if (ops->ndo_set_rx_mode)
ffff8000113adba8: f9402281 ldr x1, [x20,#64]
ffff8000113adbac: b4000061 cbz x1, ffff8000113adbb8 <__dev_set_rx_mode+0x58>
ops->ndo_set_rx_mode(dev);
ffff8000113adbb0: aa1303e0 mov x0, x19
ffff8000113adbb4: d63f0020 blr x1
}
ffff8000113adbb8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113adbbc: f94013f5 ldr x21, [sp,#32]
ffff8000113adbc0: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113adbc4: d65f03c0 ret
if (!netdev_uc_empty(dev) && !dev->uc_promisc) {
ffff8000113adbc8: 3949f662 ldrb w2, [x19,#637]
ffff8000113adbcc: 35fffee2 cbnz w2, ffff8000113adba8 <__dev_set_rx_mode+0x48>
__dev_set_promiscuity(dev, 1, false);
ffff8000113adbd0: aa1303e0 mov x0, x19
ffff8000113adbd4: 52800021 mov w1, #0x1 // #1
ffff8000113adbd8: 97ffff6a bl ffff8000113ad980 <__dev_set_promiscuity>
dev->uc_promisc = true;
ffff8000113adbdc: 52800020 mov w0, #0x1 // #1
ffff8000113adbe0: 3909f660 strb w0, [x19,#637]
ffff8000113adbe4: 17fffff1 b ffff8000113adba8 <__dev_set_rx_mode+0x48>
__dev_set_promiscuity(dev, -1, false);
ffff8000113adbe8: aa1303e0 mov x0, x19
ffff8000113adbec: 12800001 mov w1, #0xffffffff // #-1
ffff8000113adbf0: 2a1503e2 mov w2, w21
ffff8000113adbf4: 97ffff63 bl ffff8000113ad980 <__dev_set_promiscuity>
dev->uc_promisc = false;
ffff8000113adbf8: 3909f675 strb w21, [x19,#637]
ffff8000113adbfc: 17ffffeb b ffff8000113adba8 <__dev_set_rx_mode+0x48>
ffff8000113adc00 <dev_set_rx_mode>:
{
ffff8000113adc00: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113adc04: 910003fd mov x29, sp
ffff8000113adc08: a90153f3 stp x19, x20, [sp,#16]
ffff8000113adc0c: aa0003f3 mov x19, x0
ffff8000113adc10: aa1e03e0 mov x0, x30
ffff8000113adc14: aa1e03f4 mov x20, x30
ffff8000113adc18: 94000000 bl 0 <_mcount>
ffff8000113adc18: R_AARCH64_CALL26 _mcount
ffff8000113adc1c: d5384100 mrs x0, sp_el0
__READ_ONCE_SIZE;
ffff8000113adc20: b9401801 ldr w1, [x0,#24]
ffff8000113adc24: 11080021 add w1, w1, #0x200
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff8000113adc28: b9001801 str w1, [x0,#24]
ffff8000113adc2c: 52800023 mov w3, #0x1 // #1
ffff8000113adc30: 9109e260 add x0, x19, #0x278
ffff8000113adc34: d2800002 mov x2, #0x0 // #0
ffff8000113adc38: f9800011 prfm pstl1strm, [x0]
ffff8000113adc3c: 885ffc01 ldaxr w1, [x0]
ffff8000113adc40: 4a020024 eor w4, w1, w2
ffff8000113adc44: 35000064 cbnz w4, ffff8000113adc50 <dev_set_rx_mode+0x50>
ffff8000113adc48: 88047c03 stxr w4, w3, [x0]
ffff8000113adc4c: 35ffff84 cbnz w4, ffff8000113adc3c <dev_set_rx_mode+0x3c>
ffff8000113adc50: 35000181 cbnz w1, ffff8000113adc80 <dev_set_rx_mode+0x80>
__dev_set_rx_mode(dev);
ffff8000113adc54: aa1303e0 mov x0, x19
ffff8000113adc58: 94000000 bl ffff8000113adb60 <__dev_set_rx_mode>
ffff8000113adc58: R_AARCH64_CALL26 __dev_set_rx_mode
smp_store_release(&lock->locked, 0);
ffff8000113adc5c: 52800000 mov w0, #0x0 // #0
ffff8000113adc60: 9109e273 add x19, x19, #0x278
ffff8000113adc64: 089ffe60 stlrb w0, [x19]
__local_bh_enable_ip(_RET_IP_, SOFTIRQ_LOCK_OFFSET);
ffff8000113adc68: 52804001 mov w1, #0x200 // #512
ffff8000113adc6c: aa1403e0 mov x0, x20
ffff8000113adc70: 94000000 bl 0 <__local_bh_enable_ip>
ffff8000113adc70: R_AARCH64_CALL26 __local_bh_enable_ip
}
ffff8000113adc74: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113adc78: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113adc7c: d65f03c0 ret
queued_spin_lock_slowpath(lock, val);
ffff8000113adc80: 94000000 bl 0 <queued_spin_lock_slowpath>
ffff8000113adc80: R_AARCH64_CALL26 queued_spin_lock_slowpath
ffff8000113adc84: 17fffff4 b ffff8000113adc54 <dev_set_rx_mode+0x54>
ffff8000113adc88 <__dev_open>:
{
ffff8000113adc88: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113adc8c: 910003fd mov x29, sp
ffff8000113adc90: a90153f3 stp x19, x20, [sp,#16]
ffff8000113adc94: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113adc98: aa0003f3 mov x19, x0
ffff8000113adc9c: aa1e03e0 mov x0, x30
ffff8000113adca0: 90000014 adrp x20, 0 <__stack_chk_guard>
ffff8000113adca0: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113adca4: aa0103f5 mov x21, x1
ffff8000113adca8: 94000000 bl 0 <_mcount>
ffff8000113adca8: R_AARCH64_CALL26 _mcount
ffff8000113adcac: f9400280 ldr x0, [x20]
ffff8000113adcac: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
const struct net_device_ops *ops = dev->netdev_ops;
ffff8000113adcb0: f940fa76 ldr x22, [x19,#496]
{
ffff8000113adcb4: f90027a0 str x0, [x29,#72]
ASSERT_RTNL();
ffff8000113adcb8: 94000000 bl 0 <rtnl_is_locked>
ffff8000113adcb8: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113adcbc: 340008e0 cbz w0, ffff8000113addd8 <__dev_open+0x150>
ffff8000113adcc0: f9402260 ldr x0, [x19,#64]
if (!netif_device_present(dev))
ffff8000113adcc4: 36080800 tbz w0, #1, ffff8000113addc4 <__dev_open+0x13c>
netpoll_poll_disable(dev);
ffff8000113adcc8: aa1303e0 mov x0, x19
ffff8000113adccc: 94000000 bl 0 <netpoll_poll_disable>
ffff8000113adccc: R_AARCH64_CALL26 netpoll_poll_disable
return call_netdevice_notifiers_info(val, &info);
ffff8000113adcd0: d28001c0 mov x0, #0xe // #14
ffff8000113adcd4: 9100e3a1 add x1, x29, #0x38
struct netdev_notifier_info info = {
ffff8000113adcd8: f9001fb3 str x19, [x29,#56]
ffff8000113adcdc: f90023b5 str x21, [x29,#64]
return call_netdevice_notifiers_info(val, &info);
ffff8000113adce0: 97ffc906 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ret &= ~NOTIFY_STOP_MASK;
ffff8000113adce4: 12107800 and w0, w0, #0xffff7fff
return ret > NOTIFY_OK ? NOTIFY_OK - ret : 0;
ffff8000113adce8: 7100041f cmp w0, #0x1
ffff8000113adcec: 5400016d b.le ffff8000113add18 <__dev_open+0x90>
ffff8000113adcf0: 52800021 mov w1, #0x1 // #1
ffff8000113adcf4: 4b000020 sub w0, w1, w0
}
ffff8000113adcf8: f94027a2 ldr x2, [x29,#72]
ffff8000113adcfc: f9400281 ldr x1, [x20]
ffff8000113adcfc: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113add00: eb01005f cmp x2, x1
ffff8000113add04: 54000681 b.ne ffff8000113addd4 <__dev_open+0x14c>
ffff8000113add08: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113add0c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113add10: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113add14: d65f03c0 ret
ATOMIC64_OPS(or, orr, L)
ffff8000113add18: 91010262 add x2, x19, #0x40
ffff8000113add1c: f9800051 prfm pstl1strm, [x2]
ffff8000113add20: c85f7c40 ldxr x0, [x2]
ffff8000113add24: b2400000 orr x0, x0, #0x1
ffff8000113add28: c8017c40 stxr w1, x0, [x2]
ffff8000113add2c: 35ffffa1 cbnz w1, ffff8000113add20 <__dev_open+0x98>
if (ops->ndo_validate_addr)
ffff8000113add30: f9402ac1 ldr x1, [x22,#80]
ffff8000113add34: b4000201 cbz x1, ffff8000113add74 <__dev_open+0xec>
ret = ops->ndo_validate_addr(dev);
ffff8000113add38: aa1303e0 mov x0, x19
ffff8000113add3c: d63f0020 blr x1
ffff8000113add40: 2a0003f5 mov w21, w0
if (!ret && ops->ndo_open)
ffff8000113add44: 34000180 cbz w0, ffff8000113add74 <__dev_open+0xec>
netpoll_poll_enable(dev);
ffff8000113add48: aa1303e0 mov x0, x19
ffff8000113add4c: 94000000 bl 0 <netpoll_poll_enable>
ffff8000113add4c: R_AARCH64_CALL26 netpoll_poll_enable
ATOMIC64_OPS(andnot, bic, )
ffff8000113add50: d2800021 mov x1, #0x1 // #1
ffff8000113add54: 91010263 add x3, x19, #0x40
ffff8000113add58: f9800071 prfm pstl1strm, [x3]
ffff8000113add5c: c85f7c60 ldxr x0, [x3]
ffff8000113add60: 8a210000 bic x0, x0, x1
ffff8000113add64: c8027c60 stxr w2, x0, [x3]
ffff8000113add68: 35ffffa2 cbnz w2, ffff8000113add5c <__dev_open+0xd4>
ffff8000113add6c: 2a1503e0 mov w0, w21
ffff8000113add70: 17ffffe2 b ffff8000113adcf8 <__dev_open+0x70>
if (!ret && ops->ndo_open)
ffff8000113add74: f9400ac1 ldr x1, [x22,#16]
ret = ops->ndo_open(dev);
ffff8000113add78: aa1303e0 mov x0, x19
if (!ret && ops->ndo_open)
ffff8000113add7c: b4000281 cbz x1, ffff8000113addcc <__dev_open+0x144>
ret = ops->ndo_open(dev);
ffff8000113add80: d63f0020 blr x1
ffff8000113add84: 2a0003f5 mov w21, w0
netpoll_poll_enable(dev);
ffff8000113add88: aa1303e0 mov x0, x19
ffff8000113add8c: 94000000 bl 0 <netpoll_poll_enable>
ffff8000113add8c: R_AARCH64_CALL26 netpoll_poll_enable
if (ret)
ffff8000113add90: 35fffe15 cbnz w21, ffff8000113add50 <__dev_open+0xc8>
dev->flags |= IFF_UP;
ffff8000113add94: b9422a61 ldr w1, [x19,#552]
dev_set_rx_mode(dev);
ffff8000113add98: aa1303e0 mov x0, x19
dev->flags |= IFF_UP;
ffff8000113add9c: 32000021 orr w1, w1, #0x1
ffff8000113adda0: b9022a61 str w1, [x19,#552]
dev_set_rx_mode(dev);
ffff8000113adda4: 94000000 bl ffff8000113adc00 <dev_set_rx_mode>
ffff8000113adda4: R_AARCH64_CALL26 dev_set_rx_mode
dev_activate(dev);
ffff8000113adda8: aa1303e0 mov x0, x19
ffff8000113addac: 94000000 bl 0 <dev_activate>
ffff8000113addac: R_AARCH64_CALL26 dev_activate
add_device_randomness(dev->dev_addr, dev->addr_len);
ffff8000113addb0: f9418e60 ldr x0, [x19,#792]
ffff8000113addb4: 3949be61 ldrb w1, [x19,#623]
ffff8000113addb8: 94000000 bl 0 <add_device_randomness>
ffff8000113addb8: R_AARCH64_CALL26 add_device_randomness
ffff8000113addbc: 52800000 mov w0, #0x0 // #0
ffff8000113addc0: 17ffffce b ffff8000113adcf8 <__dev_open+0x70>
return -ENODEV;
ffff8000113addc4: 12800240 mov w0, #0xffffffed // #-19
ffff8000113addc8: 17ffffcc b ffff8000113adcf8 <__dev_open+0x70>
netpoll_poll_enable(dev);
ffff8000113addcc: 94000000 bl 0 <netpoll_poll_enable>
ffff8000113addcc: R_AARCH64_CALL26 netpoll_poll_enable
ffff8000113addd0: 17fffff1 b ffff8000113add94 <__dev_open+0x10c>
}
ffff8000113addd4: 94000000 bl 0 <__stack_chk_fail>
ffff8000113addd4: R_AARCH64_CALL26 __stack_chk_fail
ASSERT_RTNL();
ffff8000113addd8: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113addd8: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113adddc: 91000063 add x3, x3, #0x0
ffff8000113adddc: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113adde0: 39406460 ldrb w0, [x3,#25]
ffff8000113adde4: 35fff6e0 cbnz w0, ffff8000113adcc0 <__dev_open+0x38>
ffff8000113adde8: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113adde8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113addec: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113addec: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113addf0: 52800024 mov w4, #0x1 // #1
ffff8000113addf4: 91000000 add x0, x0, #0x0
ffff8000113addf4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113addf8: 91000021 add x1, x1, #0x0
ffff8000113addf8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113addfc: 5280b0c2 mov w2, #0x586 // #1414
ffff8000113ade00: 39006464 strb w4, [x3,#25]
ffff8000113ade04: 94000000 bl 0 <__warn_printk>
ffff8000113ade04: R_AARCH64_CALL26 __warn_printk
ffff8000113ade08: d4210000 brk #0x800
ffff8000113ade0c: 17ffffad b ffff8000113adcc0 <__dev_open+0x38>
ffff8000113ade10 <dev_open>:
{
ffff8000113ade10: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff8000113ade14: 910003fd mov x29, sp
ffff8000113ade18: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ade1c: f90013f5 str x21, [sp,#32]
ffff8000113ade20: aa0003f4 mov x20, x0
ffff8000113ade24: aa1e03e0 mov x0, x30
ffff8000113ade28: f9001fa1 str x1, [x29,#56]
ffff8000113ade2c: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff8000113ade2c: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ade30: 94000000 bl 0 <_mcount>
ffff8000113ade30: R_AARCH64_CALL26 _mcount
ffff8000113ade34: f9400260 ldr x0, [x19]
ffff8000113ade34: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
if (dev->flags & IFF_UP)
ffff8000113ade38: b9422a82 ldr w2, [x20,#552]
{
ffff8000113ade3c: f9002fa0 str x0, [x29,#88]
if (dev->flags & IFF_UP)
ffff8000113ade40: f9401fa1 ldr x1, [x29,#56]
return 0;
ffff8000113ade44: 52800000 mov w0, #0x0 // #0
if (dev->flags & IFF_UP)
ffff8000113ade48: 36000122 tbz w2, #0, ffff8000113ade6c <dev_open+0x5c>
}
ffff8000113ade4c: f9402fa2 ldr x2, [x29,#88]
ffff8000113ade50: f9400261 ldr x1, [x19]
ffff8000113ade50: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ade54: eb01005f cmp x2, x1
ffff8000113ade58: 540002a1 b.ne ffff8000113adeac <dev_open+0x9c>
ffff8000113ade5c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ade60: f94013f5 ldr x21, [sp,#32]
ffff8000113ade64: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113ade68: d65f03c0 ret
ret = __dev_open(dev, extack);
ffff8000113ade6c: aa1403e0 mov x0, x20
ffff8000113ade70: 97ffff86 bl ffff8000113adc88 <__dev_open>
ffff8000113ade74: 2a0003f5 mov w21, w0
if (ret < 0)
ffff8000113ade78: 37f80175 tbnz w21, #31, ffff8000113adea4 <dev_open+0x94>
rtmsg_ifinfo(RTM_NEWLINK, dev, IFF_UP|IFF_RUNNING, GFP_KERNEL);
ffff8000113ade7c: 52800200 mov w0, #0x10 // #16
ffff8000113ade80: aa1403e1 mov x1, x20
ffff8000113ade84: 52800822 mov w2, #0x41 // #65
ffff8000113ade88: 52819803 mov w3, #0xcc0 // #3264
ffff8000113ade8c: 94000000 bl 0 <rtmsg_ifinfo>
ffff8000113ade8c: R_AARCH64_CALL26 rtmsg_ifinfo
return call_netdevice_notifiers_info(val, &info);
ffff8000113ade90: d2800020 mov x0, #0x1 // #1
ffff8000113ade94: 910123a1 add x1, x29, #0x48
struct netdev_notifier_info info = {
ffff8000113ade98: f90027b4 str x20, [x29,#72]
ffff8000113ade9c: f9002bbf str xzr, [x29,#80]
return call_netdevice_notifiers_info(val, &info);
ffff8000113adea0: 97ffc896 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ret = __dev_open(dev, extack);
ffff8000113adea4: 2a1503e0 mov w0, w21
ffff8000113adea8: 17ffffe9 b ffff8000113ade4c <dev_open+0x3c>
}
ffff8000113adeac: 94000000 bl 0 <__stack_chk_fail>
ffff8000113adeac: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113adeb0 <dev_set_promiscuity>:
{
ffff8000113adeb0: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113adeb4: 910003fd mov x29, sp
ffff8000113adeb8: a90153f3 stp x19, x20, [sp,#16]
ffff8000113adebc: f90013f5 str x21, [sp,#32]
ffff8000113adec0: aa0003f3 mov x19, x0
ffff8000113adec4: aa1e03e0 mov x0, x30
ffff8000113adec8: f9001fa1 str x1, [x29,#56]
ffff8000113adecc: 94000000 bl 0 <_mcount>
ffff8000113adecc: R_AARCH64_CALL26 _mcount
err = __dev_set_promiscuity(dev, inc, true);
ffff8000113aded0: f9401fa1 ldr x1, [x29,#56]
ffff8000113aded4: aa1303e0 mov x0, x19
ffff8000113aded8: 52800022 mov w2, #0x1 // #1
unsigned int old_flags = dev->flags;
ffff8000113adedc: b9422a75 ldr w21, [x19,#552]
err = __dev_set_promiscuity(dev, inc, true);
ffff8000113adee0: 97fffea8 bl ffff8000113ad980 <__dev_set_promiscuity>
ffff8000113adee4: 2a0003f4 mov w20, w0
if (err < 0)
ffff8000113adee8: 37f800d4 tbnz w20, #31, ffff8000113adf00 <dev_set_promiscuity+0x50>
if (dev->flags != old_flags)
ffff8000113adeec: b9422a60 ldr w0, [x19,#552]
ffff8000113adef0: 6b15001f cmp w0, w21
ffff8000113adef4: 54000060 b.eq ffff8000113adf00 <dev_set_promiscuity+0x50>
dev_set_rx_mode(dev);
ffff8000113adef8: aa1303e0 mov x0, x19
ffff8000113adefc: 94000000 bl ffff8000113adc00 <dev_set_rx_mode>
ffff8000113adefc: R_AARCH64_CALL26 dev_set_rx_mode
}
ffff8000113adf00: 2a1403e0 mov w0, w20
ffff8000113adf04: f94013f5 ldr x21, [sp,#32]
ffff8000113adf08: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113adf0c: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113adf10: d65f03c0 ret
ffff8000113adf14 <__dev_set_allmulti>:
{
ffff8000113adf14: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113adf18: 910003fd mov x29, sp
ffff8000113adf1c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113adf20: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113adf24: f9001bf7 str x23, [sp,#48]
ffff8000113adf28: aa0003f3 mov x19, x0
ffff8000113adf2c: aa1e03e0 mov x0, x30
ffff8000113adf30: 2a0103f4 mov w20, w1
ffff8000113adf34: 53001c56 uxtb w22, w2
ffff8000113adf38: 94000000 bl 0 <_mcount>
ffff8000113adf38: R_AARCH64_CALL26 _mcount
unsigned int old_flags = dev->flags, old_gflags = dev->gflags;
ffff8000113adf3c: b9422a75 ldr w21, [x19,#552]
ffff8000113adf40: 79446277 ldrh w23, [x19,#560]
ASSERT_RTNL();
ffff8000113adf44: 94000000 bl 0 <rtnl_is_locked>
ffff8000113adf44: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113adf48: 34000520 cbz w0, ffff8000113adfec <__dev_set_allmulti+0xd8>
dev->flags |= IFF_ALLMULTI;
ffff8000113adf4c: b9422a64 ldr w4, [x19,#552]
dev->allmulti += inc;
ffff8000113adf50: b942d661 ldr w1, [x19,#724]
dev->flags |= IFF_ALLMULTI;
ffff8000113adf54: 32170080 orr w0, w4, #0x200
dev->allmulti += inc;
ffff8000113adf58: 0b010283 add w3, w20, w1
dev->flags |= IFF_ALLMULTI;
ffff8000113adf5c: b9022a60 str w0, [x19,#552]
dev->allmulti += inc;
ffff8000113adf60: b902d663 str w3, [x19,#724]
if (dev->allmulti == 0) {
ffff8000113adf64: 35000083 cbnz w3, ffff8000113adf74 <__dev_set_allmulti+0x60>
if (inc < 0)
ffff8000113adf68: 36f80354 tbz w20, #31, ffff8000113adfd0 <__dev_set_allmulti+0xbc>
dev->flags &= ~IFF_ALLMULTI;
ffff8000113adf6c: 12167880 and w0, w4, #0xfffffdff
ffff8000113adf70: b9022a60 str w0, [x19,#552]
if (dev->flags ^ old_flags) {
ffff8000113adf74: 6b0002bf cmp w21, w0
ffff8000113adf78: 54000140 b.eq ffff8000113adfa0 <__dev_set_allmulti+0x8c>
if (ops->ndo_change_rx_flags)
ffff8000113adf7c: f940fa60 ldr x0, [x19,#496]
ffff8000113adf80: f9401c03 ldr x3, [x0,#56]
ffff8000113adf84: b4000083 cbz x3, ffff8000113adf94 <__dev_set_allmulti+0x80>
ops->ndo_change_rx_flags(dev, flags);
ffff8000113adf88: aa1303e0 mov x0, x19
ffff8000113adf8c: 52804001 mov w1, #0x200 // #512
ffff8000113adf90: d63f0060 blr x3
dev_set_rx_mode(dev);
ffff8000113adf94: aa1303e0 mov x0, x19
ffff8000113adf98: 94000000 bl ffff8000113adc00 <dev_set_rx_mode>
ffff8000113adf98: R_AARCH64_CALL26 dev_set_rx_mode
if (notify)
ffff8000113adf9c: 350000f6 cbnz w22, ffff8000113adfb8 <__dev_set_allmulti+0xa4>
return 0;
ffff8000113adfa0: 52800000 mov w0, #0x0 // #0
}
ffff8000113adfa4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113adfa8: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113adfac: f9401bf7 ldr x23, [sp,#48]
ffff8000113adfb0: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113adfb4: d65f03c0 ret
__dev_notify_flags(dev, old_flags,
ffff8000113adfb8: 79446262 ldrh w2, [x19,#560]
ffff8000113adfbc: aa1303e0 mov x0, x19
ffff8000113adfc0: 2a1503e1 mov w1, w21
ffff8000113adfc4: 4a170042 eor w2, w2, w23
ffff8000113adfc8: 94000000 bl ffff8000113ad8a8 <__dev_notify_flags>
ffff8000113adfc8: R_AARCH64_CALL26 __dev_notify_flags
ffff8000113adfcc: 17fffff5 b ffff8000113adfa0 <__dev_set_allmulti+0x8c>
pr_warn("%s: allmulti touches roof, set allmulti failed. allmulti feature of device might be broken.\n",
ffff8000113adfd0: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113adfd0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x870
dev->allmulti -= inc;
ffff8000113adfd4: b902d661 str w1, [x19,#724]
pr_warn("%s: allmulti touches roof, set allmulti failed. allmulti feature of device might be broken.\n",
ffff8000113adfd8: 91000000 add x0, x0, #0x0
ffff8000113adfd8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x870
ffff8000113adfdc: aa1303e1 mov x1, x19
ffff8000113adfe0: 94000000 bl 0 <printk>
ffff8000113adfe0: R_AARCH64_CALL26 printk
return -EOVERFLOW;
ffff8000113adfe4: 12800940 mov w0, #0xffffffb5 // #-75
ffff8000113adfe8: 17ffffef b ffff8000113adfa4 <__dev_set_allmulti+0x90>
ASSERT_RTNL();
ffff8000113adfec: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113adfec: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113adff0: 91000063 add x3, x3, #0x0
ffff8000113adff0: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113adff4: 39406860 ldrb w0, [x3,#26]
ffff8000113adff8: 35fffaa0 cbnz w0, ffff8000113adf4c <__dev_set_allmulti+0x38>
ffff8000113adffc: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113adffc: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113ae000: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113ae000: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113ae004: 52800024 mov w4, #0x1 // #1
ffff8000113ae008: 91000000 add x0, x0, #0x0
ffff8000113ae008: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113ae00c: 91000021 add x1, x1, #0x0
ffff8000113ae00c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113ae010: 5283e662 mov w2, #0x1f33 // #7987
ffff8000113ae014: 39006864 strb w4, [x3,#26]
ffff8000113ae018: 94000000 bl 0 <__warn_printk>
ffff8000113ae018: R_AARCH64_CALL26 __warn_printk
ffff8000113ae01c: d4210000 brk #0x800
ffff8000113ae020: 17ffffcb b ffff8000113adf4c <__dev_set_allmulti+0x38>
ffff8000113ae024 <dev_set_allmulti>:
{
ffff8000113ae024: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113ae028: 910003fd mov x29, sp
ffff8000113ae02c: f9000bf3 str x19, [sp,#16]
ffff8000113ae030: aa0003f3 mov x19, x0
ffff8000113ae034: aa1e03e0 mov x0, x30
ffff8000113ae038: f90017a1 str x1, [x29,#40]
ffff8000113ae03c: 94000000 bl 0 <_mcount>
ffff8000113ae03c: R_AARCH64_CALL26 _mcount
return __dev_set_allmulti(dev, inc, true);
ffff8000113ae040: f94017a1 ldr x1, [x29,#40]
ffff8000113ae044: aa1303e0 mov x0, x19
ffff8000113ae048: 52800022 mov w2, #0x1 // #1
ffff8000113ae04c: 97ffffb2 bl ffff8000113adf14 <__dev_set_allmulti>
}
ffff8000113ae050: f9400bf3 ldr x19, [sp,#16]
ffff8000113ae054: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113ae058: d65f03c0 ret
ffff8000113ae05c <__dev_change_flags>:
{
ffff8000113ae05c: a9b97bfd stp x29, x30, [sp,#-112]!
ffff8000113ae060: 910003fd mov x29, sp
ffff8000113ae064: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ae068: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113ae06c: a90363f7 stp x23, x24, [sp,#48]
ffff8000113ae070: f90023f9 str x25, [sp,#64]
ffff8000113ae074: aa0003f3 mov x19, x0
ffff8000113ae078: aa1e03e0 mov x0, x30
ffff8000113ae07c: 90000015 adrp x21, 0 <__stack_chk_guard>
ffff8000113ae07c: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ae080: 2a0103f4 mov w20, w1
ffff8000113ae084: aa0203f9 mov x25, x2
ffff8000113ae088: 94000000 bl 0 <_mcount>
ffff8000113ae088: R_AARCH64_CALL26 _mcount
ffff8000113ae08c: f94002a0 ldr x0, [x21]
ffff8000113ae08c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
unsigned int old_flags = dev->flags;
ffff8000113ae090: b9422a78 ldr w24, [x19,#552]
{
ffff8000113ae094: f90037a0 str x0, [x29,#104]
ASSERT_RTNL();
ffff8000113ae098: 94000000 bl 0 <rtnl_is_locked>
ffff8000113ae098: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113ae09c: 34000be0 cbz w0, ffff8000113ae218 <__dev_change_flags+0x1bc>
(dev->flags & (IFF_UP | IFF_VOLATILE | IFF_PROMISC |
ffff8000113ae0a0: b9422a62 ldr w2, [x19,#552]
ffff8000113ae0a4: 5281eb60 mov w0, #0xf5b // #3931
ffff8000113ae0a8: 72a000e0 movk w0, #0x7, lsl #16
dev->flags = (flags & (IFF_DEBUG | IFF_NOTRAILERS | IFF_NOARP |
ffff8000113ae0ac: 529e1481 mov w1, #0xf0a4 // #61604
ffff8000113ae0b0: 0a010281 and w1, w20, w1
(dev->flags & (IFF_UP | IFF_VOLATILE | IFF_PROMISC |
ffff8000113ae0b4: 0a000040 and w0, w2, w0
IFF_AUTOMEDIA)) |
ffff8000113ae0b8: 2a000020 orr w0, w1, w0
dev->flags = (flags & (IFF_DEBUG | IFF_NOTRAILERS | IFF_NOARP |
ffff8000113ae0bc: b9022a60 str w0, [x19,#552]
if ((old_flags ^ flags) & IFF_MULTICAST)
ffff8000113ae0c0: 4a180296 eor w22, w20, w24
ffff8000113ae0c4: 366000f6 tbz w22, #12, ffff8000113ae0e0 <__dev_change_flags+0x84>
if (ops->ndo_change_rx_flags)
ffff8000113ae0c8: f940fa60 ldr x0, [x19,#496]
ffff8000113ae0cc: f9401c02 ldr x2, [x0,#56]
ffff8000113ae0d0: b4000082 cbz x2, ffff8000113ae0e0 <__dev_change_flags+0x84>
ops->ndo_change_rx_flags(dev, flags);
ffff8000113ae0d4: aa1303e0 mov x0, x19
ffff8000113ae0d8: 52820001 mov w1, #0x1000 // #4096
ffff8000113ae0dc: d63f0040 blr x2
dev_set_rx_mode(dev);
ffff8000113ae0e0: aa1303e0 mov x0, x19
ffff8000113ae0e4: 94000000 bl ffff8000113adc00 <dev_set_rx_mode>
ffff8000113ae0e4: R_AARCH64_CALL26 dev_set_rx_mode
ret = 0;
ffff8000113ae0e8: 52800017 mov w23, #0x0 // #0
if ((old_flags ^ flags) & IFF_UP) {
ffff8000113ae0ec: 36000376 tbz w22, #0, ffff8000113ae158 <__dev_change_flags+0xfc>
if (old_flags & IFF_UP)
ffff8000113ae0f0: 36000898 tbz w24, #0, ffff8000113ae200 <__dev_change_flags+0x1a4>
LIST_HEAD(single);
ffff8000113ae0f4: 910163b6 add x22, x29, #0x58
list_add(&dev->close_list, &single);
ffff8000113ae0f8: 9101e277 add x23, x19, #0x78
if (!__list_add_valid(new, prev, next))
ffff8000113ae0fc: aa1703e0 mov x0, x23
ffff8000113ae100: aa1603e1 mov x1, x22
ffff8000113ae104: aa1603e2 mov x2, x22
LIST_HEAD(single);
ffff8000113ae108: f9002fb6 str x22, [x29,#88]
ffff8000113ae10c: f90033b6 str x22, [x29,#96]
ffff8000113ae110: 94000000 bl 0 <__list_add_valid>
ffff8000113ae110: R_AARCH64_CALL26 __list_add_valid
ffff8000113ae114: 53001c00 uxtb w0, w0
ffff8000113ae118: 340000a0 cbz w0, ffff8000113ae12c <__dev_change_flags+0xd0>
new->next = next;
ffff8000113ae11c: f9003e76 str x22, [x19,#120]
next->prev = new;
ffff8000113ae120: f90033b7 str x23, [x29,#96]
new->prev = prev;
ffff8000113ae124: f9004276 str x22, [x19,#128]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113ae128: f9002fb7 str x23, [x29,#88]
__dev_close_many(&single);
ffff8000113ae12c: aa1603e0 mov x0, x22
ffff8000113ae130: 97ffc8d4 bl ffff8000113a0480 <__dev_close_many>
if (!__list_del_entry_valid(entry))
ffff8000113ae134: aa1603e0 mov x0, x22
ffff8000113ae138: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113ae138: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113ae13c: 53001c00 uxtb w0, w0
ffff8000113ae140: 340000a0 cbz w0, ffff8000113ae154 <__dev_change_flags+0xf8>
__list_del(entry->prev, entry->next);
ffff8000113ae144: f94033a0 ldr x0, [x29,#96]
ffff8000113ae148: f9402fa1 ldr x1, [x29,#88]
next->prev = prev;
ffff8000113ae14c: f9000420 str x0, [x1,#8]
ffff8000113ae150: f9000001 str x1, [x0]
ret = 0;
ffff8000113ae154: 52800017 mov w23, #0x0 // #0
if ((flags ^ dev->gflags) & IFF_PROMISC) {
ffff8000113ae158: 79446261 ldrh w1, [x19,#560]
ffff8000113ae15c: 4a010282 eor w2, w20, w1
ffff8000113ae160: 36400262 tbz w2, #8, ffff8000113ae1ac <__dev_change_flags+0x150>
int inc = (flags & IFF_PROMISC) ? 1 : -1;
ffff8000113ae164: 12180280 and w0, w20, #0x100
dev->gflags ^= IFF_PROMISC;
ffff8000113ae168: 52180021 eor w1, w1, #0x100
int inc = (flags & IFF_PROMISC) ? 1 : -1;
ffff8000113ae16c: 6b1f001f cmp w0, wzr
dev->gflags ^= IFF_PROMISC;
ffff8000113ae170: 79046261 strh w1, [x19,#560]
if (__dev_set_promiscuity(dev, inc, false) >= 0)
ffff8000113ae174: 12800001 mov w1, #0xffffffff // #-1
ffff8000113ae178: 1a9f0421 csinc w1, w1, wzr, eq
ffff8000113ae17c: aa1303e0 mov x0, x19
ffff8000113ae180: 52800002 mov w2, #0x0 // #0
unsigned int old_flags = dev->flags;
ffff8000113ae184: b9422a76 ldr w22, [x19,#552]
if (__dev_set_promiscuity(dev, inc, false) >= 0)
ffff8000113ae188: 97fffdfe bl ffff8000113ad980 <__dev_set_promiscuity>
ffff8000113ae18c: 37f800c0 tbnz w0, #31, ffff8000113ae1a4 <__dev_change_flags+0x148>
if (dev->flags != old_flags)
ffff8000113ae190: b9422a60 ldr w0, [x19,#552]
ffff8000113ae194: 6b16001f cmp w0, w22
ffff8000113ae198: 54000060 b.eq ffff8000113ae1a4 <__dev_change_flags+0x148>
dev_set_rx_mode(dev);
ffff8000113ae19c: aa1303e0 mov x0, x19
ffff8000113ae1a0: 94000000 bl ffff8000113adc00 <dev_set_rx_mode>
ffff8000113ae1a0: R_AARCH64_CALL26 dev_set_rx_mode
ffff8000113ae1a4: 79446261 ldrh w1, [x19,#560]
ffff8000113ae1a8: 4a010282 eor w2, w20, w1
if ((flags ^ dev->gflags) & IFF_ALLMULTI) {
ffff8000113ae1ac: 36480142 tbz w2, #9, ffff8000113ae1d4 <__dev_change_flags+0x178>
dev->gflags ^= IFF_ALLMULTI;
ffff8000113ae1b0: 52170021 eor w1, w1, #0x200
int inc = (flags & IFF_ALLMULTI) ? 1 : -1;
ffff8000113ae1b4: 12170294 and w20, w20, #0x200
ffff8000113ae1b8: 6b1f029f cmp w20, wzr
dev->gflags ^= IFF_ALLMULTI;
ffff8000113ae1bc: 79046261 strh w1, [x19,#560]
__dev_set_allmulti(dev, inc, false);
ffff8000113ae1c0: 12800001 mov w1, #0xffffffff // #-1
ffff8000113ae1c4: aa1303e0 mov x0, x19
ffff8000113ae1c8: 1a9f0421 csinc w1, w1, wzr, eq
ffff8000113ae1cc: 52800002 mov w2, #0x0 // #0
ffff8000113ae1d0: 97ffff51 bl ffff8000113adf14 <__dev_set_allmulti>
}
ffff8000113ae1d4: f94037a2 ldr x2, [x29,#104]
ffff8000113ae1d8: f94002a1 ldr x1, [x21]
ffff8000113ae1d8: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ae1dc: 2a1703e0 mov w0, w23
ffff8000113ae1e0: eb01005f cmp x2, x1
ffff8000113ae1e4: 54000181 b.ne ffff8000113ae214 <__dev_change_flags+0x1b8>
ffff8000113ae1e8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ae1ec: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113ae1f0: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113ae1f4: f94023f9 ldr x25, [sp,#64]
ffff8000113ae1f8: a8c77bfd ldp x29, x30, [sp],#112
ffff8000113ae1fc: d65f03c0 ret
ret = __dev_open(dev, extack);
ffff8000113ae200: aa1303e0 mov x0, x19
ffff8000113ae204: aa1903e1 mov x1, x25
ffff8000113ae208: 97fffea0 bl ffff8000113adc88 <__dev_open>
ffff8000113ae20c: 2a0003f7 mov w23, w0
ffff8000113ae210: 17ffffd2 b ffff8000113ae158 <__dev_change_flags+0xfc>
}
ffff8000113ae214: 94000000 bl 0 <__stack_chk_fail>
ffff8000113ae214: R_AARCH64_CALL26 __stack_chk_fail
ASSERT_RTNL();
ffff8000113ae218: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113ae218: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113ae21c: 91000063 add x3, x3, #0x0
ffff8000113ae21c: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113ae220: 39406c60 ldrb w0, [x3,#27]
ffff8000113ae224: 35fff3e0 cbnz w0, ffff8000113ae0a0 <__dev_change_flags+0x44>
ffff8000113ae228: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ae228: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113ae22c: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113ae22c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113ae230: 52800024 mov w4, #0x1 // #1
ffff8000113ae234: 91000000 add x0, x0, #0x0
ffff8000113ae234: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113ae238: 91000021 add x1, x1, #0x0
ffff8000113ae238: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113ae23c: 5283f602 mov w2, #0x1fb0 // #8112
ffff8000113ae240: 39006c64 strb w4, [x3,#27]
ffff8000113ae244: 94000000 bl 0 <__warn_printk>
ffff8000113ae244: R_AARCH64_CALL26 __warn_printk
ffff8000113ae248: d4210000 brk #0x800
ffff8000113ae24c: 17ffff95 b ffff8000113ae0a0 <__dev_change_flags+0x44>
ffff8000113ae250 <dev_change_flags>:
{
ffff8000113ae250: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113ae254: 910003fd mov x29, sp
ffff8000113ae258: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ae25c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113ae260: aa0003f3 mov x19, x0
ffff8000113ae264: aa1e03e0 mov x0, x30
ffff8000113ae268: f9001fa1 str x1, [x29,#56]
ffff8000113ae26c: f9001ba2 str x2, [x29,#48]
ffff8000113ae270: 94000000 bl 0 <_mcount>
ffff8000113ae270: R_AARCH64_CALL26 _mcount
ret = __dev_change_flags(dev, flags, extack);
ffff8000113ae274: f9401fa1 ldr x1, [x29,#56]
ffff8000113ae278: f9401ba2 ldr x2, [x29,#48]
ffff8000113ae27c: aa1303e0 mov x0, x19
unsigned int changes, old_flags = dev->flags, old_gflags = dev->gflags;
ffff8000113ae280: b9422a75 ldr w21, [x19,#552]
ffff8000113ae284: 79446276 ldrh w22, [x19,#560]
ret = __dev_change_flags(dev, flags, extack);
ffff8000113ae288: 94000000 bl ffff8000113ae05c <__dev_change_flags>
ffff8000113ae288: R_AARCH64_CALL26 __dev_change_flags
ffff8000113ae28c: 2a0003f4 mov w20, w0
if (ret < 0)
ffff8000113ae290: 37f80134 tbnz w20, #31, ffff8000113ae2b4 <dev_change_flags+0x64>
changes = (old_flags ^ dev->flags) | (old_gflags ^ dev->gflags);
ffff8000113ae294: 79446260 ldrh w0, [x19,#560]
ffff8000113ae298: b9422a62 ldr w2, [x19,#552]
ffff8000113ae29c: 4a160016 eor w22, w0, w22
ffff8000113ae2a0: 4a0202a2 eor w2, w21, w2
__dev_notify_flags(dev, old_flags, changes);
ffff8000113ae2a4: aa1303e0 mov x0, x19
ffff8000113ae2a8: 2a1503e1 mov w1, w21
ffff8000113ae2ac: 2a0202c2 orr w2, w22, w2
ffff8000113ae2b0: 94000000 bl ffff8000113ad8a8 <__dev_notify_flags>
ffff8000113ae2b0: R_AARCH64_CALL26 __dev_notify_flags
}
ffff8000113ae2b4: 2a1403e0 mov w0, w20
ffff8000113ae2b8: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113ae2bc: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ae2c0: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113ae2c4: d65f03c0 ret
ffff8000113ae2c8 <dev_validate_mtu>:
{
ffff8000113ae2c8: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113ae2cc: 910003fd mov x29, sp
ffff8000113ae2d0: f9000bf3 str x19, [sp,#16]
ffff8000113ae2d4: aa0003f3 mov x19, x0
ffff8000113ae2d8: aa1e03e0 mov x0, x30
ffff8000113ae2dc: f90017a1 str x1, [x29,#40]
ffff8000113ae2e0: f90013a2 str x2, [x29,#32]
ffff8000113ae2e4: 94000000 bl 0 <_mcount>
ffff8000113ae2e4: R_AARCH64_CALL26 _mcount
if (new_mtu < 0 || new_mtu < dev->min_mtu) {
ffff8000113ae2e8: f94017a1 ldr x1, [x29,#40]
ffff8000113ae2ec: f94013a2 ldr x2, [x29,#32]
ffff8000113ae2f0: 37f80081 tbnz w1, #31, ffff8000113ae300 <dev_validate_mtu+0x38>
ffff8000113ae2f4: b9423e60 ldr w0, [x19,#572]
ffff8000113ae2f8: 6b00003f cmp w1, w0
ffff8000113ae2fc: 54000142 b.cs ffff8000113ae324 <dev_validate_mtu+0x5c>
NL_SET_ERR_MSG(extack, "mtu less than device minimum");
ffff8000113ae300: b40002e2 cbz x2, ffff8000113ae35c <dev_validate_mtu+0x94>
ffff8000113ae304: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ae304: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113ae308: 91000000 add x0, x0, #0x0
ffff8000113ae308: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113ae30c: 91024000 add x0, x0, #0x90
ffff8000113ae310: f9000040 str x0, [x2]
return -EINVAL;
ffff8000113ae314: 128002a0 mov w0, #0xffffffea // #-22
}
ffff8000113ae318: f9400bf3 ldr x19, [sp,#16]
ffff8000113ae31c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113ae320: d65f03c0 ret
if (dev->max_mtu > 0 && new_mtu > dev->max_mtu) {
ffff8000113ae324: b9424263 ldr w3, [x19,#576]
return 0;
ffff8000113ae328: 52800000 mov w0, #0x0 // #0
if (dev->max_mtu > 0 && new_mtu > dev->max_mtu) {
ffff8000113ae32c: 34ffff63 cbz w3, ffff8000113ae318 <dev_validate_mtu+0x50>
ffff8000113ae330: 6b03003f cmp w1, w3
ffff8000113ae334: 54ffff29 b.ls ffff8000113ae318 <dev_validate_mtu+0x50>
NL_SET_ERR_MSG(extack, "mtu greater than device maximum");
ffff8000113ae338: b4000122 cbz x2, ffff8000113ae35c <dev_validate_mtu+0x94>
ffff8000113ae33c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ae33c: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113ae340: 91000000 add x0, x0, #0x0
ffff8000113ae340: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113ae344: 9102c000 add x0, x0, #0xb0
ffff8000113ae348: f9000040 str x0, [x2]
}
ffff8000113ae34c: f9400bf3 ldr x19, [sp,#16]
return -EINVAL;
ffff8000113ae350: 128002a0 mov w0, #0xffffffea // #-22
}
ffff8000113ae354: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113ae358: d65f03c0 ret
ffff8000113ae35c: f9400bf3 ldr x19, [sp,#16]
return -EINVAL;
ffff8000113ae360: 128002a0 mov w0, #0xffffffea // #-22
}
ffff8000113ae364: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113ae368: d65f03c0 ret
ffff8000113ae36c <dev_set_mtu_ext>:
{
ffff8000113ae36c: a9b97bfd stp x29, x30, [sp,#-112]!
ffff8000113ae370: 910003fd mov x29, sp
ffff8000113ae374: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ae378: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113ae37c: f9001bf7 str x23, [sp,#48]
ffff8000113ae380: aa0003f3 mov x19, x0
ffff8000113ae384: aa1e03e0 mov x0, x30
ffff8000113ae388: 2a0103f4 mov w20, w1
ffff8000113ae38c: f90027a2 str x2, [x29,#72]
ffff8000113ae390: 90000015 adrp x21, 0 <__stack_chk_guard>
ffff8000113ae390: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ae394: 94000000 bl 0 <_mcount>
ffff8000113ae394: R_AARCH64_CALL26 _mcount
ffff8000113ae398: f94002a1 ldr x1, [x21]
ffff8000113ae398: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
if (new_mtu == dev->mtu)
ffff8000113ae39c: b9423a60 ldr w0, [x19,#568]
{
ffff8000113ae3a0: f90037a1 str x1, [x29,#104]
if (new_mtu == dev->mtu)
ffff8000113ae3a4: 6b00029f cmp w20, w0
ffff8000113ae3a8: f94027a2 ldr x2, [x29,#72]
ffff8000113ae3ac: 54000560 b.eq ffff8000113ae458 <dev_set_mtu_ext+0xec>
if (new_mtu < 0 || new_mtu < dev->min_mtu) {
ffff8000113ae3b0: 37f80094 tbnz w20, #31, ffff8000113ae3c0 <dev_set_mtu_ext+0x54>
ffff8000113ae3b4: b9423e60 ldr w0, [x19,#572]
ffff8000113ae3b8: 6b00029f cmp w20, w0
ffff8000113ae3bc: 54000202 b.cs ffff8000113ae3fc <dev_set_mtu_ext+0x90>
NL_SET_ERR_MSG(extack, "mtu less than device minimum");
ffff8000113ae3c0: b40000a2 cbz x2, ffff8000113ae3d4 <dev_set_mtu_ext+0x68>
ffff8000113ae3c4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ae3c4: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113ae3c8: 91000000 add x0, x0, #0x0
ffff8000113ae3c8: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113ae3cc: 91024000 add x0, x0, #0x90
ffff8000113ae3d0: f9000040 str x0, [x2]
return 0;
ffff8000113ae3d4: 128002a0 mov w0, #0xffffffea // #-22
}
ffff8000113ae3d8: f94037a2 ldr x2, [x29,#104]
ffff8000113ae3dc: f94002a1 ldr x1, [x21]
ffff8000113ae3dc: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ae3e0: eb01005f cmp x2, x1
ffff8000113ae3e4: 54000901 b.ne ffff8000113ae504 <dev_set_mtu_ext+0x198>
ffff8000113ae3e8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ae3ec: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113ae3f0: f9401bf7 ldr x23, [sp,#48]
ffff8000113ae3f4: a8c77bfd ldp x29, x30, [sp],#112
ffff8000113ae3f8: d65f03c0 ret
if (dev->max_mtu > 0 && new_mtu > dev->max_mtu) {
ffff8000113ae3fc: b9424260 ldr w0, [x19,#576]
ffff8000113ae400: 34000120 cbz w0, ffff8000113ae424 <dev_set_mtu_ext+0xb8>
ffff8000113ae404: 6b00029f cmp w20, w0
ffff8000113ae408: 540000e9 b.ls ffff8000113ae424 <dev_set_mtu_ext+0xb8>
NL_SET_ERR_MSG(extack, "mtu greater than device maximum");
ffff8000113ae40c: b4fffe42 cbz x2, ffff8000113ae3d4 <dev_set_mtu_ext+0x68>
ffff8000113ae410: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ae410: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113ae414: 91000000 add x0, x0, #0x0
ffff8000113ae414: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113ae418: 9102c000 add x0, x0, #0xb0
ffff8000113ae41c: f9000040 str x0, [x2]
ffff8000113ae420: 17ffffed b ffff8000113ae3d4 <dev_set_mtu_ext+0x68>
ffff8000113ae424: f9402260 ldr x0, [x19,#64]
if (!netif_device_present(dev))
ffff8000113ae428: 36080660 tbz w0, #1, ffff8000113ae4f4 <dev_set_mtu_ext+0x188>
return call_netdevice_notifiers_info(val, &info);
ffff8000113ae42c: d28002e0 mov x0, #0x17 // #23
ffff8000113ae430: 910143a1 add x1, x29, #0x50
struct netdev_notifier_info info = {
ffff8000113ae434: f9002bb3 str x19, [x29,#80]
ffff8000113ae438: f9002fbf str xzr, [x29,#88]
return call_netdevice_notifiers_info(val, &info);
ffff8000113ae43c: 97ffc72f bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ret &= ~NOTIFY_STOP_MASK;
ffff8000113ae440: 12107800 and w0, w0, #0xffff7fff
return ret > NOTIFY_OK ? NOTIFY_OK - ret : 0;
ffff8000113ae444: 7100041f cmp w0, #0x1
ffff8000113ae448: 540000cd b.le ffff8000113ae460 <dev_set_mtu_ext+0xf4>
ffff8000113ae44c: 52800021 mov w1, #0x1 // #1
ffff8000113ae450: 4b000020 sub w0, w1, w0
ffff8000113ae454: 17ffffe1 b ffff8000113ae3d8 <dev_set_mtu_ext+0x6c>
return 0;
ffff8000113ae458: 52800000 mov w0, #0x0 // #0
ffff8000113ae45c: 17ffffdf b ffff8000113ae3d8 <dev_set_mtu_ext+0x6c>
if (ops->ndo_change_mtu)
ffff8000113ae460: f940fa60 ldr x0, [x19,#496]
orig_mtu = dev->mtu;
ffff8000113ae464: b9423a76 ldr w22, [x19,#568]
if (ops->ndo_change_mtu)
ffff8000113ae468: f9403402 ldr x2, [x0,#104]
ffff8000113ae46c: b40000c2 cbz x2, ffff8000113ae484 <dev_set_mtu_ext+0x118>
return ops->ndo_change_mtu(dev, new_mtu);
ffff8000113ae470: aa1303e0 mov x0, x19
ffff8000113ae474: 2a1403e1 mov w1, w20
ffff8000113ae478: d63f0040 blr x2
if (!err) {
ffff8000113ae47c: 35fffae0 cbnz w0, ffff8000113ae3d8 <dev_set_mtu_ext+0x6c>
ffff8000113ae480: 14000002 b ffff8000113ae488 <dev_set_mtu_ext+0x11c>
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
ffff8000113ae484: b9023a74 str w20, [x19,#568]
struct netdev_notifier_info_ext info = {
ffff8000113ae488: a9057fbf stp xzr, xzr, [x29,#80]
ffff8000113ae48c: f90033bf str xzr, [x29,#96]
return call_netdevice_notifiers_info(val, &info.info);
ffff8000113ae490: d28000e0 mov x0, #0x7 // #7
ffff8000113ae494: 910143a1 add x1, x29, #0x50
struct netdev_notifier_info_ext info = {
ffff8000113ae498: f9002bb3 str x19, [x29,#80]
ffff8000113ae49c: b90063b6 str w22, [x29,#96]
return call_netdevice_notifiers_info(val, &info.info);
ffff8000113ae4a0: 97ffc716 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ret &= ~NOTIFY_STOP_MASK;
ffff8000113ae4a4: 12107817 and w23, w0, #0xffff7fff
return ret > NOTIFY_OK ? NOTIFY_OK - ret : 0;
ffff8000113ae4a8: 710006ff cmp w23, #0x1
ffff8000113ae4ac: 54fffd6d b.le ffff8000113ae458 <dev_set_mtu_ext+0xec>
if (ops->ndo_change_mtu)
ffff8000113ae4b0: f940fa60 ldr x0, [x19,#496]
ffff8000113ae4b4: f9403402 ldr x2, [x0,#104]
ffff8000113ae4b8: b4000222 cbz x2, ffff8000113ae4fc <dev_set_mtu_ext+0x190>
return ops->ndo_change_mtu(dev, new_mtu);
ffff8000113ae4bc: aa1303e0 mov x0, x19
ffff8000113ae4c0: 2a1603e1 mov w1, w22
ffff8000113ae4c4: d63f0040 blr x2
ffff8000113ae4c8: 52800020 mov w0, #0x1 // #1
ffff8000113ae4cc: 4b170017 sub w23, w0, w23
struct netdev_notifier_info_ext info = {
ffff8000113ae4d0: a9057fbf stp xzr, xzr, [x29,#80]
ffff8000113ae4d4: f90033bf str xzr, [x29,#96]
return call_netdevice_notifiers_info(val, &info.info);
ffff8000113ae4d8: d28000e0 mov x0, #0x7 // #7
ffff8000113ae4dc: 910143a1 add x1, x29, #0x50
struct netdev_notifier_info_ext info = {
ffff8000113ae4e0: f9002bb3 str x19, [x29,#80]
ffff8000113ae4e4: b90063b4 str w20, [x29,#96]
return call_netdevice_notifiers_info(val, &info.info);
ffff8000113ae4e8: 97ffc704 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ffff8000113ae4ec: 2a1703e0 mov w0, w23
ffff8000113ae4f0: 17ffffba b ffff8000113ae3d8 <dev_set_mtu_ext+0x6c>
return -ENODEV;
ffff8000113ae4f4: 12800240 mov w0, #0xffffffed // #-19
ffff8000113ae4f8: 17ffffb8 b ffff8000113ae3d8 <dev_set_mtu_ext+0x6c>
ffff8000113ae4fc: b9023a76 str w22, [x19,#568]
ffff8000113ae500: 17fffff2 b ffff8000113ae4c8 <dev_set_mtu_ext+0x15c>
}
ffff8000113ae504: 94000000 bl 0 <__stack_chk_fail>
ffff8000113ae504: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113ae508 <dev_set_mtu>:
{
ffff8000113ae508: a9b97bfd stp x29, x30, [sp,#-112]!
ffff8000113ae50c: 910003fd mov x29, sp
ffff8000113ae510: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ae514: f90013f5 str x21, [sp,#32]
ffff8000113ae518: aa0003f5 mov x21, x0
ffff8000113ae51c: aa1e03e0 mov x0, x30
ffff8000113ae520: f9001fa1 str x1, [x29,#56]
ffff8000113ae524: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff8000113ae524: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ae528: 94000000 bl 0 <_mcount>
ffff8000113ae528: R_AARCH64_CALL26 _mcount
ffff8000113ae52c: f9400263 ldr x3, [x19]
ffff8000113ae52c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
err = dev_set_mtu_ext(dev, new_mtu, &extack);
ffff8000113ae530: f9401fa1 ldr x1, [x29,#56]
ffff8000113ae534: aa1503e0 mov x0, x21
ffff8000113ae538: 910103a2 add x2, x29, #0x40
{
ffff8000113ae53c: f90037a3 str x3, [x29,#104]
return __builtin_memset(p, c, size);
ffff8000113ae540: a9047fbf stp xzr, xzr, [x29,#64]
ffff8000113ae544: a9057fbf stp xzr, xzr, [x29,#80]
ffff8000113ae548: f90033bf str xzr, [x29,#96]
err = dev_set_mtu_ext(dev, new_mtu, &extack);
ffff8000113ae54c: 94000000 bl ffff8000113ae36c <dev_set_mtu_ext>
ffff8000113ae54c: R_AARCH64_CALL26 dev_set_mtu_ext
ffff8000113ae550: 2a0003f4 mov w20, w0
if (err && extack._msg)
ffff8000113ae554: 340000a0 cbz w0, ffff8000113ae568 <dev_set_mtu+0x60>
ffff8000113ae558: f94023a0 ldr x0, [x29,#64]
ffff8000113ae55c: b4000060 cbz x0, ffff8000113ae568 <dev_set_mtu+0x60>
net_err_ratelimited("%s: %s\n", dev->name, extack._msg);
ffff8000113ae560: 94000000 bl 0 <net_ratelimit>
ffff8000113ae560: R_AARCH64_CALL26 net_ratelimit
ffff8000113ae564: 35000140 cbnz w0, ffff8000113ae58c <dev_set_mtu+0x84>
}
ffff8000113ae568: f94037a2 ldr x2, [x29,#104]
ffff8000113ae56c: f9400261 ldr x1, [x19]
ffff8000113ae56c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ae570: 2a1403e0 mov w0, w20
ffff8000113ae574: eb01005f cmp x2, x1
ffff8000113ae578: 54000161 b.ne ffff8000113ae5a4 <dev_set_mtu+0x9c>
ffff8000113ae57c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ae580: f94013f5 ldr x21, [sp,#32]
ffff8000113ae584: a8c77bfd ldp x29, x30, [sp],#112
ffff8000113ae588: d65f03c0 ret
net_err_ratelimited("%s: %s\n", dev->name, extack._msg);
ffff8000113ae58c: f94023a2 ldr x2, [x29,#64]
ffff8000113ae590: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ae590: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x8d0
ffff8000113ae594: aa1503e1 mov x1, x21
ffff8000113ae598: 91000000 add x0, x0, #0x0
ffff8000113ae598: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x8d0
ffff8000113ae59c: 94000000 bl 0 <printk>
ffff8000113ae59c: R_AARCH64_CALL26 printk
ffff8000113ae5a0: 17fffff2 b ffff8000113ae568 <dev_set_mtu+0x60>
}
ffff8000113ae5a4: 94000000 bl 0 <__stack_chk_fail>
ffff8000113ae5a4: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113ae5a8 <dev_change_tx_queue_len>:
{
ffff8000113ae5a8: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff8000113ae5ac: 910003fd mov x29, sp
ffff8000113ae5b0: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ae5b4: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113ae5b8: aa0003f3 mov x19, x0
ffff8000113ae5bc: aa1e03e0 mov x0, x30
ffff8000113ae5c0: f9001fa1 str x1, [x29,#56]
ffff8000113ae5c4: 94000000 bl 0 <_mcount>
ffff8000113ae5c4: R_AARCH64_CALL26 _mcount
if (new_len != (unsigned int)new_len)
ffff8000113ae5c8: f9401fa1 ldr x1, [x29,#56]
{
ffff8000113ae5cc: 90000014 adrp x20, 0 <__stack_chk_guard>
ffff8000113ae5cc: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ae5d0: f9400280 ldr x0, [x20]
ffff8000113ae5d0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
if (new_len != (unsigned int)new_len)
ffff8000113ae5d4: 92407c22 and x2, x1, #0xffffffff
{
ffff8000113ae5d8: f9002fa0 str x0, [x29,#88]
if (new_len != (unsigned int)new_len)
ffff8000113ae5dc: eb01005f cmp x2, x1
unsigned int orig_len = dev->tx_queue_len;
ffff8000113ae5e0: b943da75 ldr w21, [x19,#984]
if (new_len != (unsigned int)new_len)
ffff8000113ae5e4: 54000441 b.ne ffff8000113ae66c <dev_change_tx_queue_len+0xc4>
if (new_len != orig_len) {
ffff8000113ae5e8: eb35405f cmp x2, w21, uxtw
ffff8000113ae5ec: 540003c0 b.eq ffff8000113ae664 <dev_change_tx_queue_len+0xbc>
dev->tx_queue_len = new_len;
ffff8000113ae5f0: b903da62 str w2, [x19,#984]
return call_netdevice_notifiers_info(val, &info);
ffff8000113ae5f4: d28003c0 mov x0, #0x1e // #30
ffff8000113ae5f8: 910123a1 add x1, x29, #0x48
struct netdev_notifier_info info = {
ffff8000113ae5fc: f90027b3 str x19, [x29,#72]
ffff8000113ae600: f9002bbf str xzr, [x29,#80]
return call_netdevice_notifiers_info(val, &info);
ffff8000113ae604: 97ffc6bd bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ret &= ~NOTIFY_STOP_MASK;
ffff8000113ae608: 12107800 and w0, w0, #0xffff7fff
return ret > NOTIFY_OK ? NOTIFY_OK - ret : 0;
ffff8000113ae60c: 7100041f cmp w0, #0x1
ffff8000113ae610: 5400022d b.le ffff8000113ae654 <dev_change_tx_queue_len+0xac>
ffff8000113ae614: 52800021 mov w1, #0x1 // #1
ffff8000113ae618: 4b000036 sub w22, w1, w0
netdev_err(dev, "refused to change device tx_queue_len\n");
ffff8000113ae61c: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113ae61c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x8e0
ffff8000113ae620: aa1303e0 mov x0, x19
ffff8000113ae624: 91000021 add x1, x1, #0x0
ffff8000113ae624: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x8e0
ffff8000113ae628: 94000000 bl ffff80001139e8b4 <passthru_features_check+0xc>
ffff8000113ae628: R_AARCH64_CALL26 netdev_err
return res;
ffff8000113ae62c: 2a1603e0 mov w0, w22
dev->tx_queue_len = orig_len;
ffff8000113ae630: b903da75 str w21, [x19,#984]
}
ffff8000113ae634: f9402fa2 ldr x2, [x29,#88]
ffff8000113ae638: f9400281 ldr x1, [x20]
ffff8000113ae638: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ae63c: eb01005f cmp x2, x1
ffff8000113ae640: 540001a1 b.ne ffff8000113ae674 <dev_change_tx_queue_len+0xcc>
ffff8000113ae644: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ae648: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113ae64c: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113ae650: d65f03c0 ret
res = dev_qdisc_change_tx_queue_len(dev);
ffff8000113ae654: aa1303e0 mov x0, x19
ffff8000113ae658: 94000000 bl 0 <dev_qdisc_change_tx_queue_len>
ffff8000113ae658: R_AARCH64_CALL26 dev_qdisc_change_tx_queue_len
ffff8000113ae65c: 2a0003f6 mov w22, w0
if (res)
ffff8000113ae660: 35fffde0 cbnz w0, ffff8000113ae61c <dev_change_tx_queue_len+0x74>
return 0;
ffff8000113ae664: 52800000 mov w0, #0x0 // #0
ffff8000113ae668: 17fffff3 b ffff8000113ae634 <dev_change_tx_queue_len+0x8c>
return -ERANGE;
ffff8000113ae66c: 12800420 mov w0, #0xffffffde // #-34
ffff8000113ae670: 17fffff1 b ffff8000113ae634 <dev_change_tx_queue_len+0x8c>
}
ffff8000113ae674: 94000000 bl 0 <__stack_chk_fail>
ffff8000113ae674: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113ae678 <__dev_xdp_query>:
{
ffff8000113ae678: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff8000113ae67c: 910003fd mov x29, sp
ffff8000113ae680: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ae684: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113ae688: aa0003f6 mov x22, x0
ffff8000113ae68c: aa1e03e0 mov x0, x30
ffff8000113ae690: aa0103f4 mov x20, x1
ffff8000113ae694: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff8000113ae694: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ae698: 2a0203f5 mov w21, w2
ffff8000113ae69c: 94000000 bl 0 <_mcount>
ffff8000113ae69c: R_AARCH64_CALL26 _mcount
ffff8000113ae6a0: f9400261 ldr x1, [x19]
ffff8000113ae6a0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ae6a4: f9002fa1 str x1, [x29,#88]
if (!bpf_op)
ffff8000113ae6a8: b40002d4 cbz x20, ffff8000113ae700 <__dev_xdp_query+0x88>
ffff8000113ae6ac: 9100e3a3 add x3, x29, #0x38
ffff8000113ae6b0: a9007c7f stp xzr, xzr, [x3]
WARN_ON(bpf_op(dev, &xdp) < 0 && cmd == XDP_QUERY_PROG);
ffff8000113ae6b4: aa0303e1 mov x1, x3
ffff8000113ae6b8: aa1603e0 mov x0, x22
ffff8000113ae6bc: a9017c7f stp xzr, xzr, [x3,#16]
xdp.command = cmd;
ffff8000113ae6c0: b9003bb5 str w21, [x29,#56]
WARN_ON(bpf_op(dev, &xdp) < 0 && cmd == XDP_QUERY_PROG);
ffff8000113ae6c4: d63f0280 blr x20
ffff8000113ae6c8: 37f80140 tbnz w0, #31, ffff8000113ae6f0 <__dev_xdp_query+0x78>
return xdp.prog_id;
ffff8000113ae6cc: b94043a0 ldr w0, [x29,#64]
}
ffff8000113ae6d0: f9402fa2 ldr x2, [x29,#88]
ffff8000113ae6d4: f9400261 ldr x1, [x19]
ffff8000113ae6d4: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ae6d8: eb01005f cmp x2, x1
ffff8000113ae6dc: 54000161 b.ne ffff8000113ae708 <__dev_xdp_query+0x90>
ffff8000113ae6e0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ae6e4: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113ae6e8: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113ae6ec: d65f03c0 ret
WARN_ON(bpf_op(dev, &xdp) < 0 && cmd == XDP_QUERY_PROG);
ffff8000113ae6f0: 71000abf cmp w21, #0x2
ffff8000113ae6f4: 54fffec1 b.ne ffff8000113ae6cc <__dev_xdp_query+0x54>
ffff8000113ae6f8: d4210000 brk #0x800
ffff8000113ae6fc: 17fffff4 b ffff8000113ae6cc <__dev_xdp_query+0x54>
return 0;
ffff8000113ae700: 2a1403e0 mov w0, w20
ffff8000113ae704: 17fffff3 b ffff8000113ae6d0 <__dev_xdp_query+0x58>
}
ffff8000113ae708: 94000000 bl 0 <__stack_chk_fail>
ffff8000113ae708: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113ae70c <dev_xdp_install>:
{
ffff8000113ae70c: a9b77bfd stp x29, x30, [sp,#-144]!
ffff8000113ae710: 910003fd mov x29, sp
ffff8000113ae714: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ae718: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113ae71c: a90363f7 stp x23, x24, [sp,#48]
ffff8000113ae720: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113ae724: f9002bfb str x27, [sp,#80]
ffff8000113ae728: aa0003fa mov x26, x0
ffff8000113ae72c: aa1e03e0 mov x0, x30
bool non_hw = !(flags & XDP_FLAGS_HW_MODE);
ffff8000113ae730: 121d0076 and w22, w3, #0x8
{
ffff8000113ae734: 2a0303f5 mov w21, w3
ffff8000113ae738: 90000014 adrp x20, 0 <__stack_chk_guard>
ffff8000113ae738: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ae73c: aa0103f9 mov x25, x1
ffff8000113ae740: aa0203fb mov x27, x2
ffff8000113ae744: aa0403f7 mov x23, x4
ffff8000113ae748: 94000000 bl 0 <_mcount>
ffff8000113ae748: R_AARCH64_CALL26 _mcount
ffff8000113ae74c: f9400280 ldr x0, [x20]
ffff8000113ae74c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
bool non_hw = !(flags & XDP_FLAGS_HW_MODE);
ffff8000113ae750: 6b1f02df cmp w22, wzr
{
ffff8000113ae754: f90047a0 str x0, [x29,#136]
bool non_hw = !(flags & XDP_FLAGS_HW_MODE);
ffff8000113ae758: 1a9f17f8 cset w24, eq
struct bpf_prog *prev_prog = NULL;
ffff8000113ae75c: d2800013 mov x19, #0x0 // #0
if (non_hw) {
ffff8000113ae760: 35000438 cbnz w24, ffff8000113ae7e4 <dev_xdp_install+0xd8>
ffff8000113ae764: 9101a3a1 add x1, x29, #0x68
ffff8000113ae768: a9007c3f stp xzr, xzr, [x1]
if (flags & XDP_FLAGS_HW_MODE)
ffff8000113ae76c: 34000076 cbz w22, ffff8000113ae778 <dev_xdp_install+0x6c>
xdp.command = XDP_SETUP_PROG_HW;
ffff8000113ae770: 52800020 mov w0, #0x1 // #1
ffff8000113ae774: b9006ba0 str w0, [x29,#104]
xdp.flags = flags;
ffff8000113ae778: b90073b5 str w21, [x29,#112]
err = bpf_op(dev, &xdp);
ffff8000113ae77c: aa1a03e0 mov x0, x26
xdp.extack = extack;
ffff8000113ae780: f90043bb str x27, [x29,#128]
xdp.prog = prog;
ffff8000113ae784: f9003fb7 str x23, [x29,#120]
err = bpf_op(dev, &xdp);
ffff8000113ae788: d63f0320 blr x25
ffff8000113ae78c: 2a0003f5 mov w21, w0
if (!err && non_hw)
ffff8000113ae790: 34000200 cbz w0, ffff8000113ae7d0 <dev_xdp_install+0xc4>
if (prev_prog)
ffff8000113ae794: b4000073 cbz x19, ffff8000113ae7a0 <dev_xdp_install+0x94>
bpf_prog_put(prev_prog);
ffff8000113ae798: aa1303e0 mov x0, x19
ffff8000113ae79c: 94000000 bl 0 <bpf_prog_put>
ffff8000113ae79c: R_AARCH64_CALL26 bpf_prog_put
}
ffff8000113ae7a0: f94047a2 ldr x2, [x29,#136]
ffff8000113ae7a4: f9400281 ldr x1, [x20]
ffff8000113ae7a4: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113ae7a8: 2a1503e0 mov w0, w21
ffff8000113ae7ac: eb01005f cmp x2, x1
ffff8000113ae7b0: 540002a1 b.ne ffff8000113ae804 <dev_xdp_install+0xf8>
ffff8000113ae7b4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113ae7b8: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113ae7bc: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113ae7c0: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113ae7c4: f9402bfb ldr x27, [sp,#80]
ffff8000113ae7c8: a8c97bfd ldp x29, x30, [sp],#144
ffff8000113ae7cc: d65f03c0 ret
if (!err && non_hw)
ffff8000113ae7d0: 34fffe38 cbz w24, ffff8000113ae794 <dev_xdp_install+0x88>
bpf_prog_change_xdp(prev_prog, prog);
ffff8000113ae7d4: aa1303e0 mov x0, x19
ffff8000113ae7d8: aa1703e1 mov x1, x23
ffff8000113ae7dc: 94000000 bl 0 <bpf_prog_change_xdp>
ffff8000113ae7dc: R_AARCH64_CALL26 bpf_prog_change_xdp
ffff8000113ae7e0: 17ffffed b ffff8000113ae794 <dev_xdp_install+0x88>
prev_prog = bpf_prog_by_id(__dev_xdp_query(dev, bpf_op,
ffff8000113ae7e4: aa1903e1 mov x1, x25
ffff8000113ae7e8: 52800042 mov w2, #0x2 // #2
ffff8000113ae7ec: aa1a03e0 mov x0, x26
ffff8000113ae7f0: 94000000 bl ffff8000113ae678 <__dev_xdp_query>
ffff8000113ae7f0: R_AARCH64_CALL26 __dev_xdp_query
ffff8000113ae7f4: 94000000 bl 0 <bpf_prog_by_id>
ffff8000113ae7f4: R_AARCH64_CALL26 bpf_prog_by_id
prev_prog = NULL;
ffff8000113ae7f8: b13ffc1f cmn x0, #0xfff
ffff8000113ae7fc: 9a9f3013 csel x19, x0, xzr, cc
ffff8000113ae800: 17ffffd9 b ffff8000113ae764 <dev_xdp_install+0x58>
}
ffff8000113ae804: 94000000 bl 0 <__stack_chk_fail>
ffff8000113ae804: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113ae808 <rollback_registered_many>:
{
ffff8000113ae808: a9b67bfd stp x29, x30, [sp,#-160]!
ffff8000113ae80c: 910003fd mov x29, sp
ffff8000113ae810: a90153f3 stp x19, x20, [sp,#16]
ffff8000113ae814: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113ae818: a90363f7 stp x23, x24, [sp,#48]
ffff8000113ae81c: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113ae820: a90573fb stp x27, x28, [sp,#80]
ffff8000113ae824: aa0003f6 mov x22, x0
ffff8000113ae828: aa1e03e0 mov x0, x30
ffff8000113ae82c: 94000000 bl 0 <_mcount>
ffff8000113ae82c: R_AARCH64_CALL26 _mcount
ffff8000113ae830: 90000019 adrp x25, 0 <__stack_chk_guard>
ffff8000113ae830: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113ae834: f9400321 ldr x1, [x25]
ffff8000113ae834: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
BUG_ON(dev_boot_phase);
ffff8000113ae838: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113ae838: R_AARCH64_ADR_PREL_PG_HI21 .data
LIST_HEAD(close_head);
ffff8000113ae83c: 9101a3b7 add x23, x29, #0x68
BUG_ON(dev_boot_phase);
ffff8000113ae840: b9400000 ldr w0, [x0]
ffff8000113ae840: R_AARCH64_LDST32_ABS_LO12_NC .data
{
ffff8000113ae844: f9004fa1 str x1, [x29,#152]
LIST_HEAD(close_head);
ffff8000113ae848: f90037b7 str x23, [x29,#104]
ffff8000113ae84c: f9003bb7 str x23, [x29,#112]
BUG_ON(dev_boot_phase);
ffff8000113ae850: 35002380 cbnz w0, ffff8000113aecc0 <rollback_registered_many+0x4b8>
ASSERT_RTNL();
ffff8000113ae854: 94000000 bl 0 <rtnl_is_locked>
ffff8000113ae854: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113ae858: 34002680 cbz w0, ffff8000113aed28 <rollback_registered_many+0x520>
list_for_each_entry_safe(dev, tmp, head, unreg_list) {
ffff8000113ae85c: f94002d3 ldr x19, [x22]
ffff8000113ae860: aa1303f4 mov x20, x19
ffff8000113ae864: f8598695 ldr x21, [x20],#-104
ffff8000113ae868: eb16027f cmp x19, x22
ffff8000113ae86c: d101a2b5 sub x21, x21, #0x68
ffff8000113ae870: 54000760 b.eq ffff8000113ae95c <rollback_registered_many+0x154>
pr_debug("unregister_netdevice: device %s/%p never was registered\n",
ffff8000113ae874: 90000018 adrp x24, ffff80001139e37c <__my_cpu_offset>
ffff8000113ae874: R_AARCH64_ADR_PREL_PG_HI21 __verbose
ffff8000113ae878: 91000318 add x24, x24, #0x0
ffff8000113ae878: R_AARCH64_ADD_ABS_LO12_NC __verbose
ffff8000113ae87c: 9000001a adrp x26, ffff80001139e37c <__my_cpu_offset>
ffff8000113ae87c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x908
ffff8000113ae880: 91032318 add x24, x24, #0xc8
ffff8000113ae884: 9100035a add x26, x26, #0x0
ffff8000113ae884: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x908
ffff8000113ae888: 1400001a b ffff8000113ae8f0 <rollback_registered_many+0xe8>
ffff8000113ae88c: 79404700 ldrh w0, [x24,#34]
ffff8000113ae890: 37102400 tbnz w0, #2, ffff8000113aed10 <rollback_registered_many+0x508>
WARN_ON(1);
ffff8000113ae894: d4210000 brk #0x800
if (!__list_del_entry_valid(entry))
ffff8000113ae898: aa1303e0 mov x0, x19
ffff8000113ae89c: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113ae89c: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113ae8a0: 53001c00 uxtb w0, w0
ffff8000113ae8a4: 9101a281 add x1, x20, #0x68
ffff8000113ae8a8: 340000a0 cbz w0, ffff8000113ae8bc <rollback_registered_many+0xb4>
__list_del(entry->prev, entry->next);
ffff8000113ae8ac: f9400420 ldr x0, [x1,#8]
ffff8000113ae8b0: f9403682 ldr x2, [x20,#104]
next->prev = prev;
ffff8000113ae8b4: f9000440 str x0, [x2,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113ae8b8: f9000002 str x2, [x0]
entry->next = LIST_POISON1;
ffff8000113ae8bc: d2802002 mov x2, #0x100 // #256
entry->prev = LIST_POISON2;
ffff8000113ae8c0: d2802440 mov x0, #0x122 // #290
entry->next = LIST_POISON1;
ffff8000113ae8c4: f2fbd5a2 movk x2, #0xdead, lsl #48
entry->prev = LIST_POISON2;
ffff8000113ae8c8: f2fbd5a0 movk x0, #0xdead, lsl #48
entry->next = LIST_POISON1;
ffff8000113ae8cc: f9000022 str x2, [x1]
entry->prev = LIST_POISON2;
ffff8000113ae8d0: f9000420 str x0, [x1,#8]
list_for_each_entry_safe(dev, tmp, head, unreg_list) {
ffff8000113ae8d4: aa1503f3 mov x19, x21
ffff8000113ae8d8: f8468e63 ldr x3, [x19,#104]!
ffff8000113ae8dc: eb16027f cmp x19, x22
ffff8000113ae8e0: d101a063 sub x3, x3, #0x68
ffff8000113ae8e4: 54000140 b.eq ffff8000113ae90c <rollback_registered_many+0x104>
ffff8000113ae8e8: aa1503f4 mov x20, x21
ffff8000113ae8ec: aa0303f5 mov x21, x3
if (dev->reg_state == NETREG_UNINITIALIZED) {
ffff8000113ae8f0: 39536283 ldrb w3, [x20,#1240]
ffff8000113ae8f4: 34fffcc3 cbz w3, ffff8000113ae88c <rollback_registered_many+0x84>
dev->dismantle = true;
ffff8000113ae8f8: 52800020 mov w0, #0x1 // #1
ffff8000113ae8fc: 39136680 strb w0, [x20,#1241]
BUG_ON(dev->reg_state != NETREG_REGISTERED);
ffff8000113ae900: 7100047f cmp w3, #0x1
ffff8000113ae904: 54fffe80 b.eq ffff8000113ae8d4 <rollback_registered_many+0xcc>
ffff8000113ae908: d4210000 brk #0x800
list_for_each_entry(dev, head, unreg_list)
ffff8000113ae90c: f94002d4 ldr x20, [x22]
ffff8000113ae910: eb1402df cmp x22, x20
ffff8000113ae914: d101a294 sub x20, x20, #0x68
ffff8000113ae918: 54000220 b.eq ffff8000113ae95c <rollback_registered_many+0x154>
__list_add(new, head->prev, head);
ffff8000113ae91c: f94006f5 ldr x21, [x23,#8]
list_add_tail(&dev->close_list, &close_head);
ffff8000113ae920: 9101e293 add x19, x20, #0x78
if (!__list_add_valid(new, prev, next))
ffff8000113ae924: aa1303e0 mov x0, x19
ffff8000113ae928: aa1503e1 mov x1, x21
ffff8000113ae92c: aa1703e2 mov x2, x23
ffff8000113ae930: 94000000 bl 0 <__list_add_valid>
ffff8000113ae930: R_AARCH64_CALL26 __list_add_valid
ffff8000113ae934: 53001c00 uxtb w0, w0
ffff8000113ae938: 340000a0 cbz w0, ffff8000113ae94c <rollback_registered_many+0x144>
new->next = next;
ffff8000113ae93c: f9003e97 str x23, [x20,#120]
next->prev = new;
ffff8000113ae940: f90006f3 str x19, [x23,#8]
new->prev = prev;
ffff8000113ae944: f9004295 str x21, [x20,#128]
ffff8000113ae948: f90002b3 str x19, [x21]
list_for_each_entry(dev, head, unreg_list)
ffff8000113ae94c: f9403694 ldr x20, [x20,#104]
ffff8000113ae950: eb1402df cmp x22, x20
ffff8000113ae954: d101a294 sub x20, x20, #0x68
ffff8000113ae958: 54fffe21 b.ne ffff8000113ae91c <rollback_registered_many+0x114>
dev_close_many(&close_head, true);
ffff8000113ae95c: aa1703e0 mov x0, x23
ffff8000113ae960: 52800021 mov w1, #0x1 // #1
ffff8000113ae964: 94000000 bl ffff8000113a3cf0 <dev_close_many>
ffff8000113ae964: R_AARCH64_CALL26 dev_close_many
list_for_each_entry(dev, head, unreg_list) {
ffff8000113ae968: f94002d3 ldr x19, [x22]
dev->reg_state = NETREG_UNREGISTERING;
ffff8000113ae96c: 52800054 mov w20, #0x2 // #2
list_for_each_entry(dev, head, unreg_list) {
ffff8000113ae970: eb1302df cmp x22, x19
ffff8000113ae974: d101a273 sub x19, x19, #0x68
ffff8000113ae978: 54000100 b.eq ffff8000113ae998 <rollback_registered_many+0x190>
unlist_netdevice(dev);
ffff8000113ae97c: aa1303e0 mov x0, x19
ffff8000113ae980: 97ffd3bc bl ffff8000113a3870 <unlist_netdevice>
list_for_each_entry(dev, head, unreg_list) {
ffff8000113ae984: f9403660 ldr x0, [x19,#104]
dev->reg_state = NETREG_UNREGISTERING;
ffff8000113ae988: 39136274 strb w20, [x19,#1240]
list_for_each_entry(dev, head, unreg_list) {
ffff8000113ae98c: eb0002df cmp x22, x0
ffff8000113ae990: d101a013 sub x19, x0, #0x68
ffff8000113ae994: 54ffff41 b.ne ffff8000113ae97c <rollback_registered_many+0x174>
ffff8000113ae998: 90000018 adrp x24, 0 <nr_cpu_ids>
ffff8000113ae998: R_AARCH64_ADR_PREL_PG_HI21 nr_cpu_ids
per_cpu_ptr(&flush_works, cpu));
ffff8000113ae99c: 90000015 adrp x21, ffff80001139e37c <__my_cpu_offset>
ffff8000113ae99c: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu
for_each_online_cpu(cpu)
ffff8000113ae9a0: 90000014 adrp x20, 0 <__cpu_online_mask>
ffff8000113ae9a0: R_AARCH64_ADR_PREL_PG_HI21 __cpu_online_mask
per_cpu_ptr(&flush_works, cpu));
ffff8000113ae9a4: 910002b5 add x21, x21, #0x0
ffff8000113ae9a4: R_AARCH64_ADD_ABS_LO12_NC .data..percpu
#endif /* !CONFIG_HOTPLUG_CPU */
/* Wrappers which go away once all code is converted */
static inline void cpu_hotplug_begin(void) { cpus_write_lock(); }
static inline void cpu_hotplug_done(void) { cpus_write_unlock(); }
static inline void get_online_cpus(void) { cpus_read_lock(); }
ffff8000113ae9a8: 94000000 bl 0 <cpus_read_lock>
ffff8000113ae9a8: R_AARCH64_CALL26 cpus_read_lock
for_each_online_cpu(cpu)
ffff8000113ae9ac: 12800013 mov w19, #0xffffffff // #-1
ffff8000113ae9b0: 91000294 add x20, x20, #0x0
ffff8000113ae9b0: R_AARCH64_ADD_ABS_LO12_NC __cpu_online_mask
ffff8000113ae9b4: 91000317 add x23, x24, #0x0
ffff8000113ae9b4: R_AARCH64_ADD_ABS_LO12_NC nr_cpu_ids
queue_work_on(cpu, system_highpri_wq,
ffff8000113ae9b8: 9000001a adrp x26, 0 <system_highpri_wq>
ffff8000113ae9b8: R_AARCH64_ADR_PREL_PG_HI21 system_highpri_wq
ffff8000113ae9bc: 14000007 b ffff8000113ae9d8 <rollback_registered_many+0x1d0>
per_cpu_ptr(&flush_works, cpu));
ffff8000113ae9c0: 90000001 adrp x1, 0 <__per_cpu_offset>
ffff8000113ae9c0: R_AARCH64_ADR_PREL_PG_HI21 __per_cpu_offset
ffff8000113ae9c4: 91000021 add x1, x1, #0x0
ffff8000113ae9c4: R_AARCH64_ADD_ABS_LO12_NC __per_cpu_offset
ffff8000113ae9c8: f8735822 ldr x2, [x1,w19,uxtw #3]
queue_work_on(cpu, system_highpri_wq,
ffff8000113ae9cc: f9400341 ldr x1, [x26]
ffff8000113ae9cc: R_AARCH64_LDST64_ABS_LO12_NC system_highpri_wq
ffff8000113ae9d0: 8b0202a2 add x2, x21, x2
ffff8000113ae9d4: 94000000 bl 0 <queue_work_on>
ffff8000113ae9d4: R_AARCH64_CALL26 queue_work_on
for_each_online_cpu(cpu)
ffff8000113ae9d8: 2a1303e0 mov w0, w19
ffff8000113ae9dc: aa1403e1 mov x1, x20
ffff8000113ae9e0: 94000000 bl 0 <cpumask_next>
ffff8000113ae9e0: R_AARCH64_CALL26 cpumask_next
ffff8000113ae9e4: b94002e2 ldr w2, [x23]
ffff8000113ae9e8: 2a0003f3 mov w19, w0
ffff8000113ae9ec: 6b02001f cmp w0, w2
ffff8000113ae9f0: 54fffe83 b.cc ffff8000113ae9c0 <rollback_registered_many+0x1b8>
flush_work(per_cpu_ptr(&flush_works, cpu));
ffff8000113ae9f4: 90000015 adrp x21, ffff80001139e37c <__my_cpu_offset>
ffff8000113ae9f4: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu
ffff8000113ae9f8: 910002b5 add x21, x21, #0x0
ffff8000113ae9f8: R_AARCH64_ADD_ABS_LO12_NC .data..percpu
for_each_online_cpu(cpu)
ffff8000113ae9fc: 12800013 mov w19, #0xffffffff // #-1
for_each_online_cpu(cpu)
ffff8000113aea00: 91000318 add x24, x24, #0x0
ffff8000113aea00: R_AARCH64_ADD_ABS_LO12_NC nr_cpu_ids
flush_work(per_cpu_ptr(&flush_works, cpu));
ffff8000113aea04: 90000017 adrp x23, 0 <__per_cpu_offset>
ffff8000113aea04: R_AARCH64_ADR_PREL_PG_HI21 __per_cpu_offset
ffff8000113aea08: 14000005 b ffff8000113aea1c <rollback_registered_many+0x214>
ffff8000113aea0c: 910002e0 add x0, x23, #0x0
ffff8000113aea0c: R_AARCH64_ADD_ABS_LO12_NC __per_cpu_offset
ffff8000113aea10: f8735800 ldr x0, [x0,w19,uxtw #3]
ffff8000113aea14: 8b0002a0 add x0, x21, x0
ffff8000113aea18: 94000000 bl 0 <flush_work>
ffff8000113aea18: R_AARCH64_CALL26 flush_work
for_each_online_cpu(cpu)
ffff8000113aea1c: 2a1303e0 mov w0, w19
ffff8000113aea20: aa1403e1 mov x1, x20
ffff8000113aea24: 94000000 bl 0 <cpumask_next>
ffff8000113aea24: R_AARCH64_CALL26 cpumask_next
ffff8000113aea28: 2a0003f3 mov w19, w0
ffff8000113aea2c: b9400300 ldr w0, [x24]
ffff8000113aea30: 6b00027f cmp w19, w0
ffff8000113aea34: 54fffec3 b.cc ffff8000113aea0c <rollback_registered_many+0x204>
static inline void put_online_cpus(void) { cpus_read_unlock(); }
ffff8000113aea38: 94000000 bl 0 <cpus_read_unlock>
ffff8000113aea38: R_AARCH64_CALL26 cpus_read_unlock
synchronize_net();
ffff8000113aea3c: 94000000 bl ffff8000113a1384 <synchronize_net>
ffff8000113aea3c: R_AARCH64_CALL26 synchronize_net
list_for_each_entry(dev, head, unreg_list) {
ffff8000113aea40: f94002d4 ldr x20, [x22]
ffff8000113aea44: eb1402df cmp x22, x20
ffff8000113aea48: d101a294 sub x20, x20, #0x68
ffff8000113aea4c: 54000de0 b.eq ffff8000113aec08 <rollback_registered_many+0x400>
ASSERT_RTNL();
ffff8000113aea50: 9000001a adrp x26, ffff80001139e37c <__my_cpu_offset>
ffff8000113aea50: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113aea54: 9000001c adrp x28, ffff80001139e37c <__my_cpu_offset>
ffff8000113aea54: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113aea58: 9000001b adrp x27, ffff80001139e37c <__my_cpu_offset>
ffff8000113aea58: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113aea5c: 90000018 adrp x24, ffff80001139e37c <__my_cpu_offset>
ffff8000113aea5c: R_AARCH64_ADR_PREL_PG_HI21 .text+0x11b1c
ffff8000113aea60: 9101e3b5 add x21, x29, #0x78
ffff8000113aea64: 9100035a add x26, x26, #0x0
ffff8000113aea64: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113aea68: 9100039c add x28, x28, #0x0
ffff8000113aea68: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113aea6c: 9100037b add x27, x27, #0x0
ffff8000113aea6c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
dev_shutdown(dev);
ffff8000113aea70: aa1403e0 mov x0, x20
ffff8000113aea74: 94000000 bl 0 <dev_shutdown>
ffff8000113aea74: R_AARCH64_CALL26 dev_shutdown
WARN_ON(dev_xdp_install(dev, generic_xdp_install, NULL, 0, NULL));
ffff8000113aea78: d2800002 mov x2, #0x0 // #0
ffff8000113aea7c: aa1403e0 mov x0, x20
ffff8000113aea80: 91000301 add x1, x24, #0x0
ffff8000113aea80: R_AARCH64_ADD_ABS_LO12_NC .text+0x11b1c
ffff8000113aea84: 2a0203e3 mov w3, w2
ffff8000113aea88: aa0203e4 mov x4, x2
ffff8000113aea8c: 97ffff20 bl ffff8000113ae70c <dev_xdp_install>
ffff8000113aea90: 350013c0 cbnz w0, ffff8000113aed08 <rollback_registered_many+0x500>
ndo_bpf = dev->netdev_ops->ndo_bpf;
ffff8000113aea94: f940fa80 ldr x0, [x20,#496]
ffff8000113aea98: f9412413 ldr x19, [x0,#584]
if (!ndo_bpf)
ffff8000113aea9c: b40002b3 cbz x19, ffff8000113aeaf0 <rollback_registered_many+0x2e8>
xdp.command = XDP_QUERY_PROG;
ffff8000113aeaa0: 52800040 mov w0, #0x2 // #2
ffff8000113aeaa4: a9007ebf stp xzr, xzr, [x21]
ffff8000113aeaa8: b90002a0 str w0, [x21]
ffff8000113aeaac: a9017ebf stp xzr, xzr, [x21,#16]
WARN_ON(ndo_bpf(dev, &xdp));
ffff8000113aeab0: aa1403e0 mov x0, x20
ffff8000113aeab4: aa1503e1 mov x1, x21
ffff8000113aeab8: d63f0260 blr x19
ffff8000113aeabc: 35001220 cbnz w0, ffff8000113aed00 <rollback_registered_many+0x4f8>
if (xdp.prog_id)
ffff8000113aeac0: b9400aa0 ldr w0, [x21,#8]
ffff8000113aeac4: 35000da0 cbnz w0, ffff8000113aec78 <rollback_registered_many+0x470>
xdp.command = XDP_QUERY_PROG_HW;
ffff8000113aeac8: 52800060 mov w0, #0x3 // #3
ffff8000113aeacc: a9007ebf stp xzr, xzr, [x21]
ffff8000113aead0: b90002a0 str w0, [x21]
ffff8000113aead4: a9017ebf stp xzr, xzr, [x21,#16]
if (!ndo_bpf(dev, &xdp) && xdp.prog_id)
ffff8000113aead8: aa1403e0 mov x0, x20
ffff8000113aeadc: aa1503e1 mov x1, x21
ffff8000113aeae0: d63f0260 blr x19
ffff8000113aeae4: 35000060 cbnz w0, ffff8000113aeaf0 <rollback_registered_many+0x2e8>
ffff8000113aeae8: b9400aa0 ldr w0, [x21,#8]
ffff8000113aeaec: 35000d80 cbnz w0, ffff8000113aec9c <rollback_registered_many+0x494>
return call_netdevice_notifiers_info(val, &info);
ffff8000113aeaf0: d28000c0 mov x0, #0x6 // #6
ffff8000113aeaf4: aa1503e1 mov x1, x21
struct netdev_notifier_info info = {
ffff8000113aeaf8: f90002b4 str x20, [x21]
ffff8000113aeafc: f90006bf str xzr, [x21,#8]
return call_netdevice_notifiers_info(val, &info);
ffff8000113aeb00: 97ffc57e bl ffff8000113a00f8 <call_netdevice_notifiers_info>
if (!dev->rtnl_link_ops ||
ffff8000113aeb04: f9441a80 ldr x0, [x20,#2096]
ffff8000113aeb08: b4000080 cbz x0, ffff8000113aeb18 <rollback_registered_many+0x310>
ffff8000113aeb0c: 7949b680 ldrh w0, [x20,#1242]
struct sk_buff *skb = NULL;
ffff8000113aeb10: d2800017 mov x23, #0x0 // #0
if (!dev->rtnl_link_ops ||
ffff8000113aeb14: 35000140 cbnz w0, ffff8000113aeb3c <rollback_registered_many+0x334>
skb = rtmsg_ifinfo_build_skb(RTM_DELLINK, dev, ~0U, 0,
ffff8000113aeb18: d2800005 mov x5, #0x0 // #0
ffff8000113aeb1c: 52800220 mov w0, #0x11 // #17
ffff8000113aeb20: aa1403e1 mov x1, x20
ffff8000113aeb24: 12800002 mov w2, #0xffffffff // #-1
ffff8000113aeb28: 52800003 mov w3, #0x0 // #0
ffff8000113aeb2c: 52819804 mov w4, #0xcc0 // #3264
ffff8000113aeb30: 2a0503e6 mov w6, w5
ffff8000113aeb34: 94000000 bl 0 <rtmsg_ifinfo_build_skb>
ffff8000113aeb34: R_AARCH64_CALL26 rtmsg_ifinfo_build_skb
ffff8000113aeb38: aa0003f7 mov x23, x0
dev_uc_flush(dev);
ffff8000113aeb3c: aa1403e0 mov x0, x20
ffff8000113aeb40: 94000000 bl 0 <dev_uc_flush>
ffff8000113aeb40: R_AARCH64_CALL26 dev_uc_flush
dev_mc_flush(dev);
ffff8000113aeb44: aa1403e0 mov x0, x20
ffff8000113aeb48: 94000000 bl 0 <dev_mc_flush>
ffff8000113aeb48: R_AARCH64_CALL26 dev_mc_flush
list_for_each_entry_safe(name_node, tmp, &dev->name_node->list, list)
ffff8000113aeb4c: f9400a81 ldr x1, [x20,#16]
ffff8000113aeb50: f9400820 ldr x0, [x1,#16]
ffff8000113aeb54: f85f0413 ldr x19, [x0],#-16
ffff8000113aeb58: eb00003f cmp x1, x0
ffff8000113aeb5c: d1004273 sub x19, x19, #0x10
ffff8000113aeb60: 54000081 b.ne ffff8000113aeb70 <rollback_registered_many+0x368>
ffff8000113aeb64: 14000009 b ffff8000113aeb88 <rollback_registered_many+0x380>
ffff8000113aeb68: aa1303e0 mov x0, x19
ffff8000113aeb6c: aa0203f3 mov x19, x2
__netdev_name_node_alt_destroy(name_node);
ffff8000113aeb70: 97ffd16f bl ffff8000113a312c <__netdev_name_node_alt_destroy>
list_for_each_entry_safe(name_node, tmp, &dev->name_node->list, list)
ffff8000113aeb74: f9400a81 ldr x1, [x20,#16]
ffff8000113aeb78: f9400a60 ldr x0, [x19,#16]
ffff8000113aeb7c: eb01027f cmp x19, x1
ffff8000113aeb80: d1004002 sub x2, x0, #0x10
ffff8000113aeb84: 54ffff21 b.ne ffff8000113aeb68 <rollback_registered_many+0x360>
kfree(name_node);
ffff8000113aeb88: aa0103e0 mov x0, x1
ffff8000113aeb8c: 94000000 bl 0 <kfree>
ffff8000113aeb8c: R_AARCH64_CALL26 kfree
if (dev->netdev_ops->ndo_uninit)
ffff8000113aeb90: f940fa80 ldr x0, [x20,#496]
ffff8000113aeb94: f9400401 ldr x1, [x0,#8]
ffff8000113aeb98: b4000061 cbz x1, ffff8000113aeba4 <rollback_registered_many+0x39c>
dev->netdev_ops->ndo_uninit(dev);
ffff8000113aeb9c: aa1403e0 mov x0, x20
ffff8000113aeba0: d63f0020 blr x1
if (skb)
ffff8000113aeba4: b40000b7 cbz x23, ffff8000113aebb8 <rollback_registered_many+0x3b0>
rtmsg_ifinfo_send(skb, dev, GFP_KERNEL);
ffff8000113aeba8: aa1703e0 mov x0, x23
ffff8000113aebac: aa1403e1 mov x1, x20
ffff8000113aebb0: 52819802 mov w2, #0xcc0 // #3264
ffff8000113aebb4: 94000000 bl 0 <rtmsg_ifinfo_send>
ffff8000113aebb4: R_AARCH64_CALL26 rtmsg_ifinfo_send
WARN_ON(netdev_has_any_upper_dev(dev));
ffff8000113aebb8: aa1403e0 mov x0, x20
ffff8000113aebbc: 94000000 bl ffff80001139fe98 <netdev_has_any_upper_dev>
ffff8000113aebbc: R_AARCH64_CALL26 netdev_has_any_upper_dev
ffff8000113aebc0: 53001c00 uxtb w0, w0
ffff8000113aebc4: 350009a0 cbnz w0, ffff8000113aecf8 <rollback_registered_many+0x4f0>
ASSERT_RTNL();
ffff8000113aebc8: 94000000 bl 0 <rtnl_is_locked>
ffff8000113aebc8: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113aebcc: 34000820 cbz w0, ffff8000113aecd0 <rollback_registered_many+0x4c8>
__READ_ONCE_SIZE;
ffff8000113aebd0: aa1403e0 mov x0, x20
ffff8000113aebd4: f84b8c01 ldr x1, [x0,#184]!
WARN_ON(netdev_has_any_lower_dev(dev));
ffff8000113aebd8: eb01001f cmp x0, x1
ffff8000113aebdc: 54000761 b.ne ffff8000113aecc8 <rollback_registered_many+0x4c0>
netdev_unregister_kobject(dev);
ffff8000113aebe0: aa1403e0 mov x0, x20
ffff8000113aebe4: 94000000 bl 0 <netdev_unregister_kobject>
ffff8000113aebe4: R_AARCH64_CALL26 netdev_unregister_kobject
netif_reset_xps_queues(dev, index, dev->num_tx_queues - index);
ffff8000113aebe8: 79479282 ldrh w2, [x20,#968]
ffff8000113aebec: aa1403e0 mov x0, x20
ffff8000113aebf0: 52800001 mov w1, #0x0 // #0
ffff8000113aebf4: 97ffd704 bl ffff8000113a4804 <netif_reset_xps_queues>
list_for_each_entry(dev, head, unreg_list) {
ffff8000113aebf8: f9403694 ldr x20, [x20,#104]
ffff8000113aebfc: eb1402df cmp x22, x20
ffff8000113aec00: d101a294 sub x20, x20, #0x68
ffff8000113aec04: 54fff361 b.ne ffff8000113aea70 <rollback_registered_many+0x268>
synchronize_net();
ffff8000113aec08: 94000000 bl ffff8000113a1384 <synchronize_net>
ffff8000113aec08: R_AARCH64_CALL26 synchronize_net
list_for_each_entry(dev, head, unreg_list)
ffff8000113aec0c: f94002c2 ldr x2, [x22]
PERCPU_OP(add, add, stadd)
ffff8000113aec10: 12800003 mov w3, #0xffffffff // #-1
ffff8000113aec14: eb0202df cmp x22, x2
ffff8000113aec18: d101a042 sub x2, x2, #0x68
ffff8000113aec1c: 54000180 b.eq ffff8000113aec4c <rollback_registered_many+0x444>
this_cpu_dec(*dev->pcpu_refcnt);
ffff8000113aec20: f9426040 ldr x0, [x2,#1216]
asm(ALTERNATIVE("mrs %0, tpidr_el1",
ffff8000113aec24: d538d081 mrs x1, tpidr_el1
PERCPU_OP(add, add, stadd)
ffff8000113aec28: 8b000026 add x6, x1, x0
ffff8000113aec2c: 885f7cc5 ldxr w5, [x6]
ffff8000113aec30: 0b0300a5 add w5, w5, w3
ffff8000113aec34: 88047cc5 stxr w4, w5, [x6]
ffff8000113aec38: 35ffffa4 cbnz w4, ffff8000113aec2c <rollback_registered_many+0x424>
ffff8000113aec3c: f9403442 ldr x2, [x2,#104]
ffff8000113aec40: eb0202df cmp x22, x2
ffff8000113aec44: d101a042 sub x2, x2, #0x68
ffff8000113aec48: 54fffec1 b.ne ffff8000113aec20 <rollback_registered_many+0x418>
}
ffff8000113aec4c: f9404fa1 ldr x1, [x29,#152]
ffff8000113aec50: f9400320 ldr x0, [x25]
ffff8000113aec50: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113aec54: eb00003f cmp x1, x0
ffff8000113aec58: 54000361 b.ne ffff8000113aecc4 <rollback_registered_many+0x4bc>
ffff8000113aec5c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113aec60: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113aec64: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113aec68: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113aec6c: a94573fb ldp x27, x28, [sp,#80]
ffff8000113aec70: a8ca7bfd ldp x29, x30, [sp],#160
ffff8000113aec74: d65f03c0 ret
WARN_ON(dev_xdp_install(dev, ndo_bpf, NULL, xdp.prog_flags,
ffff8000113aec78: d2800002 mov x2, #0x0 // #0
ffff8000113aec7c: b9400ea3 ldr w3, [x21,#12]
ffff8000113aec80: aa1403e0 mov x0, x20
ffff8000113aec84: aa1303e1 mov x1, x19
ffff8000113aec88: aa0203e4 mov x4, x2
ffff8000113aec8c: 97fffea0 bl ffff8000113ae70c <dev_xdp_install>
ffff8000113aec90: 34fff1c0 cbz w0, ffff8000113aeac8 <rollback_registered_many+0x2c0>
ffff8000113aec94: d4210000 brk #0x800
ffff8000113aec98: 17ffff8c b ffff8000113aeac8 <rollback_registered_many+0x2c0>
WARN_ON(dev_xdp_install(dev, ndo_bpf, NULL, xdp.prog_flags,
ffff8000113aec9c: d2800002 mov x2, #0x0 // #0
ffff8000113aeca0: b9400ea3 ldr w3, [x21,#12]
ffff8000113aeca4: aa1403e0 mov x0, x20
ffff8000113aeca8: aa1303e1 mov x1, x19
ffff8000113aecac: aa0203e4 mov x4, x2
ffff8000113aecb0: 97fffe97 bl ffff8000113ae70c <dev_xdp_install>
ffff8000113aecb4: 34fff1e0 cbz w0, ffff8000113aeaf0 <rollback_registered_many+0x2e8>
ffff8000113aecb8: d4210000 brk #0x800
ffff8000113aecbc: 17ffff8d b ffff8000113aeaf0 <rollback_registered_many+0x2e8>
BUG_ON(dev_boot_phase);
ffff8000113aecc0: d4210000 brk #0x800
}
ffff8000113aecc4: 94000000 bl 0 <__stack_chk_fail>
ffff8000113aecc4: R_AARCH64_CALL26 __stack_chk_fail
WARN_ON(netdev_has_any_lower_dev(dev));
ffff8000113aecc8: d4210000 brk #0x800
ffff8000113aeccc: 17ffffc5 b ffff8000113aebe0 <rollback_registered_many+0x3d8>
ASSERT_RTNL();
ffff8000113aecd0: 39407740 ldrb w0, [x26,#29]
ffff8000113aecd4: 35fff7e0 cbnz w0, ffff8000113aebd0 <rollback_registered_many+0x3c8>
ffff8000113aecd8: 52800023 mov w3, #0x1 // #1
ffff8000113aecdc: aa1c03e0 mov x0, x28
ffff8000113aece0: aa1b03e1 mov x1, x27
ffff8000113aece4: 528352a2 mov w2, #0x1a95 // #6805
ffff8000113aece8: 39007743 strb w3, [x26,#29]
ffff8000113aecec: 94000000 bl 0 <__warn_printk>
ffff8000113aecec: R_AARCH64_CALL26 __warn_printk
ffff8000113aecf0: d4210000 brk #0x800
ffff8000113aecf4: 17ffffb7 b ffff8000113aebd0 <rollback_registered_many+0x3c8>
WARN_ON(netdev_has_any_upper_dev(dev));
ffff8000113aecf8: d4210000 brk #0x800
ffff8000113aecfc: 17ffffb3 b ffff8000113aebc8 <rollback_registered_many+0x3c0>
WARN_ON(ndo_bpf(dev, &xdp));
ffff8000113aed00: d4210000 brk #0x800
ffff8000113aed04: 17ffff6f b ffff8000113aeac0 <rollback_registered_many+0x2b8>
WARN_ON(dev_xdp_install(dev, generic_xdp_install, NULL, 0, NULL));
ffff8000113aed08: d4210000 brk #0x800
ffff8000113aed0c: 17ffff62 b ffff8000113aea94 <rollback_registered_many+0x28c>
pr_debug("unregister_netdevice: device %s/%p never was registered\n",
ffff8000113aed10: aa1803e0 mov x0, x24
ffff8000113aed14: aa1a03e1 mov x1, x26
ffff8000113aed18: aa1403e2 mov x2, x20
ffff8000113aed1c: aa1403e3 mov x3, x20
ffff8000113aed20: 94000000 bl 0 <__dynamic_pr_debug>
ffff8000113aed20: R_AARCH64_CALL26 __dynamic_pr_debug
ffff8000113aed24: 17fffedc b ffff8000113ae894 <rollback_registered_many+0x8c>
ASSERT_RTNL();
ffff8000113aed28: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113aed28: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113aed2c: 91000063 add x3, x3, #0x0
ffff8000113aed2c: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113aed30: 39407060 ldrb w0, [x3,#28]
ffff8000113aed34: 35ffd940 cbnz w0, ffff8000113ae85c <rollback_registered_many+0x54>
ffff8000113aed38: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113aed38: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113aed3c: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113aed3c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113aed40: 52800024 mov w4, #0x1 // #1
ffff8000113aed44: 91000000 add x0, x0, #0x0
ffff8000113aed44: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113aed48: 91000021 add x1, x1, #0x0
ffff8000113aed48: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113aed4c: 528449e2 mov w2, #0x224f // #8783
ffff8000113aed50: 39007064 strb w4, [x3,#28]
ffff8000113aed54: 94000000 bl 0 <__warn_printk>
ffff8000113aed54: R_AARCH64_CALL26 __warn_printk
ffff8000113aed58: d4210000 brk #0x800
ffff8000113aed5c: 17fffec0 b ffff8000113ae85c <rollback_registered_many+0x54>
ffff8000113aed60 <rollback_registered>:
{
ffff8000113aed60: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113aed64: 910003fd mov x29, sp
ffff8000113aed68: a90153f3 stp x19, x20, [sp,#16]
ffff8000113aed6c: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113aed70: aa0003f6 mov x22, x0
ffff8000113aed74: aa1e03e0 mov x0, x30
ffff8000113aed78: 94000000 bl 0 <_mcount>
ffff8000113aed78: R_AARCH64_CALL26 _mcount
ffff8000113aed7c: 90000015 adrp x21, 0 <__stack_chk_guard>
ffff8000113aed7c: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
LIST_HEAD(single);
ffff8000113aed80: 9100e3b3 add x19, x29, #0x38
{
ffff8000113aed84: f94002a3 ldr x3, [x21]
ffff8000113aed84: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
list_add(&dev->unreg_list, &single);
ffff8000113aed88: 9101a2d4 add x20, x22, #0x68
if (!__list_add_valid(new, prev, next))
ffff8000113aed8c: aa1403e0 mov x0, x20
ffff8000113aed90: aa1303e1 mov x1, x19
ffff8000113aed94: aa1303e2 mov x2, x19
{
ffff8000113aed98: f90027a3 str x3, [x29,#72]
LIST_HEAD(single);
ffff8000113aed9c: f9001fb3 str x19, [x29,#56]
ffff8000113aeda0: f90023b3 str x19, [x29,#64]
ffff8000113aeda4: 94000000 bl 0 <__list_add_valid>
ffff8000113aeda4: R_AARCH64_CALL26 __list_add_valid
ffff8000113aeda8: 53001c00 uxtb w0, w0
ffff8000113aedac: 340000a0 cbz w0, ffff8000113aedc0 <rollback_registered+0x60>
new->next = next;
ffff8000113aedb0: f90036d3 str x19, [x22,#104]
next->prev = new;
ffff8000113aedb4: f90023b4 str x20, [x29,#64]
new->prev = prev;
ffff8000113aedb8: f9003ad3 str x19, [x22,#112]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113aedbc: f9001fb4 str x20, [x29,#56]
rollback_registered_many(&single);
ffff8000113aedc0: aa1303e0 mov x0, x19
ffff8000113aedc4: 97fffe91 bl ffff8000113ae808 <rollback_registered_many>
if (!__list_del_entry_valid(entry))
ffff8000113aedc8: aa1303e0 mov x0, x19
ffff8000113aedcc: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113aedcc: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113aedd0: 53001c00 uxtb w0, w0
ffff8000113aedd4: 340000a0 cbz w0, ffff8000113aede8 <rollback_registered+0x88>
__list_del(entry->prev, entry->next);
ffff8000113aedd8: f94023a0 ldr x0, [x29,#64]
ffff8000113aeddc: f9401fa1 ldr x1, [x29,#56]
next->prev = prev;
ffff8000113aede0: f9000420 str x0, [x1,#8]
ffff8000113aede4: f9000001 str x1, [x0]
}
ffff8000113aede8: f94027a1 ldr x1, [x29,#72]
ffff8000113aedec: f94002a0 ldr x0, [x21]
ffff8000113aedec: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113aedf0: eb00003f cmp x1, x0
ffff8000113aedf4: 540000a1 b.ne ffff8000113aee08 <rollback_registered+0xa8>
ffff8000113aedf8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113aedfc: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113aee00: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113aee04: d65f03c0 ret
ffff8000113aee08: 94000000 bl 0 <__stack_chk_fail>
ffff8000113aee08: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113aee0c <unregister_netdevice_queue>:
{
ffff8000113aee0c: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113aee10: 910003fd mov x29, sp
ffff8000113aee14: a90153f3 stp x19, x20, [sp,#16]
ffff8000113aee18: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113aee1c: aa0003f5 mov x21, x0
ffff8000113aee20: aa1e03e0 mov x0, x30
ffff8000113aee24: aa0103f3 mov x19, x1
ffff8000113aee28: 94000000 bl 0 <_mcount>
ffff8000113aee28: R_AARCH64_CALL26 _mcount
ASSERT_RTNL();
ffff8000113aee2c: 94000000 bl 0 <rtnl_is_locked>
ffff8000113aee2c: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113aee30: 34000660 cbz w0, ffff8000113aeefc <unregister_netdevice_queue+0xf0>
if (head) {
ffff8000113aee34: b4000333 cbz x19, ffff8000113aee98 <unregister_netdevice_queue+0x8c>
list_move_tail(&dev->unreg_list, head);
ffff8000113aee38: 9101a2b4 add x20, x21, #0x68
if (!__list_del_entry_valid(entry))
ffff8000113aee3c: aa1403e0 mov x0, x20
ffff8000113aee40: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113aee40: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113aee44: 53001c00 uxtb w0, w0
ffff8000113aee48: 340000a0 cbz w0, ffff8000113aee5c <unregister_netdevice_queue+0x50>
__list_del(entry->prev, entry->next);
ffff8000113aee4c: f9400680 ldr x0, [x20,#8]
ffff8000113aee50: f94036a1 ldr x1, [x21,#104]
next->prev = prev;
ffff8000113aee54: f9000420 str x0, [x1,#8]
ffff8000113aee58: f9000001 str x1, [x0]
__list_add(new, head->prev, head);
ffff8000113aee5c: f9400676 ldr x22, [x19,#8]
if (!__list_add_valid(new, prev, next))
ffff8000113aee60: aa1403e0 mov x0, x20
ffff8000113aee64: aa1603e1 mov x1, x22
ffff8000113aee68: aa1303e2 mov x2, x19
ffff8000113aee6c: 94000000 bl 0 <__list_add_valid>
ffff8000113aee6c: R_AARCH64_CALL26 __list_add_valid
ffff8000113aee70: 53001c00 uxtb w0, w0
ffff8000113aee74: 340000a0 cbz w0, ffff8000113aee88 <unregister_netdevice_queue+0x7c>
next->prev = new;
ffff8000113aee78: f9000674 str x20, [x19,#8]
new->next = next;
ffff8000113aee7c: f90036b3 str x19, [x21,#104]
new->prev = prev;
ffff8000113aee80: f9000696 str x22, [x20,#8]
ffff8000113aee84: f90002d4 str x20, [x22]
}
ffff8000113aee88: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113aee8c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113aee90: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113aee94: d65f03c0 ret
__list_add(new, head->prev, head);
ffff8000113aee98: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff8000113aee98: R_AARCH64_ADR_PREL_PG_HI21 .data
rollback_registered(dev);
ffff8000113aee9c: aa1503e0 mov x0, x21
ffff8000113aeea0: 91000273 add x19, x19, #0x0
ffff8000113aeea0: R_AARCH64_ADD_ABS_LO12_NC .data
ffff8000113aeea4: 97ffffaf bl ffff8000113aed60 <rollback_registered>
ffff8000113aeea8: f9408276 ldr x22, [x19,#256]
list_add_tail(&dev->todo_list, &net_todo_list);
ffff8000113aeeac: 9112c2b4 add x20, x21, #0x4b0
ffff8000113aeeb0: 9103e273 add x19, x19, #0xf8
if (!__list_add_valid(new, prev, next))
ffff8000113aeeb4: aa1403e0 mov x0, x20
ffff8000113aeeb8: aa1603e1 mov x1, x22
ffff8000113aeebc: aa1303e2 mov x2, x19
ffff8000113aeec0: 94000000 bl 0 <__list_add_valid>
ffff8000113aeec0: R_AARCH64_CALL26 __list_add_valid
ffff8000113aeec4: 53001c00 uxtb w0, w0
ffff8000113aeec8: 340000a0 cbz w0, ffff8000113aeedc <unregister_netdevice_queue+0xd0>
new->next = next;
ffff8000113aeecc: f9025ab3 str x19, [x21,#1200]
next->prev = new;
ffff8000113aeed0: f9000674 str x20, [x19,#8]
new->prev = prev;
ffff8000113aeed4: f9025eb6 str x22, [x21,#1208]
ffff8000113aeed8: f90002d4 str x20, [x22]
ffff8000113aeedc: f9427aa0 ldr x0, [x21,#1264]
dev_net(dev)->dev_unreg_count++;
ffff8000113aeee0: b9400c01 ldr w1, [x0,#12]
ffff8000113aeee4: 11000421 add w1, w1, #0x1
ffff8000113aeee8: b9000c01 str w1, [x0,#12]
}
ffff8000113aeeec: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113aeef0: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113aeef4: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113aeef8: d65f03c0 ret
ASSERT_RTNL();
ffff8000113aeefc: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113aeefc: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113aef00: 91000063 add x3, x3, #0x0
ffff8000113aef00: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113aef04: 39407860 ldrb w0, [x3,#30]
ffff8000113aef08: 35fff960 cbnz w0, ffff8000113aee34 <unregister_netdevice_queue+0x28>
ffff8000113aef0c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113aef0c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113aef10: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113aef10: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113aef14: 52800024 mov w4, #0x1 // #1
ffff8000113aef18: 91000000 add x0, x0, #0x0
ffff8000113aef18: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113aef1c: 91000021 add x1, x1, #0x0
ffff8000113aef1c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113aef20: 5284dd82 mov w2, #0x26ec // #9964
ffff8000113aef24: 39007864 strb w4, [x3,#30]
ffff8000113aef28: 94000000 bl 0 <__warn_printk>
ffff8000113aef28: R_AARCH64_CALL26 __warn_printk
ffff8000113aef2c: d4210000 brk #0x800
ffff8000113aef30: 17ffffc1 b ffff8000113aee34 <unregister_netdevice_queue+0x28>
ffff8000113aef34 <unregister_netdev>:
{
ffff8000113aef34: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113aef38: 910003fd mov x29, sp
ffff8000113aef3c: f9000bf3 str x19, [sp,#16]
ffff8000113aef40: aa0003f3 mov x19, x0
ffff8000113aef44: aa1e03e0 mov x0, x30
ffff8000113aef48: 94000000 bl 0 <_mcount>
ffff8000113aef48: R_AARCH64_CALL26 _mcount
rtnl_lock();
ffff8000113aef4c: 94000000 bl 0 <rtnl_lock>
ffff8000113aef4c: R_AARCH64_CALL26 rtnl_lock
unregister_netdevice_queue(dev, NULL);
ffff8000113aef50: aa1303e0 mov x0, x19
ffff8000113aef54: d2800001 mov x1, #0x0 // #0
ffff8000113aef58: 94000000 bl ffff8000113aee0c <unregister_netdevice_queue>
ffff8000113aef58: R_AARCH64_CALL26 unregister_netdevice_queue
rtnl_unlock();
ffff8000113aef5c: 94000000 bl 0 <rtnl_unlock>
ffff8000113aef5c: R_AARCH64_CALL26 rtnl_unlock
}
ffff8000113aef60: f9400bf3 ldr x19, [sp,#16]
ffff8000113aef64: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113aef68: d65f03c0 ret
ffff8000113aef6c <unregister_netdevice_many>:
{
ffff8000113aef6c: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113aef70: 910003fd mov x29, sp
ffff8000113aef74: a90153f3 stp x19, x20, [sp,#16]
ffff8000113aef78: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113aef7c: f9001bf7 str x23, [sp,#48]
ffff8000113aef80: aa0003f7 mov x23, x0
ffff8000113aef84: aa1e03e0 mov x0, x30
ffff8000113aef88: 94000000 bl 0 <_mcount>
ffff8000113aef88: R_AARCH64_CALL26 _mcount
__READ_ONCE_SIZE;
ffff8000113aef8c: f94002e0 ldr x0, [x23]
if (!list_empty(head)) {
ffff8000113aef90: eb0002ff cmp x23, x0
ffff8000113aef94: 54000580 b.eq ffff8000113af044 <unregister_netdevice_many+0xd8>
rollback_registered_many(head);
ffff8000113aef98: aa1703e0 mov x0, x23
ffff8000113aef9c: 97fffe1b bl ffff8000113ae808 <rollback_registered_many>
list_for_each_entry(dev, head, unreg_list)
ffff8000113aefa0: f94002f3 ldr x19, [x23]
ffff8000113aefa4: 90000015 adrp x21, ffff80001139e37c <__my_cpu_offset>
ffff8000113aefa4: R_AARCH64_ADR_PREL_PG_HI21 .data
__list_add(new, head->prev, head);
ffff8000113aefa8: 910002b5 add x21, x21, #0x0
ffff8000113aefa8: R_AARCH64_ADD_ABS_LO12_NC .data
ffff8000113aefac: eb1302ff cmp x23, x19
ffff8000113aefb0: 9103e2b5 add x21, x21, #0xf8
ffff8000113aefb4: d101a273 sub x19, x19, #0x68
ffff8000113aefb8: 540002a0 b.eq ffff8000113af00c <unregister_netdevice_many+0xa0>
ffff8000113aefbc: f94006b6 ldr x22, [x21,#8]
list_add_tail(&dev->todo_list, &net_todo_list);
ffff8000113aefc0: 9112c274 add x20, x19, #0x4b0
if (!__list_add_valid(new, prev, next))
ffff8000113aefc4: aa1403e0 mov x0, x20
ffff8000113aefc8: aa1603e1 mov x1, x22
ffff8000113aefcc: aa1503e2 mov x2, x21
ffff8000113aefd0: 94000000 bl 0 <__list_add_valid>
ffff8000113aefd0: R_AARCH64_CALL26 __list_add_valid
ffff8000113aefd4: 53001c00 uxtb w0, w0
ffff8000113aefd8: 340000a0 cbz w0, ffff8000113aefec <unregister_netdevice_many+0x80>
new->next = next;
ffff8000113aefdc: f9025a75 str x21, [x19,#1200]
new->prev = prev;
ffff8000113aefe0: f9025e76 str x22, [x19,#1208]
next->prev = new;
ffff8000113aefe4: f90006b4 str x20, [x21,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113aefe8: f90002d4 str x20, [x22]
ffff8000113aefec: f9427a61 ldr x1, [x19,#1264]
dev_net(dev)->dev_unreg_count++;
ffff8000113aeff0: b9400c20 ldr w0, [x1,#12]
ffff8000113aeff4: 11000400 add w0, w0, #0x1
ffff8000113aeff8: b9000c20 str w0, [x1,#12]
list_for_each_entry(dev, head, unreg_list)
ffff8000113aeffc: f9403673 ldr x19, [x19,#104]
ffff8000113af000: eb1302ff cmp x23, x19
ffff8000113af004: d101a273 sub x19, x19, #0x68
ffff8000113af008: 54fffda1 b.ne ffff8000113aefbc <unregister_netdevice_many+0x50>
if (!__list_del_entry_valid(entry))
ffff8000113af00c: aa1703e0 mov x0, x23
ffff8000113af010: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113af010: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113af014: 53001c00 uxtb w0, w0
ffff8000113af018: 340000a0 cbz w0, ffff8000113af02c <unregister_netdevice_many+0xc0>
__list_del(entry->prev, entry->next);
ffff8000113af01c: f94006e0 ldr x0, [x23,#8]
ffff8000113af020: f94002e1 ldr x1, [x23]
next->prev = prev;
ffff8000113af024: f9000420 str x0, [x1,#8]
ffff8000113af028: f9000001 str x1, [x0]
entry->next = LIST_POISON1;
ffff8000113af02c: d2802001 mov x1, #0x100 // #256
entry->prev = LIST_POISON2;
ffff8000113af030: d2802440 mov x0, #0x122 // #290
entry->next = LIST_POISON1;
ffff8000113af034: f2fbd5a1 movk x1, #0xdead, lsl #48
entry->prev = LIST_POISON2;
ffff8000113af038: f2fbd5a0 movk x0, #0xdead, lsl #48
entry->next = LIST_POISON1;
ffff8000113af03c: f90002e1 str x1, [x23]
entry->prev = LIST_POISON2;
ffff8000113af040: f90006e0 str x0, [x23,#8]
}
ffff8000113af044: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113af048: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113af04c: f9401bf7 ldr x23, [sp,#48]
ffff8000113af050: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113af054: d65f03c0 ret
ffff8000113af058 <default_device_exit_batch>:
}
remove_wait_queue(&netdev_unregistering_wq, &wait);
}
static void __net_exit default_device_exit_batch(struct list_head *net_list)
{
ffff8000113af058: a9b87bfd stp x29, x30, [sp,#-128]!
ffff8000113af05c: 910003fd mov x29, sp
ffff8000113af060: a90153f3 stp x19, x20, [sp,#16]
ffff8000113af064: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113af068: a90363f7 stp x23, x24, [sp,#48]
ffff8000113af06c: aa0003f4 mov x20, x0
ffff8000113af070: aa1e03e0 mov x0, x30
ffff8000113af074: 94000000 bl 0 <_mcount>
ffff8000113af074: R_AARCH64_CALL26 _mcount
ffff8000113af078: 90000016 adrp x22, 0 <__stack_chk_guard>
ffff8000113af078: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
add_wait_queue(&netdev_unregistering_wq, &wait);
ffff8000113af07c: 90000013 adrp x19, ffff80001139e37c <__my_cpu_offset>
ffff8000113af07c: R_AARCH64_ADR_PREL_PG_HI21 .data
DEFINE_WAIT_FUNC(wait, woken_wake_function);
ffff8000113af080: a9057fbf stp xzr, xzr, [x29,#80]
ffff8000113af084: d5384103 mrs x3, sp_el0
{
ffff8000113af088: f94002c4 ldr x4, [x22]
ffff8000113af088: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
add_wait_queue(&netdev_unregistering_wq, &wait);
ffff8000113af08c: 91000260 add x0, x19, #0x0
ffff8000113af08c: R_AARCH64_ADD_ABS_LO12_NC .data
DEFINE_WAIT_FUNC(wait, woken_wake_function);
ffff8000113af090: f9002fa3 str x3, [x29,#88]
ffff8000113af094: 90000003 adrp x3, 0 <woken_wake_function>
ffff8000113af094: R_AARCH64_ADR_PREL_PG_HI21 woken_wake_function
* Do this across as many network namespaces as possible to
* improve batching efficiency.
*/
struct net_device *dev;
struct net *net;
LIST_HEAD(dev_kill_list);
ffff8000113af098: 910103b5 add x21, x29, #0x40
DEFINE_WAIT_FUNC(wait, woken_wake_function);
ffff8000113af09c: 9101a3a2 add x2, x29, #0x68
ffff8000113af0a0: 91000063 add x3, x3, #0x0
ffff8000113af0a0: R_AARCH64_ADD_ABS_LO12_NC woken_wake_function
ffff8000113af0a4: 910143a1 add x1, x29, #0x50
add_wait_queue(&netdev_unregistering_wq, &wait);
ffff8000113af0a8: 91042000 add x0, x0, #0x108
{
ffff8000113af0ac: f9003fa4 str x4, [x29,#120]
LIST_HEAD(dev_kill_list);
ffff8000113af0b0: f90023b5 str x21, [x29,#64]
ffff8000113af0b4: f90027b5 str x21, [x29,#72]
DEFINE_WAIT_FUNC(wait, woken_wake_function);
ffff8000113af0b8: f90033a3 str x3, [x29,#96]
ffff8000113af0bc: f90037a2 str x2, [x29,#104]
ffff8000113af0c0: f9003ba2 str x2, [x29,#112]
add_wait_queue(&netdev_unregistering_wq, &wait);
ffff8000113af0c4: 94000000 bl 0 <add_wait_queue>
ffff8000113af0c4: R_AARCH64_CALL26 add_wait_queue
rtnl_lock();
ffff8000113af0c8: 94000000 bl 0 <rtnl_lock>
ffff8000113af0c8: R_AARCH64_CALL26 rtnl_lock
list_for_each_entry(net, net_list, exit_list) {
ffff8000113af0cc: f9400280 ldr x0, [x20]
ffff8000113af0d0: eb00029f cmp x20, x0
ffff8000113af0d4: d100c003 sub x3, x0, #0x30
ffff8000113af0d8: 54000140 b.eq ffff8000113af100 <default_device_exit_batch+0xa8>
if (net->dev_unreg_count > 0) {
ffff8000113af0dc: b85dc000 ldur w0, [x0,#-36]
ffff8000113af0e0: 34000080 cbz w0, ffff8000113af0f0 <default_device_exit_batch+0x98>
ffff8000113af0e4: 14000035 b ffff8000113af1b8 <default_device_exit_batch+0x160>
ffff8000113af0e8: b85dc042 ldur w2, [x2,#-36]
ffff8000113af0ec: 35000662 cbnz w2, ffff8000113af1b8 <default_device_exit_batch+0x160>
list_for_each_entry(net, net_list, exit_list) {
ffff8000113af0f0: f9401862 ldr x2, [x3,#48]
ffff8000113af0f4: eb02029f cmp x20, x2
ffff8000113af0f8: d100c043 sub x3, x2, #0x30
ffff8000113af0fc: 54ffff61 b.ne ffff8000113af0e8 <default_device_exit_batch+0x90>
remove_wait_queue(&netdev_unregistering_wq, &wait);
ffff8000113af100: 91000260 add x0, x19, #0x0
ffff8000113af100: R_AARCH64_ADD_ABS_LO12_NC .data
ffff8000113af104: 91042000 add x0, x0, #0x108
ffff8000113af108: 910143a1 add x1, x29, #0x50
ffff8000113af10c: 94000000 bl 0 <remove_wait_queue>
ffff8000113af10c: R_AARCH64_CALL26 remove_wait_queue
* unregistrations that happen in default_device_exit_batch
* will run in the rtnl_unlock() at the end of
* default_device_exit_batch.
*/
rtnl_lock_unregistering(net_list);
list_for_each_entry(net, net_list, exit_list) {
ffff8000113af110: f9400298 ldr x24, [x20]
ffff8000113af114: eb18029f cmp x20, x24
ffff8000113af118: d100c318 sub x24, x24, #0x30
ffff8000113af11c: 54000360 b.eq ffff8000113af188 <default_device_exit_batch+0x130>
for_each_netdev_reverse(net, dev) {
ffff8000113af120: f9404f13 ldr x19, [x24,#152]
ffff8000113af124: 91024317 add x23, x24, #0x90
ffff8000113af128: eb1302ff cmp x23, x19
ffff8000113af12c: d1012273 sub x19, x19, #0x48
ffff8000113af130: 540000e1 b.ne ffff8000113af14c <default_device_exit_batch+0xf4>
ffff8000113af134: 14000011 b ffff8000113af178 <default_device_exit_batch+0x120>
if (dev->rtnl_link_ops && dev->rtnl_link_ops->dellink)
dev->rtnl_link_ops->dellink(dev, &dev_kill_list);
ffff8000113af138: d63f0040 blr x2
for_each_netdev_reverse(net, dev) {
ffff8000113af13c: f9402a73 ldr x19, [x19,#80]
ffff8000113af140: eb1302ff cmp x23, x19
ffff8000113af144: d1012273 sub x19, x19, #0x48
ffff8000113af148: 54000180 b.eq ffff8000113af178 <default_device_exit_batch+0x120>
if (dev->rtnl_link_ops && dev->rtnl_link_ops->dellink)
ffff8000113af14c: f9441a62 ldr x2, [x19,#2096]
dev->rtnl_link_ops->dellink(dev, &dev_kill_list);
ffff8000113af150: aa1303e0 mov x0, x19
ffff8000113af154: aa1503e1 mov x1, x21
if (dev->rtnl_link_ops && dev->rtnl_link_ops->dellink)
ffff8000113af158: b4000062 cbz x2, ffff8000113af164 <default_device_exit_batch+0x10c>
ffff8000113af15c: f9402842 ldr x2, [x2,#80]
ffff8000113af160: b5fffec2 cbnz x2, ffff8000113af138 <default_device_exit_batch+0xe0>
else
unregister_netdevice_queue(dev, &dev_kill_list);
ffff8000113af164: 94000000 bl ffff8000113aee0c <unregister_netdevice_queue>
ffff8000113af164: R_AARCH64_CALL26 unregister_netdevice_queue
for_each_netdev_reverse(net, dev) {
ffff8000113af168: f9402a73 ldr x19, [x19,#80]
ffff8000113af16c: eb1302ff cmp x23, x19
ffff8000113af170: d1012273 sub x19, x19, #0x48
ffff8000113af174: 54fffec1 b.ne ffff8000113af14c <default_device_exit_batch+0xf4>
list_for_each_entry(net, net_list, exit_list) {
ffff8000113af178: f9401b18 ldr x24, [x24,#48]
ffff8000113af17c: eb18029f cmp x20, x24
ffff8000113af180: d100c318 sub x24, x24, #0x30
ffff8000113af184: 54fffce1 b.ne ffff8000113af120 <default_device_exit_batch+0xc8>
}
}
unregister_netdevice_many(&dev_kill_list);
ffff8000113af188: aa1503e0 mov x0, x21
ffff8000113af18c: 94000000 bl ffff8000113aef6c <unregister_netdevice_many>
ffff8000113af18c: R_AARCH64_CALL26 unregister_netdevice_many
rtnl_unlock();
ffff8000113af190: 94000000 bl 0 <rtnl_unlock>
ffff8000113af190: R_AARCH64_CALL26 rtnl_unlock
}
ffff8000113af194: f9403fa1 ldr x1, [x29,#120]
ffff8000113af198: f94002c0 ldr x0, [x22]
ffff8000113af198: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113af19c: eb00003f cmp x1, x0
ffff8000113af1a0: 54000181 b.ne ffff8000113af1d0 <default_device_exit_batch+0x178>
ffff8000113af1a4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113af1a8: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113af1ac: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113af1b0: a8c87bfd ldp x29, x30, [sp],#128
ffff8000113af1b4: d65f03c0 ret
__rtnl_unlock();
ffff8000113af1b8: 94000000 bl 0 <__rtnl_unlock>
ffff8000113af1b8: R_AARCH64_CALL26 __rtnl_unlock
wait_woken(&wait, TASK_UNINTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
ffff8000113af1bc: 910143a0 add x0, x29, #0x50
ffff8000113af1c0: 52800041 mov w1, #0x2 // #2
ffff8000113af1c4: 92f00002 mov x2, #0x7fffffffffffffff // #9223372036854775807
ffff8000113af1c8: 94000000 bl 0 <wait_woken>
ffff8000113af1c8: R_AARCH64_CALL26 wait_woken
ffff8000113af1cc: 17ffffbf b ffff8000113af0c8 <default_device_exit_batch+0x70>
}
ffff8000113af1d0: 94000000 bl 0 <__stack_chk_fail>
ffff8000113af1d0: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113af1d4 <dev_change_xdp_fd>:
{
ffff8000113af1d4: a9ba7bfd stp x29, x30, [sp,#-96]!
ffff8000113af1d8: 910003fd mov x29, sp
ffff8000113af1dc: a90153f3 stp x19, x20, [sp,#16]
ffff8000113af1e0: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113af1e4: a90363f7 stp x23, x24, [sp,#48]
ffff8000113af1e8: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113af1ec: a90573fb stp x27, x28, [sp,#80]
ffff8000113af1f0: aa0003f4 mov x20, x0
ffff8000113af1f4: aa1e03e0 mov x0, x30
ffff8000113af1f8: aa0103f9 mov x25, x1
ffff8000113af1fc: 2a0203fa mov w26, w2
ffff8000113af200: 2a0303fb mov w27, w3
ffff8000113af204: 2a0403f3 mov w19, w4
ffff8000113af208: 94000000 bl 0 <_mcount>
ffff8000113af208: R_AARCH64_CALL26 _mcount
const struct net_device_ops *ops = dev->netdev_ops;
ffff8000113af20c: f940fa98 ldr x24, [x20,#496]
ASSERT_RTNL();
ffff8000113af210: 94000000 bl 0 <rtnl_is_locked>
ffff8000113af210: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113af214: 34001360 cbz w0, ffff8000113af480 <dev_change_xdp_fd+0x2ac>
offload = flags & XDP_FLAGS_HW_MODE;
ffff8000113af218: d3430e76 ubfx x22, x19, #3, #1
bpf_op = bpf_chk = ops->ndo_bpf;
ffff8000113af21c: f9412715 ldr x21, [x24,#584]
query = offload ? XDP_QUERY_PROG_HW : XDP_QUERY_PROG;
ffff8000113af220: 6b1f02df cmp w22, wzr
ffff8000113af224: 52800061 mov w1, #0x3 // #3
ffff8000113af228: 52800042 mov w2, #0x2 // #2
ffff8000113af22c: 1a810042 csel w2, w2, w1, eq
if (!bpf_op && (flags & (XDP_FLAGS_DRV_MODE | XDP_FLAGS_HW_MODE))) {
ffff8000113af230: b4000f55 cbz x21, ffff8000113af418 <dev_change_xdp_fd+0x244>
if (!bpf_op || (flags & XDP_FLAGS_SKB_MODE))
ffff8000113af234: 36080473 tbz w19, #1, ffff8000113af2c0 <dev_change_xdp_fd+0xec>
ffff8000113af238: 90000017 adrp x23, ffff80001139e37c <__my_cpu_offset>
ffff8000113af238: R_AARCH64_ADR_PREL_PG_HI21 .text+0x11b1c
ffff8000113af23c: 910002f7 add x23, x23, #0x0
ffff8000113af23c: R_AARCH64_ADD_ABS_LO12_NC .text+0x11b1c
prog_id = __dev_xdp_query(dev, bpf_op, query);
ffff8000113af240: aa1403e0 mov x0, x20
ffff8000113af244: aa1703e1 mov x1, x23
ffff8000113af248: 94000000 bl ffff8000113ae678 <__dev_xdp_query>
ffff8000113af248: R_AARCH64_CALL26 __dev_xdp_query
ffff8000113af24c: 2a0003fc mov w28, w0
if (flags & XDP_FLAGS_REPLACE) {
ffff8000113af250: 36200493 tbz w19, #4, ffff8000113af2e0 <dev_change_xdp_fd+0x10c>
if (expected_fd >= 0) {
ffff8000113af254: 37f80abb tbnz w27, #31, ffff8000113af3a8 <dev_change_xdp_fd+0x1d4>
prog = bpf_prog_get_type_dev(expected_fd,
ffff8000113af258: f9412701 ldr x1, [x24,#584]
ffff8000113af25c: 2a1b03e0 mov w0, w27
ffff8000113af260: eb17003f cmp x1, x23
ffff8000113af264: 1a9f17e2 cset w2, eq
ffff8000113af268: 528000c1 mov w1, #0x6 // #6
ffff8000113af26c: 94000000 bl 0 <bpf_prog_get_type_dev>
ffff8000113af26c: R_AARCH64_CALL26 bpf_prog_get_type_dev
if (IS_ERR(prog))
ffff8000113af270: b140041f cmn x0, #0x1, lsl #12
ffff8000113af274: 54000188 b.hi ffff8000113af2a4 <dev_change_xdp_fd+0xd0>
expected_id = prog->aux->id;
ffff8000113af278: f9401001 ldr x1, [x0,#32]
ffff8000113af27c: b9401c3b ldr w27, [x1,#28]
bpf_prog_put(prog);
ffff8000113af280: 94000000 bl 0 <bpf_prog_put>
ffff8000113af280: R_AARCH64_CALL26 bpf_prog_put
if (prog_id != expected_id) {
ffff8000113af284: 6b1b039f cmp w28, w27
ffff8000113af288: 540002c0 b.eq ffff8000113af2e0 <dev_change_xdp_fd+0x10c>
NL_SET_ERR_MSG(extack, "Active program does not match expected");
ffff8000113af28c: b40000b9 cbz x25, ffff8000113af2a0 <dev_change_xdp_fd+0xcc>
ffff8000113af290: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af290: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113af294: 91000000 add x0, x0, #0x0
ffff8000113af294: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113af298: 91042000 add x0, x0, #0x108
ffff8000113af29c: f9000320 str x0, [x25]
return -EEXIST;
ffff8000113af2a0: 12800200 mov w0, #0xffffffef // #-17
}
ffff8000113af2a4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113af2a8: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113af2ac: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113af2b0: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113af2b4: a94573fb ldp x27, x28, [sp,#80]
ffff8000113af2b8: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113af2bc: d65f03c0 ret
if (!bpf_op || (flags & XDP_FLAGS_SKB_MODE))
ffff8000113af2c0: aa1503f7 mov x23, x21
prog_id = __dev_xdp_query(dev, bpf_op, query);
ffff8000113af2c4: aa1403e0 mov x0, x20
ffff8000113af2c8: aa1703e1 mov x1, x23
bpf_chk = generic_xdp_install;
ffff8000113af2cc: 90000015 adrp x21, ffff80001139e37c <__my_cpu_offset>
ffff8000113af2cc: R_AARCH64_ADR_PREL_PG_HI21 .text+0x11b1c
prog_id = __dev_xdp_query(dev, bpf_op, query);
ffff8000113af2d0: 94000000 bl ffff8000113ae678 <__dev_xdp_query>
ffff8000113af2d0: R_AARCH64_CALL26 __dev_xdp_query
bpf_chk = generic_xdp_install;
ffff8000113af2d4: 910002b5 add x21, x21, #0x0
ffff8000113af2d4: R_AARCH64_ADD_ABS_LO12_NC .text+0x11b1c
prog_id = __dev_xdp_query(dev, bpf_op, query);
ffff8000113af2d8: 2a0003fc mov w28, w0
if (flags & XDP_FLAGS_REPLACE) {
ffff8000113af2dc: 3727fbd3 tbnz w19, #4, ffff8000113af254 <dev_change_xdp_fd+0x80>
if (fd >= 0) {
ffff8000113af2e0: 37f808ba tbnz w26, #31, ffff8000113af3f4 <dev_change_xdp_fd+0x220>
if (!offload && __dev_xdp_query(dev, bpf_chk, XDP_QUERY_PROG)) {
ffff8000113af2e4: 34000676 cbz w22, ffff8000113af3b0 <dev_change_xdp_fd+0x1dc>
if ((flags & XDP_FLAGS_UPDATE_IF_NOEXIST) && prog_id) {
ffff8000113af2e8: 360001f3 tbz w19, #0, ffff8000113af324 <dev_change_xdp_fd+0x150>
ffff8000113af2ec: 340001dc cbz w28, ffff8000113af324 <dev_change_xdp_fd+0x150>
NL_SET_ERR_MSG(extack, "XDP program already attached");
ffff8000113af2f0: b4000c19 cbz x25, ffff8000113af470 <dev_change_xdp_fd+0x29c>
ffff8000113af2f4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af2f4: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113af2f8: 91000000 add x0, x0, #0x0
ffff8000113af2f8: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113af2fc: 9105a000 add x0, x0, #0x168
ffff8000113af300: f9000320 str x0, [x25]
}
ffff8000113af304: a94153f3 ldp x19, x20, [sp,#16]
return -EBUSY;
ffff8000113af308: 128001e0 mov w0, #0xfffffff0 // #-16
}
ffff8000113af30c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113af310: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113af314: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113af318: a94573fb ldp x27, x28, [sp,#80]
ffff8000113af31c: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113af320: d65f03c0 ret
prog = bpf_prog_get_type_dev(fd, BPF_PROG_TYPE_XDP,
ffff8000113af324: f9412701 ldr x1, [x24,#584]
ffff8000113af328: 2a1a03e0 mov w0, w26
ffff8000113af32c: eb17003f cmp x1, x23
ffff8000113af330: 1a9f17e2 cset w2, eq
ffff8000113af334: 528000c1 mov w1, #0x6 // #6
ffff8000113af338: 94000000 bl 0 <bpf_prog_get_type_dev>
ffff8000113af338: R_AARCH64_CALL26 bpf_prog_get_type_dev
ffff8000113af33c: aa0003f5 mov x21, x0
if (IS_ERR(prog))
ffff8000113af340: b14006bf cmn x21, #0x1, lsl #12
ffff8000113af344: 54fffb08 b.hi ffff8000113af2a4 <dev_change_xdp_fd+0xd0>
if (!offload && bpf_prog_is_dev_bound(prog->aux)) {
ffff8000113af348: f94012a0 ldr x0, [x21,#32]
ffff8000113af34c: 35000076 cbnz w22, ffff8000113af358 <dev_change_xdp_fd+0x184>
ffff8000113af350: 3940e401 ldrb w1, [x0,#57]
ffff8000113af354: 350007c1 cbnz w1, ffff8000113af44c <dev_change_xdp_fd+0x278>
if (prog->aux->id && prog->aux->id == prog_id) {
ffff8000113af358: b9401c00 ldr w0, [x0,#28]
ffff8000113af35c: 34000060 cbz w0, ffff8000113af368 <dev_change_xdp_fd+0x194>
ffff8000113af360: 6b00039f cmp w28, w0
ffff8000113af364: 540006c0 b.eq ffff8000113af43c <dev_change_xdp_fd+0x268>
err = dev_xdp_install(dev, bpf_op, extack, flags, prog);
ffff8000113af368: 2a1303e3 mov w3, w19
ffff8000113af36c: aa1403e0 mov x0, x20
ffff8000113af370: aa1703e1 mov x1, x23
ffff8000113af374: aa1903e2 mov x2, x25
ffff8000113af378: aa1503e4 mov x4, x21
ffff8000113af37c: 97fffce4 bl ffff8000113ae70c <dev_xdp_install>
ffff8000113af380: 2a0003f3 mov w19, w0
if (err < 0 && prog)
ffff8000113af384: 37f802f3 tbnz w19, #31, ffff8000113af3e0 <dev_change_xdp_fd+0x20c>
err = dev_xdp_install(dev, bpf_op, extack, flags, prog);
ffff8000113af388: 2a1303e0 mov w0, w19
}
ffff8000113af38c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113af390: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113af394: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113af398: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113af39c: a94573fb ldp x27, x28, [sp,#80]
ffff8000113af3a0: a8c67bfd ldp x29, x30, [sp],#96
ffff8000113af3a4: d65f03c0 ret
u32 prog_id, expected_id = 0;
ffff8000113af3a8: 5280001b mov w27, #0x0 // #0
ffff8000113af3ac: 17ffffb6 b ffff8000113af284 <dev_change_xdp_fd+0xb0>
if (!offload && __dev_xdp_query(dev, bpf_chk, XDP_QUERY_PROG)) {
ffff8000113af3b0: aa1403e0 mov x0, x20
ffff8000113af3b4: aa1503e1 mov x1, x21
ffff8000113af3b8: 52800042 mov w2, #0x2 // #2
ffff8000113af3bc: 94000000 bl ffff8000113ae678 <__dev_xdp_query>
ffff8000113af3bc: R_AARCH64_CALL26 __dev_xdp_query
ffff8000113af3c0: 34fff940 cbz w0, ffff8000113af2e8 <dev_change_xdp_fd+0x114>
NL_SET_ERR_MSG(extack, "native and generic XDP can't be active at the same time");
ffff8000113af3c4: b4fff6f9 cbz x25, ffff8000113af2a0 <dev_change_xdp_fd+0xcc>
ffff8000113af3c8: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af3c8: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113af3cc: 91000000 add x0, x0, #0x0
ffff8000113af3cc: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113af3d0: 9104c000 add x0, x0, #0x130
ffff8000113af3d4: f9000320 str x0, [x25]
return -EEXIST;
ffff8000113af3d8: 12800200 mov w0, #0xffffffef // #-17
ffff8000113af3dc: 17ffffb2 b ffff8000113af2a4 <dev_change_xdp_fd+0xd0>
if (err < 0 && prog)
ffff8000113af3e0: b4fffd55 cbz x21, ffff8000113af388 <dev_change_xdp_fd+0x1b4>
bpf_prog_put(prog);
ffff8000113af3e4: aa1503e0 mov x0, x21
ffff8000113af3e8: 94000000 bl 0 <bpf_prog_put>
ffff8000113af3e8: R_AARCH64_CALL26 bpf_prog_put
ffff8000113af3ec: 2a1303e0 mov w0, w19
ffff8000113af3f0: 17ffffad b ffff8000113af2a4 <dev_change_xdp_fd+0xd0>
return 0;
ffff8000113af3f4: 52800000 mov w0, #0x0 // #0
if (!prog_id)
ffff8000113af3f8: 34fff57c cbz w28, ffff8000113af2a4 <dev_change_xdp_fd+0xd0>
err = dev_xdp_install(dev, bpf_op, extack, flags, prog);
ffff8000113af3fc: aa1403e0 mov x0, x20
ffff8000113af400: aa1703e1 mov x1, x23
ffff8000113af404: aa1903e2 mov x2, x25
ffff8000113af408: 2a1303e3 mov w3, w19
ffff8000113af40c: d2800004 mov x4, #0x0 // #0
ffff8000113af410: 97fffcbf bl ffff8000113ae70c <dev_xdp_install>
ffff8000113af414: 17ffffa4 b ffff8000113af2a4 <dev_change_xdp_fd+0xd0>
if (!bpf_op && (flags & (XDP_FLAGS_DRV_MODE | XDP_FLAGS_HW_MODE))) {
ffff8000113af418: 721e067f tst w19, #0xc
ffff8000113af41c: 54fff0e0 b.eq ffff8000113af238 <dev_change_xdp_fd+0x64>
NL_SET_ERR_MSG(extack, "underlying driver does not support XDP in native mode");
ffff8000113af420: b40002d9 cbz x25, ffff8000113af478 <dev_change_xdp_fd+0x2a4>
ffff8000113af424: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af424: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113af428: 91000000 add x0, x0, #0x0
ffff8000113af428: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113af42c: 91034000 add x0, x0, #0xd0
ffff8000113af430: f9000320 str x0, [x25]
return -EOPNOTSUPP;
ffff8000113af434: 12800bc0 mov w0, #0xffffffa1 // #-95
ffff8000113af438: 17ffff9b b ffff8000113af2a4 <dev_change_xdp_fd+0xd0>
bpf_prog_put(prog);
ffff8000113af43c: aa1503e0 mov x0, x21
ffff8000113af440: 94000000 bl 0 <bpf_prog_put>
ffff8000113af440: R_AARCH64_CALL26 bpf_prog_put
return 0;
ffff8000113af444: 52800000 mov w0, #0x0 // #0
ffff8000113af448: 17ffff97 b ffff8000113af2a4 <dev_change_xdp_fd+0xd0>
NL_SET_ERR_MSG(extack, "using device-bound program without HW_MODE flag is not supported");
ffff8000113af44c: b40000b9 cbz x25, ffff8000113af460 <dev_change_xdp_fd+0x28c>
ffff8000113af450: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af450: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113af454: 91000000 add x0, x0, #0x0
ffff8000113af454: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113af458: 91062000 add x0, x0, #0x188
ffff8000113af45c: f9000320 str x0, [x25]
bpf_prog_put(prog);
ffff8000113af460: aa1503e0 mov x0, x21
ffff8000113af464: 94000000 bl 0 <bpf_prog_put>
ffff8000113af464: R_AARCH64_CALL26 bpf_prog_put
return -EINVAL;
ffff8000113af468: 128002a0 mov w0, #0xffffffea // #-22
ffff8000113af46c: 17ffff8e b ffff8000113af2a4 <dev_change_xdp_fd+0xd0>
return -EBUSY;
ffff8000113af470: 128001e0 mov w0, #0xfffffff0 // #-16
ffff8000113af474: 17ffff8c b ffff8000113af2a4 <dev_change_xdp_fd+0xd0>
return -EOPNOTSUPP;
ffff8000113af478: 12800bc0 mov w0, #0xffffffa1 // #-95
ffff8000113af47c: 17ffff8a b ffff8000113af2a4 <dev_change_xdp_fd+0xd0>
ASSERT_RTNL();
ffff8000113af480: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113af480: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113af484: 91000063 add x3, x3, #0x0
ffff8000113af484: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113af488: 39407c60 ldrb w0, [x3,#31]
ffff8000113af48c: 35ffec60 cbnz w0, ffff8000113af218 <dev_change_xdp_fd+0x44>
ffff8000113af490: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af490: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113af494: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113af494: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113af498: 52800024 mov w4, #0x1 // #1
ffff8000113af49c: 91000000 add x0, x0, #0x0
ffff8000113af49c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113af4a0: 91000021 add x1, x1, #0x0
ffff8000113af4a0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113af4a4: 52843c62 mov w2, #0x21e3 // #8675
ffff8000113af4a8: 39007c64 strb w4, [x3,#31]
ffff8000113af4ac: 94000000 bl 0 <__warn_printk>
ffff8000113af4ac: R_AARCH64_CALL26 __warn_printk
ffff8000113af4b0: d4210000 brk #0x800
ffff8000113af4b4: 17ffff59 b ffff8000113af218 <dev_change_xdp_fd+0x44>
ffff8000113af4b8 <__netdev_update_features>:
{
ffff8000113af4b8: a9b87bfd stp x29, x30, [sp,#-128]!
ffff8000113af4bc: 910003fd mov x29, sp
ffff8000113af4c0: a90153f3 stp x19, x20, [sp,#16]
ffff8000113af4c4: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113af4c8: a90363f7 stp x23, x24, [sp,#48]
ffff8000113af4cc: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113af4d0: a90573fb stp x27, x28, [sp,#80]
ffff8000113af4d4: aa0003f6 mov x22, x0
ffff8000113af4d8: aa1e03e0 mov x0, x30
ffff8000113af4dc: 94000000 bl 0 <_mcount>
ffff8000113af4dc: R_AARCH64_CALL26 _mcount
ffff8000113af4e0: 90000017 adrp x23, 0 <__stack_chk_guard>
ffff8000113af4e0: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113af4e4: f94002e0 ldr x0, [x23]
ffff8000113af4e4: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113af4e8: f9003fa0 str x0, [x29,#120]
ASSERT_RTNL();
ffff8000113af4ec: 94000000 bl 0 <rtnl_is_locked>
ffff8000113af4ec: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113af4f0: 34004000 cbz w0, ffff8000113afcf0 <__netdev_update_features+0x838>
return (dev->features & ~dev->hw_features) | dev->wanted_features;
ffff8000113af4f4: f9406ac3 ldr x3, [x22,#208]
ffff8000113af4f8: f94066c1 ldr x1, [x22,#200]
ffff8000113af4fc: f9406ec2 ldr x2, [x22,#216]
if (dev->netdev_ops->ndo_fix_features)
ffff8000113af500: f940fac0 ldr x0, [x22,#496]
ffff8000113af504: 8a230021 bic x1, x1, x3
ffff8000113af508: aa020021 orr x1, x1, x2
ffff8000113af50c: f940c402 ldr x2, [x0,#392]
features = netdev_get_wanted_features(dev);
ffff8000113af510: f90033a1 str x1, [x29,#96]
if (dev->netdev_ops->ndo_fix_features)
ffff8000113af514: b4001f22 cbz x2, ffff8000113af8f8 <__netdev_update_features+0x440>
features = dev->netdev_ops->ndo_fix_features(dev, features);
ffff8000113af518: aa1603e0 mov x0, x22
ffff8000113af51c: d63f0040 blr x2
ffff8000113af520: f90033a0 str x0, [x29,#96]
ffff8000113af524: aa0003f8 mov x24, x0
if ((features & NETIF_F_HW_CSUM) &&
ffff8000113af528: 36180098 tbz w24, #3, ffff8000113af538 <__netdev_update_features+0x80>
(features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) {
ffff8000113af52c: d2800240 mov x0, #0x12 // #18
if ((features & NETIF_F_HW_CSUM) &&
ffff8000113af530: ea00031f tst x24, x0
ffff8000113af534: 54003be1 b.ne ffff8000113afcb0 <__netdev_update_features+0x7f8>
if ((features & NETIF_F_ALL_TSO) && !(features & NETIF_F_SG)) {
ffff8000113af538: d2a003a0 mov x0, #0x1d0000 // #1900544
ffff8000113af53c: ea00031f tst x24, x0
ffff8000113af540: 54000040 b.eq ffff8000113af548 <__netdev_update_features+0x90>
ffff8000113af544: 360017b8 tbz w24, #0, ffff8000113af838 <__netdev_update_features+0x380>
if ((features & NETIF_F_TSO) && !(features & NETIF_F_HW_CSUM) &&
ffff8000113af548: d2800140 mov x0, #0xa // #10
ffff8000113af54c: f2a00020 movk x0, #0x1, lsl #16
ffff8000113af550: 8a000300 and x0, x24, x0
ffff8000113af554: f140401f cmp x0, #0x10, lsl #12
ffff8000113af558: 54001880 b.eq ffff8000113af868 <__netdev_update_features+0x3b0>
if ((features & NETIF_F_TSO6) && !(features & NETIF_F_HW_CSUM) &&
ffff8000113af55c: d2800300 mov x0, #0x18 // #24
ffff8000113af560: f2a00200 movk x0, #0x10, lsl #16
ffff8000113af564: 8a000300 and x0, x24, x0
ffff8000113af568: f144001f cmp x0, #0x100, lsl #12
ffff8000113af56c: 54001960 b.eq ffff8000113af898 <__netdev_update_features+0x3e0>
if ((features & NETIF_F_TSO_MANGLEID) && !(features & NETIF_F_TSO))
ffff8000113af570: d2a00120 mov x0, #0x90000 // #589824
ffff8000113af574: 8a000300 and x0, x24, x0
features &= ~NETIF_F_TSO_MANGLEID;
ffff8000113af578: f142001f cmp x0, #0x80, lsl #12
ffff8000113af57c: 926cfb00 and x0, x24, #0xfffffffffff7ffff
ffff8000113af580: 9a980018 csel x24, x0, x24, eq
if ((features & NETIF_F_ALL_TSO) == NETIF_F_TSO_ECN)
ffff8000113af584: d2a003a0 mov x0, #0x1d0000 // #1900544
ffff8000113af588: 8a000300 and x0, x24, x0
features &= ~NETIF_F_TSO_ECN;
ffff8000113af58c: f141001f cmp x0, #0x40, lsl #12
ffff8000113af590: 926dfb00 and x0, x24, #0xfffffffffffbffff
ffff8000113af594: 9a980018 csel x24, x0, x24, eq
if ((features & NETIF_F_GSO) && !(features & NETIF_F_SG)) {
ffff8000113af598: d2810020 mov x0, #0x801 // #2049
ffff8000113af59c: 8a000300 and x0, x24, x0
ffff8000113af5a0: f120001f cmp x0, #0x800
ffff8000113af5a4: 54001b20 b.eq ffff8000113af908 <__netdev_update_features+0x450>
if ((features & dev->gso_partial_features) &&
ffff8000113af5a8: f9407ec1 ldr x1, [x22,#248]
ffff8000113af5ac: ea01031f tst x24, x1
ffff8000113af5b0: 54000040 b.eq ffff8000113af5b8 <__netdev_update_features+0x100>
ffff8000113af5b4: 36e01358 tbz w24, #28, ffff8000113af81c <__netdev_update_features+0x364>
if (!(features & NETIF_F_RXCSUM)) {
ffff8000113af5b8: b7400058 tbnz x24, #40, ffff8000113af5c0 <__netdev_update_features+0x108>
if (features & NETIF_F_GRO_HW) {
ffff8000113af5bc: b7b81238 tbnz x24, #55, ffff8000113af800 <__netdev_update_features+0x348>
if (features & NETIF_F_RXFCS) {
ffff8000113af5c0: b65801f8 tbz x24, #43, ffff8000113af5fc <__netdev_update_features+0x144>
if (features & NETIF_F_LRO) {
ffff8000113af5c4: 367800f8 tbz w24, #15, ffff8000113af5e0 <__netdev_update_features+0x128>
netdev_dbg(dev, "Dropping LRO feature since RX-FCS is requested.\n");
ffff8000113af5c8: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af5c8: R_AARCH64_ADR_PREL_PG_HI21 __verbose
ffff8000113af5cc: 91000000 add x0, x0, #0x0
ffff8000113af5cc: R_AARCH64_ADD_ABS_LO12_NC __verbose
ffff8000113af5d0: 91078000 add x0, x0, #0x1e0
ffff8000113af5d4: 79404401 ldrh w1, [x0,#34]
ffff8000113af5d8: 37103b61 tbnz w1, #2, ffff8000113afd44 <__netdev_update_features+0x88c>
features &= ~NETIF_F_LRO;
ffff8000113af5dc: 9270fb18 and x24, x24, #0xffffffffffff7fff
if (features & NETIF_F_GRO_HW) {
ffff8000113af5e0: b6b800f8 tbz x24, #55, ffff8000113af5fc <__netdev_update_features+0x144>
netdev_dbg(dev, "Dropping HW-GRO feature since RX-FCS is requested.\n");
ffff8000113af5e4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af5e4: R_AARCH64_ADR_PREL_PG_HI21 __verbose
ffff8000113af5e8: 91000000 add x0, x0, #0x0
ffff8000113af5e8: R_AARCH64_ADD_ABS_LO12_NC __verbose
ffff8000113af5ec: 91082000 add x0, x0, #0x208
ffff8000113af5f0: 79404401 ldrh w1, [x0,#34]
ffff8000113af5f4: 371039c1 tbnz w1, #2, ffff8000113afd2c <__netdev_update_features+0x874>
features &= ~NETIF_F_GRO_HW;
ffff8000113af5f8: 9248fb18 and x24, x24, #0xff7fffffffffffff
__READ_ONCE_SIZE;
ffff8000113af5fc: f94056d3 ldr x19, [x22,#168]
netdev_for_each_upper_dev_rcu(dev, upper, iter)
ffff8000113af600: 9102a2d5 add x21, x22, #0xa8
features = netdev_fix_features(dev, features);
ffff8000113af604: f90033b8 str x24, [x29,#96]
if (&upper->list == &dev->adj_list.upper)
ffff8000113af608: eb1302bf cmp x21, x19
ffff8000113af60c: 54001c40 b.eq ffff8000113af994 <__netdev_update_features+0x4dc>
return upper->dev;
ffff8000113af610: f85e8264 ldur x4, [x19,#-24]
netdev_for_each_upper_dev_rcu(dev, upper, iter)
ffff8000113af614: aa1803f4 mov x20, x24
ffff8000113af618: b40002c4 cbz x4, ffff8000113af670 <__netdev_update_features+0x1b8>
netdev_dbg(lower, "Dropping feature %pNF, upper dev %s has it off.\n",
ffff8000113af61c: 90000018 adrp x24, ffff80001139e37c <__my_cpu_offset>
ffff8000113af61c: R_AARCH64_ADR_PREL_PG_HI21 __verbose
ffff8000113af620: 91000318 add x24, x24, #0x0
ffff8000113af620: R_AARCH64_ADD_ABS_LO12_NC __verbose
ffff8000113af624: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af624: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xb20
ffff8000113af628: 9108c318 add x24, x24, #0x230
ffff8000113af62c: 91000019 add x25, x0, #0x0
ffff8000113af62c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xb20
feature = __NETIF_F_BIT(feature_bit);
ffff8000113af630: d2900000 mov x0, #0x8000 // #32768
ffff8000113af634: f90037a0 str x0, [x29,#104]
if (!(upper->wanted_features & feature)
ffff8000113af638: f9406c80 ldr x0, [x4,#216]
ffff8000113af63c: 377800c0 tbnz w0, #15, ffff8000113af654 <__netdev_update_features+0x19c>
&& (features & feature)) {
ffff8000113af640: 367800b4 tbz w20, #15, ffff8000113af654 <__netdev_update_features+0x19c>
netdev_dbg(lower, "Dropping feature %pNF, upper dev %s has it off.\n",
ffff8000113af644: 79404703 ldrh w3, [x24,#34]
ffff8000113af648: 92900001 mov x1, #0xffffffffffff7fff // #-32769
ffff8000113af64c: 37101a83 tbnz w3, #2, ffff8000113af99c <__netdev_update_features+0x4e4>
features &= ~feature;
ffff8000113af650: 8a010294 and x20, x20, x1
features = netdev_sync_upper_features(dev, upper, features);
ffff8000113af654: f90033b4 str x20, [x29,#96]
ffff8000113af658: f9400263 ldr x3, [x19]
if (&upper->list == &dev->adj_list.upper)
ffff8000113af65c: eb0302bf cmp x21, x3
ffff8000113af660: aa0303f3 mov x19, x3
ffff8000113af664: 54000060 b.eq ffff8000113af670 <__netdev_update_features+0x1b8>
return upper->dev;
ffff8000113af668: f85e8064 ldur x4, [x3,#-24]
netdev_for_each_upper_dev_rcu(dev, upper, iter)
ffff8000113af66c: b5fffe24 cbnz x4, ffff8000113af630 <__netdev_update_features+0x178>
if (dev->features == features)
ffff8000113af670: f94066c0 ldr x0, [x22,#200]
ffff8000113af674: eb14001f cmp x0, x20
ffff8000113af678: 54001440 b.eq ffff8000113af900 <__netdev_update_features+0x448>
netdev_dbg(dev, "Features changed: %pNF -> %pNF\n",
ffff8000113af67c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af67c: R_AARCH64_ADR_PREL_PG_HI21 __verbose
ffff8000113af680: 91000000 add x0, x0, #0x0
ffff8000113af680: R_AARCH64_ADD_ABS_LO12_NC __verbose
ffff8000113af684: 91096000 add x0, x0, #0x258
ffff8000113af688: 79404401 ldrh w1, [x0,#34]
ffff8000113af68c: 37102b81 tbnz w1, #2, ffff8000113afbfc <__netdev_update_features+0x744>
if (dev->netdev_ops->ndo_set_features)
ffff8000113af690: f940fac0 ldr x0, [x22,#496]
ffff8000113af694: f940c819 ldr x25, [x0,#400]
ffff8000113af698: b40000d9 cbz x25, ffff8000113af6b0 <__netdev_update_features+0x1f8>
err = dev->netdev_ops->ndo_set_features(dev, features);
ffff8000113af69c: f94033a1 ldr x1, [x29,#96]
ffff8000113af6a0: aa1603e0 mov x0, x22
ffff8000113af6a4: d63f0320 blr x25
ffff8000113af6a8: 2a0003f9 mov w25, w0
if (unlikely(err < 0)) {
ffff8000113af6ac: 37f83119 tbnz w25, #31, ffff8000113afccc <__netdev_update_features+0x814>
netdev_for_each_lower_dev(dev, lower, iter)
ffff8000113af6b0: aa1603f5 mov x21, x22
ffff8000113af6b4: f84b8ea0 ldr x0, [x21,#184]!
if (&lower->list == &dev->adj_list.lower)
ffff8000113af6b8: eb0002bf cmp x21, x0
ffff8000113af6bc: d1006001 sub x1, x0, #0x18
ffff8000113af6c0: 54000420 b.eq ffff8000113af744 <__netdev_update_features+0x28c>
return lower->dev;
ffff8000113af6c4: f85e8014 ldur x20, [x0,#-24]
*iter = lower->list.next;
ffff8000113af6c8: f9400c33 ldr x19, [x1,#24]
netdev_for_each_lower_dev(dev, lower, iter)
ffff8000113af6cc: b40003d4 cbz x20, ffff8000113af744 <__netdev_update_features+0x28c>
netdev_dbg(upper, "Disabling feature %pNF on lower dev %s.\n",
ffff8000113af6d0: 90000018 adrp x24, ffff80001139e37c <__my_cpu_offset>
ffff8000113af6d0: R_AARCH64_ADR_PREL_PG_HI21 __verbose
ffff8000113af6d4: 91000318 add x24, x24, #0x0
ffff8000113af6d4: R_AARCH64_ADD_ABS_LO12_NC __verbose
netdev_WARN(upper, "failed to disable %pNF on %s!\n",
ffff8000113af6d8: 9000001a adrp x26, ffff80001139e37c <__my_cpu_offset>
ffff8000113af6d8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xbe0
netdev_dbg(upper, "Disabling feature %pNF on lower dev %s.\n",
ffff8000113af6dc: 910a0318 add x24, x24, #0x280
netdev_WARN(upper, "failed to disable %pNF on %s!\n",
ffff8000113af6e0: 9100035a add x26, x26, #0x0
ffff8000113af6e0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xbe0
ffff8000113af6e4: 14000004 b ffff8000113af6f4 <__netdev_update_features+0x23c>
return lower->dev;
ffff8000113af6e8: f85e8274 ldur x20, [x19,#-24]
*iter = lower->list.next;
ffff8000113af6ec: f9400273 ldr x19, [x19]
netdev_for_each_lower_dev(dev, lower, iter)
ffff8000113af6f0: b40002b4 cbz x20, ffff8000113af744 <__netdev_update_features+0x28c>
feature = __NETIF_F_BIT(feature_bit);
ffff8000113af6f4: d2900000 mov x0, #0x8000 // #32768
ffff8000113af6f8: f90037a0 str x0, [x29,#104]
if (!(features & feature) && (lower->features & feature)) {
ffff8000113af6fc: f94033a0 ldr x0, [x29,#96]
ffff8000113af700: 377801e0 tbnz w0, #15, ffff8000113af73c <__netdev_update_features+0x284>
ffff8000113af704: f9406681 ldr x1, [x20,#200]
ffff8000113af708: 367801a1 tbz w1, #15, ffff8000113af73c <__netdev_update_features+0x284>
netdev_dbg(upper, "Disabling feature %pNF on lower dev %s.\n",
ffff8000113af70c: 79404700 ldrh w0, [x24,#34]
ffff8000113af710: 92900001 mov x1, #0xffffffffffff7fff // #-32769
ffff8000113af714: 37101a40 tbnz w0, #2, ffff8000113afa5c <__netdev_update_features+0x5a4>
lower->wanted_features &= ~feature;
ffff8000113af718: f9406e82 ldr x2, [x20,#216]
netdev_update_features(lower);
ffff8000113af71c: aa1403e0 mov x0, x20
lower->wanted_features &= ~feature;
ffff8000113af720: 8a010041 and x1, x2, x1
ffff8000113af724: f9006e81 str x1, [x20,#216]
netdev_update_features(lower);
ffff8000113af728: 94000000 bl ffff8000113afd74 <netdev_update_features>
ffff8000113af728: R_AARCH64_CALL26 netdev_update_features
if (unlikely(lower->features & feature))
ffff8000113af72c: f9406680 ldr x0, [x20,#200]
ffff8000113af730: f94037a1 ldr x1, [x29,#104]
ffff8000113af734: ea00003f tst x1, x0
ffff8000113af738: 54001461 b.ne ffff8000113af9c4 <__netdev_update_features+0x50c>
if (&lower->list == &dev->adj_list.lower)
ffff8000113af73c: eb1302bf cmp x21, x19
ffff8000113af740: 54fffd41 b.ne ffff8000113af6e8 <__netdev_update_features+0x230>
if (!err) {
ffff8000113af744: 35000459 cbnz w25, ffff8000113af7cc <__netdev_update_features+0x314>
netdev_features_t diff = features ^ dev->features;
ffff8000113af748: f94033a1 ldr x1, [x29,#96]
ffff8000113af74c: f94066d3 ldr x19, [x22,#200]
ffff8000113af750: aa0103e0 mov x0, x1
ffff8000113af754: ca130033 eor x19, x1, x19
if (diff & NETIF_F_RX_UDP_TUNNEL_PORT) {
ffff8000113af758: b6a00173 tbz x19, #52, ffff8000113af784 <__netdev_update_features+0x2cc>
if (features & NETIF_F_RX_UDP_TUNNEL_PORT) {
ffff8000113af75c: b6a01081 tbz x1, #52, ffff8000113af96c <__netdev_update_features+0x4b4>
dev->features = features;
ffff8000113af760: f90066c1 str x1, [x22,#200]
void udp_tunnel_notify_add_rx_port(struct socket *sock, unsigned short type);
void udp_tunnel_notify_del_rx_port(struct socket *sock, unsigned short type);
static inline void udp_tunnel_get_rx_info(struct net_device *dev)
{
ASSERT_RTNL();
ffff8000113af764: 94000000 bl 0 <rtnl_is_locked>
ffff8000113af764: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113af768: 34001c20 cbz w0, ffff8000113afaec <__netdev_update_features+0x634>
return call_netdevice_notifiers_info(val, &info);
ffff8000113af76c: d2800380 mov x0, #0x1c // #28
ffff8000113af770: 9101a3a1 add x1, x29, #0x68
struct netdev_notifier_info info = {
ffff8000113af774: f90037b6 str x22, [x29,#104]
ffff8000113af778: f9003bbf str xzr, [x29,#112]
return call_netdevice_notifiers_info(val, &info);
ffff8000113af77c: 97ffc25f bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ffff8000113af780: f94033a0 ldr x0, [x29,#96]
if (diff & NETIF_F_HW_VLAN_CTAG_FILTER) {
ffff8000113af784: 36480213 tbz w19, #9, ffff8000113af7c4 <__netdev_update_features+0x30c>
if (features & NETIF_F_HW_VLAN_CTAG_FILTER) {
ffff8000113af788: 36480ce0 tbz w0, #9, ffff8000113af924 <__netdev_update_features+0x46c>
dev->features = features;
ffff8000113af78c: f90066c0 str x0, [x22,#200]
ASSERT_RTNL();
ffff8000113af790: 94000000 bl 0 <rtnl_is_locked>
ffff8000113af790: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113af794: 34002020 cbz w0, ffff8000113afb98 <__netdev_update_features+0x6e0>
return call_netdevice_notifiers_info(val, &info);
ffff8000113af798: d28003e0 mov x0, #0x1f // #31
ffff8000113af79c: 9101a3a1 add x1, x29, #0x68
struct netdev_notifier_info info = {
ffff8000113af7a0: f90037b6 str x22, [x29,#104]
ffff8000113af7a4: f9003bbf str xzr, [x29,#112]
return call_netdevice_notifiers_info(val, &info);
ffff8000113af7a8: 97ffc254 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ret &= ~NOTIFY_STOP_MASK;
ffff8000113af7ac: 12107800 and w0, w0, #0xffff7fff
return ret > NOTIFY_OK ? NOTIFY_OK - ret : 0;
ffff8000113af7b0: 7100041f cmp w0, #0x1
ffff8000113af7b4: 5400006d b.le ffff8000113af7c0 <__netdev_update_features+0x308>
ffff8000113af7b8: 52800039 mov w25, #0x1 // #1
ffff8000113af7bc: 4b000339 sub w25, w25, w0
ffff8000113af7c0: f94033a0 ldr x0, [x29,#96]
if (diff & NETIF_F_HW_VLAN_STAG_FILTER) {
ffff8000113af7c4: b7780793 tbnz x19, #47, ffff8000113af8b4 <__netdev_update_features+0x3fc>
dev->features = features;
ffff8000113af7c8: f90066c0 str x0, [x22,#200]
return err < 0 ? 0 : 1;
ffff8000113af7cc: 2a3903e0 mvn w0, w25
ffff8000113af7d0: 531f7c00 lsr w0, w0, #31
}
ffff8000113af7d4: f9403fa2 ldr x2, [x29,#120]
ffff8000113af7d8: f94002e1 ldr x1, [x23]
ffff8000113af7d8: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113af7dc: eb01005f cmp x2, x1
ffff8000113af7e0: 54002a41 b.ne ffff8000113afd28 <__netdev_update_features+0x870>
ffff8000113af7e4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113af7e8: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113af7ec: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113af7f0: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113af7f4: a94573fb ldp x27, x28, [sp,#80]
ffff8000113af7f8: a8c87bfd ldp x29, x30, [sp],#128
ffff8000113af7fc: d65f03c0 ret
netdev_dbg(dev, "Dropping NETIF_F_GRO_HW since no RXCSUM feature.\n");
ffff8000113af800: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af800: R_AARCH64_ADR_PREL_PG_HI21 __verbose
ffff8000113af804: 91000000 add x0, x0, #0x0
ffff8000113af804: R_AARCH64_ADD_ABS_LO12_NC __verbose
ffff8000113af808: 9106e000 add x0, x0, #0x1b8
ffff8000113af80c: 79404401 ldrh w1, [x0,#34]
ffff8000113af810: 37102a61 tbnz w1, #2, ffff8000113afd5c <__netdev_update_features+0x8a4>
features &= ~NETIF_F_GRO_HW;
ffff8000113af814: 9248fb18 and x24, x24, #0xff7fffffffffffff
ffff8000113af818: 17ffff6a b ffff8000113af5c0 <__netdev_update_features+0x108>
netdev_dbg(dev,
ffff8000113af81c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af81c: R_AARCH64_ADR_PREL_PG_HI21 __verbose
ffff8000113af820: 91000000 add x0, x0, #0x0
ffff8000113af820: R_AARCH64_ADD_ABS_LO12_NC __verbose
ffff8000113af824: 91064000 add x0, x0, #0x190
ffff8000113af828: 79404402 ldrh w2, [x0,#34]
ffff8000113af82c: 37101f62 tbnz w2, #2, ffff8000113afc18 <__netdev_update_features+0x760>
features &= ~dev->gso_partial_features;
ffff8000113af830: 8a210318 bic x24, x24, x1
ffff8000113af834: 17ffff61 b ffff8000113af5b8 <__netdev_update_features+0x100>
netdev_dbg(dev, "Dropping TSO features since no SG feature.\n");
ffff8000113af838: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af838: R_AARCH64_ADR_PREL_PG_HI21 __verbose
ffff8000113af83c: 91000000 add x0, x0, #0x0
ffff8000113af83c: R_AARCH64_ADD_ABS_LO12_NC __verbose
ffff8000113af840: 9103c000 add x0, x0, #0xf0
ffff8000113af844: 79404401 ldrh w1, [x0,#34]
ffff8000113af848: 37101d01 tbnz w1, #2, ffff8000113afbe8 <__netdev_update_features+0x730>
features &= ~NETIF_F_ALL_TSO;
ffff8000113af84c: 92a003a0 mov x0, #0xffffffffffe2ffff // #-1900545
ffff8000113af850: 8a000318 and x24, x24, x0
if ((features & NETIF_F_TSO) && !(features & NETIF_F_HW_CSUM) &&
ffff8000113af854: d2800140 mov x0, #0xa // #10
ffff8000113af858: f2a00020 movk x0, #0x1, lsl #16
ffff8000113af85c: 8a000300 and x0, x24, x0
ffff8000113af860: f140401f cmp x0, #0x10, lsl #12
ffff8000113af864: 54ffe7c1 b.ne ffff8000113af55c <__netdev_update_features+0xa4>
netdev_dbg(dev, "Dropping TSO features since no CSUM feature.\n");
ffff8000113af868: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af868: R_AARCH64_ADR_PREL_PG_HI21 __verbose
ffff8000113af86c: 91000000 add x0, x0, #0x0
ffff8000113af86c: R_AARCH64_ADD_ABS_LO12_NC __verbose
ffff8000113af870: 91046000 add x0, x0, #0x118
ffff8000113af874: 79404401 ldrh w1, [x0,#34]
ffff8000113af878: 37101f61 tbnz w1, #2, ffff8000113afc64 <__netdev_update_features+0x7ac>
features &= ~NETIF_F_TSO_ECN;
ffff8000113af87c: 92a000a0 mov x0, #0xfffffffffffaffff // #-327681
ffff8000113af880: 8a000318 and x24, x24, x0
if ((features & NETIF_F_TSO6) && !(features & NETIF_F_HW_CSUM) &&
ffff8000113af884: d2800300 mov x0, #0x18 // #24
ffff8000113af888: f2a00200 movk x0, #0x10, lsl #16
ffff8000113af88c: 8a000300 and x0, x24, x0
ffff8000113af890: f144001f cmp x0, #0x100, lsl #12
ffff8000113af894: 54ffe6e1 b.ne ffff8000113af570 <__netdev_update_features+0xb8>
netdev_dbg(dev, "Dropping TSO6 features since no CSUM feature.\n");
ffff8000113af898: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af898: R_AARCH64_ADR_PREL_PG_HI21 __verbose
ffff8000113af89c: 91000000 add x0, x0, #0x0
ffff8000113af89c: R_AARCH64_ADD_ABS_LO12_NC __verbose
ffff8000113af8a0: 91050000 add x0, x0, #0x140
ffff8000113af8a4: 79404401 ldrh w1, [x0,#34]
ffff8000113af8a8: 37101d21 tbnz w1, #2, ffff8000113afc4c <__netdev_update_features+0x794>
features &= ~NETIF_F_TSO6;
ffff8000113af8ac: 926bfb18 and x24, x24, #0xffffffffffefffff
ffff8000113af8b0: 17ffff30 b ffff8000113af570 <__netdev_update_features+0xb8>
if (features & NETIF_F_HW_VLAN_STAG_FILTER) {
ffff8000113af8b4: b67804a0 tbz x0, #47, ffff8000113af948 <__netdev_update_features+0x490>
dev->features = features;
ffff8000113af8b8: f90066c0 str x0, [x22,#200]
ASSERT_RTNL();
ffff8000113af8bc: 94000000 bl 0 <rtnl_is_locked>
ffff8000113af8bc: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113af8c0: 34000e20 cbz w0, ffff8000113afa84 <__netdev_update_features+0x5cc>
return call_netdevice_notifiers_info(val, &info);
ffff8000113af8c4: d2800420 mov x0, #0x21 // #33
ffff8000113af8c8: 9101a3a1 add x1, x29, #0x68
struct netdev_notifier_info info = {
ffff8000113af8cc: f90037b6 str x22, [x29,#104]
ffff8000113af8d0: f9003bbf str xzr, [x29,#112]
return call_netdevice_notifiers_info(val, &info);
ffff8000113af8d4: 97ffc209 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ret &= ~NOTIFY_STOP_MASK;
ffff8000113af8d8: 12107800 and w0, w0, #0xffff7fff
return ret > NOTIFY_OK ? NOTIFY_OK - ret : 0;
ffff8000113af8dc: 7100041f cmp w0, #0x1
ffff8000113af8e0: 540006ed b.le ffff8000113af9bc <__netdev_update_features+0x504>
ffff8000113af8e4: 52800021 mov w1, #0x1 // #1
ffff8000113af8e8: 4b000020 sub w0, w1, w0
err |= vlan_get_rx_stag_filter_info(dev);
ffff8000113af8ec: 2a000339 orr w25, w25, w0
ffff8000113af8f0: f94033a0 ldr x0, [x29,#96]
ffff8000113af8f4: 17ffffb5 b ffff8000113af7c8 <__netdev_update_features+0x310>
ffff8000113af8f8: aa0103f8 mov x24, x1
ffff8000113af8fc: 17ffff0b b ffff8000113af528 <__netdev_update_features+0x70>
int err = -1;
ffff8000113af900: 12800019 mov w25, #0xffffffff // #-1
ffff8000113af904: 17ffff6b b ffff8000113af6b0 <__netdev_update_features+0x1f8>
netdev_dbg(dev, "Dropping NETIF_F_GSO since no SG feature.\n");
ffff8000113af908: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af908: R_AARCH64_ADR_PREL_PG_HI21 __verbose
ffff8000113af90c: 91000000 add x0, x0, #0x0
ffff8000113af90c: R_AARCH64_ADD_ABS_LO12_NC __verbose
ffff8000113af910: 9105a000 add x0, x0, #0x168
ffff8000113af914: 79404401 ldrh w1, [x0,#34]
ffff8000113af918: 371018e1 tbnz w1, #2, ffff8000113afc34 <__netdev_update_features+0x77c>
features &= ~NETIF_F_GSO;
ffff8000113af91c: 9274fb18 and x24, x24, #0xfffffffffffff7ff
ffff8000113af920: 17ffff22 b ffff8000113af5a8 <__netdev_update_features+0xf0>
ASSERT_RTNL();
ffff8000113af924: 94000000 bl 0 <rtnl_is_locked>
ffff8000113af924: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113af928: 34001a80 cbz w0, ffff8000113afc78 <__netdev_update_features+0x7c0>
return call_netdevice_notifiers_info(val, &info);
ffff8000113af92c: d2800400 mov x0, #0x20 // #32
ffff8000113af930: 9101a3a1 add x1, x29, #0x68
struct netdev_notifier_info info = {
ffff8000113af934: f90037b6 str x22, [x29,#104]
ffff8000113af938: f9003bbf str xzr, [x29,#112]
return call_netdevice_notifiers_info(val, &info);
ffff8000113af93c: 97ffc1ef bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ffff8000113af940: f94033a0 ldr x0, [x29,#96]
ffff8000113af944: 17ffffa0 b ffff8000113af7c4 <__netdev_update_features+0x30c>
ASSERT_RTNL();
ffff8000113af948: 94000000 bl 0 <rtnl_is_locked>
ffff8000113af948: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113af94c: 340010a0 cbz w0, ffff8000113afb60 <__netdev_update_features+0x6a8>
ffff8000113af950: d2800440 mov x0, #0x22 // #34
ffff8000113af954: 9101a3a1 add x1, x29, #0x68
struct netdev_notifier_info info = {
ffff8000113af958: f90037b6 str x22, [x29,#104]
ffff8000113af95c: f9003bbf str xzr, [x29,#112]
return call_netdevice_notifiers_info(val, &info);
ffff8000113af960: 97ffc1e6 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ffff8000113af964: f94033a0 ldr x0, [x29,#96]
ffff8000113af968: 17ffff98 b ffff8000113af7c8 <__netdev_update_features+0x310>
call_netdevice_notifiers(NETDEV_UDP_TUNNEL_PUSH_INFO, dev);
}
static inline void udp_tunnel_drop_rx_info(struct net_device *dev)
{
ASSERT_RTNL();
ffff8000113af96c: 94000000 bl 0 <rtnl_is_locked>
ffff8000113af96c: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113af970: 34000dc0 cbz w0, ffff8000113afb28 <__netdev_update_features+0x670>
ffff8000113af974: d28003a0 mov x0, #0x1d // #29
ffff8000113af978: 9101a3a1 add x1, x29, #0x68
struct netdev_notifier_info info = {
ffff8000113af97c: f90037b6 str x22, [x29,#104]
ffff8000113af980: f9003bbf str xzr, [x29,#112]
return call_netdevice_notifiers_info(val, &info);
ffff8000113af984: 97ffc1dd bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ffff8000113af988: f94033a0 ldr x0, [x29,#96]
if (diff & NETIF_F_HW_VLAN_CTAG_FILTER) {
ffff8000113af98c: 364ff1d3 tbz w19, #9, ffff8000113af7c4 <__netdev_update_features+0x30c>
ffff8000113af990: 17ffff7e b ffff8000113af788 <__netdev_update_features+0x2d0>
if (&upper->list == &dev->adj_list.upper)
ffff8000113af994: aa1803f4 mov x20, x24
ffff8000113af998: 17ffff36 b ffff8000113af670 <__netdev_update_features+0x1b8>
netdev_dbg(lower, "Dropping feature %pNF, upper dev %s has it off.\n",
ffff8000113af99c: aa1603e1 mov x1, x22
ffff8000113af9a0: aa1803e0 mov x0, x24
ffff8000113af9a4: aa1903e2 mov x2, x25
ffff8000113af9a8: 9101a3a3 add x3, x29, #0x68
ffff8000113af9ac: 94000000 bl 0 <__dynamic_netdev_dbg>
ffff8000113af9ac: R_AARCH64_CALL26 __dynamic_netdev_dbg
ffff8000113af9b0: f94037a1 ldr x1, [x29,#104]
ffff8000113af9b4: aa2103e1 mvn x1, x1
ffff8000113af9b8: 17ffff26 b ffff8000113af650 <__netdev_update_features+0x198>
ffff8000113af9bc: 52800000 mov w0, #0x0 // #0
ffff8000113af9c0: 17ffffcb b ffff8000113af8ec <__netdev_update_features+0x434>
if (!dev->name[0] || strchr(dev->name, '%'))
ffff8000113af9c4: 394002c0 ldrb w0, [x22]
ffff8000113af9c8: 34000440 cbz w0, ffff8000113afa50 <__netdev_update_features+0x598>
ffff8000113af9cc: aa1603e0 mov x0, x22
ffff8000113af9d0: 97ffc7ef bl ffff8000113a198c <netdev_name.part.103>
ffff8000113af9d4: aa0003fc mov x28, x0
switch (dev->reg_state) {
ffff8000113af9d8: 395362c2 ldrb w2, [x22,#1240]
ffff8000113af9dc: 7100145f cmp w2, #0x5
ffff8000113af9e0: 540002c9 b.ls ffff8000113afa38 <__netdev_update_features+0x580>
WARN_ONCE(1, "%s: unknown reg_state %d\n", dev->name, dev->reg_state);
ffff8000113af9e4: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113af9e4: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113af9e8: 91000063 add x3, x3, #0x0
ffff8000113af9e8: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113af9ec: 39400860 ldrb w0, [x3,#2]
return " (unknown)";
ffff8000113af9f0: 9000001b adrp x27, ffff80001139e37c <__my_cpu_offset>
ffff8000113af9f0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xb8
ffff8000113af9f4: 9100037b add x27, x27, #0x0
ffff8000113af9f4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xb8
WARN_ONCE(1, "%s: unknown reg_state %d\n", dev->name, dev->reg_state);
ffff8000113af9f8: 35000100 cbnz w0, ffff8000113afa18 <__netdev_update_features+0x560>
ffff8000113af9fc: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113af9fc: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xc8
ffff8000113afa00: 52800024 mov w4, #0x1 // #1
ffff8000113afa04: 91000000 add x0, x0, #0x0
ffff8000113afa04: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xc8
ffff8000113afa08: aa1603e1 mov x1, x22
ffff8000113afa0c: 39000864 strb w4, [x3,#2]
ffff8000113afa10: 94000000 bl 0 <__warn_printk>
ffff8000113afa10: R_AARCH64_CALL26 __warn_printk
ffff8000113afa14: d4210000 brk #0x800
netdev_WARN(upper, "failed to disable %pNF on %s!\n",
ffff8000113afa18: aa1a03e0 mov x0, x26
ffff8000113afa1c: aa1c03e1 mov x1, x28
ffff8000113afa20: aa1b03e2 mov x2, x27
ffff8000113afa24: 9101a3a3 add x3, x29, #0x68
ffff8000113afa28: aa1403e4 mov x4, x20
ffff8000113afa2c: 94000000 bl 0 <__warn_printk>
ffff8000113afa2c: R_AARCH64_CALL26 __warn_printk
ffff8000113afa30: d4210000 brk #0x800
ffff8000113afa34: 17ffff42 b ffff8000113af73c <__netdev_update_features+0x284>
switch (dev->reg_state) {
ffff8000113afa38: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113afa38: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x78
ffff8000113afa3c: 91000000 add x0, x0, #0x0
ffff8000113afa3c: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x78
ffff8000113afa40: 78625801 ldrh w1, [x0,w2,uxtw #1]
ffff8000113afa44: 10000063 adr x3, ffff8000113afa50 <__netdev_update_features+0x598>
ffff8000113afa48: 8b21a861 add x1, x3, w1, sxth #2
ffff8000113afa4c: d61f0020 br x1
return "(unnamed net_device)";
ffff8000113afa50: 9000001c adrp x28, ffff80001139e37c <__my_cpu_offset>
ffff8000113afa50: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x158
ffff8000113afa54: 9100039c add x28, x28, #0x0
ffff8000113afa54: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x158
ffff8000113afa58: 17ffffe0 b ffff8000113af9d8 <__netdev_update_features+0x520>
netdev_dbg(upper, "Disabling feature %pNF on lower dev %s.\n",
ffff8000113afa5c: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113afa5c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xbb0
ffff8000113afa60: aa1603e1 mov x1, x22
ffff8000113afa64: aa1803e0 mov x0, x24
ffff8000113afa68: 91000042 add x2, x2, #0x0
ffff8000113afa68: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xbb0
ffff8000113afa6c: 9101a3a3 add x3, x29, #0x68
ffff8000113afa70: aa1403e4 mov x4, x20
ffff8000113afa74: 94000000 bl 0 <__dynamic_netdev_dbg>
ffff8000113afa74: R_AARCH64_CALL26 __dynamic_netdev_dbg
ffff8000113afa78: f94037a1 ldr x1, [x29,#104]
ffff8000113afa7c: aa2103e1 mvn x1, x1
ffff8000113afa80: 17ffff26 b ffff8000113af718 <__netdev_update_features+0x260>
ASSERT_RTNL();
ffff8000113afa84: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113afa84: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113afa88: 91000063 add x3, x3, #0x0
ffff8000113afa88: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113afa8c: 39409460 ldrb w0, [x3,#37]
ffff8000113afa90: 35fff1a0 cbnz w0, ffff8000113af8c4 <__netdev_update_features+0x40c>
ffff8000113afa94: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113afa94: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113afa98: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113afa98: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xc30
ffff8000113afa9c: 52800024 mov w4, #0x1 // #1
ffff8000113afaa0: 91000000 add x0, x0, #0x0
ffff8000113afaa0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113afaa4: 91000021 add x1, x1, #0x0
ffff8000113afaa4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xc30
ffff8000113afaa8: 52800be2 mov w2, #0x5f // #95
ffff8000113afaac: 39009464 strb w4, [x3,#37]
ffff8000113afab0: 94000000 bl 0 <__warn_printk>
ffff8000113afab0: R_AARCH64_CALL26 __warn_printk
ffff8000113afab4: d4210000 brk #0x800
ffff8000113afab8: 17ffff83 b ffff8000113af8c4 <__netdev_update_features+0x40c>
case NETREG_UNREGISTERING: return " (unregistering)";
ffff8000113afabc: 9000001b adrp x27, ffff80001139e37c <__my_cpu_offset>
ffff8000113afabc: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x70
ffff8000113afac0: 9100037b add x27, x27, #0x0
ffff8000113afac0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x70
ffff8000113afac4: 17ffffd5 b ffff8000113afa18 <__netdev_update_features+0x560>
case NETREG_REGISTERED: return "";
ffff8000113afac8: 9000001b adrp x27, ffff80001139e37c <__my_cpu_offset>
ffff8000113afac8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x68
ffff8000113afacc: 9100037b add x27, x27, #0x0
ffff8000113afacc: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x68
ffff8000113afad0: 17ffffd2 b ffff8000113afa18 <__netdev_update_features+0x560>
case NETREG_UNINITIALIZED: return " (uninitialized)";
ffff8000113afad4: 9000001b adrp x27, ffff80001139e37c <__my_cpu_offset>
ffff8000113afad4: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x50
ffff8000113afad8: 9100037b add x27, x27, #0x0
ffff8000113afad8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x50
ffff8000113afadc: 17ffffcf b ffff8000113afa18 <__netdev_update_features+0x560>
case NETREG_DUMMY: return " (dummy)";
ffff8000113afae0: 9000001b adrp x27, ffff80001139e37c <__my_cpu_offset>
ffff8000113afae0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xa8
ffff8000113afae4: 9100037b add x27, x27, #0x0
ffff8000113afae4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xa8
ffff8000113afae8: 17ffffcc b ffff8000113afa18 <__netdev_update_features+0x560>
ASSERT_RTNL();
ffff8000113afaec: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113afaec: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113afaf0: 91000063 add x3, x3, #0x0
ffff8000113afaf0: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113afaf4: 39408460 ldrb w0, [x3,#33]
ffff8000113afaf8: 35ffe3a0 cbnz w0, ffff8000113af76c <__netdev_update_features+0x2b4>
ffff8000113afafc: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113afafc: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113afb00: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113afb00: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xc10
ffff8000113afb04: 52800024 mov w4, #0x1 // #1
ffff8000113afb08: 91000000 add x0, x0, #0x0
ffff8000113afb08: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113afb0c: 91000021 add x1, x1, #0x0
ffff8000113afb0c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xc10
ffff8000113afb10: 52801042 mov w2, #0x82 // #130
ffff8000113afb14: 39008464 strb w4, [x3,#33]
ffff8000113afb18: 94000000 bl 0 <__warn_printk>
ffff8000113afb18: R_AARCH64_CALL26 __warn_printk
ffff8000113afb1c: d4210000 brk #0x800
return call_netdevice_notifiers_info(val, &info);
ffff8000113afb20: d2800380 mov x0, #0x1c // #28
ffff8000113afb24: 17ffff13 b ffff8000113af770 <__netdev_update_features+0x2b8>
ASSERT_RTNL();
ffff8000113afb28: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113afb28: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113afb2c: 91000063 add x3, x3, #0x0
ffff8000113afb2c: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113afb30: 39408860 ldrb w0, [x3,#34]
ffff8000113afb34: 35fff200 cbnz w0, ffff8000113af974 <__netdev_update_features+0x4bc>
ffff8000113afb38: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113afb38: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113afb3c: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113afb3c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xc10
ffff8000113afb40: 52800024 mov w4, #0x1 // #1
ffff8000113afb44: 91000000 add x0, x0, #0x0
ffff8000113afb44: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113afb48: 91000021 add x1, x1, #0x0
ffff8000113afb48: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xc10
ffff8000113afb4c: 52801102 mov w2, #0x88 // #136
ffff8000113afb50: 39008864 strb w4, [x3,#34]
ffff8000113afb54: 94000000 bl 0 <__warn_printk>
ffff8000113afb54: R_AARCH64_CALL26 __warn_printk
ffff8000113afb58: d4210000 brk #0x800
ffff8000113afb5c: 17ffff86 b ffff8000113af974 <__netdev_update_features+0x4bc>
ASSERT_RTNL();
ffff8000113afb60: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113afb60: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113afb64: 91000063 add x3, x3, #0x0
ffff8000113afb64: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113afb68: 39409860 ldrb w0, [x3,#38]
ffff8000113afb6c: 35ffef20 cbnz w0, ffff8000113af950 <__netdev_update_features+0x498>
ffff8000113afb70: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113afb70: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113afb74: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113afb74: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xc30
ffff8000113afb78: 52800024 mov w4, #0x1 // #1
ffff8000113afb7c: 91000000 add x0, x0, #0x0
ffff8000113afb7c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113afb80: 91000021 add x1, x1, #0x0
ffff8000113afb80: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xc30
ffff8000113afb84: 52800ca2 mov w2, #0x65 // #101
ffff8000113afb88: 39009864 strb w4, [x3,#38]
ffff8000113afb8c: 94000000 bl 0 <__warn_printk>
ffff8000113afb8c: R_AARCH64_CALL26 __warn_printk
ffff8000113afb90: d4210000 brk #0x800
ffff8000113afb94: 17ffff6f b ffff8000113af950 <__netdev_update_features+0x498>
ASSERT_RTNL();
ffff8000113afb98: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113afb98: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113afb9c: 91000063 add x3, x3, #0x0
ffff8000113afb9c: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113afba0: 39408c60 ldrb w0, [x3,#35]
ffff8000113afba4: 35ffdfa0 cbnz w0, ffff8000113af798 <__netdev_update_features+0x2e0>
ffff8000113afba8: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113afba8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113afbac: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113afbac: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xc30
ffff8000113afbb0: 52800024 mov w4, #0x1 // #1
ffff8000113afbb4: 91000000 add x0, x0, #0x0
ffff8000113afbb4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113afbb8: 91000021 add x1, x1, #0x0
ffff8000113afbb8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xc30
ffff8000113afbbc: 52800a62 mov w2, #0x53 // #83
ffff8000113afbc0: 39008c64 strb w4, [x3,#35]
ffff8000113afbc4: 94000000 bl 0 <__warn_printk>
ffff8000113afbc4: R_AARCH64_CALL26 __warn_printk
ffff8000113afbc8: d4210000 brk #0x800
ffff8000113afbcc: 17fffef3 b ffff8000113af798 <__netdev_update_features+0x2e0>
case NETREG_RELEASED: return " (released)";
ffff8000113afbd0: 9000001b adrp x27, ffff80001139e37c <__my_cpu_offset>
ffff8000113afbd0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x98
ffff8000113afbd4: 9100037b add x27, x27, #0x0
ffff8000113afbd4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x98
ffff8000113afbd8: 17ffff90 b ffff8000113afa18 <__netdev_update_features+0x560>
case NETREG_UNREGISTERED: return " (unregistered)";
ffff8000113afbdc: 9000001b adrp x27, ffff80001139e37c <__my_cpu_offset>
ffff8000113afbdc: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x88
ffff8000113afbe0: 9100037b add x27, x27, #0x0
ffff8000113afbe0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x88
ffff8000113afbe4: 17ffff8d b ffff8000113afa18 <__netdev_update_features+0x560>
netdev_dbg(dev, "Dropping TSO features since no SG feature.\n");
ffff8000113afbe8: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113afbe8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x970
ffff8000113afbec: aa1603e1 mov x1, x22
ffff8000113afbf0: 91000042 add x2, x2, #0x0
ffff8000113afbf0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x970
ffff8000113afbf4: 94000000 bl 0 <__dynamic_netdev_dbg>
ffff8000113afbf4: R_AARCH64_CALL26 __dynamic_netdev_dbg
ffff8000113afbf8: 17ffff15 b ffff8000113af84c <__netdev_update_features+0x394>
netdev_dbg(dev, "Features changed: %pNF -> %pNF\n",
ffff8000113afbfc: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113afbfc: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xb58
ffff8000113afc00: aa1603e1 mov x1, x22
ffff8000113afc04: 91000042 add x2, x2, #0x0
ffff8000113afc04: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xb58
ffff8000113afc08: 910322c3 add x3, x22, #0xc8
ffff8000113afc0c: 910183a4 add x4, x29, #0x60
ffff8000113afc10: 94000000 bl 0 <__dynamic_netdev_dbg>
ffff8000113afc10: R_AARCH64_CALL26 __dynamic_netdev_dbg
ffff8000113afc14: 17fffe9f b ffff8000113af690 <__netdev_update_features+0x1d8>
netdev_dbg(dev,
ffff8000113afc18: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113afc18: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xa30
ffff8000113afc1c: aa1603e1 mov x1, x22
ffff8000113afc20: 91000042 add x2, x2, #0x0
ffff8000113afc20: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xa30
ffff8000113afc24: 94000000 bl 0 <__dynamic_netdev_dbg>
ffff8000113afc24: R_AARCH64_CALL26 __dynamic_netdev_dbg
ffff8000113afc28: f9407ec1 ldr x1, [x22,#248]
features &= ~dev->gso_partial_features;
ffff8000113afc2c: 8a210318 bic x24, x24, x1
ffff8000113afc30: 17fffe62 b ffff8000113af5b8 <__netdev_update_features+0x100>
netdev_dbg(dev, "Dropping NETIF_F_GSO since no SG feature.\n");
ffff8000113afc34: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113afc34: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xa00
ffff8000113afc38: aa1603e1 mov x1, x22
ffff8000113afc3c: 91000042 add x2, x2, #0x0
ffff8000113afc3c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xa00
ffff8000113afc40: 94000000 bl 0 <__dynamic_netdev_dbg>
ffff8000113afc40: R_AARCH64_CALL26 __dynamic_netdev_dbg
features &= ~NETIF_F_GSO;
ffff8000113afc44: 9274fb18 and x24, x24, #0xfffffffffffff7ff
ffff8000113afc48: 17fffe58 b ffff8000113af5a8 <__netdev_update_features+0xf0>
netdev_dbg(dev, "Dropping TSO6 features since no CSUM feature.\n");
ffff8000113afc4c: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113afc4c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x9d0
ffff8000113afc50: aa1603e1 mov x1, x22
ffff8000113afc54: 91000042 add x2, x2, #0x0
ffff8000113afc54: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x9d0
ffff8000113afc58: 94000000 bl 0 <__dynamic_netdev_dbg>
ffff8000113afc58: R_AARCH64_CALL26 __dynamic_netdev_dbg
features &= ~NETIF_F_TSO6;
ffff8000113afc5c: 926bfb18 and x24, x24, #0xffffffffffefffff
ffff8000113afc60: 17fffe44 b ffff8000113af570 <__netdev_update_features+0xb8>
netdev_dbg(dev, "Dropping TSO features since no CSUM feature.\n");
ffff8000113afc64: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113afc64: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x9a0
ffff8000113afc68: aa1603e1 mov x1, x22
ffff8000113afc6c: 91000042 add x2, x2, #0x0
ffff8000113afc6c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x9a0
ffff8000113afc70: 94000000 bl 0 <__dynamic_netdev_dbg>
ffff8000113afc70: R_AARCH64_CALL26 __dynamic_netdev_dbg
ffff8000113afc74: 17ffff02 b ffff8000113af87c <__netdev_update_features+0x3c4>
ASSERT_RTNL();
ffff8000113afc78: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113afc78: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113afc7c: 91000063 add x3, x3, #0x0
ffff8000113afc7c: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113afc80: 39409060 ldrb w0, [x3,#36]
ffff8000113afc84: 35ffe540 cbnz w0, ffff8000113af92c <__netdev_update_features+0x474>
ffff8000113afc88: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113afc88: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113afc8c: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113afc8c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xc30
ffff8000113afc90: 52800024 mov w4, #0x1 // #1
ffff8000113afc94: 91000000 add x0, x0, #0x0
ffff8000113afc94: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113afc98: 91000021 add x1, x1, #0x0
ffff8000113afc98: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xc30
ffff8000113afc9c: 52800b22 mov w2, #0x59 // #89
ffff8000113afca0: 39009064 strb w4, [x3,#36]
ffff8000113afca4: 94000000 bl 0 <__warn_printk>
ffff8000113afca4: R_AARCH64_CALL26 __warn_printk
ffff8000113afca8: d4210000 brk #0x800
ffff8000113afcac: 17ffff20 b ffff8000113af92c <__netdev_update_features+0x474>
netdev_warn(dev, "mixed HW and IP checksum settings.\n");
ffff8000113afcb0: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113afcb0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x948
ffff8000113afcb4: aa1603e0 mov x0, x22
ffff8000113afcb8: 91000021 add x1, x1, #0x0
ffff8000113afcb8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x948
ffff8000113afcbc: 94000000 bl ffff80001139e95c <gro_find_complete_by_type>
ffff8000113afcbc: R_AARCH64_CALL26 netdev_warn
features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM);
ffff8000113afcc0: 92800240 mov x0, #0xffffffffffffffed // #-19
ffff8000113afcc4: 8a000318 and x24, x24, x0
ffff8000113afcc8: 17fffe1c b ffff8000113af538 <__netdev_update_features+0x80>
netdev_err(dev,
ffff8000113afccc: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113afccc: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xb78
ffff8000113afcd0: aa1603e0 mov x0, x22
ffff8000113afcd4: 91000021 add x1, x1, #0x0
ffff8000113afcd4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xb78
ffff8000113afcd8: 2a1903e2 mov w2, w25
ffff8000113afcdc: 910183a3 add x3, x29, #0x60
ffff8000113afce0: 910322c4 add x4, x22, #0xc8
ffff8000113afce4: 94000000 bl ffff80001139e8b4 <passthru_features_check+0xc>
ffff8000113afce4: R_AARCH64_CALL26 netdev_err
return -1;
ffff8000113afce8: 12800000 mov w0, #0xffffffff // #-1
ffff8000113afcec: 17fffeba b ffff8000113af7d4 <__netdev_update_features+0x31c>
ASSERT_RTNL();
ffff8000113afcf0: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113afcf0: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113afcf4: 91000063 add x3, x3, #0x0
ffff8000113afcf4: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113afcf8: 39408060 ldrb w0, [x3,#32]
ffff8000113afcfc: 35ffbfc0 cbnz w0, ffff8000113af4f4 <__netdev_update_features+0x3c>
ffff8000113afd00: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113afd00: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113afd04: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113afd04: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113afd08: 52800024 mov w4, #0x1 // #1
ffff8000113afd0c: 91000000 add x0, x0, #0x0
ffff8000113afd0c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113afd10: 91000021 add x1, x1, #0x0
ffff8000113afd10: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113afd14: 528465a2 mov w2, #0x232d // #9005
ffff8000113afd18: 39008064 strb w4, [x3,#32]
ffff8000113afd1c: 94000000 bl 0 <__warn_printk>
ffff8000113afd1c: R_AARCH64_CALL26 __warn_printk
ffff8000113afd20: d4210000 brk #0x800
ffff8000113afd24: 17fffdf4 b ffff8000113af4f4 <__netdev_update_features+0x3c>
}
ffff8000113afd28: 94000000 bl 0 <__stack_chk_fail>
ffff8000113afd28: R_AARCH64_CALL26 __stack_chk_fail
netdev_dbg(dev, "Dropping HW-GRO feature since RX-FCS is requested.\n");
ffff8000113afd2c: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113afd2c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xae8
ffff8000113afd30: aa1603e1 mov x1, x22
ffff8000113afd34: 91000042 add x2, x2, #0x0
ffff8000113afd34: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xae8
ffff8000113afd38: 94000000 bl 0 <__dynamic_netdev_dbg>
ffff8000113afd38: R_AARCH64_CALL26 __dynamic_netdev_dbg
features &= ~NETIF_F_GRO_HW;
ffff8000113afd3c: 9248fb18 and x24, x24, #0xff7fffffffffffff
ffff8000113afd40: 17fffe2f b ffff8000113af5fc <__netdev_update_features+0x144>
netdev_dbg(dev, "Dropping LRO feature since RX-FCS is requested.\n");
ffff8000113afd44: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113afd44: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xab0
ffff8000113afd48: aa1603e1 mov x1, x22
ffff8000113afd4c: 91000042 add x2, x2, #0x0
ffff8000113afd4c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xab0
ffff8000113afd50: 94000000 bl 0 <__dynamic_netdev_dbg>
ffff8000113afd50: R_AARCH64_CALL26 __dynamic_netdev_dbg
features &= ~NETIF_F_LRO;
ffff8000113afd54: 9270fb18 and x24, x24, #0xffffffffffff7fff
ffff8000113afd58: 17fffe22 b ffff8000113af5e0 <__netdev_update_features+0x128>
netdev_dbg(dev, "Dropping NETIF_F_GRO_HW since no RXCSUM feature.\n");
ffff8000113afd5c: 90000002 adrp x2, ffff80001139e37c <__my_cpu_offset>
ffff8000113afd5c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xa78
ffff8000113afd60: aa1603e1 mov x1, x22
ffff8000113afd64: 91000042 add x2, x2, #0x0
ffff8000113afd64: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xa78
ffff8000113afd68: 94000000 bl 0 <__dynamic_netdev_dbg>
ffff8000113afd68: R_AARCH64_CALL26 __dynamic_netdev_dbg
features &= ~NETIF_F_GRO_HW;
ffff8000113afd6c: 9248fb18 and x24, x24, #0xff7fffffffffffff
ffff8000113afd70: 17fffe14 b ffff8000113af5c0 <__netdev_update_features+0x108>
ffff8000113afd74 <netdev_update_features>:
{
ffff8000113afd74: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113afd78: 910003fd mov x29, sp
ffff8000113afd7c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113afd80: aa0003f4 mov x20, x0
ffff8000113afd84: aa1e03e0 mov x0, x30
ffff8000113afd88: 94000000 bl 0 <_mcount>
ffff8000113afd88: R_AARCH64_CALL26 _mcount
ffff8000113afd8c: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff8000113afd8c: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113afd90: f9400261 ldr x1, [x19]
ffff8000113afd90: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
if (__netdev_update_features(dev))
ffff8000113afd94: aa1403e0 mov x0, x20
{
ffff8000113afd98: f9001fa1 str x1, [x29,#56]
if (__netdev_update_features(dev))
ffff8000113afd9c: 94000000 bl ffff8000113af4b8 <__netdev_update_features>
ffff8000113afd9c: R_AARCH64_CALL26 __netdev_update_features
ffff8000113afda0: 340000c0 cbz w0, ffff8000113afdb8 <netdev_update_features+0x44>
return call_netdevice_notifiers_info(val, &info);
ffff8000113afda4: d2800180 mov x0, #0xc // #12
ffff8000113afda8: 9100a3a1 add x1, x29, #0x28
struct netdev_notifier_info info = {
ffff8000113afdac: f90017b4 str x20, [x29,#40]
ffff8000113afdb0: f9001bbf str xzr, [x29,#48]
return call_netdevice_notifiers_info(val, &info);
ffff8000113afdb4: 97ffc0d1 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
}
ffff8000113afdb8: f9401fa1 ldr x1, [x29,#56]
ffff8000113afdbc: f9400260 ldr x0, [x19]
ffff8000113afdbc: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113afdc0: eb00003f cmp x1, x0
ffff8000113afdc4: 54000081 b.ne ffff8000113afdd4 <netdev_update_features+0x60>
ffff8000113afdc8: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113afdcc: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113afdd0: d65f03c0 ret
ffff8000113afdd4: 94000000 bl 0 <__stack_chk_fail>
ffff8000113afdd4: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113afdd8 <dev_disable_lro>:
{
ffff8000113afdd8: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113afddc: 910003fd mov x29, sp
ffff8000113afde0: a90153f3 stp x19, x20, [sp,#16]
ffff8000113afde4: aa0003f4 mov x20, x0
ffff8000113afde8: aa1e03e0 mov x0, x30
ffff8000113afdec: 94000000 bl 0 <_mcount>
ffff8000113afdec: R_AARCH64_CALL26 _mcount
dev->wanted_features &= ~NETIF_F_LRO;
ffff8000113afdf0: f9406e81 ldr x1, [x20,#216]
netdev_update_features(dev);
ffff8000113afdf4: aa1403e0 mov x0, x20
dev->wanted_features &= ~NETIF_F_LRO;
ffff8000113afdf8: 9270f821 and x1, x1, #0xffffffffffff7fff
ffff8000113afdfc: f9006e81 str x1, [x20,#216]
netdev_update_features(dev);
ffff8000113afe00: 94000000 bl ffff8000113afd74 <netdev_update_features>
ffff8000113afe00: R_AARCH64_CALL26 netdev_update_features
if (unlikely(dev->features & NETIF_F_LRO))
ffff8000113afe04: f9406680 ldr x0, [x20,#200]
ffff8000113afe08: 37780240 tbnz w0, #15, ffff8000113afe50 <dev_disable_lro+0x78>
netdev_for_each_lower_dev(dev, lower_dev, iter)
ffff8000113afe0c: f84b8e80 ldr x0, [x20,#184]!
if (&lower->list == &dev->adj_list.lower)
ffff8000113afe10: eb00029f cmp x20, x0
ffff8000113afe14: d1006001 sub x1, x0, #0x18
ffff8000113afe18: 54000160 b.eq ffff8000113afe44 <dev_disable_lro+0x6c>
return lower->dev;
ffff8000113afe1c: f85e8000 ldur x0, [x0,#-24]
*iter = lower->list.next;
ffff8000113afe20: f9400c33 ldr x19, [x1,#24]
netdev_for_each_lower_dev(dev, lower_dev, iter)
ffff8000113afe24: b50000a0 cbnz x0, ffff8000113afe38 <dev_disable_lro+0x60>
ffff8000113afe28: 14000007 b ffff8000113afe44 <dev_disable_lro+0x6c>
return lower->dev;
ffff8000113afe2c: f85e8260 ldur x0, [x19,#-24]
*iter = lower->list.next;
ffff8000113afe30: f9400273 ldr x19, [x19]
netdev_for_each_lower_dev(dev, lower_dev, iter)
ffff8000113afe34: b4000080 cbz x0, ffff8000113afe44 <dev_disable_lro+0x6c>
dev_disable_lro(lower_dev);
ffff8000113afe38: 94000000 bl ffff8000113afdd8 <dev_disable_lro>
ffff8000113afe38: R_AARCH64_CALL26 dev_disable_lro
if (&lower->list == &dev->adj_list.lower)
ffff8000113afe3c: eb13029f cmp x20, x19
ffff8000113afe40: 54ffff61 b.ne ffff8000113afe2c <dev_disable_lro+0x54>
}
ffff8000113afe44: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113afe48: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113afe4c: d65f03c0 ret
if (!dev->name[0] || strchr(dev->name, '%'))
ffff8000113afe50: 39400280 ldrb w0, [x20]
ffff8000113afe54: 340001c0 cbz w0, ffff8000113afe8c <dev_disable_lro+0xb4>
ffff8000113afe58: aa1403e0 mov x0, x20
ffff8000113afe5c: 97ffc6cc bl ffff8000113a198c <netdev_name.part.103>
ffff8000113afe60: aa0003e1 mov x1, x0
netdev_WARN(dev, "failed to disable LRO!\n");
ffff8000113afe64: aa1403e0 mov x0, x20
ffff8000113afe68: f90017a1 str x1, [x29,#40]
ffff8000113afe6c: 97ffbf6b bl ffff80001139fc18 <netdev_reg_state>
ffff8000113afe70: aa0003e2 mov x2, x0
ffff8000113afe74: f94017a1 ldr x1, [x29,#40]
ffff8000113afe78: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113afe78: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xc50
ffff8000113afe7c: 91000000 add x0, x0, #0x0
ffff8000113afe7c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xc50
ffff8000113afe80: 94000000 bl 0 <__warn_printk>
ffff8000113afe80: R_AARCH64_CALL26 __warn_printk
ffff8000113afe84: d4210000 brk #0x800
ffff8000113afe88: 17ffffe1 b ffff8000113afe0c <dev_disable_lro+0x34>
return "(unnamed net_device)";
ffff8000113afe8c: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113afe8c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x158
ffff8000113afe90: 91000021 add x1, x1, #0x0
ffff8000113afe90: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x158
ffff8000113afe94: 17fffff4 b ffff8000113afe64 <dev_disable_lro+0x8c>
ffff8000113afe98 <generic_xdp_install>:
{
ffff8000113afe98: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113afe9c: 910003fd mov x29, sp
ffff8000113afea0: a90153f3 stp x19, x20, [sp,#16]
ffff8000113afea4: aa0003f3 mov x19, x0
ffff8000113afea8: aa1e03e0 mov x0, x30
ffff8000113afeac: f90017a1 str x1, [x29,#40]
ffff8000113afeb0: 94000000 bl 0 <_mcount>
ffff8000113afeb0: R_AARCH64_CALL26 _mcount
switch (xdp->command) {
ffff8000113afeb4: f94017a1 ldr x1, [x29,#40]
struct bpf_prog *old = rtnl_dereference(dev->xdp_prog);
ffff8000113afeb8: f9419a60 ldr x0, [x19,#816]
switch (xdp->command) {
ffff8000113afebc: b9400022 ldr w2, [x1]
struct bpf_prog *new = xdp->prog;
ffff8000113afec0: f9400834 ldr x20, [x1,#16]
switch (xdp->command) {
ffff8000113afec4: 340001e2 cbz w2, ffff8000113aff00 <generic_xdp_install+0x68>
ffff8000113afec8: 7100085f cmp w2, #0x2
ffff8000113afecc: 54000121 b.ne ffff8000113afef0 <generic_xdp_install+0x58>
xdp->prog_id = old ? old->aux->id : 0;
ffff8000113afed0: b4000060 cbz x0, ffff8000113afedc <generic_xdp_install+0x44>
ffff8000113afed4: f9401000 ldr x0, [x0,#32]
ffff8000113afed8: b9401c00 ldr w0, [x0,#28]
ffff8000113afedc: b9000820 str w0, [x1,#8]
}
ffff8000113afee0: a94153f3 ldp x19, x20, [sp,#16]
int ret = 0;
ffff8000113afee4: 52800000 mov w0, #0x0 // #0
}
ffff8000113afee8: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113afeec: d65f03c0 ret
ret = -EINVAL;
ffff8000113afef0: 128002a0 mov w0, #0xffffffea // #-22
}
ffff8000113afef4: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113afef8: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113afefc: d65f03c0 ret
rcu_assign_pointer(dev->xdp_prog, new);
ffff8000113aff00: 910cc261 add x1, x19, #0x330
ffff8000113aff04: c89ffc34 stlr x20, [x1]
if (old)
ffff8000113aff08: b40002a0 cbz x0, ffff8000113aff5c <generic_xdp_install+0xc4>
bpf_prog_put(old);
ffff8000113aff0c: 94000000 bl 0 <bpf_prog_put>
ffff8000113aff0c: R_AARCH64_CALL26 bpf_prog_put
if (old && !new) {
ffff8000113aff10: b40000b4 cbz x20, ffff8000113aff24 <generic_xdp_install+0x8c>
netdev_WARN(dev, "failed to disable GRO_HW!\n");
ffff8000113aff14: 52800000 mov w0, #0x0 // #0
}
ffff8000113aff18: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113aff1c: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113aff20: d65f03c0 ret
STATIC_KEY_CHECK_USE(key);
ffff8000113aff24: 90000000 adrp x0, 0 <static_key_initialized>
ffff8000113aff24: R_AARCH64_ADR_PREL_PG_HI21 static_key_initialized
ffff8000113aff28: 39400000 ldrb w0, [x0]
ffff8000113aff28: R_AARCH64_LDST8_ABS_LO12_NC static_key_initialized
ffff8000113aff2c: 90000014 adrp x20, ffff80001139e37c <__my_cpu_offset>
ffff8000113aff2c: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113aff30: 34000600 cbz w0, ffff8000113afff0 <generic_xdp_install+0x158>
ATOMIC_OPS(sub, sub, J)
ffff8000113aff34: 91000280 add x0, x20, #0x0
ffff8000113aff34: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113aff38: 52800021 mov w1, #0x1 // #1
ffff8000113aff3c: 910d6004 add x4, x0, #0x358
ffff8000113aff40: f9800091 prfm pstl1strm, [x4]
ffff8000113aff44: 885f7c82 ldxr w2, [x4]
ffff8000113aff48: 4b010042 sub w2, w2, w1
ffff8000113aff4c: 88037c82 stxr w3, w2, [x4]
ffff8000113aff50: 35ffffa3 cbnz w3, ffff8000113aff44 <generic_xdp_install+0xac>
int ret = 0;
ffff8000113aff54: 52800000 mov w0, #0x0 // #0
ffff8000113aff58: 17ffffe7 b ffff8000113afef4 <generic_xdp_install+0x5c>
} else if (new && !old) {
ffff8000113aff5c: b4fffdd4 cbz x20, ffff8000113aff14 <generic_xdp_install+0x7c>
STATIC_KEY_CHECK_USE(key);
ffff8000113aff60: 90000000 adrp x0, 0 <static_key_initialized>
ffff8000113aff60: R_AARCH64_ADR_PREL_PG_HI21 static_key_initialized
ffff8000113aff64: 39400000 ldrb w0, [x0]
ffff8000113aff64: R_AARCH64_LDST8_ABS_LO12_NC static_key_initialized
ffff8000113aff68: 90000014 adrp x20, ffff80001139e37c <__my_cpu_offset>
ffff8000113aff68: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff8000113aff6c: 34000560 cbz w0, ffff8000113b0018 <generic_xdp_install+0x180>
ATOMIC_OPS(add, add, I)
ffff8000113aff70: 91000280 add x0, x20, #0x0
ffff8000113aff70: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113aff74: 910d6003 add x3, x0, #0x358
ffff8000113aff78: f9800071 prfm pstl1strm, [x3]
ffff8000113aff7c: 885f7c61 ldxr w1, [x3]
ffff8000113aff80: 11000421 add w1, w1, #0x1
ffff8000113aff84: 88027c61 stxr w2, w1, [x3]
ffff8000113aff88: 35ffffa2 cbnz w2, ffff8000113aff7c <generic_xdp_install+0xe4>
dev_disable_lro(dev);
ffff8000113aff8c: aa1303e0 mov x0, x19
ffff8000113aff90: 94000000 bl ffff8000113afdd8 <dev_disable_lro>
ffff8000113aff90: R_AARCH64_CALL26 dev_disable_lro
dev->wanted_features &= ~NETIF_F_GRO_HW;
ffff8000113aff94: f9406e61 ldr x1, [x19,#216]
netdev_update_features(dev);
ffff8000113aff98: aa1303e0 mov x0, x19
dev->wanted_features &= ~NETIF_F_GRO_HW;
ffff8000113aff9c: 9248f821 and x1, x1, #0xff7fffffffffffff
ffff8000113affa0: f9006e61 str x1, [x19,#216]
netdev_update_features(dev);
ffff8000113affa4: 94000000 bl ffff8000113afd74 <netdev_update_features>
ffff8000113affa4: R_AARCH64_CALL26 netdev_update_features
if (unlikely(dev->features & NETIF_F_GRO_HW))
ffff8000113affa8: f9406660 ldr x0, [x19,#200]
ffff8000113affac: b6bffb40 tbz x0, #55, ffff8000113aff14 <generic_xdp_install+0x7c>
if (!dev->name[0] || strchr(dev->name, '%'))
ffff8000113affb0: 39400260 ldrb w0, [x19]
ffff8000113affb4: 34000460 cbz w0, ffff8000113b0040 <generic_xdp_install+0x1a8>
ffff8000113affb8: aa1303e0 mov x0, x19
ffff8000113affbc: 97ffc674 bl ffff8000113a198c <netdev_name.part.103>
ffff8000113affc0: aa0003e1 mov x1, x0
netdev_WARN(dev, "failed to disable GRO_HW!\n");
ffff8000113affc4: aa1303e0 mov x0, x19
ffff8000113affc8: f90017a1 str x1, [x29,#40]
ffff8000113affcc: 97ffbf13 bl ffff80001139fc18 <netdev_reg_state>
ffff8000113affd0: aa0003e2 mov x2, x0
ffff8000113affd4: f94017a1 ldr x1, [x29,#40]
ffff8000113affd8: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113affd8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xc80
ffff8000113affdc: 91000000 add x0, x0, #0x0
ffff8000113affdc: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xc80
ffff8000113affe0: 94000000 bl 0 <__warn_printk>
ffff8000113affe0: R_AARCH64_CALL26 __warn_printk
ffff8000113affe4: d4210000 brk #0x800
ffff8000113affe8: 52800000 mov w0, #0x0 // #0
ffff8000113affec: 17ffffcb b ffff8000113aff18 <generic_xdp_install+0x80>
STATIC_KEY_CHECK_USE(key);
ffff8000113afff0: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113afff0: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113afff4: 91000282 add x2, x20, #0x0
ffff8000113afff4: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113afff8: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113afff8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x238
ffff8000113afffc: 91000021 add x1, x1, #0x0
ffff8000113afffc: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113b0000: 91000000 add x0, x0, #0x0
ffff8000113b0000: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x238
ffff8000113b0004: 91004021 add x1, x1, #0x10
ffff8000113b0008: 910d6042 add x2, x2, #0x358
ffff8000113b000c: 94000000 bl 0 <__warn_printk>
ffff8000113b000c: R_AARCH64_CALL26 __warn_printk
ffff8000113b0010: d4210000 brk #0x800
ffff8000113b0014: 17ffffc8 b ffff8000113aff34 <generic_xdp_install+0x9c>
STATIC_KEY_CHECK_USE(key);
ffff8000113b0018: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113b0018: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x1a8
ffff8000113b001c: 91000282 add x2, x20, #0x0
ffff8000113b001c: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff8000113b0020: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113b0020: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x238
ffff8000113b0024: 91000021 add x1, x1, #0x0
ffff8000113b0024: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x1a8
ffff8000113b0028: 91000000 add x0, x0, #0x0
ffff8000113b0028: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x238
ffff8000113b002c: 9100a021 add x1, x1, #0x28
ffff8000113b0030: 910d6042 add x2, x2, #0x358
ffff8000113b0034: 94000000 bl 0 <__warn_printk>
ffff8000113b0034: R_AARCH64_CALL26 __warn_printk
ffff8000113b0038: d4210000 brk #0x800
ffff8000113b003c: 17ffffcd b ffff8000113aff70 <generic_xdp_install+0xd8>
return "(unnamed net_device)";
ffff8000113b0040: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113b0040: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x158
ffff8000113b0044: 91000021 add x1, x1, #0x0
ffff8000113b0044: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x158
ffff8000113b0048: 17ffffdf b ffff8000113affc4 <generic_xdp_install+0x12c>
ffff8000113b004c <netdev_change_features>:
{
ffff8000113b004c: a9bc7bfd stp x29, x30, [sp,#-64]!
ffff8000113b0050: 910003fd mov x29, sp
ffff8000113b0054: a90153f3 stp x19, x20, [sp,#16]
ffff8000113b0058: aa0003f4 mov x20, x0
ffff8000113b005c: aa1e03e0 mov x0, x30
ffff8000113b0060: 94000000 bl 0 <_mcount>
ffff8000113b0060: R_AARCH64_CALL26 _mcount
ffff8000113b0064: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff8000113b0064: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113b0068: f9400261 ldr x1, [x19]
ffff8000113b0068: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
__netdev_update_features(dev);
ffff8000113b006c: aa1403e0 mov x0, x20
{
ffff8000113b0070: f9001fa1 str x1, [x29,#56]
__netdev_update_features(dev);
ffff8000113b0074: 94000000 bl ffff8000113af4b8 <__netdev_update_features>
ffff8000113b0074: R_AARCH64_CALL26 __netdev_update_features
return call_netdevice_notifiers_info(val, &info);
ffff8000113b0078: 9100a3a1 add x1, x29, #0x28
ffff8000113b007c: d2800180 mov x0, #0xc // #12
struct netdev_notifier_info info = {
ffff8000113b0080: f90017b4 str x20, [x29,#40]
ffff8000113b0084: f9001bbf str xzr, [x29,#48]
return call_netdevice_notifiers_info(val, &info);
ffff8000113b0088: 97ffc01c bl ffff8000113a00f8 <call_netdevice_notifiers_info>
}
ffff8000113b008c: f9401fa1 ldr x1, [x29,#56]
ffff8000113b0090: f9400260 ldr x0, [x19]
ffff8000113b0090: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113b0094: eb00003f cmp x1, x0
ffff8000113b0098: 54000081 b.ne ffff8000113b00a8 <netdev_change_features+0x5c>
ffff8000113b009c: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113b00a0: a8c47bfd ldp x29, x30, [sp],#64
ffff8000113b00a4: d65f03c0 ret
ffff8000113b00a8: 94000000 bl 0 <__stack_chk_fail>
ffff8000113b00a8: R_AARCH64_CALL26 __stack_chk_fail
ffff8000113b00ac <register_netdevice>:
{
ffff8000113b00ac: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff8000113b00b0: 910003fd mov x29, sp
ffff8000113b00b4: a90153f3 stp x19, x20, [sp,#16]
ffff8000113b00b8: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113b00bc: aa0003f3 mov x19, x0
ffff8000113b00c0: aa1e03e0 mov x0, x30
ffff8000113b00c4: 94000000 bl 0 <_mcount>
ffff8000113b00c4: R_AARCH64_CALL26 _mcount
ffff8000113b00c8: 90000014 adrp x20, 0 <__stack_chk_guard>
ffff8000113b00c8: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113b00cc: f9400281 ldr x1, [x20]
ffff8000113b00cc: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
BUG_ON(dev_boot_phase);
ffff8000113b00d0: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113b00d0: R_AARCH64_ADR_PREL_PG_HI21 .data
ffff8000113b00d4: b9400000 ldr w0, [x0]
ffff8000113b00d4: R_AARCH64_LDST32_ABS_LO12_NC .data
{
ffff8000113b00d8: f90027a1 str x1, [x29,#72]
ffff8000113b00dc: f9427a75 ldr x21, [x19,#1264]
BUG_ON(dev_boot_phase);
ffff8000113b00e0: 35002320 cbnz w0, ffff8000113b0544 <register_netdevice+0x498>
ASSERT_RTNL();
ffff8000113b00e4: 94000000 bl 0 <rtnl_is_locked>
ffff8000113b00e4: R_AARCH64_CALL26 rtnl_is_locked
ffff8000113b00e8: 34002100 cbz w0, ffff8000113b0508 <register_netdevice+0x45c>
might_sleep();
ffff8000113b00ec: 94000000 bl 0 <_cond_resched>
ffff8000113b00ec: R_AARCH64_CALL26 _cond_resched
BUG_ON(dev->reg_state != NETREG_UNINITIALIZED);
ffff8000113b00f0: 39536260 ldrb w0, [x19,#1240]
ffff8000113b00f4: 350022a0 cbnz w0, ffff8000113b0548 <register_netdevice+0x49c>
BUG_ON(!net);
ffff8000113b00f8: b4002255 cbz x21, ffff8000113b0540 <register_netdevice+0x494>
ret = ethtool_check_ops(dev->ethtool_ops);
ffff8000113b00fc: f940fe60 ldr x0, [x19,#504]
ffff8000113b0100: 94000000 bl 0 <ethtool_check_ops>
ffff8000113b0100: R_AARCH64_CALL26 ethtool_check_ops
if (ret)
ffff8000113b0104: 34000120 cbz w0, ffff8000113b0128 <register_netdevice+0x7c>
}
ffff8000113b0108: f94027a2 ldr x2, [x29,#72]
ffff8000113b010c: f9400281 ldr x1, [x20]
ffff8000113b010c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113b0110: eb01005f cmp x2, x1
ffff8000113b0114: 54001f81 b.ne ffff8000113b0504 <register_netdevice+0x458>
ffff8000113b0118: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113b011c: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113b0120: a8c57bfd ldp x29, x30, [sp],#80
ffff8000113b0124: d65f03c0 ret
spin_lock_init(&dev->addr_list_lock);
ffff8000113b0128: b9027a60 str w0, [x19,#632]
ret = dev_get_valid_name(net, dev, dev->name);
ffff8000113b012c: aa1303e1 mov x1, x19
ffff8000113b0130: aa1503e0 mov x0, x21
ffff8000113b0134: aa1303e2 mov x2, x19
ffff8000113b0138: 97ffc677 bl ffff8000113a1b14 <dev_get_valid_name>
if (ret < 0)
ffff8000113b013c: 37fffe60 tbnz w0, #31, ffff8000113b0108 <register_netdevice+0x5c>
name_node = netdev_name_node_alloc(dev, dev->name);
ffff8000113b0140: aa1303e0 mov x0, x19
ffff8000113b0144: aa1303e1 mov x1, x19
ffff8000113b0148: 97ffbd7e bl ffff80001139f740 <netdev_name_node_alloc>
if (!name_node)
ffff8000113b014c: b4000da0 cbz x0, ffff8000113b0300 <register_netdevice+0x254>
INIT_LIST_HEAD(&name_node->list);
ffff8000113b0150: 91004001 add x1, x0, #0x10
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113b0154: f9000801 str x1, [x0,#16]
list->prev = list;
ffff8000113b0158: f9000c01 str x1, [x0,#24]
if (dev->netdev_ops->ndo_init) {
ffff8000113b015c: f940fa61 ldr x1, [x19,#496]
dev->name_node = netdev_name_node_head_alloc(dev);
ffff8000113b0160: f9000a60 str x0, [x19,#16]
if (dev->netdev_ops->ndo_init) {
ffff8000113b0164: f9400021 ldr x1, [x1]
ffff8000113b0168: b4000181 cbz x1, ffff8000113b0198 <register_netdevice+0xec>
ret = dev->netdev_ops->ndo_init(dev);
ffff8000113b016c: aa1303e0 mov x0, x19
ffff8000113b0170: d63f0020 blr x1
if (ret) {
ffff8000113b0174: 6b1f001f cmp w0, wzr
ret = dev->netdev_ops->ndo_init(dev);
ffff8000113b0178: 2a0003f6 mov w22, w0
if (ret) {
ffff8000113b017c: 540000e0 b.eq ffff8000113b0198 <register_netdevice+0xec>
ret = -EIO;
ffff8000113b0180: 12800080 mov w0, #0xfffffffb // #-5
ffff8000113b0184: 1a80d2d6 csel w22, w22, w0, le
kfree(name_node);
ffff8000113b0188: f9400a60 ldr x0, [x19,#16]
ffff8000113b018c: 94000000 bl 0 <kfree>
ffff8000113b018c: R_AARCH64_CALL26 kfree
ffff8000113b0190: 2a1603e0 mov w0, w22
ffff8000113b0194: 17ffffdd b ffff8000113b0108 <register_netdevice+0x5c>
if (((dev->hw_features | dev->features) &
ffff8000113b0198: f9406a63 ldr x3, [x19,#208]
ffff8000113b019c: f9406664 ldr x4, [x19,#200]
ffff8000113b01a0: aa030080 orr x0, x4, x3
ffff8000113b01a4: 364800c0 tbz w0, #9, ffff8000113b01bc <register_netdevice+0x110>
(!dev->netdev_ops->ndo_vlan_rx_add_vid ||
ffff8000113b01a8: f940fa60 ldr x0, [x19,#496]
NETIF_F_HW_VLAN_CTAG_FILTER) &&
ffff8000113b01ac: f9405001 ldr x1, [x0,#160]
ffff8000113b01b0: b4000ba1 cbz x1, ffff8000113b0324 <register_netdevice+0x278>
(!dev->netdev_ops->ndo_vlan_rx_add_vid ||
ffff8000113b01b4: f9405400 ldr x0, [x0,#168]
ffff8000113b01b8: b4000b60 cbz x0, ffff8000113b0324 <register_netdevice+0x278>
if (!dev->ifindex)
ffff8000113b01bc: b9410262 ldr w2, [x19,#256]
ffff8000113b01c0: 34000a62 cbz w2, ffff8000113b030c <register_netdevice+0x260>
hlist_for_each_entry(dev, head, index_hlist)
ffff8000113b01c4: f9409aa1 ldr x1, [x21,#304]
return &net->dev_index_head[ifindex & (NETDEV_HASHENTRIES - 1)];
ffff8000113b01c8: d37d1c40 ubfiz x0, x2, #3, #8
hlist_for_each_entry(dev, head, index_hlist)
ffff8000113b01cc: f8606820 ldr x0, [x1,x0]
ffff8000113b01d0: b4000040 cbz x0, ffff8000113b01d8 <register_netdevice+0x12c>
ffff8000113b01d4: d10e4000 sub x0, x0, #0x390
ffff8000113b01d8: b40000c0 cbz x0, ffff8000113b01f0 <register_netdevice+0x144>
if (dev->ifindex == ifindex)
ffff8000113b01dc: b9410001 ldr w1, [x0,#256]
ffff8000113b01e0: 6b01005f cmp w2, w1
ffff8000113b01e4: 540008a0 b.eq ffff8000113b02f8 <register_netdevice+0x24c>
hlist_for_each_entry(dev, head, index_hlist)
ffff8000113b01e8: f941c800 ldr x0, [x0,#912]
ffff8000113b01ec: b5ffff40 cbnz x0, ffff8000113b01d4 <register_netdevice+0x128>
dev->hw_features |= (NETIF_F_SOFT_FEATURES | NETIF_F_SOFT_FEATURES_OFF);
ffff8000113b01f0: d2890001 mov x1, #0x4800 // #18432
ffff8000113b01f4: f2e04001 movk x1, #0x200, lsl #48
dev->features |= NETIF_F_SOFT_FEATURES;
ffff8000113b01f8: d2890000 mov x0, #0x4800 // #18432
dev->hw_features |= (NETIF_F_SOFT_FEATURES | NETIF_F_SOFT_FEATURES_OFF);
ffff8000113b01fc: aa010061 orr x1, x3, x1
dev->features |= NETIF_F_SOFT_FEATURES;
ffff8000113b0200: aa000082 orr x2, x4, x0
if (dev->netdev_ops->ndo_udp_tunnel_add) {
ffff8000113b0204: f940fa65 ldr x5, [x19,#496]
dev->hw_features |= (NETIF_F_SOFT_FEATURES | NETIF_F_SOFT_FEATURES_OFF);
ffff8000113b0208: f9006a61 str x1, [x19,#208]
dev->features |= NETIF_F_SOFT_FEATURES;
ffff8000113b020c: f9006662 str x2, [x19,#200]
if (dev->netdev_ops->ndo_udp_tunnel_add) {
ffff8000113b0210: f94100a5 ldr x5, [x5,#512]
ffff8000113b0214: b4000f85 cbz x5, ffff8000113b0404 <register_netdevice+0x358>
dev->hw_features |= NETIF_F_RX_UDP_TUNNEL_PORT;
ffff8000113b0218: aa0003e1 mov x1, x0
ffff8000113b021c: f2e04201 movk x1, #0x210, lsl #48
dev->features |= NETIF_F_RX_UDP_TUNNEL_PORT;
ffff8000113b0220: b24c0040 orr x0, x2, #0x10000000000000
dev->hw_features |= NETIF_F_RX_UDP_TUNNEL_PORT;
ffff8000113b0224: aa010063 orr x3, x3, x1
dev->features |= NETIF_F_RX_UDP_TUNNEL_PORT;
ffff8000113b0228: f9006660 str x0, [x19,#200]
dev->hw_features |= NETIF_F_RX_UDP_TUNNEL_PORT;
ffff8000113b022c: f9006a63 str x3, [x19,#208]
dev->wanted_features = dev->features & dev->hw_features;
ffff8000113b0230: 8a030000 and x0, x0, x3
if (!(dev->flags & IFF_LOOPBACK))
ffff8000113b0234: b9422a61 ldr w1, [x19,#552]
dev->wanted_features = dev->features & dev->hw_features;
ffff8000113b0238: f9006e60 str x0, [x19,#216]
if (!(dev->flags & IFF_LOOPBACK))
ffff8000113b023c: 37180061 tbnz w1, #3, ffff8000113b0248 <register_netdevice+0x19c>
dev->hw_features |= NETIF_F_NOCACHE_COPY;
ffff8000113b0240: b2570063 orr x3, x3, #0x20000000000
ffff8000113b0244: f9006a63 str x3, [x19,#208]
if (dev->hw_features & NETIF_F_TSO)
ffff8000113b0248: 36800063 tbz w3, #16, ffff8000113b0254 <register_netdevice+0x1a8>
dev->hw_features |= NETIF_F_TSO_MANGLEID;
ffff8000113b024c: b26d0063 orr x3, x3, #0x80000
ffff8000113b0250: f9006a63 str x3, [x19,#208]
if (dev->vlan_features & NETIF_F_TSO)
ffff8000113b0254: f9407262 ldr x2, [x19,#224]
ffff8000113b0258: 36800062 tbz w2, #16, ffff8000113b0264 <register_netdevice+0x1b8>
dev->vlan_features |= NETIF_F_TSO_MANGLEID;
ffff8000113b025c: b26d0042 orr x2, x2, #0x80000
ffff8000113b0260: f9007262 str x2, [x19,#224]
if (dev->mpls_features & NETIF_F_TSO)
ffff8000113b0264: f9407a61 ldr x1, [x19,#240]
ffff8000113b0268: 36800061 tbz w1, #16, ffff8000113b0274 <register_netdevice+0x1c8>
dev->mpls_features |= NETIF_F_TSO_MANGLEID;
ffff8000113b026c: b26d0021 orr x1, x1, #0x80000
ffff8000113b0270: f9007a61 str x1, [x19,#240]
if (dev->hw_enc_features & NETIF_F_TSO)
ffff8000113b0274: f9407660 ldr x0, [x19,#232]
dev->hw_enc_features |= NETIF_F_SG | NETIF_F_GSO_PARTIAL;
ffff8000113b0278: d2800023 mov x3, #0x1 // #1
if (dev->hw_enc_features & NETIF_F_TSO)
ffff8000113b027c: 92700004 and x4, x0, #0x10000
dev->hw_enc_features |= NETIF_F_TSO_MANGLEID;
ffff8000113b0280: eb1f009f cmp x4, xzr
ffff8000113b0284: b26d0004 orr x4, x0, #0x80000
ffff8000113b0288: 9a801080 csel x0, x4, x0, ne
dev->hw_enc_features |= NETIF_F_SG | NETIF_F_GSO_PARTIAL;
ffff8000113b028c: f2a20003 movk x3, #0x1000, lsl #16
ffff8000113b0290: aa030003 orr x3, x0, x3
dev->vlan_features |= NETIF_F_HIGHDMA;
ffff8000113b0294: b27b0042 orr x2, x2, #0x20
dev->mpls_features |= NETIF_F_SG;
ffff8000113b0298: b2400021 orr x1, x1, #0x1
ffff8000113b029c: f9007a61 str x1, [x19,#240]
dev->vlan_features |= NETIF_F_HIGHDMA;
ffff8000113b02a0: f9007262 str x2, [x19,#224]
dev->hw_enc_features |= NETIF_F_SG | NETIF_F_GSO_PARTIAL;
ffff8000113b02a4: f9007663 str x3, [x19,#232]
return call_netdevice_notifiers_info(val, &info);
ffff8000113b02a8: d2800220 mov x0, #0x11 // #17
ffff8000113b02ac: 9100e3a1 add x1, x29, #0x38
struct netdev_notifier_info info = {
ffff8000113b02b0: f9001fb3 str x19, [x29,#56]
ffff8000113b02b4: f90023bf str xzr, [x29,#64]
return call_netdevice_notifiers_info(val, &info);
ffff8000113b02b8: 97ffbf90 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ret &= ~NOTIFY_STOP_MASK;
ffff8000113b02bc: 12107800 and w0, w0, #0xffff7fff
return ret > NOTIFY_OK ? NOTIFY_OK - ret : 0;
ffff8000113b02c0: 7100041f cmp w0, #0x1
ffff8000113b02c4: 5400062d b.le ffff8000113b0388 <register_netdevice+0x2dc>
ffff8000113b02c8: 52800036 mov w22, #0x1 // #1
ffff8000113b02cc: 4b0002d6 sub w22, w22, w0
if (dev->netdev_ops->ndo_uninit)
ffff8000113b02d0: f940fa60 ldr x0, [x19,#496]
ffff8000113b02d4: f9400401 ldr x1, [x0,#8]
ffff8000113b02d8: b4000061 cbz x1, ffff8000113b02e4 <register_netdevice+0x238>
dev->netdev_ops->ndo_uninit(dev);
ffff8000113b02dc: aa1303e0 mov x0, x19
ffff8000113b02e0: d63f0020 blr x1
if (dev->priv_destructor)
ffff8000113b02e4: f9427261 ldr x1, [x19,#1248]
ffff8000113b02e8: b4fff501 cbz x1, ffff8000113b0188 <register_netdevice+0xdc>
dev->priv_destructor(dev);
ffff8000113b02ec: aa1303e0 mov x0, x19
ffff8000113b02f0: d63f0020 blr x1
ffff8000113b02f4: 17ffffa5 b ffff8000113b0188 <register_netdevice+0xdc>
ret = -EBUSY;
ffff8000113b02f8: 128001f6 mov w22, #0xfffffff0 // #-16
ffff8000113b02fc: 17fffff5 b ffff8000113b02d0 <register_netdevice+0x224>
dev->name_node = netdev_name_node_head_alloc(dev);
ffff8000113b0300: f9000a60 str x0, [x19,#16]
ret = -ENOMEM;
ffff8000113b0304: 12800160 mov w0, #0xfffffff4 // #-12
ffff8000113b0308: 17ffff80 b ffff8000113b0108 <register_netdevice+0x5c>
dev->ifindex = dev_new_index(net);
ffff8000113b030c: aa1503e0 mov x0, x21
ffff8000113b0310: 97ffbc5d bl ffff80001139f484 <dev_new_index>
ffff8000113b0314: b9010260 str w0, [x19,#256]
ffff8000113b0318: f9406a63 ldr x3, [x19,#208]
ffff8000113b031c: f9406664 ldr x4, [x19,#200]
ffff8000113b0320: 17ffffb4 b ffff8000113b01f0 <register_netdevice+0x144>
if (!dev->name[0] || strchr(dev->name, '%'))
ffff8000113b0324: 39400260 ldrb w0, [x19]
ffff8000113b0328: 340000a0 cbz w0, ffff8000113b033c <register_netdevice+0x290>
ffff8000113b032c: aa1303e0 mov x0, x19
ffff8000113b0330: 528004a1 mov w1, #0x25 // #37
ffff8000113b0334: 94000000 bl 0 <strchr>
ffff8000113b0334: R_AARCH64_CALL26 strchr
ffff8000113b0338: b4000e20 cbz x0, ffff8000113b04fc <register_netdevice+0x450>
return "(unnamed net_device)";
ffff8000113b033c: 90000015 adrp x21, ffff80001139e37c <__my_cpu_offset>
ffff8000113b033c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x158
ffff8000113b0340: 910002b5 add x21, x21, #0x0
ffff8000113b0340: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x158
switch (dev->reg_state) {
ffff8000113b0344: 39536262 ldrb w2, [x19,#1240]
ffff8000113b0348: 7100145f cmp w2, #0x5
ffff8000113b034c: 540002c9 b.ls ffff8000113b03a4 <register_netdevice+0x2f8>
WARN_ONCE(1, "%s: unknown reg_state %d\n", dev->name, dev->reg_state);
ffff8000113b0350: 90000004 adrp x4, ffff80001139e37c <__my_cpu_offset>
ffff8000113b0350: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113b0354: 91000084 add x4, x4, #0x0
ffff8000113b0354: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113b0358: 39400880 ldrb w0, [x4,#2]
return " (unknown)";
ffff8000113b035c: 90000016 adrp x22, ffff80001139e37c <__my_cpu_offset>
ffff8000113b035c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xb8
ffff8000113b0360: 910002d6 add x22, x22, #0x0
ffff8000113b0360: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xb8
WARN_ONCE(1, "%s: unknown reg_state %d\n", dev->name, dev->reg_state);
ffff8000113b0364: 34000f40 cbz w0, ffff8000113b054c <register_netdevice+0x4a0>
netdev_WARN(dev, "Buggy VLAN acceleration in driver!\n");
ffff8000113b0368: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113b0368: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xcb0
ffff8000113b036c: 91000000 add x0, x0, #0x0
ffff8000113b036c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xcb0
ffff8000113b0370: aa1503e1 mov x1, x21
ffff8000113b0374: aa1603e2 mov x2, x22
ffff8000113b0378: 94000000 bl 0 <__warn_printk>
ffff8000113b0378: R_AARCH64_CALL26 __warn_printk
ffff8000113b037c: d4210000 brk #0x800
ret = -EINVAL;
ffff8000113b0380: 128002b6 mov w22, #0xffffffea // #-22
goto err_uninit;
ffff8000113b0384: 17ffffd3 b ffff8000113b02d0 <register_netdevice+0x224>
ret = netdev_register_kobject(dev);
ffff8000113b0388: aa1303e0 mov x0, x19
ffff8000113b038c: 94000000 bl 0 <netdev_register_kobject>
ffff8000113b038c: R_AARCH64_CALL26 netdev_register_kobject
ffff8000113b0390: 2a0003f6 mov w22, w0
if (ret) {
ffff8000113b0394: 340003e0 cbz w0, ffff8000113b0410 <register_netdevice+0x364>
dev->reg_state = NETREG_UNREGISTERED;
ffff8000113b0398: 52800060 mov w0, #0x3 // #3
ffff8000113b039c: 39136260 strb w0, [x19,#1240]
goto err_uninit;
ffff8000113b03a0: 17ffffcc b ffff8000113b02d0 <register_netdevice+0x224>
switch (dev->reg_state) {
ffff8000113b03a4: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113b03a4: R_AARCH64_ADR_PREL_PG_HI21 .rodata+0x84
ffff8000113b03a8: 91000000 add x0, x0, #0x0
ffff8000113b03a8: R_AARCH64_ADD_ABS_LO12_NC .rodata+0x84
ffff8000113b03ac: 38624803 ldrb w3, [x0,w2,uxtw]
ffff8000113b03b0: 10000064 adr x4, ffff8000113b03bc <register_netdevice+0x310>
ffff8000113b03b4: 8b238883 add x3, x4, w3, sxtb #2
ffff8000113b03b8: d61f0060 br x3
case NETREG_REGISTERED: return "";
ffff8000113b03bc: 90000016 adrp x22, ffff80001139e37c <__my_cpu_offset>
ffff8000113b03bc: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x68
ffff8000113b03c0: 910002d6 add x22, x22, #0x0
ffff8000113b03c0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x68
ffff8000113b03c4: 17ffffe9 b ffff8000113b0368 <register_netdevice+0x2bc>
case NETREG_UNINITIALIZED: return " (uninitialized)";
ffff8000113b03c8: 90000016 adrp x22, ffff80001139e37c <__my_cpu_offset>
ffff8000113b03c8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x50
ffff8000113b03cc: 910002d6 add x22, x22, #0x0
ffff8000113b03cc: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x50
ffff8000113b03d0: 17ffffe6 b ffff8000113b0368 <register_netdevice+0x2bc>
case NETREG_DUMMY: return " (dummy)";
ffff8000113b03d4: 90000016 adrp x22, ffff80001139e37c <__my_cpu_offset>
ffff8000113b03d4: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xa8
ffff8000113b03d8: 910002d6 add x22, x22, #0x0
ffff8000113b03d8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xa8
ffff8000113b03dc: 17ffffe3 b ffff8000113b0368 <register_netdevice+0x2bc>
case NETREG_RELEASED: return " (released)";
ffff8000113b03e0: 90000016 adrp x22, ffff80001139e37c <__my_cpu_offset>
ffff8000113b03e0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x98
ffff8000113b03e4: 910002d6 add x22, x22, #0x0
ffff8000113b03e4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x98
ffff8000113b03e8: 17ffffe0 b ffff8000113b0368 <register_netdevice+0x2bc>
case NETREG_UNREGISTERED: return " (unregistered)";
ffff8000113b03ec: 90000016 adrp x22, ffff80001139e37c <__my_cpu_offset>
ffff8000113b03ec: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x88
ffff8000113b03f0: 910002d6 add x22, x22, #0x0
ffff8000113b03f0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x88
ffff8000113b03f4: 17ffffdd b ffff8000113b0368 <register_netdevice+0x2bc>
case NETREG_UNREGISTERING: return " (unregistering)";
ffff8000113b03f8: 90000016 adrp x22, ffff80001139e37c <__my_cpu_offset>
ffff8000113b03f8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x70
ffff8000113b03fc: 910002d6 add x22, x22, #0x0
ffff8000113b03fc: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x70
ffff8000113b0400: 17ffffda b ffff8000113b0368 <register_netdevice+0x2bc>
ffff8000113b0404: aa0103e3 mov x3, x1
ffff8000113b0408: aa0203e0 mov x0, x2
ffff8000113b040c: 17ffff89 b ffff8000113b0230 <register_netdevice+0x184>
dev->reg_state = NETREG_REGISTERED;
ffff8000113b0410: 52800035 mov w21, #0x1 // #1
ffff8000113b0414: 39136275 strb w21, [x19,#1240]
__netdev_update_features(dev);
ffff8000113b0418: aa1303e0 mov x0, x19
ffff8000113b041c: 94000000 bl ffff8000113af4b8 <__netdev_update_features>
ffff8000113b041c: R_AARCH64_CALL26 __netdev_update_features
ATOMIC64_OPS(or, orr, L)
ffff8000113b0420: 91010264 add x4, x19, #0x40
ffff8000113b0424: f9800091 prfm pstl1strm, [x4]
ffff8000113b0428: c85f7c80 ldxr x0, [x4]
ffff8000113b042c: b27f0000 orr x0, x0, #0x2
ffff8000113b0430: c8017c80 stxr w1, x0, [x4]
ffff8000113b0434: 35ffffa1 cbnz w1, ffff8000113b0428 <register_netdevice+0x37c>
linkwatch_init_dev(dev);
ffff8000113b0438: aa1303e0 mov x0, x19
ffff8000113b043c: 94000000 bl 0 <linkwatch_init_dev>
ffff8000113b043c: R_AARCH64_CALL26 linkwatch_init_dev
dev_init_scheduler(dev);
ffff8000113b0440: aa1303e0 mov x0, x19
ffff8000113b0444: 94000000 bl 0 <dev_init_scheduler>
ffff8000113b0444: R_AARCH64_CALL26 dev_init_scheduler
this_cpu_inc(*dev->pcpu_refcnt);
ffff8000113b0448: f9426260 ldr x0, [x19,#1216]
asm(ALTERNATIVE("mrs %0, tpidr_el1",
ffff8000113b044c: d538d081 mrs x1, tpidr_el1
PERCPU_OP(add, add, stadd)
ffff8000113b0450: 8b000024 add x4, x1, x0
ffff8000113b0454: 885f7c83 ldxr w3, [x4]
ffff8000113b0458: 0b150063 add w3, w3, w21
ffff8000113b045c: 88027c83 stxr w2, w3, [x4]
ffff8000113b0460: 35ffffa2 cbnz w2, ffff8000113b0454 <register_netdevice+0x3a8>
list_netdevice(dev);
ffff8000113b0464: aa1303e0 mov x0, x19
ffff8000113b0468: 97ffcbc3 bl ffff8000113a3374 <list_netdevice>
add_device_randomness(dev->dev_addr, dev->addr_len);
ffff8000113b046c: f9418e60 ldr x0, [x19,#792]
ffff8000113b0470: 3949be61 ldrb w1, [x19,#623]
ffff8000113b0474: 94000000 bl 0 <add_device_randomness>
ffff8000113b0474: R_AARCH64_CALL26 add_device_randomness
if (dev->addr_assign_type == NET_ADDR_PERM)
ffff8000113b0478: 3949ba60 ldrb w0, [x19,#622]
ffff8000113b047c: 350000a0 cbnz w0, ffff8000113b0490 <register_netdevice+0x3e4>
return __builtin_memcpy(p, q, size);
ffff8000113b0480: f9418e61 ldr x1, [x19,#792]
ffff8000113b0484: 3949be62 ldrb w2, [x19,#623]
ffff8000113b0488: 91093a60 add x0, x19, #0x24e
ffff8000113b048c: 94000000 bl 0 <memcpy>
ffff8000113b048c: R_AARCH64_CALL26 memcpy
return call_netdevice_notifiers_info(val, &info);
ffff8000113b0490: 9100e3a1 add x1, x29, #0x38
ffff8000113b0494: d28000a0 mov x0, #0x5 // #5
struct netdev_notifier_info info = {
ffff8000113b0498: f9001fb3 str x19, [x29,#56]
ffff8000113b049c: f90023bf str xzr, [x29,#64]
return call_netdevice_notifiers_info(val, &info);
ffff8000113b04a0: 97ffbf16 bl ffff8000113a00f8 <call_netdevice_notifiers_info>
ret &= ~NOTIFY_STOP_MASK;
ffff8000113b04a4: 12107801 and w1, w0, #0xffff7fff
return ret > NOTIFY_OK ? NOTIFY_OK - ret : 0;
ffff8000113b04a8: 7100043f cmp w1, #0x1
ffff8000113b04ac: 5400010d b.le ffff8000113b04cc <register_netdevice+0x420>
rollback_registered(dev);
ffff8000113b04b0: aa1303e0 mov x0, x19
ffff8000113b04b4: 52800036 mov w22, #0x1 // #1
ffff8000113b04b8: 4b0102d6 sub w22, w22, w1
ffff8000113b04bc: 97fffa29 bl ffff8000113aed60 <rollback_registered>
rcu_barrier();
ffff8000113b04c0: 94000000 bl 0 <rcu_barrier>
ffff8000113b04c0: R_AARCH64_CALL26 rcu_barrier
dev->reg_state = NETREG_UNREGISTERED;
ffff8000113b04c4: 52800060 mov w0, #0x3 // #3
ffff8000113b04c8: 39136260 strb w0, [x19,#1240]
if (!dev->rtnl_link_ops ||
ffff8000113b04cc: f9441a60 ldr x0, [x19,#2096]
ffff8000113b04d0: b4000080 cbz x0, ffff8000113b04e0 <register_netdevice+0x434>
ffff8000113b04d4: 7949b661 ldrh w1, [x19,#1242]
ffff8000113b04d8: 2a1603e0 mov w0, w22
ffff8000113b04dc: 35ffe161 cbnz w1, ffff8000113b0108 <register_netdevice+0x5c>
rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U, GFP_KERNEL);
ffff8000113b04e0: 52800200 mov w0, #0x10 // #16
ffff8000113b04e4: aa1303e1 mov x1, x19
ffff8000113b04e8: 12800002 mov w2, #0xffffffff // #-1
ffff8000113b04ec: 52819803 mov w3, #0xcc0 // #3264
ffff8000113b04f0: 94000000 bl 0 <rtmsg_ifinfo>
ffff8000113b04f0: R_AARCH64_CALL26 rtmsg_ifinfo
ffff8000113b04f4: 2a1603e0 mov w0, w22
ffff8000113b04f8: 17ffff04 b ffff8000113b0108 <register_netdevice+0x5c>
return dev->name;
ffff8000113b04fc: aa1303f5 mov x21, x19
ffff8000113b0500: 17ffff91 b ffff8000113b0344 <register_netdevice+0x298>
}
ffff8000113b0504: 94000000 bl 0 <__stack_chk_fail>
ffff8000113b0504: R_AARCH64_CALL26 __stack_chk_fail
ASSERT_RTNL();
ffff8000113b0508: 90000003 adrp x3, ffff80001139e37c <__my_cpu_offset>
ffff8000113b0508: R_AARCH64_ADR_PREL_PG_HI21 .data.once
ffff8000113b050c: 91000063 add x3, x3, #0x0
ffff8000113b050c: R_AARCH64_ADD_ABS_LO12_NC .data.once
ffff8000113b0510: 39409c60 ldrb w0, [x3,#39]
ffff8000113b0514: 35ffdec0 cbnz w0, ffff8000113b00ec <register_netdevice+0x40>
ffff8000113b0518: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113b0518: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x18
ffff8000113b051c: 90000001 adrp x1, ffff80001139e37c <__my_cpu_offset>
ffff8000113b051c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x40
ffff8000113b0520: 52800024 mov w4, #0x1 // #1
ffff8000113b0524: 91000000 add x0, x0, #0x0
ffff8000113b0524: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x18
ffff8000113b0528: 91000021 add x1, x1, #0x0
ffff8000113b0528: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x40
ffff8000113b052c: 52848a02 mov w2, #0x2450 // #9296
ffff8000113b0530: 39009c64 strb w4, [x3,#39]
ffff8000113b0534: 94000000 bl 0 <__warn_printk>
ffff8000113b0534: R_AARCH64_CALL26 __warn_printk
ffff8000113b0538: d4210000 brk #0x800
ffff8000113b053c: 17fffeec b ffff8000113b00ec <register_netdevice+0x40>
BUG_ON(!net);
ffff8000113b0540: d4210000 brk #0x800
BUG_ON(dev_boot_phase);
ffff8000113b0544: d4210000 brk #0x800
BUG_ON(dev->reg_state != NETREG_UNINITIALIZED);
ffff8000113b0548: d4210000 brk #0x800
WARN_ONCE(1, "%s: unknown reg_state %d\n", dev->name, dev->reg_state);
ffff8000113b054c: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113b054c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xc8
ffff8000113b0550: 52800023 mov w3, #0x1 // #1
ffff8000113b0554: 91000000 add x0, x0, #0x0
ffff8000113b0554: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xc8
ffff8000113b0558: aa1303e1 mov x1, x19
ffff8000113b055c: 39000883 strb w3, [x4,#2]
ffff8000113b0560: 94000000 bl 0 <__warn_printk>
ffff8000113b0560: R_AARCH64_CALL26 __warn_printk
ffff8000113b0564: d4210000 brk #0x800
ffff8000113b0568: 17ffff80 b ffff8000113b0368 <register_netdevice+0x2bc>
ffff8000113b056c <register_netdev>:
{
ffff8000113b056c: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113b0570: 910003fd mov x29, sp
ffff8000113b0574: f9000bf3 str x19, [sp,#16]
ffff8000113b0578: aa0003f3 mov x19, x0
ffff8000113b057c: aa1e03e0 mov x0, x30
ffff8000113b0580: 94000000 bl 0 <_mcount>
ffff8000113b0580: R_AARCH64_CALL26 _mcount
if (rtnl_lock_killable())
ffff8000113b0584: 94000000 bl 0 <rtnl_lock_killable>
ffff8000113b0584: R_AARCH64_CALL26 rtnl_lock_killable
ffff8000113b0588: 35000120 cbnz w0, ffff8000113b05ac <register_netdev+0x40>
err = register_netdevice(dev);
ffff8000113b058c: aa1303e0 mov x0, x19
ffff8000113b0590: 94000000 bl ffff8000113b00ac <register_netdevice>
ffff8000113b0590: R_AARCH64_CALL26 register_netdevice
rtnl_unlock();
ffff8000113b0594: f90017a0 str x0, [x29,#40]
ffff8000113b0598: 94000000 bl 0 <rtnl_unlock>
ffff8000113b0598: R_AARCH64_CALL26 rtnl_unlock
return err;
ffff8000113b059c: f94017a0 ldr x0, [x29,#40]
}
ffff8000113b05a0: f9400bf3 ldr x19, [sp,#16]
ffff8000113b05a4: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113b05a8: d65f03c0 ret
return -EINTR;
ffff8000113b05ac: 12800060 mov w0, #0xfffffffc // #-4
ffff8000113b05b0: 17fffffc b ffff8000113b05a0 <register_netdev+0x34>
ffff8000113b05b4 <netdev_run_todo>:
{
ffff8000113b05b4: a9b67bfd stp x29, x30, [sp,#-160]!
ffff8000113b05b8: 910003fd mov x29, sp
ffff8000113b05bc: a90153f3 stp x19, x20, [sp,#16]
ffff8000113b05c0: a9025bf5 stp x21, x22, [sp,#32]
ffff8000113b05c4: a90363f7 stp x23, x24, [sp,#48]
ffff8000113b05c8: a9046bf9 stp x25, x26, [sp,#64]
ffff8000113b05cc: a90573fb stp x27, x28, [sp,#80]
ffff8000113b05d0: aa1e03e0 mov x0, x30
ffff8000113b05d4: 94000000 bl 0 <_mcount>
ffff8000113b05d4: R_AARCH64_CALL26 _mcount
new->next = old->next;
ffff8000113b05d8: 9000001c adrp x28, ffff80001139e37c <__my_cpu_offset>
ffff8000113b05d8: R_AARCH64_ADR_PREL_PG_HI21 .data
ffff8000113b05dc: 91000381 add x1, x28, #0x0
ffff8000113b05dc: R_AARCH64_ADD_ABS_LO12_NC .data
ffff8000113b05e0: f9407c23 ldr x3, [x1,#248]
ffff8000113b05e4: 9101e3bb add x27, x29, #0x78
new->next->prev = new;
ffff8000113b05e8: f900047b str x27, [x3,#8]
new->prev = old->prev;
ffff8000113b05ec: f9408022 ldr x2, [x1,#256]
ffff8000113b05f0: 90000005 adrp x5, 0 <__stack_chk_guard>
ffff8000113b05f0: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113b05f4: f94000a4 ldr x4, [x5]
ffff8000113b05f4: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
new->next = old->next;
ffff8000113b05f8: f9003fa3 str x3, [x29,#120]
new->prev = old->prev;
ffff8000113b05fc: f90043a2 str x2, [x29,#128]
new->next = old->next;
ffff8000113b0600: 9103e020 add x0, x1, #0xf8
new->prev->next = new;
ffff8000113b0604: f900005b str x27, [x2]
ffff8000113b0608: f9004fa4 str x4, [x29,#152]
ffff8000113b060c: f9007c20 str x0, [x1,#248]
list->prev = list;
ffff8000113b0610: f9000400 str x0, [x0,#8]
__rtnl_unlock();
ffff8000113b0614: 94000000 bl 0 <__rtnl_unlock>
ffff8000113b0614: R_AARCH64_CALL26 __rtnl_unlock
__READ_ONCE_SIZE;
ffff8000113b0618: f9403fa0 ldr x0, [x29,#120]
if (!list_empty(&list))
ffff8000113b061c: eb00037f cmp x27, x0
ffff8000113b0620: 54000040 b.eq ffff8000113b0628 <netdev_run_todo+0x74>
rcu_barrier();
ffff8000113b0624: 94000000 bl 0 <rcu_barrier>
ffff8000113b0624: R_AARCH64_CALL26 rcu_barrier
pr_emerg("unregister_netdevice: waiting for %s to become free. Usage count = %d\n",
ffff8000113b0628: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113b0628: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xd10
ffff8000113b062c: 91000000 add x0, x0, #0x0
ffff8000113b062c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xd10
ffff8000113b0630: f90037a0 str x0, [x29,#104]
pr_err("network todo '%s' but state %d\n",
ffff8000113b0634: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113b0634: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0xce8
wake_up(&netdev_unregistering_wq);
ffff8000113b0638: 9100039c add x28, x28, #0x0
ffff8000113b0638: R_AARCH64_ADD_ABS_LO12_NC .data
pr_err("network todo '%s' but state %d\n",
ffff8000113b063c: 91000000 add x0, x0, #0x0
ffff8000113b063c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0xce8
wake_up(&netdev_unregistering_wq);
ffff8000113b0640: 9104239c add x28, x28, #0x108
pr_err("network todo '%s' but state %d\n",
ffff8000113b0644: f90033a0 str x0, [x29,#96]
ffff8000113b0648: f9403fa0 ldr x0, [x29,#120]
while (!list_empty(&list)) {
ffff8000113b064c: eb00037f cmp x27, x0
ffff8000113b0650: 54000e60 b.eq ffff8000113b081c <netdev_run_todo+0x268>
= list_first_entry(&list, struct net_device, todo_list);
ffff8000113b0654: f9400376 ldr x22, [x27]
if (!__list_del_entry_valid(entry))
ffff8000113b0658: aa1603e0 mov x0, x22
ffff8000113b065c: 94000000 bl 0 <__list_del_entry_valid>
ffff8000113b065c: R_AARCH64_CALL26 __list_del_entry_valid
ffff8000113b0660: 53001c00 uxtb w0, w0
struct net_device *dev
ffff8000113b0664: d112c2d3 sub x19, x22, #0x4b0
ffff8000113b0668: 340000a0 cbz w0, ffff8000113b067c <netdev_run_todo+0xc8>
__list_del(entry->prev, entry->next);
ffff8000113b066c: f94006c0 ldr x0, [x22,#8]
ffff8000113b0670: f94002c1 ldr x1, [x22]
next->prev = prev;
ffff8000113b0674: f9000420 str x0, [x1,#8]
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113b0678: f9000001 str x1, [x0]
entry->next = LIST_POISON1;
ffff8000113b067c: d2802001 mov x1, #0x100 // #256
entry->prev = LIST_POISON2;
ffff8000113b0680: d2802440 mov x0, #0x122 // #290
entry->next = LIST_POISON1;
ffff8000113b0684: f2fbd5a1 movk x1, #0xdead, lsl #48
entry->prev = LIST_POISON2;
ffff8000113b0688: f2fbd5a0 movk x0, #0xdead, lsl #48
entry->next = LIST_POISON1;
ffff8000113b068c: f90002c1 str x1, [x22]
entry->prev = LIST_POISON2;
ffff8000113b0690: f90006c0 str x0, [x22,#8]
if (unlikely(dev->reg_state != NETREG_UNREGISTERING)) {
ffff8000113b0694: 39536262 ldrb w2, [x19,#1240]
ffff8000113b0698: 7100085f cmp w2, #0x2
ffff8000113b069c: 54000e41 b.ne ffff8000113b0864 <netdev_run_todo+0x2b0>
dev->reg_state = NETREG_UNREGISTERED;
ffff8000113b06a0: 52800061 mov w1, #0x3 // #3
linkwatch_forget_dev(dev);
ffff8000113b06a4: aa1303e0 mov x0, x19
dev->reg_state = NETREG_UNREGISTERED;
ffff8000113b06a8: 39136261 strb w1, [x19,#1240]
linkwatch_forget_dev(dev);
ffff8000113b06ac: 94000000 bl 0 <linkwatch_forget_dev>
ffff8000113b06ac: R_AARCH64_CALL26 linkwatch_forget_dev
rebroadcast_time = warning_time = jiffies;
ffff8000113b06b0: 90000014 adrp x20, 0 <jiffies>
ffff8000113b06b0: R_AARCH64_ADR_PREL_PG_HI21 jiffies
refcnt = netdev_refcnt_read(dev);
ffff8000113b06b4: aa1303e0 mov x0, x19
rebroadcast_time = warning_time = jiffies;
ffff8000113b06b8: f9400295 ldr x21, [x20]
ffff8000113b06b8: R_AARCH64_LDST64_ABS_LO12_NC jiffies
refcnt = netdev_refcnt_read(dev);
ffff8000113b06bc: 94000000 bl ffff8000113a1304 <netdev_refcnt_read>
ffff8000113b06bc: R_AARCH64_CALL26 netdev_refcnt_read
while (refcnt != 0) {
ffff8000113b06c0: 340005c0 cbz w0, ffff8000113b0778 <netdev_run_todo+0x1c4>
rebroadcast_time = warning_time = jiffies;
ffff8000113b06c4: aa1503f8 mov x24, x21
if (time_after(jiffies, rebroadcast_time + 1 * HZ)) {
ffff8000113b06c8: d2801f57 mov x23, #0xfa // #250
ffff8000113b06cc: d111c2da sub x26, x22, #0x470
if (refcnt && time_after(jiffies, warning_time + 10 * HZ)) {
ffff8000113b06d0: d2813899 mov x25, #0x9c4 // #2500
if (time_after(jiffies, rebroadcast_time + 1 * HZ)) {
ffff8000113b06d4: f9400280 ldr x0, [x20]
ffff8000113b06d4: R_AARCH64_LDST64_ABS_LO12_NC jiffies
ffff8000113b06d8: cb0002e0 sub x0, x23, x0
ffff8000113b06dc: ab15001f cmn x0, x21
ffff8000113b06e0: 54000264 b.mi ffff8000113b072c <netdev_run_todo+0x178>
msleep(250);
ffff8000113b06e4: 52801f40 mov w0, #0xfa // #250
ffff8000113b06e8: 94000000 bl 0 <msleep>
ffff8000113b06e8: R_AARCH64_CALL26 msleep
refcnt = netdev_refcnt_read(dev);
ffff8000113b06ec: aa1303e0 mov x0, x19
ffff8000113b06f0: 94000000 bl ffff8000113a1304 <netdev_refcnt_read>
ffff8000113b06f0: R_AARCH64_CALL26 netdev_refcnt_read
ffff8000113b06f4: 2a0003e2 mov w2, w0
if (refcnt && time_after(jiffies, warning_time + 10 * HZ)) {
ffff8000113b06f8: 34000400 cbz w0, ffff8000113b0778 <netdev_run_todo+0x1c4>
ffff8000113b06fc: f9400280 ldr x0, [x20]
ffff8000113b06fc: R_AARCH64_LDST64_ABS_LO12_NC jiffies
ffff8000113b0700: cb000320 sub x0, x25, x0
ffff8000113b0704: ab18001f cmn x0, x24
ffff8000113b0708: 54fffe65 b.pl ffff8000113b06d4 <netdev_run_todo+0x120>
pr_emerg("unregister_netdevice: waiting for %s to become free. Usage count = %d\n",
ffff8000113b070c: f94037a0 ldr x0, [x29,#104]
ffff8000113b0710: aa1303e1 mov x1, x19
ffff8000113b0714: 94000000 bl 0 <printk>
ffff8000113b0714: R_AARCH64_CALL26 printk
warning_time = jiffies;
ffff8000113b0718: f9400298 ldr x24, [x20]
ffff8000113b0718: R_AARCH64_LDST64_ABS_LO12_NC jiffies
if (time_after(jiffies, rebroadcast_time + 1 * HZ)) {
ffff8000113b071c: f9400280 ldr x0, [x20]
ffff8000113b071c: R_AARCH64_LDST64_ABS_LO12_NC jiffies
ffff8000113b0720: cb0002e0 sub x0, x23, x0
ffff8000113b0724: ab15001f cmn x0, x21
ffff8000113b0728: 54fffde5 b.pl ffff8000113b06e4 <netdev_run_todo+0x130>
rtnl_lock();
ffff8000113b072c: 94000000 bl 0 <rtnl_lock>
ffff8000113b072c: R_AARCH64_CALL26 rtnl_lock
return call_netdevice_notifiers_info(val, &info);
ffff8000113b0730: 910223a1 add x1, x29, #0x88
ffff8000113b0734: d28000c0 mov x0, #0x6 // #6
struct netdev_notifier_info info = {
ffff8000113b0738: f90047b3 str x19, [x29,#136]
ffff8000113b073c: f9004bbf str xzr, [x29,#144]
return call_netdevice_notifiers_info(val, &info);
ffff8000113b0740: 97ffbe6e bl ffff8000113a00f8 <call_netdevice_notifiers_info>
__rtnl_unlock();
ffff8000113b0744: 94000000 bl 0 <__rtnl_unlock>
ffff8000113b0744: R_AARCH64_CALL26 __rtnl_unlock
rcu_barrier();
ffff8000113b0748: 94000000 bl 0 <rcu_barrier>
ffff8000113b0748: R_AARCH64_CALL26 rcu_barrier
rtnl_lock();
ffff8000113b074c: 94000000 bl 0 <rtnl_lock>
ffff8000113b074c: R_AARCH64_CALL26 rtnl_lock
ffff8000113b0750: f9400340 ldr x0, [x26]
if (test_bit(__LINK_STATE_LINKWATCH_PENDING,
ffff8000113b0754: 371807c0 tbnz w0, #3, ffff8000113b084c <netdev_run_todo+0x298>
__rtnl_unlock();
ffff8000113b0758: 94000000 bl 0 <__rtnl_unlock>
ffff8000113b0758: R_AARCH64_CALL26 __rtnl_unlock
msleep(250);
ffff8000113b075c: 52801f40 mov w0, #0xfa // #250
rebroadcast_time = jiffies;
ffff8000113b0760: f9400295 ldr x21, [x20]
ffff8000113b0760: R_AARCH64_LDST64_ABS_LO12_NC jiffies
msleep(250);
ffff8000113b0764: 94000000 bl 0 <msleep>
ffff8000113b0764: R_AARCH64_CALL26 msleep
refcnt = netdev_refcnt_read(dev);
ffff8000113b0768: aa1303e0 mov x0, x19
ffff8000113b076c: 94000000 bl ffff8000113a1304 <netdev_refcnt_read>
ffff8000113b076c: R_AARCH64_CALL26 netdev_refcnt_read
ffff8000113b0770: 2a0003e2 mov w2, w0
if (refcnt && time_after(jiffies, warning_time + 10 * HZ)) {
ffff8000113b0774: 35fffc40 cbnz w0, ffff8000113b06fc <netdev_run_todo+0x148>
BUG_ON(netdev_refcnt_read(dev));
ffff8000113b0778: aa1303e0 mov x0, x19
ffff8000113b077c: 94000000 bl ffff8000113a1304 <netdev_refcnt_read>
ffff8000113b077c: R_AARCH64_CALL26 netdev_refcnt_read
ffff8000113b0780: 35000700 cbnz w0, ffff8000113b0860 <netdev_run_todo+0x2ac>
__READ_ONCE_SIZE;
ffff8000113b0784: d110a2c0 sub x0, x22, #0x428
ffff8000113b0788: f9400000 ldr x0, [x0]
BUG_ON(!list_empty(&dev->ptype_all));
ffff8000113b078c: 91022261 add x1, x19, #0x88
ffff8000113b0790: eb00003f cmp x1, x0
ffff8000113b0794: 540007e1 b.ne ffff8000113b0890 <netdev_run_todo+0x2dc>
ffff8000113b0798: d11062c0 sub x0, x22, #0x418
ffff8000113b079c: f9400000 ldr x0, [x0]
BUG_ON(!list_empty(&dev->ptype_specific));
ffff8000113b07a0: 91026261 add x1, x19, #0x98
ffff8000113b07a4: eb00003f cmp x1, x0
ffff8000113b07a8: 54000721 b.ne ffff8000113b088c <netdev_run_todo+0x2d8>
ffff8000113b07ac: d10702c0 sub x0, x22, #0x1c0
ffff8000113b07b0: f9400000 ldr x0, [x0]
WARN_ON(rcu_access_pointer(dev->ip_ptr));
ffff8000113b07b4: b5000680 cbnz x0, ffff8000113b0884 <netdev_run_todo+0x2d0>
ffff8000113b07b8: d106e2c0 sub x0, x22, #0x1b8
ffff8000113b07bc: f9400000 ldr x0, [x0]
WARN_ON(rcu_access_pointer(dev->ip6_ptr));
ffff8000113b07c0: b50005e0 cbnz x0, ffff8000113b087c <netdev_run_todo+0x2c8>
if (dev->priv_destructor)
ffff8000113b07c4: f9427261 ldr x1, [x19,#1248]
ffff8000113b07c8: b4000061 cbz x1, ffff8000113b07d4 <netdev_run_todo+0x220>
dev->priv_destructor(dev);
ffff8000113b07cc: aa1303e0 mov x0, x19
ffff8000113b07d0: d63f0020 blr x1
if (dev->needs_free_netdev)
ffff8000113b07d4: 39537260 ldrb w0, [x19,#1244]
ffff8000113b07d8: 350003e0 cbnz w0, ffff8000113b0854 <netdev_run_todo+0x2a0>
rtnl_lock();
ffff8000113b07dc: 94000000 bl 0 <rtnl_lock>
ffff8000113b07dc: R_AARCH64_CALL26 rtnl_lock
ffff8000113b07e0: f94022c0 ldr x0, [x22,#64]
dev_net(dev)->dev_unreg_count--;
ffff8000113b07e4: b9400c01 ldr w1, [x0,#12]
ffff8000113b07e8: 51000421 sub w1, w1, #0x1
ffff8000113b07ec: b9000c01 str w1, [x0,#12]
__rtnl_unlock();
ffff8000113b07f0: 94000000 bl 0 <__rtnl_unlock>
ffff8000113b07f0: R_AARCH64_CALL26 __rtnl_unlock
wake_up(&netdev_unregistering_wq);
ffff8000113b07f4: aa1c03e0 mov x0, x28
ffff8000113b07f8: 52800061 mov w1, #0x3 // #3
ffff8000113b07fc: 52800022 mov w2, #0x1 // #1
ffff8000113b0800: d2800003 mov x3, #0x0 // #0
ffff8000113b0804: 94000000 bl 0 <__wake_up>
ffff8000113b0804: R_AARCH64_CALL26 __wake_up
kobject_put(&dev->dev.kobj);
ffff8000113b0808: 910182c0 add x0, x22, #0x60
ffff8000113b080c: 94000000 bl 0 <kobject_put>
ffff8000113b080c: R_AARCH64_CALL26 kobject_put
ffff8000113b0810: f9403fa0 ldr x0, [x29,#120]
while (!list_empty(&list)) {
ffff8000113b0814: eb00037f cmp x27, x0
ffff8000113b0818: 54fff1e1 b.ne ffff8000113b0654 <netdev_run_todo+0xa0>
}
ffff8000113b081c: 90000002 adrp x2, 0 <__stack_chk_guard>
ffff8000113b081c: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff8000113b0820: f9404fa1 ldr x1, [x29,#152]
ffff8000113b0824: f9400040 ldr x0, [x2]
ffff8000113b0824: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff8000113b0828: eb00003f cmp x1, x0
ffff8000113b082c: 54000261 b.ne ffff8000113b0878 <netdev_run_todo+0x2c4>
ffff8000113b0830: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113b0834: a9425bf5 ldp x21, x22, [sp,#32]
ffff8000113b0838: a94363f7 ldp x23, x24, [sp,#48]
ffff8000113b083c: a9446bf9 ldp x25, x26, [sp,#64]
ffff8000113b0840: a94573fb ldp x27, x28, [sp,#80]
ffff8000113b0844: a8ca7bfd ldp x29, x30, [sp],#160
ffff8000113b0848: d65f03c0 ret
linkwatch_run_queue();
ffff8000113b084c: 94000000 bl 0 <linkwatch_run_queue>
ffff8000113b084c: R_AARCH64_CALL26 linkwatch_run_queue
ffff8000113b0850: 17ffffc2 b ffff8000113b0758 <netdev_run_todo+0x1a4>
free_netdev(dev);
ffff8000113b0854: aa1303e0 mov x0, x19
ffff8000113b0858: 94000000 bl ffff8000113a5274 <free_netdev>
ffff8000113b0858: R_AARCH64_CALL26 free_netdev
ffff8000113b085c: 17ffffe0 b ffff8000113b07dc <netdev_run_todo+0x228>
BUG_ON(netdev_refcnt_read(dev));
ffff8000113b0860: d4210000 brk #0x800
pr_err("network todo '%s' but state %d\n",
ffff8000113b0864: f94033a0 ldr x0, [x29,#96]
ffff8000113b0868: aa1303e1 mov x1, x19
ffff8000113b086c: 94000000 bl 0 <printk>
ffff8000113b086c: R_AARCH64_CALL26 printk
dump_stack();
ffff8000113b0870: 94000000 bl 0 <dump_stack>
ffff8000113b0870: R_AARCH64_CALL26 dump_stack
continue;
ffff8000113b0874: 17ffff75 b ffff8000113b0648 <netdev_run_todo+0x94>
}
ffff8000113b0878: 94000000 bl 0 <__stack_chk_fail>
ffff8000113b0878: R_AARCH64_CALL26 __stack_chk_fail
WARN_ON(rcu_access_pointer(dev->ip6_ptr));
ffff8000113b087c: d4210000 brk #0x800
ffff8000113b0880: 17ffffd1 b ffff8000113b07c4 <netdev_run_todo+0x210>
WARN_ON(rcu_access_pointer(dev->ip_ptr));
ffff8000113b0884: d4210000 brk #0x800
ffff8000113b0888: 17ffffcc b ffff8000113b07b8 <netdev_run_todo+0x204>
BUG_ON(!list_empty(&dev->ptype_specific));
ffff8000113b088c: d4210000 brk #0x800
BUG_ON(!list_empty(&dev->ptype_all));
ffff8000113b0890: d4210000 brk #0x800
ffff8000113b0894 <dev_ingress_queue_create>:
{
ffff8000113b0894: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113b0898: 910003fd mov x29, sp
ffff8000113b089c: a90153f3 stp x19, x20, [sp,#16]
ffff8000113b08a0: f90013f5 str x21, [sp,#32]
ffff8000113b08a4: aa0003f4 mov x20, x0
ffff8000113b08a8: aa1e03e0 mov x0, x30
ffff8000113b08ac: 94000000 bl 0 <_mcount>
ffff8000113b08ac: R_AARCH64_CALL26 _mcount
struct netdev_queue *dev_ingress_queue_create(struct net_device *dev)
ffff8000113b08b0: f941ae93 ldr x19, [x20,#856]
if (queue)
ffff8000113b08b4: b40000d3 cbz x19, ffff8000113b08cc <dev_ingress_queue_create+0x38>
}
ffff8000113b08b8: aa1303e0 mov x0, x19
ffff8000113b08bc: f94013f5 ldr x21, [sp,#32]
ffff8000113b08c0: a94153f3 ldp x19, x20, [sp,#16]
ffff8000113b08c4: a8c37bfd ldp x29, x30, [sp],#48
ffff8000113b08c8: d65f03c0 ret
return kmem_cache_alloc_trace(
ffff8000113b08cc: 90000000 adrp x0, 0 <kmalloc_caches>
ffff8000113b08cc: R_AARCH64_ADR_PREL_PG_HI21 kmalloc_caches+0x48
ffff8000113b08d0: f9400000 ldr x0, [x0]
ffff8000113b08d0: R_AARCH64_LDST64_ABS_LO12_NC kmalloc_caches+0x48
ffff8000113b08d4: 5281b801 mov w1, #0xdc0 // #3520
ffff8000113b08d8: d2802802 mov x2, #0x140 // #320
ffff8000113b08dc: 94000000 bl 0 <kmem_cache_alloc_trace>
ffff8000113b08dc: R_AARCH64_CALL26 kmem_cache_alloc_trace
ffff8000113b08e0: aa0003f5 mov x21, x0
if (!queue)
ffff8000113b08e4: b4fffea0 cbz x0, ffff8000113b08b8 <dev_ingress_queue_create+0x24>
queue->xmit_lock_owner = -1;
ffff8000113b08e8: 12800000 mov w0, #0xffffffff // #-1
ffff8000113b08ec: b90086a0 str w0, [x21,#132]
q->numa_node = node;
ffff8000113b08f0: b9005aa0 str w0, [x21,#88]
spin_lock_init(&queue->_xmit_lock);
ffff8000113b08f4: b90082b3 str w19, [x21,#128]
queue->dev = dev;
ffff8000113b08f8: aa1503e0 mov x0, x21
ffff8000113b08fc: f80c0414 str x20, [x0],#192
dql_init(&queue->dql, HZ);
ffff8000113b0900: 52801f41 mov w1, #0xfa // #250
ffff8000113b0904: 94000000 bl 0 <dql_init>
ffff8000113b0904: R_AARCH64_CALL26 dql_init
RCU_INIT_POINTER(queue->qdisc, &noop_qdisc);
ffff8000113b0908: 90000000 adrp x0, 0 <noop_qdisc>
ffff8000113b0908: R_AARCH64_ADR_PREL_PG_HI21 noop_qdisc
ffff8000113b090c: 91000000 add x0, x0, #0x0
ffff8000113b090c: R_AARCH64_ADD_ABS_LO12_NC noop_qdisc
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
ffff8000113b0910: f90006a0 str x0, [x21,#8]
queue->qdisc_sleeping = &noop_qdisc;
ffff8000113b0914: f9000aa0 str x0, [x21,#16]
rcu_assign_pointer(dev->ingress_queue, queue);
ffff8000113b0918: 910d6294 add x20, x20, #0x358
ffff8000113b091c: c89ffe95 stlr x21, [x20]
return queue;
ffff8000113b0920: aa1503f3 mov x19, x21
ffff8000113b0924: 17ffffe5 b ffff8000113b08b8 <dev_ingress_queue_create+0x24>
ffff8000113b0928 <netdev_freemem>:
{
ffff8000113b0928: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113b092c: 910003fd mov x29, sp
ffff8000113b0930: f9000bf3 str x19, [sp,#16]
ffff8000113b0934: aa0003f3 mov x19, x0
ffff8000113b0938: aa1e03e0 mov x0, x30
ffff8000113b093c: 94000000 bl 0 <_mcount>
ffff8000113b093c: R_AARCH64_CALL26 _mcount
char *addr = (char *)dev - dev->padded;
ffff8000113b0940: 79446660 ldrh w0, [x19,#562]
kvfree(addr);
ffff8000113b0944: cb000260 sub x0, x19, x0
ffff8000113b0948: 94000000 bl 0 <kvfree>
ffff8000113b0948: R_AARCH64_CALL26 kvfree
}
ffff8000113b094c: f9400bf3 ldr x19, [sp,#16]
ffff8000113b0950: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113b0954: d65f03c0 ret
ffff8000113b0958 <netdev_drivername>:
{
ffff8000113b0958: a9be7bfd stp x29, x30, [sp,#-32]!
ffff8000113b095c: 910003fd mov x29, sp
ffff8000113b0960: f9000bf3 str x19, [sp,#16]
ffff8000113b0964: aa0003f3 mov x19, x0
ffff8000113b0968: aa1e03e0 mov x0, x30
ffff8000113b096c: 94000000 bl 0 <_mcount>
ffff8000113b096c: R_AARCH64_CALL26 _mcount
parent = dev->dev.parent;
ffff8000113b0970: f942aa60 ldr x0, [x19,#1360]
if (!parent)
ffff8000113b0974: b4000100 cbz x0, ffff8000113b0994 <netdev_drivername+0x3c>
driver = parent->driver;
ffff8000113b0978: f9403400 ldr x0, [x0,#104]
if (driver && driver->name)
ffff8000113b097c: b40000c0 cbz x0, ffff8000113b0994 <netdev_drivername+0x3c>
ffff8000113b0980: f9400000 ldr x0, [x0]
ffff8000113b0984: b4000080 cbz x0, ffff8000113b0994 <netdev_drivername+0x3c>
}
ffff8000113b0988: f9400bf3 ldr x19, [sp,#16]
ffff8000113b098c: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113b0990: d65f03c0 ret
return empty;
ffff8000113b0994: 90000000 adrp x0, ffff80001139e37c <__my_cpu_offset>
ffff8000113b0994: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x68
ffff8000113b0998: 91000000 add x0, x0, #0x0
ffff8000113b0998: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x68
}
ffff8000113b099c: f9400bf3 ldr x19, [sp,#16]
ffff8000113b09a0: a8c27bfd ldp x29, x30, [sp],#32
ffff8000113b09a4: d65f03c0 ret
Disassembly of section .init.text:
ffff80001139e37c <netdev_boot_setup>:
asm(ALTERNATIVE("mrs %0, tpidr_el1",
ffff80001139e37c: a9b97bfd stp x29, x30, [sp,#-112]!
}
ffff80001139e380: 910003fd mov x29, sp
{
ffff80001139e384: a90153f3 stp x19, x20, [sp,#16]
ffff80001139e388: f90013f5 str x21, [sp,#32]
ffff80001139e38c: aa0003f4 mov x20, x0
ffff80001139e390: aa1e03e0 mov x0, x30
ffff80001139e394: 94000000 bl 0 <_mcount>
ffff80001139e394: R_AARCH64_CALL26 _mcount
ffff80001139e398: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff80001139e398: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
if (dev->netdev_ops && dev->netdev_ops->ndo_get_iflink)
ffff80001139e39c: f9400263 ldr x3, [x19]
ffff80001139e39c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139e3a0: 528000a1 mov w1, #0x5 // #5
ffff80001139e3a4: aa1403e0 mov x0, x20
ffff80001139e3a8: 9100e3a2 add x2, x29, #0x38
return dev->netdev_ops->ndo_get_iflink(dev);
ffff80001139e3ac: f90037a3 str x3, [x29,#104]
ffff80001139e3b0: 94000000 bl 0 <get_options>
ffff80001139e3b0: R_AARCH64_CALL26 get_options
}
ffff80001139e3b4: aa0003e1 mov x1, x0
ffff80001139e3b8: aa1303f5 mov x21, x19
ffff80001139e3bc: b40005e0 cbz x0, ffff80001139e478 <netdev_boot_setup+0xfc>
return dev->ifindex;
ffff80001139e3c0: 39400002 ldrb w2, [x0]
}
ffff80001139e3c4: 52800000 mov w0, #0x0 // #0
ffff80001139e3c8: 34000582 cbz w2, ffff80001139e478 <netdev_boot_setup+0xfc>
ffff80001139e3cc: b9403ba0 ldr w0, [x29,#56]
{
ffff80001139e3d0: a9057fbf stp xzr, xzr, [x29,#80]
ffff80001139e3d4: f90033bf str xzr, [x29,#96]
ffff80001139e3d8: 6b1f001f cmp w0, wzr
ffff80001139e3dc: 540001ed b.le ffff80001139e418 <netdev_boot_setup+0x9c>
ffff80001139e3e0: b9403fa2 ldr w2, [x29,#60]
ffff80001139e3e4: 7100041f cmp w0, #0x1
ffff80001139e3e8: 39018ba2 strb w2, [x29,#98]
return &net->dev_index_head[ifindex & (NETDEV_HASHENTRIES - 1)];
ffff80001139e3ec: 54000160 b.eq ffff80001139e418 <netdev_boot_setup+0x9c>
hlist_for_each_entry(dev, head, index_hlist)
ffff80001139e3f0: b94043a2 ldr w2, [x29,#64]
return &net->dev_index_head[ifindex & (NETDEV_HASHENTRIES - 1)];
ffff80001139e3f4: 7100081f cmp w0, #0x2
hlist_for_each_entry(dev, head, index_hlist)
ffff80001139e3f8: 7900c3a2 strh w2, [x29,#96]
ffff80001139e3fc: 540000e0 b.eq ffff80001139e418 <netdev_boot_setup+0x9c>
ffff80001139e400: b98047a2 ldrsw x2, [x29,#68]
ffff80001139e404: 71000c1f cmp w0, #0x3
if (dev->ifindex == ifindex)
ffff80001139e408: f9002ba2 str x2, [x29,#80]
ffff80001139e40c: 54000060 b.eq ffff80001139e418 <netdev_boot_setup+0x9c>
ffff80001139e410: b9804ba0 ldrsw x0, [x29,#72]
hlist_for_each_entry(dev, head, index_hlist)
ffff80001139e414: f9002fa0 str x0, [x29,#88]
ffff80001139e418: 90000013 adrp x19, ffff80001139e37c <netdev_boot_setup>
ffff80001139e418: R_AARCH64_ADR_PREL_PG_HI21 .bss
}
ffff80001139e41c: 91000273 add x19, x19, #0x0
ffff80001139e41c: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff80001139e420: 91072273 add x19, x19, #0x1c8
ffff80001139e424: 52800014 mov w20, #0x0 // #0
{
ffff80001139e428: 39400262 ldrb w2, [x19]
ffff80001139e42c: 121a7842 and w2, w2, #0xffffffdf
ffff80001139e430: 53001c42 uxtb w2, w2
ffff80001139e434: 35000142 cbnz w2, ffff80001139e45c <netdev_boot_setup+0xe0>
ffff80001139e438: d2800202 mov x2, #0x10 // #16
ffff80001139e43c: aa1303e0 mov x0, x19
ffff80001139e440: a9007e7f stp xzr, xzr, [x19]
return &net->dev_index_head[ifindex & (NETDEV_HASHENTRIES - 1)];
ffff80001139e444: 94000000 bl 0 <strlcpy>
ffff80001139e444: R_AARCH64_CALL26 strlcpy
ffff80001139e448: a9450fa2 ldp x2, x3, [x29,#80]
ffff80001139e44c: a9010e62 stp x2, x3, [x19,#16]
__READ_ONCE_SIZE;
ffff80001139e450: f94033a0 ldr x0, [x29,#96]
hlist_for_each_entry_rcu(dev, head, index_hlist)
ffff80001139e454: f9001260 str x0, [x19,#32]
ffff80001139e458: 14000005 b ffff80001139e46c <netdev_boot_setup+0xf0>
ffff80001139e45c: 11000694 add w20, w20, #0x1
if (dev->ifindex == ifindex)
ffff80001139e460: 7100229f cmp w20, #0x8
ffff80001139e464: 9100a273 add x19, x19, #0x28
ffff80001139e468: 54fffe01 b.ne ffff80001139e428 <netdev_boot_setup+0xac>
ffff80001139e46c: 71001e9f cmp w20, #0x7
hlist_for_each_entry_rcu(dev, head, index_hlist)
ffff80001139e470: 1a9fc7e0 cset w0, le
}
ffff80001139e474: 14000001 b ffff80001139e478 <netdev_boot_setup+0xfc>
ffff80001139e478: f94037a2 ldr x2, [x29,#104]
ffff80001139e47c: f94002a1 ldr x1, [x21]
ffff80001139e47c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
{
ffff80001139e480: eb01005f cmp x2, x1
ffff80001139e484: 54000040 b.eq ffff80001139e48c <netdev_boot_setup+0x110>
ffff80001139e488: 94000000 bl 0 <__stack_chk_fail>
ffff80001139e488: R_AARCH64_CALL26 __stack_chk_fail
ffff80001139e48c: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139e490: f94013f5 ldr x21, [sp,#32]
ffff80001139e494: a8c77bfd ldp x29, x30, [sp],#112
if (napi_id < MIN_NAPI_ID)
ffff80001139e498: d65f03c0 ret
ffff80001139e49c <net_dev_init>:
ffff80001139e49c: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff80001139e4a0: 910003fd mov x29, sp
hlist_for_each_entry_rcu(napi, &napi_hash[hash], napi_hash_node)
ffff80001139e4a4: a90153f3 stp x19, x20, [sp,#16]
ffff80001139e4a8: a9025bf5 stp x21, x22, [sp,#32]
ffff80001139e4ac: a90363f7 stp x23, x24, [sp,#48]
ffff80001139e4b0: f90023f9 str x25, [sp,#64]
ffff80001139e4b4: aa1e03e0 mov x0, x30
ffff80001139e4b8: 94000000 bl 0 <_mcount>
ffff80001139e4b8: R_AARCH64_CALL26 _mcount
if (napi->napi_id == napi_id)
ffff80001139e4bc: 90000000 adrp x0, ffff80001139e37c <netdev_boot_setup>
ffff80001139e4bc: R_AARCH64_ADR_PREL_PG_HI21 .data
ffff80001139e4c0: b9400001 ldr w1, [x0]
ffff80001139e4c0: R_AARCH64_LDST32_ABS_LO12_NC .data
ffff80001139e4c4: aa0003f3 mov x19, x0
ffff80001139e4c8: 35000041 cbnz w1, ffff80001139e4d0 <net_dev_init+0x34>
hlist_for_each_entry_rcu(napi, &napi_hash[hash], napi_hash_node)
ffff80001139e4cc: d4210000 brk #0x800
return NULL;
ffff80001139e4d0: 94000000 bl 0 <dev_proc_init>
ffff80001139e4d0: R_AARCH64_CALL26 dev_proc_init
}
ffff80001139e4d4: 12800161 mov w1, #0xfffffff4 // #-12
ffff80001139e4d8: 35000fa0 cbnz w0, ffff80001139e6cc <net_dev_init+0x230>
ffff80001139e4dc: 94000000 bl 0 <netdev_kobject_init>
ffff80001139e4dc: R_AARCH64_CALL26 netdev_kobject_init
return napi ? napi->dev : NULL;
ffff80001139e4e0: 34000060 cbz w0, ffff80001139e4ec <net_dev_init+0x50>
}
ffff80001139e4e4: 12800161 mov w1, #0xfffffff4 // #-12
ffff80001139e4e8: 14000079 b ffff80001139e6cc <net_dev_init+0x230>
ffff80001139e4ec: 90000015 adrp x21, ffff80001139e37c <netdev_boot_setup>
ffff80001139e4ec: R_AARCH64_ADR_PREL_PG_HI21 .data..read_mostly
{
ffff80001139e4f0: 910002a1 add x1, x21, #0x0
ffff80001139e4f0: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
ffff80001139e4f4: 91200020 add x0, x1, #0x800
ffff80001139e4f8: f9040020 str x0, [x1,#2048]
ffff80001139e4fc: f9000400 str x0, [x0,#8]
ffff80001139e500: 9120c020 add x0, x1, #0x830
ffff80001139e504: 9124c021 add x1, x1, #0x930
ffff80001139e508: f9000000 str x0, [x0]
ffff80001139e50c: f9000400 str x0, [x0,#8]
ffff80001139e510: 91004000 add x0, x0, #0x10
ffff80001139e514: eb01001f cmp x0, x1
ffff80001139e518: 54ffff81 b.ne ffff80001139e508 <net_dev_init+0x6c>
ffff80001139e51c: 910002a2 add x2, x21, #0x0
ffff80001139e51c: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
}
ffff80001139e520: 91204041 add x1, x2, #0x810
ffff80001139e524: 91000260 add x0, x19, #0x0
ffff80001139e524: R_AARCH64_ADD_ABS_LO12_NC .data
ffff80001139e528: 91002000 add x0, x0, #0x8
{
ffff80001139e52c: f9040841 str x1, [x2,#2064]
ffff80001139e530: f9000421 str x1, [x1,#8]
}
ffff80001139e534: 94000000 bl 0 <register_pernet_subsys>
ffff80001139e534: R_AARCH64_CALL26 register_pernet_subsys
ffff80001139e538: 35fffd60 cbnz w0, ffff80001139e4e4 <net_dev_init+0x48>
ffff80001139e53c: 90000014 adrp x20, 0 <__cpu_possible_mask>
ffff80001139e53c: R_AARCH64_ADR_PREL_PG_HI21 __cpu_possible_mask
{
ffff80001139e540: 90000019 adrp x25, 0 <nr_cpu_ids>
ffff80001139e540: R_AARCH64_ADR_PREL_PG_HI21 nr_cpu_ids
ffff80001139e544: 90000018 adrp x24, ffff80001139e37c <netdev_boot_setup>
ffff80001139e544: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu
ffff80001139e548: 90000017 adrp x23, ffff80001139e37c <netdev_boot_setup>
ffff80001139e548: R_AARCH64_ADR_PREL_PG_HI21 .data..percpu..shared_aligned
ffff80001139e54c: 12800000 mov w0, #0xffffffff // #-1
ffff80001139e550: 91000294 add x20, x20, #0x0
ffff80001139e550: R_AARCH64_ADD_ABS_LO12_NC __cpu_possible_mask
ffff80001139e554: 91000339 add x25, x25, #0x0
ffff80001139e554: R_AARCH64_ADD_ABS_LO12_NC nr_cpu_ids
ffff80001139e558: 90000016 adrp x22, 0 <__per_cpu_offset>
ffff80001139e558: R_AARCH64_ADR_PREL_PG_HI21 __per_cpu_offset
ffff80001139e55c: 91000318 add x24, x24, #0x0
ffff80001139e55c: R_AARCH64_ADD_ABS_LO12_NC .data..percpu
ffff80001139e560: 910002f7 add x23, x23, #0x0
ffff80001139e560: R_AARCH64_ADD_ABS_LO12_NC .data..percpu..shared_aligned
ffff80001139e564: aa1403e1 mov x1, x20
if (dev->flags & IFF_UP) {
ffff80001139e568: 94000000 bl 0 <cpumask_next>
ffff80001139e568: R_AARCH64_CALL26 cpumask_next
{
ffff80001139e56c: b9400321 ldr w1, [x25]
struct netdev_notifier_info info = {
ffff80001139e570: 6b01001f cmp w0, w1
if (dev->flags & IFF_UP) {
ffff80001139e574: 54000702 b.cs ffff80001139e654 <net_dev_init+0x1b8>
struct netdev_notifier_info info = {
ffff80001139e578: 910002c1 add x1, x22, #0x0
ffff80001139e578: R_AARCH64_ADD_ABS_LO12_NC __per_cpu_offset
return nb->notifier_call(nb, val, &info);
ffff80001139e57c: f860d822 ldr x2, [x1,w0,sxtw #3]
ffff80001139e580: b27b7be3 mov x3, #0xfffffffe0 // #68719476704
ffff80001139e584: 8b020301 add x1, x24, x2
struct netdev_notifier_info info = {
ffff80001139e588: f8226b03 str x3, [x24,x2]
return nb->notifier_call(nb, val, &info);
ffff80001139e58c: 91002024 add x4, x1, #0x8
ffff80001139e590: f9000424 str x4, [x1,#8]
ffff80001139e594: f9000484 str x4, [x4,#8]
struct netdev_notifier_info info = {
ffff80001139e598: 90000004 adrp x4, ffff80001139e37c <netdev_boot_setup>
ffff80001139e598: R_AARCH64_ADR_PREL_PG_HI21 .text+0x7dd4
ffff80001139e59c: 8b0202e3 add x3, x23, x2
return nb->notifier_call(nb, val, &info);
ffff80001139e5a0: 91000084 add x4, x4, #0x0
ffff80001139e5a0: R_AARCH64_ADD_ABS_LO12_NC .text+0x7dd4
ffff80001139e5a4: f9000c24 str x4, [x1,#24]
ffff80001139e5a8: 9103e061 add x1, x3, #0xf8
ffff80001139e5ac: f9007c61 str x1, [x3,#248]
struct netdev_notifier_info info = {
ffff80001139e5b0: b9010c7f str wzr, [x3,#268]
return nb->notifier_call(nb, val, &info);
ffff80001139e5b4: f9000421 str x1, [x1,#8]
ffff80001139e5b8: b900103f str wzr, [x1,#16]
struct netdev_notifier_info info = {
ffff80001139e5bc: 91004061 add x1, x3, #0x10
return nb->notifier_call(nb, val, &info);
ffff80001139e5c0: f9000861 str x1, [x3,#16]
ffff80001139e5c4: b900247f str wzr, [x3,#36]
ffff80001139e5c8: f9000421 str x1, [x1,#8]
}
ffff80001139e5cc: b900103f str wzr, [x1,#16]
ffff80001139e5d0: 91018061 add x1, x3, #0x60
ffff80001139e5d4: f9003061 str x1, [x3,#96]
ffff80001139e5d8: b900747f str wzr, [x3,#116]
ffff80001139e5dc: f9000421 str x1, [x1,#8]
ffff80001139e5e0: b900103f str wzr, [x1,#16]
ffff80001139e5e4: f8226ae3 str x3, [x23,x2]
ffff80001139e5e8: 91012062 add x2, x3, #0x48
ffff80001139e5ec: f9002862 str x2, [x3,#80]
{
ffff80001139e5f0: 90000002 adrp x2, ffff80001139e37c <netdev_boot_setup>
ffff80001139e5f0: R_AARCH64_ADR_PREL_PG_HI21 .text+0x4bb4
ffff80001139e5f4: 91000042 add x2, x2, #0x0
ffff80001139e5f4: R_AARCH64_ADD_ABS_LO12_NC .text+0x4bb4
ffff80001139e5f8: 91044061 add x1, x3, #0x110
ffff80001139e5fc: f9006462 str x2, [x3,#200]
ffff80001139e600: f9000463 str x3, [x3,#8]
ffff80001139e604: f9006863 str x3, [x3,#208]
ffff80001139e608: b900e860 str w0, [x3,#232]
for_each_netdev(net, dev) {
ffff80001139e60c: 91054062 add x2, x3, #0x150
{
ffff80001139e610: 91084066 add x6, x3, #0x210
ffff80001139e614: cb030025 sub x5, x1, x3
ffff80001139e618: f9000042 str x2, [x2]
for_each_netdev(net, dev) {
ffff80001139e61c: f9000442 str x2, [x2,#8]
{
ffff80001139e620: 8b0200a4 add x4, x5, x2
for_each_netdev(net, dev) {
ffff80001139e624: 91006042 add x2, x2, #0x18
ffff80001139e628: b810009f stur wzr, [x4,#-256]
ffff80001139e62c: eb06005f cmp x2, x6
ffff80001139e630: 54ffff41 b.ne ffff80001139e618 <net_dev_init+0x17c>
struct netdev_notifier_info info = {
ffff80001139e634: 910002a2 add x2, x21, #0x0
ffff80001139e634: R_AARCH64_ADD_ABS_LO12_NC .data..read_mostly
return nb->notifier_call(nb, val, &info);
ffff80001139e638: f900103f str xzr, [x1,#32]
struct netdev_notifier_info info = {
ffff80001139e63c: b9493042 ldr w2, [x2,#2352]
return nb->notifier_call(nb, val, &info);
ffff80001139e640: 90000001 adrp x1, ffff80001139e37c <netdev_boot_setup>
ffff80001139e640: R_AARCH64_ADR_PREL_PG_HI21 .text+0xd00c
ffff80001139e644: 91000021 add x1, x1, #0x0
ffff80001139e644: R_AARCH64_ADD_ABS_LO12_NC .text+0xd00c
ffff80001139e648: f9009c61 str x1, [x3,#312]
ffff80001139e64c: b9012862 str w2, [x3,#296]
ret &= ~NOTIFY_STOP_MASK;
ffff80001139e650: 17ffffc5 b ffff80001139e564 <net_dev_init+0xc8>
return ret > NOTIFY_OK ? NOTIFY_OK - ret : 0;
ffff80001139e654: 90000000 adrp x0, 0 <loopback_net_ops>
ffff80001139e654: R_AARCH64_ADR_PREL_PG_HI21 loopback_net_ops
ffff80001139e658: 91000000 add x0, x0, #0x0
ffff80001139e658: R_AARCH64_ADD_ABS_LO12_NC loopback_net_ops
for_each_netdev_continue_reverse(net, dev)
ffff80001139e65c: 91000274 add x20, x19, #0x0
ffff80001139e65c: R_AARCH64_ADD_ABS_LO12_NC .data
ffff80001139e660: b900027f str wzr, [x19]
ffff80001139e660: R_AARCH64_LDST32_ABS_LO12_NC .data
ffff80001139e664: 94000000 bl 0 <register_pernet_device>
ffff80001139e664: R_AARCH64_CALL26 register_pernet_device
ffff80001139e668: 35fff3e0 cbnz w0, ffff80001139e4e4 <net_dev_init+0x48>
ffff80001139e66c: 91012280 add x0, x20, #0x48
ffff80001139e670: 94000000 bl 0 <register_pernet_device>
ffff80001139e670: R_AARCH64_CALL26 register_pernet_device
call_netdevice_unregister_notifiers(nb, dev);
ffff80001139e674: 2a0003f3 mov w19, w0
ffff80001139e678: 35fff360 cbnz w0, ffff80001139e4e4 <net_dev_init+0x48>
ffff80001139e67c: 90000001 adrp x1, ffff80001139e37c <netdev_boot_setup>
ffff80001139e67c: R_AARCH64_ADR_PREL_PG_HI21 .text+0x7f78
for_each_netdev_continue_reverse(net, dev)
ffff80001139e680: 52800040 mov w0, #0x2 // #2
ffff80001139e684: 91000021 add x1, x1, #0x0
ffff80001139e684: R_AARCH64_ADD_ABS_LO12_NC .text+0x7f78
ffff80001139e688: 94000000 bl 0 <open_softirq>
ffff80001139e688: R_AARCH64_CALL26 open_softirq
ffff80001139e68c: 90000001 adrp x1, ffff80001139e37c <netdev_boot_setup>
ffff80001139e68c: R_AARCH64_ADR_PREL_PG_HI21 .text+0xec64
ffff80001139e690: 52800060 mov w0, #0x3 // #3
}
ffff80001139e694: 91000021 add x1, x1, #0x0
ffff80001139e694: R_AARCH64_ADD_ABS_LO12_NC .text+0xec64
ffff80001139e698: 94000000 bl 0 <open_softirq>
ffff80001139e698: R_AARCH64_CALL26 open_softirq
ffff80001139e69c: 90000001 adrp x1, ffff80001139e37c <netdev_boot_setup>
ffff80001139e69c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x228
ffff80001139e6a0: 90000004 adrp x4, ffff80001139e37c <netdev_boot_setup>
ffff80001139e6a0: R_AARCH64_ADR_PREL_PG_HI21 .text+0x89d8
ffff80001139e6a4: 91000021 add x1, x1, #0x0
ffff80001139e6a4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x228
ffff80001139e6a8: 528003c0 mov w0, #0x1e // #30
ffff80001139e6ac: 2a1303e2 mov w2, w19
ffff80001139e6b0: d2800003 mov x3, #0x0 // #0
ffff80001139e6b4: 91000084 add x4, x4, #0x0
ffff80001139e6b4: R_AARCH64_ADD_ABS_LO12_NC .text+0x89d8
if (!(dev->flags & IFF_UP))
ffff80001139e6b8: 2a1303e5 mov w5, w19
ffff80001139e6bc: 94000000 bl 0 <__cpuhp_setup_state>
ffff80001139e6bc: R_AARCH64_CALL26 __cpuhp_setup_state
struct netdev_notifier_info info = {
ffff80001139e6c0: 2a1303e1 mov w1, w19
return nb->notifier_call(nb, val, &info);
ffff80001139e6c4: 36f80040 tbz w0, #31, ffff80001139e6cc <net_dev_init+0x230>
struct netdev_notifier_info info = {
ffff80001139e6c8: d4210000 brk #0x800
return nb->notifier_call(nb, val, &info);
ffff80001139e6cc: 2a0103e0 mov w0, w1
ffff80001139e6d0: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139e6d4: a9425bf5 ldp x21, x22, [sp,#32]
ffff80001139e6d8: a94363f7 ldp x23, x24, [sp,#48]
for_each_netdev(net, dev) {
ffff80001139e6dc: f94023f9 ldr x25, [sp,#64]
ffff80001139e6e0: a8c57bfd ldp x29, x30, [sp],#80
ffff80001139e6e4: d65f03c0 ret
Disassembly of section .text.unlikely:
ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>:
asm(ALTERNATIVE("mrs %0, tpidr_el1",
ffff80001139e37c: a9bd7bfd stp x29, x30, [sp,#-48]!
}
ffff80001139e380: 910003fd mov x29, sp
{
ffff80001139e384: f9000bf3 str x19, [sp,#16]
ffff80001139e388: f90017a1 str x1, [x29,#40]
ffff80001139e38c: aa0003f3 mov x19, x0
ffff80001139e390: 94000000 bl ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e390: R_AARCH64_CALL26 .text
ffff80001139e394: f94017a1 ldr x1, [x29,#40]
ffff80001139e398: b940bc22 ldr w2, [x1,#188]
if (dev->netdev_ops && dev->netdev_ops->ndo_get_iflink)
ffff80001139e39c: f9406023 ldr x3, [x1,#192]
ffff80001139e3a0: b9402824 ldr w4, [x1,#40]
ffff80001139e3a4: 8b020063 add x3, x3, x2
ffff80001139e3a8: 79400865 ldrh w5, [x3,#4]
return dev->netdev_ops->ndo_get_iflink(dev);
ffff80001139e3ac: 8b130002 add x2, x0, x19
ffff80001139e3b0: 52800021 mov w1, #0x1 // #1
}
ffff80001139e3b4: 34000045 cbz w5, ffff80001139e3bc <mini_qdisc_bstats_cpu_update.isra.70+0x40>
ffff80001139e3b8: 79400c61 ldrh w1, [x3,#6]
ffff80001139e3bc: f8736803 ldr x3, [x0,x19]
return dev->ifindex;
ffff80001139e3c0: 8b040063 add x3, x3, x4
}
ffff80001139e3c4: f8336803 str x3, [x0,x19]
ffff80001139e3c8: f9400440 ldr x0, [x2,#8]
ffff80001139e3cc: 8b212001 add x1, x0, w1, uxth
{
ffff80001139e3d0: f9000441 str x1, [x2,#8]
ffff80001139e3d4: f9400bf3 ldr x19, [sp,#16]
ffff80001139e3d8: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139e3dc: d65f03c0 ret
ffff80001139e3e0 <mini_qdisc_qstats_cpu_drop.isra.71>:
ffff80001139e3e0: a9be7bfd stp x29, x30, [sp,#-32]!
ffff80001139e3e4: 910003fd mov x29, sp
ffff80001139e3e8: f9000bf3 str x19, [sp,#16]
return &net->dev_index_head[ifindex & (NETDEV_HASHENTRIES - 1)];
ffff80001139e3ec: f9400013 ldr x19, [x0]
hlist_for_each_entry(dev, head, index_hlist)
ffff80001139e3f0: 94000000 bl ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e3f0: R_AARCH64_CALL26 .text
return &net->dev_index_head[ifindex & (NETDEV_HASHENTRIES - 1)];
ffff80001139e3f4: 91002273 add x19, x19, #0x8
hlist_for_each_entry(dev, head, index_hlist)
ffff80001139e3f8: 52800021 mov w1, #0x1 // #1
ffff80001139e3fc: 8b130004 add x4, x0, x19
ffff80001139e400: 885f7c83 ldxr w3, [x4]
ffff80001139e404: 0b010063 add w3, w3, w1
if (dev->ifindex == ifindex)
ffff80001139e408: 88027c83 stxr w2, w3, [x4]
ffff80001139e40c: 35ffffa2 cbnz w2, ffff80001139e400 <mini_qdisc_qstats_cpu_drop.isra.71+0x20>
ffff80001139e410: f9400bf3 ldr x19, [sp,#16]
hlist_for_each_entry(dev, head, index_hlist)
ffff80001139e414: a8c27bfd ldp x29, x30, [sp],#32
ffff80001139e418: d65f03c0 ret
ffff80001139e41c <__skb_pull.part.98>:
}
ffff80001139e41c: d4210000 brk #0x800
ffff80001139e420 <skb_warn_bad_offload>:
ffff80001139e420: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff80001139e424: 910003fd mov x29, sp
{
ffff80001139e428: a90153f3 stp x19, x20, [sp,#16]
ffff80001139e42c: f90013f5 str x21, [sp,#32]
ffff80001139e430: aa0003f4 mov x20, x0
ffff80001139e434: aa1e03e0 mov x0, x30
ffff80001139e438: 94000000 bl 0 <_mcount>
ffff80001139e438: R_AARCH64_CALL26 _mcount
ffff80001139e43c: f9400a93 ldr x19, [x20,#16]
ffff80001139e440: 94000000 bl 0 <net_ratelimit>
ffff80001139e440: R_AARCH64_CALL26 net_ratelimit
return &net->dev_index_head[ifindex & (NETDEV_HASHENTRIES - 1)];
ffff80001139e444: 34000520 cbz w0, ffff80001139e4e8 <skb_warn_bad_offload+0xc8>
ffff80001139e448: b4000193 cbz x19, ffff80001139e478 <skb_warn_bad_offload+0x58>
ffff80001139e44c: f942aa60 ldr x0, [x19,#1360]
ffff80001139e450: b4000080 cbz x0, ffff80001139e460 <skb_warn_bad_offload+0x40>
hlist_for_each_entry_rcu(dev, head, index_hlist)
ffff80001139e454: 94000000 bl 0 <dev_driver_string>
ffff80001139e454: R_AARCH64_CALL26 dev_driver_string
ffff80001139e458: aa0003f5 mov x21, x0
ffff80001139e45c: 1400000c b ffff80001139e48c <skb_warn_bad_offload+0x6c>
if (dev->ifindex == ifindex)
ffff80001139e460: 39400260 ldrb w0, [x19]
ffff80001139e464: 34000100 cbz w0, ffff80001139e484 <skb_warn_bad_offload+0x64>
ffff80001139e468: aa1303e0 mov x0, x19
ffff80001139e46c: 94000000 bl ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e46c: R_AARCH64_CALL26 .text+0x3610
hlist_for_each_entry_rcu(dev, head, index_hlist)
ffff80001139e470: aa0003f5 mov x21, x0
}
ffff80001139e474: 14000006 b ffff80001139e48c <skb_warn_bad_offload+0x6c>
ffff80001139e478: 90000015 adrp x21, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e478: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x68
ffff80001139e47c: 910002b5 add x21, x21, #0x0
ffff80001139e47c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x68
{
ffff80001139e480: 14000003 b ffff80001139e48c <skb_warn_bad_offload+0x6c>
ffff80001139e484: 90000015 adrp x21, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e484: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x158
ffff80001139e488: 910002b5 add x21, x21, #0x0
ffff80001139e488: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x158
ffff80001139e48c: 90000000 adrp x0, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e48c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x170
ffff80001139e490: 91000000 add x0, x0, #0x0
ffff80001139e490: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x170
ffff80001139e494: aa1403e1 mov x1, x20
if (napi_id < MIN_NAPI_ID)
ffff80001139e498: 52800002 mov w2, #0x0 // #0
ffff80001139e49c: 94000000 bl 0 <skb_dump>
ffff80001139e49c: R_AARCH64_CALL26 skb_dump
ffff80001139e4a0: b4000073 cbz x19, ffff80001139e4ac <skb_warn_bad_offload+0x8c>
hlist_for_each_entry_rcu(napi, &napi_hash[hash], napi_hash_node)
ffff80001139e4a4: 91032262 add x2, x19, #0xc8
ffff80001139e4a8: 14000004 b ffff80001139e4b8 <skb_warn_bad_offload+0x98>
ffff80001139e4ac: 90000002 adrp x2, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e4ac: R_AARCH64_ADR_PREL_PG_HI21 .bss
ffff80001139e4b0: 91000042 add x2, x2, #0x0
ffff80001139e4b0: R_AARCH64_ADD_ABS_LO12_NC .bss
ffff80001139e4b4: 910c4042 add x2, x2, #0x310
ffff80001139e4b8: f9400e83 ldr x3, [x20,#24]
if (napi->napi_id == napi_id)
ffff80001139e4bc: b4000063 cbz x3, ffff80001139e4c8 <skb_warn_bad_offload+0xa8>
ffff80001139e4c0: 9107a063 add x3, x3, #0x1e8
ffff80001139e4c4: 14000004 b ffff80001139e4d4 <skb_warn_bad_offload+0xb4>
ffff80001139e4c8: 90000003 adrp x3, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e4c8: R_AARCH64_ADR_PREL_PG_HI21 .bss
hlist_for_each_entry_rcu(napi, &napi_hash[hash], napi_hash_node)
ffff80001139e4cc: 91000063 add x3, x3, #0x0
ffff80001139e4cc: R_AARCH64_ADD_ABS_LO12_NC .bss
return NULL;
ffff80001139e4d0: 910c4063 add x3, x3, #0x310
}
ffff80001139e4d4: 90000000 adrp x0, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e4d4: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x178
ffff80001139e4d8: 91000000 add x0, x0, #0x0
ffff80001139e4d8: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x178
ffff80001139e4dc: aa1503e1 mov x1, x21
return napi ? napi->dev : NULL;
ffff80001139e4e0: 94000000 bl 0 <__warn_printk>
ffff80001139e4e0: R_AARCH64_CALL26 __warn_printk
}
ffff80001139e4e4: d4210000 brk #0x800
ffff80001139e4e8: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139e4ec: f94013f5 ldr x21, [sp,#32]
{
ffff80001139e4f0: a8c37bfd ldp x29, x30, [sp],#48
ffff80001139e4f4: d65f03c0 ret
ffff80001139e4f8 <__netdev_printk>:
ffff80001139e4f8: a9bb7bfd stp x29, x30, [sp,#-80]!
ffff80001139e4fc: 910003fd mov x29, sp
ffff80001139e500: a90153f3 stp x19, x20, [sp,#16]
ffff80001139e504: a9025bf5 stp x21, x22, [sp,#32]
ffff80001139e508: a90363f7 stp x23, x24, [sp,#48]
ffff80001139e50c: aa0003f5 mov x21, x0
ffff80001139e510: aa0103f3 mov x19, x1
ffff80001139e514: aa1e03e0 mov x0, x30
ffff80001139e518: aa0203f4 mov x20, x2
ffff80001139e51c: 94000000 bl 0 <_mcount>
ffff80001139e51c: R_AARCH64_CALL26 _mcount
}
ffff80001139e520: b4000693 cbz x19, ffff80001139e5f0 <__netdev_printk+0xf8>
ffff80001139e524: f942aa60 ldr x0, [x19,#1360]
ffff80001139e528: b40003e0 cbz x0, ffff80001139e5a4 <__netdev_printk+0xac>
{
ffff80001139e52c: 394006b7 ldrb w23, [x21,#1]
ffff80001139e530: 94000000 bl 0 <dev_driver_string>
ffff80001139e530: R_AARCH64_CALL26 dev_driver_string
}
ffff80001139e534: f942aa76 ldr x22, [x19,#1360]
ffff80001139e538: 5100c2f7 sub w23, w23, #0x30
ffff80001139e53c: f9402ad5 ldr x21, [x22,#80]
{
ffff80001139e540: aa0003f8 mov x24, x0
ffff80001139e544: b5000055 cbnz x21, ffff80001139e54c <__netdev_printk+0x54>
ffff80001139e548: f94002d5 ldr x21, [x22]
ffff80001139e54c: 39400260 ldrb w0, [x19]
ffff80001139e550: 340000a0 cbz w0, ffff80001139e564 <__netdev_printk+0x6c>
ffff80001139e554: aa1303e0 mov x0, x19
ffff80001139e558: 94000000 bl ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e558: R_AARCH64_CALL26 .text+0x3610
ffff80001139e55c: aa0003e5 mov x5, x0
ffff80001139e560: 14000003 b ffff80001139e56c <__netdev_printk+0x74>
ffff80001139e564: 90000005 adrp x5, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e564: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x158
if (dev->flags & IFF_UP) {
ffff80001139e568: 910000a5 add x5, x5, #0x0
ffff80001139e568: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x158
{
ffff80001139e56c: aa1303e0 mov x0, x19
struct netdev_notifier_info info = {
ffff80001139e570: f90027a5 str x5, [x29,#72]
if (dev->flags & IFF_UP) {
ffff80001139e574: 94000000 bl ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e574: R_AARCH64_CALL26 .text+0x189c
struct netdev_notifier_info info = {
ffff80001139e578: 90000002 adrp x2, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e578: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x190
return nb->notifier_call(nb, val, &info);
ffff80001139e57c: f94027a5 ldr x5, [x29,#72]
ffff80001139e580: aa0003e6 mov x6, x0
ffff80001139e584: aa1603e1 mov x1, x22
struct netdev_notifier_info info = {
ffff80001139e588: 2a1703e0 mov w0, w23
return nb->notifier_call(nb, val, &info);
ffff80001139e58c: 91000042 add x2, x2, #0x0
ffff80001139e58c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x190
ffff80001139e590: aa1803e3 mov x3, x24
ffff80001139e594: aa1503e4 mov x4, x21
struct netdev_notifier_info info = {
ffff80001139e598: aa1403e7 mov x7, x20
ffff80001139e59c: 94000000 bl 0 <dev_printk_emit>
ffff80001139e59c: R_AARCH64_CALL26 dev_printk_emit
return nb->notifier_call(nb, val, &info);
ffff80001139e5a0: 14000019 b ffff80001139e604 <__netdev_printk+0x10c>
ffff80001139e5a4: 39400260 ldrb w0, [x19]
ffff80001139e5a8: 340000a0 cbz w0, ffff80001139e5bc <__netdev_printk+0xc4>
ffff80001139e5ac: aa1303e0 mov x0, x19
struct netdev_notifier_info info = {
ffff80001139e5b0: 94000000 bl ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e5b0: R_AARCH64_CALL26 .text+0x3610
return nb->notifier_call(nb, val, &info);
ffff80001139e5b4: aa0003e2 mov x2, x0
ffff80001139e5b8: 14000003 b ffff80001139e5c4 <__netdev_printk+0xcc>
struct netdev_notifier_info info = {
ffff80001139e5bc: 90000002 adrp x2, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e5bc: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x158
return nb->notifier_call(nb, val, &info);
ffff80001139e5c0: 91000042 add x2, x2, #0x0
ffff80001139e5c0: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x158
ffff80001139e5c4: aa1303e0 mov x0, x19
ffff80001139e5c8: f90027a2 str x2, [x29,#72]
}
ffff80001139e5cc: 94000000 bl ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e5cc: R_AARCH64_CALL26 .text+0x189c
ffff80001139e5d0: aa0003e3 mov x3, x0
ffff80001139e5d4: f94027a2 ldr x2, [x29,#72]
ffff80001139e5d8: 90000000 adrp x0, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e5d8: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x1a0
ffff80001139e5dc: aa1503e1 mov x1, x21
ffff80001139e5e0: aa1403e4 mov x4, x20
ffff80001139e5e4: 91000000 add x0, x0, #0x0
ffff80001139e5e4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x1a0
ffff80001139e5e8: 94000000 bl 0 <printk>
ffff80001139e5e8: R_AARCH64_CALL26 printk
ffff80001139e5ec: 14000006 b ffff80001139e604 <__netdev_printk+0x10c>
{
ffff80001139e5f0: 90000000 adrp x0, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e5f0: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x1b0
ffff80001139e5f4: 91000000 add x0, x0, #0x0
ffff80001139e5f4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x1b0
ffff80001139e5f8: aa1503e1 mov x1, x21
ffff80001139e5fc: aa1403e2 mov x2, x20
ffff80001139e600: 94000000 bl 0 <printk>
ffff80001139e600: R_AARCH64_CALL26 printk
ffff80001139e604: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139e608: a9425bf5 ldp x21, x22, [sp,#32]
for_each_netdev(net, dev) {
ffff80001139e60c: a94363f7 ldp x23, x24, [sp,#48]
{
ffff80001139e610: a8c57bfd ldp x29, x30, [sp],#80
ffff80001139e614: d65f03c0 ret
ffff80001139e618 <netdev_printk>:
ffff80001139e618: a9b57bfd stp x29, x30, [sp,#-176]!
for_each_netdev(net, dev) {
ffff80001139e61c: 910003fd mov x29, sp
{
ffff80001139e620: a90153f3 stp x19, x20, [sp,#16]
for_each_netdev(net, dev) {
ffff80001139e624: f90013f5 str x21, [sp,#32]
ffff80001139e628: aa0003f5 mov x21, x0
ffff80001139e62c: aa1e03e0 mov x0, x30
ffff80001139e630: aa0203f4 mov x20, x2
struct netdev_notifier_info info = {
ffff80001139e634: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff80001139e634: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
return nb->notifier_call(nb, val, &info);
ffff80001139e638: f90047a3 str x3, [x29,#136]
struct netdev_notifier_info info = {
ffff80001139e63c: f9004ba4 str x4, [x29,#144]
return nb->notifier_call(nb, val, &info);
ffff80001139e640: f9004fa5 str x5, [x29,#152]
ffff80001139e644: f90053a6 str x6, [x29,#160]
ffff80001139e648: f90057a7 str x7, [x29,#168]
ffff80001139e64c: f9001fa1 str x1, [x29,#56]
ret &= ~NOTIFY_STOP_MASK;
ffff80001139e650: 94000000 bl 0 <_mcount>
ffff80001139e650: R_AARCH64_CALL26 _mcount
return ret > NOTIFY_OK ? NOTIFY_OK - ret : 0;
ffff80001139e654: f9400263 ldr x3, [x19]
ffff80001139e654: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139e658: f9401fa1 ldr x1, [x29,#56]
for_each_netdev_continue_reverse(net, dev)
ffff80001139e65c: f9003fa3 str x3, [x29,#120]
ffff80001139e660: 9102c3a3 add x3, x29, #0xb0
ffff80001139e664: f9002fa3 str x3, [x29,#88]
ffff80001139e668: f90033a3 str x3, [x29,#96]
ffff80001139e66c: 910203a3 add x3, x29, #0x80
ffff80001139e670: f90037a3 str x3, [x29,#104]
call_netdevice_unregister_notifiers(nb, dev);
ffff80001139e674: 128004e3 mov w3, #0xffffffd8 // #-40
ffff80001139e678: aa1503e0 mov x0, x21
ffff80001139e67c: b90073a3 str w3, [x29,#112]
for_each_netdev_continue_reverse(net, dev)
ffff80001139e680: 910123a2 add x2, x29, #0x48
ffff80001139e684: 910163a3 add x3, x29, #0x58
ffff80001139e688: b90077bf str wzr, [x29,#116]
ffff80001139e68c: f90027b4 str x20, [x29,#72]
ffff80001139e690: f9002ba3 str x3, [x29,#80]
}
ffff80001139e694: 97ffff99 bl ffff80001139e4f8 <__netdev_printk>
ffff80001139e698: f9403fa1 ldr x1, [x29,#120]
ffff80001139e69c: f9400260 ldr x0, [x19]
ffff80001139e69c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139e6a0: eb00003f cmp x1, x0
ffff80001139e6a4: 54000040 b.eq ffff80001139e6ac <netdev_printk+0x94>
ffff80001139e6a8: 94000000 bl 0 <__stack_chk_fail>
ffff80001139e6a8: R_AARCH64_CALL26 __stack_chk_fail
ffff80001139e6ac: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139e6b0: f94013f5 ldr x21, [sp,#32]
ffff80001139e6b4: a8cb7bfd ldp x29, x30, [sp],#176
if (!(dev->flags & IFF_UP))
ffff80001139e6b8: d65f03c0 ret
ffff80001139e6bc <netdev_emerg>:
ffff80001139e6bc: a9b67bfd stp x29, x30, [sp,#-160]!
struct netdev_notifier_info info = {
ffff80001139e6c0: 910003fd mov x29, sp
return nb->notifier_call(nb, val, &info);
ffff80001139e6c4: a90153f3 stp x19, x20, [sp,#16]
struct netdev_notifier_info info = {
ffff80001139e6c8: f90013f5 str x21, [sp,#32]
return nb->notifier_call(nb, val, &info);
ffff80001139e6cc: aa0003f5 mov x21, x0
ffff80001139e6d0: aa1e03e0 mov x0, x30
ffff80001139e6d4: aa0103f4 mov x20, x1
ffff80001139e6d8: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff80001139e6d8: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
for_each_netdev(net, dev) {
ffff80001139e6dc: f9003ba2 str x2, [x29,#112]
ffff80001139e6e0: f9003fa3 str x3, [x29,#120]
ffff80001139e6e4: f90043a4 str x4, [x29,#128]
ffff80001139e6e8: f90047a5 str x5, [x29,#136]
return 0;
ffff80001139e6ec: f9004ba6 str x6, [x29,#144]
ffff80001139e6f0: f9004fa7 str x7, [x29,#152]
}
ffff80001139e6f4: 94000000 bl 0 <_mcount>
ffff80001139e6f4: R_AARCH64_CALL26 _mcount
{
ffff80001139e6f8: f9400263 ldr x3, [x19]
ffff80001139e6f8: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139e6fc: 90000000 adrp x0, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e6fc: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x1d0
ffff80001139e700: f90037a3 str x3, [x29,#104]
ffff80001139e704: 910283a3 add x3, x29, #0xa0
ffff80001139e708: f90027a3 str x3, [x29,#72]
ffff80001139e70c: f9002ba3 str x3, [x29,#80]
ffff80001139e710: 9101c3a3 add x3, x29, #0x70
ffff80001139e714: f9002fa3 str x3, [x29,#88]
ffff80001139e718: 128005e3 mov w3, #0xffffffd0 // #-48
ffff80001139e71c: 91000000 add x0, x0, #0x0
ffff80001139e71c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x1d0
return !list_empty(&ptype_all) || !list_empty(&dev->ptype_all);
ffff80001139e720: aa1503e1 mov x1, x21
ffff80001139e724: b90063a3 str w3, [x29,#96]
ffff80001139e728: 9100e3a2 add x2, x29, #0x38
}
ffff80001139e72c: 910123a3 add x3, x29, #0x48
ffff80001139e730: b90067bf str wzr, [x29,#100]
ffff80001139e734: f9001fb4 str x20, [x29,#56]
ffff80001139e738: f90023a3 str x3, [x29,#64]
return !list_empty(&ptype_all) || !list_empty(&dev->ptype_all);
ffff80001139e73c: 97ffff6f bl ffff80001139e4f8 <__netdev_printk>
ffff80001139e740: f94037a1 ldr x1, [x29,#104]
}
ffff80001139e744: f9400260 ldr x0, [x19]
ffff80001139e744: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139e748: eb00003f cmp x1, x0
ffff80001139e74c: 54000040 b.eq ffff80001139e754 <netdev_emerg+0x98>
{
ffff80001139e750: 94000000 bl 0 <__stack_chk_fail>
ffff80001139e750: R_AARCH64_CALL26 __stack_chk_fail
ffff80001139e754: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139e758: f94013f5 ldr x21, [sp,#32]
ffff80001139e75c: a8ca7bfd ldp x29, x30, [sp],#160
ffff80001139e760: d65f03c0 ret
ffff80001139e764 <netdev_alert>:
ffff80001139e764: a9b67bfd stp x29, x30, [sp,#-160]!
ffff80001139e768: 910003fd mov x29, sp
ffff80001139e76c: a90153f3 stp x19, x20, [sp,#16]
ffff80001139e770: f90013f5 str x21, [sp,#32]
ffff80001139e774: aa0003f5 mov x21, x0
ffff80001139e778: aa1e03e0 mov x0, x30
if (sb_dev->num_tc >= 0 || tc >= dev->num_tc)
ffff80001139e77c: aa0103f4 mov x20, x1
ffff80001139e780: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff80001139e780: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff80001139e784: f9003ba2 str x2, [x29,#112]
ffff80001139e788: f9003fa3 str x3, [x29,#120]
ffff80001139e78c: f90043a4 str x4, [x29,#128]
ffff80001139e790: f90047a5 str x5, [x29,#136]
if ((offset + count) > dev->real_num_tx_queues)
ffff80001139e794: f9004ba6 str x6, [x29,#144]
ffff80001139e798: f9004fa7 str x7, [x29,#152]
ffff80001139e79c: 94000000 bl 0 <_mcount>
ffff80001139e79c: R_AARCH64_CALL26 _mcount
ffff80001139e7a0: f9400263 ldr x3, [x19]
ffff80001139e7a0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139e7a4: 90000000 adrp x0, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e7a4: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x1d8
while (count--)
ffff80001139e7a8: f90037a3 str x3, [x29,#104]
sb_dev->tc_to_txq[tc].count = count;
ffff80001139e7ac: 910283a3 add x3, x29, #0xa0
sb_dev->tc_to_txq[tc].offset = offset;
ffff80001139e7b0: f90027a3 str x3, [x29,#72]
while (count--)
ffff80001139e7b4: f9002ba3 str x3, [x29,#80]
return &dev->_tx[index];
ffff80001139e7b8: 9101c3a3 add x3, x29, #0x70
ffff80001139e7bc: f9002fa3 str x3, [x29,#88]
ffff80001139e7c0: 128005e3 mov w3, #0xffffffd0 // #-48
netdev_get_tx_queue(dev, count + offset)->sb_dev = sb_dev;
ffff80001139e7c4: 91000000 add x0, x0, #0x0
ffff80001139e7c4: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x1d8
ffff80001139e7c8: aa1503e1 mov x1, x21
while (count--)
ffff80001139e7cc: b90063a3 str w3, [x29,#96]
netdev_get_tx_queue(dev, count + offset)->sb_dev = sb_dev;
ffff80001139e7d0: 9100e3a2 add x2, x29, #0x38
while (count--)
ffff80001139e7d4: 910123a3 add x3, x29, #0x48
netdev_get_tx_queue(dev, count + offset)->sb_dev = sb_dev;
ffff80001139e7d8: b90067bf str wzr, [x29,#100]
while (count--)
ffff80001139e7dc: f9001fb4 str x20, [x29,#56]
ffff80001139e7e0: f90023a3 str x3, [x29,#64]
}
ffff80001139e7e4: 97ffff45 bl ffff80001139e4f8 <__netdev_printk>
ffff80001139e7e8: f94037a1 ldr x1, [x29,#104]
return 0;
ffff80001139e7ec: f9400260 ldr x0, [x19]
ffff80001139e7ec: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
}
ffff80001139e7f0: eb00003f cmp x1, x0
ffff80001139e7f4: 54000040 b.eq ffff80001139e7fc <netdev_alert+0x98>
ffff80001139e7f8: 94000000 bl 0 <__stack_chk_fail>
ffff80001139e7f8: R_AARCH64_CALL26 __stack_chk_fail
ffff80001139e7fc: a94153f3 ldp x19, x20, [sp,#16]
return -EINVAL;
ffff80001139e800: f94013f5 ldr x21, [sp,#32]
}
ffff80001139e804: a8ca7bfd ldp x29, x30, [sp],#160
ffff80001139e808: d65f03c0 ret
ffff80001139e80c <netdev_crit>:
{
ffff80001139e80c: a9b67bfd stp x29, x30, [sp,#-160]!
ffff80001139e810: 910003fd mov x29, sp
ffff80001139e814: a90153f3 stp x19, x20, [sp,#16]
ffff80001139e818: f90013f5 str x21, [sp,#32]
ffff80001139e81c: aa0003f5 mov x21, x0
ffff80001139e820: aa1e03e0 mov x0, x30
ffff80001139e824: aa0103f4 mov x20, x1
if (netif_is_multiqueue(dev))
ffff80001139e828: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff80001139e828: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff80001139e82c: f9003ba2 str x2, [x29,#112]
ffff80001139e830: f9003fa3 str x3, [x29,#120]
if (channel > S16_MAX)
ffff80001139e834: f90043a4 str x4, [x29,#128]
dev->num_tc = -channel;
ffff80001139e838: f90047a5 str x5, [x29,#136]
ffff80001139e83c: f9004ba6 str x6, [x29,#144]
return 0;
ffff80001139e840: f9004fa7 str x7, [x29,#152]
}
ffff80001139e844: 94000000 bl 0 <_mcount>
ffff80001139e844: R_AARCH64_CALL26 _mcount
ffff80001139e848: f9400263 ldr x3, [x19]
ffff80001139e848: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139e84c: 90000000 adrp x0, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e84c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x1e0
return -ENODEV;
ffff80001139e850: f90037a3 str x3, [x29,#104]
}
ffff80001139e854: 910283a3 add x3, x29, #0xa0
ffff80001139e858: f90027a3 str x3, [x29,#72]
ffff80001139e85c: f9002ba3 str x3, [x29,#80]
return -EINVAL;
ffff80001139e860: 9101c3a3 add x3, x29, #0x70
ffff80001139e864: f9002fa3 str x3, [x29,#88]
{
ffff80001139e868: 128005e3 mov w3, #0xffffffd0 // #-48
ffff80001139e86c: 91000000 add x0, x0, #0x0
ffff80001139e86c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x1e0
ffff80001139e870: aa1503e1 mov x1, x21
ffff80001139e874: b90063a3 str w3, [x29,#96]
ffff80001139e878: 9100e3a2 add x2, x29, #0x38
1 : min_t(int, DEFAULT_MAX_NUM_RSS_QUEUES, num_online_cpus());
ffff80001139e87c: 910123a3 add x3, x29, #0x48
ffff80001139e880: b90067bf str wzr, [x29,#100]
ffff80001139e884: f9001fb4 str x20, [x29,#56]
ffff80001139e888: f90023a3 str x3, [x29,#64]
ffff80001139e88c: 97ffff1b bl ffff80001139e4f8 <__netdev_printk>
ffff80001139e890: f94037a1 ldr x1, [x29,#104]
ffff80001139e894: f9400260 ldr x0, [x19]
ffff80001139e894: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139e898: eb00003f cmp x1, x0
ffff80001139e89c: 54000040 b.eq ffff80001139e8a4 <netdev_crit+0x98>
}
ffff80001139e8a0: 94000000 bl 0 <__stack_chk_fail>
ffff80001139e8a0: R_AARCH64_CALL26 __stack_chk_fail
ffff80001139e8a4: a94153f3 ldp x19, x20, [sp,#16]
{
ffff80001139e8a8: f94013f5 ldr x21, [sp,#32]
ffff80001139e8ac: a8ca7bfd ldp x29, x30, [sp],#160
ffff80001139e8b0: d65f03c0 ret
ffff80001139e8b4 <netdev_err>:
ffff80001139e8b4: a9b67bfd stp x29, x30, [sp,#-160]!
ffff80001139e8b8: 910003fd mov x29, sp
}
ffff80001139e8bc: a90153f3 stp x19, x20, [sp,#16]
ffff80001139e8c0: f90013f5 str x21, [sp,#32]
ffff80001139e8c4: aa0003f5 mov x21, x0
ffff80001139e8c8: aa1e03e0 mov x0, x30
{
ffff80001139e8cc: aa0103f4 mov x20, x1
ffff80001139e8d0: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff80001139e8d0: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff80001139e8d4: f9003ba2 str x2, [x29,#112]
ffff80001139e8d8: f9003fa3 str x3, [x29,#120]
}
ffff80001139e8dc: f90043a4 str x4, [x29,#128]
ffff80001139e8e0: f90047a5 str x5, [x29,#136]
ffff80001139e8e4: f9004ba6 str x6, [x29,#144]
{
ffff80001139e8e8: f9004fa7 str x7, [x29,#152]
ffff80001139e8ec: 94000000 bl 0 <_mcount>
ffff80001139e8ec: R_AARCH64_CALL26 _mcount
ffff80001139e8f0: f9400263 ldr x3, [x19]
ffff80001139e8f0: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139e8f4: 90000000 adrp x0, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e8f4: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x1e8
ffff80001139e8f8: f90037a3 str x3, [x29,#104]
ffff80001139e8fc: 910283a3 add x3, x29, #0xa0
ffff80001139e900: f90027a3 str x3, [x29,#72]
ffff80001139e904: f9002ba3 str x3, [x29,#80]
ffff80001139e908: 9101c3a3 add x3, x29, #0x70
ffff80001139e90c: f9002fa3 str x3, [x29,#88]
list_for_each_entry_rcu(ptype, offload_head, list) {
ffff80001139e910: 128005e3 mov w3, #0xffffffd0 // #-48
ffff80001139e914: 91000000 add x0, x0, #0x0
ffff80001139e914: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x1e8
ffff80001139e918: aa1503e1 mov x1, x21
if (ptype->type != type || !ptype->callbacks.gro_receive)
ffff80001139e91c: b90063a3 str w3, [x29,#96]
ffff80001139e920: 9100e3a2 add x2, x29, #0x38
ffff80001139e924: 910123a3 add x3, x29, #0x48
ffff80001139e928: b90067bf str wzr, [x29,#100]
list_for_each_entry_rcu(ptype, offload_head, list) {
ffff80001139e92c: f9001fb4 str x20, [x29,#56]
ffff80001139e930: f90023a3 str x3, [x29,#64]
ffff80001139e934: 97fffef1 bl ffff80001139e4f8 <__netdev_printk>
return NULL;
ffff80001139e938: f94037a1 ldr x1, [x29,#104]
}
ffff80001139e93c: f9400260 ldr x0, [x19]
ffff80001139e93c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139e940: eb00003f cmp x1, x0
ffff80001139e944: 54000040 b.eq ffff80001139e94c <netdev_err+0x98>
if (ptype->type != type || !ptype->callbacks.gro_receive)
ffff80001139e948: 94000000 bl 0 <__stack_chk_fail>
ffff80001139e948: R_AARCH64_CALL26 __stack_chk_fail
ffff80001139e94c: a94153f3 ldp x19, x20, [sp,#16]
}
ffff80001139e950: f94013f5 ldr x21, [sp,#32]
ffff80001139e954: a8ca7bfd ldp x29, x30, [sp],#160
ffff80001139e958: d65f03c0 ret
ffff80001139e95c <netdev_warn>:
{
ffff80001139e95c: a9b67bfd stp x29, x30, [sp,#-160]!
ffff80001139e960: 910003fd mov x29, sp
ffff80001139e964: a90153f3 stp x19, x20, [sp,#16]
ffff80001139e968: f90013f5 str x21, [sp,#32]
ffff80001139e96c: aa0003f5 mov x21, x0
ffff80001139e970: aa1e03e0 mov x0, x30
ffff80001139e974: aa0103f4 mov x20, x1
ffff80001139e978: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff80001139e978: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff80001139e97c: f9003ba2 str x2, [x29,#112]
ffff80001139e980: f9003fa3 str x3, [x29,#120]
list_for_each_entry_rcu(ptype, offload_head, list) {
ffff80001139e984: f90043a4 str x4, [x29,#128]
ffff80001139e988: f90047a5 str x5, [x29,#136]
ffff80001139e98c: f9004ba6 str x6, [x29,#144]
if (ptype->type != type || !ptype->callbacks.gro_complete)
ffff80001139e990: f9004fa7 str x7, [x29,#152]
ffff80001139e994: 94000000 bl 0 <_mcount>
ffff80001139e994: R_AARCH64_CALL26 _mcount
ffff80001139e998: f9400263 ldr x3, [x19]
ffff80001139e998: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139e99c: 90000000 adrp x0, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139e99c: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x170
list_for_each_entry_rcu(ptype, offload_head, list) {
ffff80001139e9a0: f90037a3 str x3, [x29,#104]
ffff80001139e9a4: 910283a3 add x3, x29, #0xa0
ffff80001139e9a8: f90027a3 str x3, [x29,#72]
return NULL;
ffff80001139e9ac: f9002ba3 str x3, [x29,#80]
}
ffff80001139e9b0: 9101c3a3 add x3, x29, #0x70
ffff80001139e9b4: f9002fa3 str x3, [x29,#88]
ffff80001139e9b8: 128005e3 mov w3, #0xffffffd0 // #-48
if (ptype->type != type || !ptype->callbacks.gro_complete)
ffff80001139e9bc: 91000000 add x0, x0, #0x0
ffff80001139e9bc: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x170
ffff80001139e9c0: aa1503e1 mov x1, x21
}
ffff80001139e9c4: b90063a3 str w3, [x29,#96]
ffff80001139e9c8: 9100e3a2 add x2, x29, #0x38
ffff80001139e9cc: 910123a3 add x3, x29, #0x48
{
ffff80001139e9d0: b90067bf str wzr, [x29,#100]
ffff80001139e9d4: f9001fb4 str x20, [x29,#56]
ffff80001139e9d8: f90023a3 str x3, [x29,#64]
ffff80001139e9dc: 97fffec7 bl ffff80001139e4f8 <__netdev_printk>
ffff80001139e9e0: f94037a1 ldr x1, [x29,#104]
ffff80001139e9e4: f9400260 ldr x0, [x19]
ffff80001139e9e4: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139e9e8: eb00003f cmp x1, x0
return upper_dev == dev;
ffff80001139e9ec: 54000040 b.eq ffff80001139e9f4 <netdev_warn+0x98>
ffff80001139e9f0: 94000000 bl 0 <__stack_chk_fail>
ffff80001139e9f0: R_AARCH64_CALL26 __stack_chk_fail
}
ffff80001139e9f4: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139e9f8: f94013f5 ldr x21, [sp,#32]
ffff80001139e9fc: a8ca7bfd ldp x29, x30, [sp],#160
ffff80001139ea00: d65f03c0 ret
ffff80001139ea04 <netdev_notice>:
{
ffff80001139ea04: a9b67bfd stp x29, x30, [sp,#-160]!
ffff80001139ea08: 910003fd mov x29, sp
ffff80001139ea0c: a90153f3 stp x19, x20, [sp,#16]
ffff80001139ea10: f90013f5 str x21, [sp,#32]
ffff80001139ea14: aa0003f5 mov x21, x0
ffff80001139ea18: aa1e03e0 mov x0, x30
}
ffff80001139ea1c: aa0103f4 mov x20, x1
ffff80001139ea20: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff80001139ea20: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
ffff80001139ea24: f9003ba2 str x2, [x29,#112]
ffff80001139ea28: f9003fa3 str x3, [x29,#120]
{
ffff80001139ea2c: f90043a4 str x4, [x29,#128]
ffff80001139ea30: f90047a5 str x5, [x29,#136]
ffff80001139ea34: f9004ba6 str x6, [x29,#144]
ffff80001139ea38: f9004fa7 str x7, [x29,#152]
ffff80001139ea3c: 94000000 bl 0 <_mcount>
ffff80001139ea3c: R_AARCH64_CALL26 _mcount
ffff80001139ea40: f9400263 ldr x3, [x19]
ffff80001139ea40: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139ea44: 90000000 adrp x0, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139ea44: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x1f0
upper = list_entry_rcu((*iter)->next, struct netdev_adjacent, list);
ffff80001139ea48: f90037a3 str x3, [x29,#104]
if (&upper->list == &dev->adj_list.upper)
ffff80001139ea4c: 910283a3 add x3, x29, #0xa0
upper = list_entry_rcu((*iter)->next, struct netdev_adjacent, list);
ffff80001139ea50: f90027a3 str x3, [x29,#72]
ffff80001139ea54: f9002ba3 str x3, [x29,#80]
if (&upper->list == &dev->adj_list.upper)
ffff80001139ea58: 9101c3a3 add x3, x29, #0x70
ffff80001139ea5c: f9002fa3 str x3, [x29,#88]
*iter = &upper->list;
ffff80001139ea60: 128005e3 mov w3, #0xffffffd0 // #-48
return upper->dev;
ffff80001139ea64: 91000000 add x0, x0, #0x0
ffff80001139ea64: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x1f0
}
ffff80001139ea68: aa1503e1 mov x1, x21
ffff80001139ea6c: b90063a3 str w3, [x29,#96]
ffff80001139ea70: 9100e3a2 add x2, x29, #0x38
return NULL;
ffff80001139ea74: 910123a3 add x3, x29, #0x48
ffff80001139ea78: b90067bf str wzr, [x29,#100]
{
ffff80001139ea7c: f9001fb4 str x20, [x29,#56]
ffff80001139ea80: f90023a3 str x3, [x29,#64]
ffff80001139ea84: 97fffe9d bl ffff80001139e4f8 <__netdev_printk>
ffff80001139ea88: f94037a1 ldr x1, [x29,#104]
ffff80001139ea8c: f9400260 ldr x0, [x19]
ffff80001139ea8c: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139ea90: eb00003f cmp x1, x0
ffff80001139ea94: 54000040 b.eq ffff80001139ea9c <netdev_notice+0x98>
ffff80001139ea98: 94000000 bl 0 <__stack_chk_fail>
ffff80001139ea98: R_AARCH64_CALL26 __stack_chk_fail
ffff80001139ea9c: a94153f3 ldp x19, x20, [sp,#16]
ffff80001139eaa0: f94013f5 ldr x21, [sp,#32]
ffff80001139eaa4: a8ca7bfd ldp x29, x30, [sp],#160
ffff80001139eaa8: d65f03c0 ret
ffff80001139eaac <netdev_info>:
ffff80001139eaac: a9b67bfd stp x29, x30, [sp,#-160]!
iter = &dev->adj_list.upper;
ffff80001139eab0: 910003fd mov x29, sp
{
ffff80001139eab4: a90153f3 stp x19, x20, [sp,#16]
iter = &dev->adj_list.upper;
ffff80001139eab8: f90013f5 str x21, [sp,#32]
now = dev;
ffff80001139eabc: aa0003f5 mov x21, x0
int ret, cur = 0;
ffff80001139eac0: aa1e03e0 mov x0, x30
niter = iter_stack[cur];
ffff80001139eac4: aa0103f4 mov x20, x1
upper = list_entry((*iter)->next, struct netdev_adjacent, list);
ffff80001139eac8: 90000013 adrp x19, 0 <__stack_chk_guard>
ffff80001139eac8: R_AARCH64_ADR_PREL_PG_HI21 __stack_chk_guard
if (&upper->list == &dev->adj_list.upper)
ffff80001139eacc: f9003ba2 str x2, [x29,#112]
ffff80001139ead0: f9003fa3 str x3, [x29,#120]
ffff80001139ead4: f90043a4 str x4, [x29,#128]
return upper->dev;
ffff80001139ead8: f90047a5 str x5, [x29,#136]
*ignore = upper->ignore;
ffff80001139eadc: f9004ba6 str x6, [x29,#144]
if (!udev)
ffff80001139eae0: f9004fa7 str x7, [x29,#152]
if (ignore)
ffff80001139eae4: 94000000 bl 0 <_mcount>
ffff80001139eae4: R_AARCH64_CALL26 _mcount
dev_stack[cur] = now;
ffff80001139eae8: f9400263 ldr x3, [x19]
ffff80001139eae8: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139eaec: 90000000 adrp x0, ffff80001139e37c <mini_qdisc_bstats_cpu_update.isra.70>
ffff80001139eaec: R_AARCH64_ADR_PREL_PG_HI21 .rodata.str1.8+0x1f8
iter_stack[cur++] = iter;
ffff80001139eaf0: f90037a3 str x3, [x29,#104]
niter = &udev->adj_list.upper;
ffff80001139eaf4: 910283a3 add x3, x29, #0xa0
iter_stack[cur++] = iter;
ffff80001139eaf8: f90027a3 str x3, [x29,#72]
return upper->dev;
ffff80001139eafc: f9002ba3 str x3, [x29,#80]
if (now != dev) {
ffff80001139eb00: 9101c3a3 add x3, x29, #0x70
ffff80001139eb04: f9002fa3 str x3, [x29,#88]
ret = fn(now, data);
ffff80001139eb08: 128005e3 mov w3, #0xffffffd0 // #-48
ffff80001139eb0c: 91000000 add x0, x0, #0x0
ffff80001139eb0c: R_AARCH64_ADD_ABS_LO12_NC .rodata.str1.8+0x1f8
ffff80001139eb10: aa1503e1 mov x1, x21
if (ret)
ffff80001139eb14: b90063a3 str w3, [x29,#96]
upper = list_entry((*iter)->next, struct netdev_adjacent, list);
ffff80001139eb18: 9100e3a2 add x2, x29, #0x38
ffff80001139eb1c: 910123a3 add x3, x29, #0x48
if (&upper->list == &dev->adj_list.upper)
ffff80001139eb20: b90067bf str wzr, [x29,#100]
ffff80001139eb24: f9001fb4 str x20, [x29,#56]
ffff80001139eb28: f90023a3 str x3, [x29,#64]
if (!cur)
ffff80001139eb2c: 97fffe73 bl ffff80001139e4f8 <__netdev_printk>
next = dev_stack[--cur];
ffff80001139eb30: f94037a1 ldr x1, [x29,#104]
ffff80001139eb34: f9400260 ldr x0, [x19]
ffff80001139eb34: R_AARCH64_LDST64_ABS_LO12_NC __stack_chk_guard
ffff80001139eb38: eb00003f cmp x1, x0
niter = iter_stack[cur];
ffff80001139eb3c: 54000040 b.eq ffff80001139eb44 <netdev_info+0x98>
ffff80001139eb40: 94000000 bl 0 <__stack_chk_fail>
ffff80001139eb40: R_AARCH64_CALL26 __stack_chk_fail
return 0;
ffff80001139eb44: a94153f3 ldp x19, x20, [sp,#16]
}
ffff80001139eb48: f94013f5 ldr x21, [sp,#32]
ffff80001139eb4c: a8ca7bfd ldp x29, x30, [sp],#160
ffff80001139eb50: d65f03c0 ret
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Net: [DSA]: dsa-loop kernel panic
2020-04-30 17:12 ` Florian Fainelli
@ 2020-05-01 6:48 ` Allen
2020-05-01 17:35 ` Florian Fainelli
0 siblings, 1 reply; 13+ messages in thread
From: Allen @ 2020-05-01 6:48 UTC (permalink / raw)
To: Florian Fainelli, netdev, Andrew Lunn, Vivien Didelot
>
> you have missed an important detail here which is the master device that
> was used for DSA. The current code defaults to whatever "eth0" is, what
> does this map to for your configuration?
>
It maps to "eth0". Please let me know if you need further details.
- Allen
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Net: [DSA]: dsa-loop kernel panic
2020-04-30 6:24 Net: [DSA]: dsa-loop kernel panic Allen
2020-04-30 14:06 ` Andrew Lunn
2020-04-30 17:12 ` Florian Fainelli
@ 2020-05-01 13:10 ` Andrew Lunn
2020-05-04 12:40 ` Allen
2 siblings, 1 reply; 13+ messages in thread
From: Andrew Lunn @ 2020-05-01 13:10 UTC (permalink / raw)
To: Allen; +Cc: netdev, Vivien Didelot, Florian Fainelli
On Thu, Apr 30, 2020 at 11:54:15AM +0530, Allen wrote:
> Hi,
>
> $ rmmod dsa-loop
> [ 50.688935] Unable to handle kernel read from unreadable memory at
> virtual address 0000000000000040
> [ 50.718185] pstate: 60400005 (nZCv daif +PAN -UAO)
> [ 50.719274] pc : __dev_set_rx_mode+0x48/0xa0
ffff8000113adb60 <__dev_set_rx_mode>:
Function starts at ffff8000113adb60, the instruction with problems is
ffff8000113adb60+48.
{
ffff8000113adb60: a9bd7bfd stp x29, x30, [sp,#-48]!
ffff8000113adb64: 910003fd mov x29, sp
ffff8000113adb68: a90153f3 stp x19, x20, [sp,#16]
ffff8000113adb6c: f90013f5 str x21, [sp,#32]
ffff8000113adb70: aa0003f3 mov x19, x0
ffff8000113adb74: aa1e03e0 mov x0, x30
ffff8000113adb78: 94000000 bl 0 <_mcount>
ffff8000113adb78: R_AARCH64_CALL26 _mcount
if (!(dev->flags&IFF_UP))
ffff8000113adb7c: b9422a60 ldr w0, [x19,#552]
const struct net_device_ops *ops = dev->netdev_ops;
ffff8000113adb80: f940fa74 ldr x20, [x19,#496]
if (!(dev->flags&IFF_UP))
ffff8000113adb84: 360001a0 tbz w0, #0, ffff8000113adbb8
<__dev_set_rx_mode+0x58>
ffff8000113adb88: f9402260 ldr x0, [x19,#64]
if (!netif_device_present(dev))
ffff8000113adb8c: 36080160 tbz w0, #1, ffff8000113adbb8
<__dev_set_rx_mode+0x58>
if (!(dev->priv_flags & IFF_UNICAST_FLT)) {
ffff8000113adb90: b9422e60 ldr w0, [x19,#556]
ffff8000113adb94: 376000a0 tbnz w0, #12, ffff8000113adba8
<__dev_set_rx_mode+0x48>
if (!netdev_uc_empty(dev) && !dev->uc_promisc) {
ffff8000113adb98: b9429275 ldr w21, [x19,#656]
ffff8000113adb9c: 35000175 cbnz w21, ffff8000113adbc8
<__dev_set_rx_mode+0x68>
} else if (netdev_uc_empty(dev) && dev->uc_promisc) {
ffff8000113adba0: 3949f660 ldrb w0, [x19,#637]
ffff8000113adba4: 35000220 cbnz w0, ffff8000113adbe8 <__dev_set_rx_mode+0x88>
if (ops->ndo_set_rx_mode)
ffff8000113adba8: f9402281 ldr x1, [x20,#64]
Which suggests ops is NULL. The #64 also matches with
> [ 50.688935] Unable to handle kernel read from unreadable memory at
> virtual address 0000000000000040
How did dev->netdev_ops become NULL?
Odd
Andrew
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Net: [DSA]: dsa-loop kernel panic
2020-05-01 6:48 ` Allen
@ 2020-05-01 17:35 ` Florian Fainelli
2020-05-01 17:58 ` Allen
0 siblings, 1 reply; 13+ messages in thread
From: Florian Fainelli @ 2020-05-01 17:35 UTC (permalink / raw)
To: Allen, netdev, Andrew Lunn, Vivien Didelot
On 4/30/20 11:48 PM, Allen wrote:
>
>>
>> you have missed an important detail here which is the master device that
>> was used for DSA. The current code defaults to whatever "eth0" is, what
>> does this map to for your configuration?
>>
>
> It maps to "eth0". Please let me know if you need further details.
I suppose I should have been clearer, what network device driver created
eth0?
--
Florian
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Net: [DSA]: dsa-loop kernel panic
2020-05-01 17:35 ` Florian Fainelli
@ 2020-05-01 17:58 ` Allen
2020-05-01 18:05 ` Florian Fainelli
2020-05-03 21:06 ` Florian Fainelli
0 siblings, 2 replies; 13+ messages in thread
From: Allen @ 2020-05-01 17:58 UTC (permalink / raw)
To: Florian Fainelli, netdev, Andrew Lunn, Vivien Didelot
>>
>> It maps to "eth0". Please let me know if you need further details.
>
> I suppose I should have been clearer, what network device driver created
> eth0?
>
This was seen on a VM.
eth0 [52:54:00:c1:cd:65]: virtio_net (up)
Thanks.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Net: [DSA]: dsa-loop kernel panic
2020-05-01 17:58 ` Allen
@ 2020-05-01 18:05 ` Florian Fainelli
2020-05-03 21:06 ` Florian Fainelli
1 sibling, 0 replies; 13+ messages in thread
From: Florian Fainelli @ 2020-05-01 18:05 UTC (permalink / raw)
To: Allen, netdev, Andrew Lunn, Vivien Didelot
On 5/1/20 10:58 AM, Allen wrote:
>>>
>>> It maps to "eth0". Please let me know if you need further details.
>>
>> I suppose I should have been clearer, what network device driver created
>> eth0?
>>
>
> This was seen on a VM.
> eth0 [52:54:00:c1:cd:65]: virtio_net (up)
Thanks, I will try to reproduce this with virtio_net, I usually use
e1000 which did not complain until now.
--
Florian
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Net: [DSA]: dsa-loop kernel panic
2020-05-01 17:58 ` Allen
2020-05-01 18:05 ` Florian Fainelli
@ 2020-05-03 21:06 ` Florian Fainelli
2020-05-04 3:40 ` Florian Fainelli
1 sibling, 1 reply; 13+ messages in thread
From: Florian Fainelli @ 2020-05-03 21:06 UTC (permalink / raw)
To: Allen, netdev, Andrew Lunn, Vivien Didelot
Le 2020-05-01 à 10:58, Allen a écrit :
>>>
>>> It maps to "eth0". Please let me know if you need further details.
>>
>> I suppose I should have been clearer, what network device driver created
>> eth0?
>>
>
> This was seen on a VM.
> eth0 [52:54:00:c1:cd:65]: virtio_net (up)
I have reproduced it here with virtio_net and am now looking into this,
at first glance it does not look like we are properly holding the device
reference count for the case where DSA was probed via platform device
configuration.
--
Florian
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Net: [DSA]: dsa-loop kernel panic
2020-05-03 21:06 ` Florian Fainelli
@ 2020-05-04 3:40 ` Florian Fainelli
2020-05-04 4:55 ` Allen
0 siblings, 1 reply; 13+ messages in thread
From: Florian Fainelli @ 2020-05-04 3:40 UTC (permalink / raw)
To: Allen, netdev, Andrew Lunn, Vivien Didelot
On 5/3/2020 2:06 PM, Florian Fainelli wrote:
> Le 2020-05-01 à 10:58, Allen a écrit :
>>>>
>>>> It maps to "eth0". Please let me know if you need further details.
>>>
>>> I suppose I should have been clearer, what network device driver created
>>> eth0?
>>>
>>
>> This was seen on a VM.
>> eth0 [52:54:00:c1:cd:65]: virtio_net (up)
>
> I have reproduced it here with virtio_net and am now looking into this,
> at first glance it does not look like we are properly holding the device
> reference count for the case where DSA was probed via platform device
> configuration.
There is a DSA master reference counting issue, but with dsa-loop, the
DSA master is already properly reference counted thanks to the
dev_get_by_name() call, I will keep digging.
--
Florian
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Net: [DSA]: dsa-loop kernel panic
2020-05-04 3:40 ` Florian Fainelli
@ 2020-05-04 4:55 ` Allen
0 siblings, 0 replies; 13+ messages in thread
From: Allen @ 2020-05-04 4:55 UTC (permalink / raw)
To: Florian Fainelli, netdev, Andrew Lunn, Vivien Didelot
>
> There is a DSA master reference counting issue, but with dsa-loop, the
> DSA master is already properly reference counted thanks to the
> dev_get_by_name() call, I will keep digging.
>
Thank you Florain.
I am not dsa expert, am debugging the call chain.
- Allen
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Net: [DSA]: dsa-loop kernel panic
2020-05-01 13:10 ` Andrew Lunn
@ 2020-05-04 12:40 ` Allen
0 siblings, 0 replies; 13+ messages in thread
From: Allen @ 2020-05-04 12:40 UTC (permalink / raw)
To: Andrew Lunn; +Cc: netdev, Vivien Didelot, Florian Fainelli
Andrew,
>
> Which suggests ops is NULL. The #64 also matches with
>
>> [ 50.688935] Unable to handle kernel read from unreadable memory at
>> virtual address 0000000000000040
>
> How did dev->netdev_ops become NULL?
>
Thanks. Yes, my debugging also led to this point but not further.
I am tracing the pointer in the call chain. Hoping to find
something.
- Allen
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2020-05-04 12:42 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-30 6:24 Net: [DSA]: dsa-loop kernel panic Allen
2020-04-30 14:06 ` Andrew Lunn
2020-05-01 6:47 ` Allen
2020-04-30 17:12 ` Florian Fainelli
2020-05-01 6:48 ` Allen
2020-05-01 17:35 ` Florian Fainelli
2020-05-01 17:58 ` Allen
2020-05-01 18:05 ` Florian Fainelli
2020-05-03 21:06 ` Florian Fainelli
2020-05-04 3:40 ` Florian Fainelli
2020-05-04 4:55 ` Allen
2020-05-01 13:10 ` Andrew Lunn
2020-05-04 12:40 ` Allen
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.