* 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