drivers/base/revocable.c | 1 - 1 file changed, 1 deletion(-)
When allocating a revocable provider via revocable_provider_alloc(),
there is no revocable consumers (i.e., RCU readers) yet. Remove the
redundant synchronize_srcu() call to save cycles.
Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
---
To address the performance impact reported in
https://lore.kernel.org/linux-gpio/CAMRc=McrFa42mNWmZtD1HKKKZ+USUKpQAAME50wbfxPM7L72gA@mail.gmail.com/.
drivers/base/revocable.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/base/revocable.c b/drivers/base/revocable.c
index f6cece275aac..b068e18a847d 100644
--- a/drivers/base/revocable.c
+++ b/drivers/base/revocable.c
@@ -99,7 +99,6 @@ struct revocable_provider *revocable_provider_alloc(void *res)
init_srcu_struct(&rp->srcu);
rcu_assign_pointer(rp->res, res);
- synchronize_srcu(&rp->srcu);
kref_init(&rp->kref);
return rp;
--
2.52.0.457.g6b5491de43-goog
On Wed, Jan 21, 2026 at 5:03 AM Tzung-Bi Shih <tzungbi@kernel.org> wrote: > > When allocating a revocable provider via revocable_provider_alloc(), > there is no revocable consumers (i.e., RCU readers) yet. Remove the > redundant synchronize_srcu() call to save cycles. > > Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org> > --- > To address the performance impact reported in > https://lore.kernel.org/linux-gpio/CAMRc=McrFa42mNWmZtD1HKKKZ+USUKpQAAME50wbfxPM7L72gA@mail.gmail.com/. > > drivers/base/revocable.c | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/drivers/base/revocable.c b/drivers/base/revocable.c > index f6cece275aac..b068e18a847d 100644 > --- a/drivers/base/revocable.c > +++ b/drivers/base/revocable.c > @@ -99,7 +99,6 @@ struct revocable_provider *revocable_provider_alloc(void *res) > > init_srcu_struct(&rp->srcu); > rcu_assign_pointer(rp->res, res); > - synchronize_srcu(&rp->srcu); > kref_init(&rp->kref); > > return rp; > -- > 2.52.0.457.g6b5491de43-goog > Do you have an up-to-date integration branch with all the series and fixes you posted that I could use for testing with GPIO? Bart
On Wed, Jan 21, 2026 at 11:38:18AM +0100, Bartosz Golaszewski wrote: > On Wed, Jan 21, 2026 at 5:03 AM Tzung-Bi Shih <tzungbi@kernel.org> wrote: > > > > When allocating a revocable provider via revocable_provider_alloc(), > > there is no revocable consumers (i.e., RCU readers) yet. Remove the > > redundant synchronize_srcu() call to save cycles. > > > > Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org> > > --- > > To address the performance impact reported in > > https://lore.kernel.org/linux-gpio/CAMRc=McrFa42mNWmZtD1HKKKZ+USUKpQAAME50wbfxPM7L72gA@mail.gmail.com/. > > > > drivers/base/revocable.c | 1 - > > 1 file changed, 1 deletion(-) > > > > diff --git a/drivers/base/revocable.c b/drivers/base/revocable.c > > index f6cece275aac..b068e18a847d 100644 > > --- a/drivers/base/revocable.c > > +++ b/drivers/base/revocable.c > > @@ -99,7 +99,6 @@ struct revocable_provider *revocable_provider_alloc(void *res) > > > > init_srcu_struct(&rp->srcu); > > rcu_assign_pointer(rp->res, res); > > - synchronize_srcu(&rp->srcu); > > kref_init(&rp->kref); > > > > return rp; > > -- > > 2.52.0.457.g6b5491de43-goog > > > > Do you have an up-to-date integration branch with all the series and > fixes you posted that I could use for testing with GPIO? Please use https://git.kernel.org/pub/scm/linux/kernel/git/tzungbi/chrome-platform.git/log/?h=gpio_rev for the purpose which is based on driver-core-next and gpio/for-current branches.
On Wed, 21 Jan 2026 13:34:15 +0100, Tzung-Bi Shih <tzungbi@kernel.org> said:
> On Wed, Jan 21, 2026 at 11:38:18AM +0100, Bartosz Golaszewski wrote:
>> On Wed, Jan 21, 2026 at 5:03 AM Tzung-Bi Shih <tzungbi@kernel.org> wrote:
>> >
>> > When allocating a revocable provider via revocable_provider_alloc(),
>> > there is no revocable consumers (i.e., RCU readers) yet. Remove the
>> > redundant synchronize_srcu() call to save cycles.
>> >
>> > Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
>> > ---
>> > To address the performance impact reported in
>> > https://lore.kernel.org/linux-gpio/CAMRc=McrFa42mNWmZtD1HKKKZ+USUKpQAAME50wbfxPM7L72gA@mail.gmail.com/.
>> >
>> > drivers/base/revocable.c | 1 -
>> > 1 file changed, 1 deletion(-)
>> >
>> > diff --git a/drivers/base/revocable.c b/drivers/base/revocable.c
>> > index f6cece275aac..b068e18a847d 100644
>> > --- a/drivers/base/revocable.c
>> > +++ b/drivers/base/revocable.c
>> > @@ -99,7 +99,6 @@ struct revocable_provider *revocable_provider_alloc(void *res)
>> >
>> > init_srcu_struct(&rp->srcu);
>> > rcu_assign_pointer(rp->res, res);
>> > - synchronize_srcu(&rp->srcu);
>> > kref_init(&rp->kref);
>> >
>> > return rp;
>> > --
>> > 2.52.0.457.g6b5491de43-goog
>> >
>>
>> Do you have an up-to-date integration branch with all the series and
>> fixes you posted that I could use for testing with GPIO?
>
> Please use
> https://git.kernel.org/pub/scm/linux/kernel/git/tzungbi/chrome-platform.git/log/?h=gpio_rev
> for the purpose which is based on driver-core-next and gpio/for-current
> branches.
>
With this branch, I'm seeing the following KASAN splat when running libgpiod
tests:
==================================================================
BUG: KASAN: use-after-free in notifier_call_chain+0x222/0x270
Read of size 8 at addr ffff888103ce6490 by task gpiod-test/479
CPU: 2 UID: 0 PID: 479 Comm: gpiod-test Not tainted
6.19.0-rc6-yocto-standard+ #2 PREEMPT(full)
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
rel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org 04/01/2014
Call Trace:
<TASK>
dump_stack_lvl+0x63/0x90
print_report+0x153/0x4c7
? __virt_addr_valid+0x225/0x4c0
? kasan_addr_to_slab+0x11/0x80
kasan_report+0x103/0x140
? notifier_call_chain+0x222/0x270
? notifier_call_chain+0x222/0x270
__asan_report_load8_noabort+0x18/0x20
notifier_call_chain+0x222/0x270
blocking_notifier_call_chain+0x70/0xb0
gpiolib_cdev_unregister+0x5a/0x70
gpiochip_remove+0x48e/0x5a0
? __kasan_slab_free+0x84/0xa0
devm_gpio_chip_release+0x12/0x20
devm_action_release+0x4f/0x80
? __kasan_check_read+0x15/0x20
release_nodes+0xb6/0x320
? trace_hardirqs_on+0x8c/0x160
devres_release_all+0x111/0x190
? __pfx_devres_release_all+0x10/0x10
? sysfs_remove_file_ns+0x56/0xa0
device_unbind_cleanup+0x1b/0x1f0
device_release_driver_internal+0x3e3/0x530
? klist_devices_put+0x38/0x50
device_release_driver+0x16/0x20
bus_remove_device+0x1f3/0x300
device_del+0x3d3/0xdd0
? __pfx_device_del+0x10/0x10
platform_device_del+0x3c/0x210
platform_device_unregister+0x16/0x40
dev_sync_probe_unregister+0x30/0xa0 [dev_sync_probe]
gpio_sim_device_deactivate+0x75/0xf0 [gpio_sim]
gpio_sim_device_config_live_store+0x4cf/0x11a0 [gpio_sim]
? lock_release+0xdd/0x2b0
? configfs_write_iter+0x1e4/0x460 [configfs]
? __pfx_gpio_sim_device_config_live_store+0x10/0x10 [gpio_sim]
? __kasan_check_write+0x18/0x20
? down_read+0x1a8/0x4a0
? __pfx_down_read+0x10/0x10
configfs_write_iter+0x2b8/0x460 [configfs]
vfs_write+0x53e/0x1120
? fd_install+0x17b/0x360
? putname+0xc1/0x140
? __pfx_vfs_write+0x10/0x10
? do_sys_openat2+0x127/0x1a0
? __fput+0x534/0xa70
ksys_write+0x105/0x230
? __pfx_ksys_write+0x10/0x10
? __pfx_fput_close_sync+0x10/0x10
? __pfx___x64_sys_openat+0x10/0x10
__x64_sys_write+0x76/0xd0
? trace_hardirqs_on+0x8c/0x160
x64_sys_call+0x7d/0x1da0
do_syscall_64+0x74/0x3c0
entry_SYSCALL_64_after_hwframe+0x76/0x7e
RIP: 0033:0x7fb4bbbb8dda
Code: 08 03 00 00 59 5e 48 83 f8 fc 75 1e 83 e2 39 83 fa 08 75 16 e8
27 ff ff ff 0f 1f 80 00 00 00 00 49 89 ca 48 8b 44 24 20 0f 05 <48> 83
c4 18 c3 90 f3 0f 1e fa 48 83 ec 10 ff 74 24 18 e8 5f ff ff
RSP: 002b:00007ffcbfc5be40 EFLAGS: 00000202 ORIG_RAX: 0000000000000001
RAX: ffffffffffffffda RBX: 00007fb4bc0ce07f RCX: 00007fb4bbbb8dda
RDX: 0000000000000002 RSI: 00007fb4bc0ce07f RDI: 0000000000000008
RBP: 0000000000000008 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000202 R12: 0000000000000002
R13: 0000563121bd6630 R14: 0000000000000001 R15: 0000000000000000
</TASK>
The buggy address belongs to the physical page:
page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x103ce6
flags: 0x8000000000000000(zone=2)
raw: 8000000000000000 0000000000000000 ffffea00040f3990 0000000000000000
raw: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000
page dumped because: kasan: bad access detected
Memory state around the buggy address:
ffff888103ce6380: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ffff888103ce6400: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
>ffff888103ce6480: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
^
ffff888103ce6500: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ffff888103ce6580: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
==================================================================
Disabling lock debugging due to kernel taint
------------[ cut here ]------------
refcount_t: addition on 0; use-after-free.
WARNING: lib/refcount.c:25 at refcount_warn_saturate+0xd4/0xf0, CPU#6:
gpio-manager/320
Modules linked in: gpio_sim dev_sync_probe cfg80211 parport_pc parport
nfsd sch_fq_codel fuse configfs
CPU: 6 UID: 996 PID: 320 Comm: gpio-manager Tainted: G B
6.19.0-rc6-yocto-standard+ #2 PREEMPT(full)
Tainted: [B]=BAD_PAGE
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
rel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org 04/01/2014
RIP: 0010:refcount_warn_saturate+0xd4/0xf0
Code: 67 48 0f b9 3a 5b 41 5c 5d c3 cc cc cc cc 48 8d 3d 11 ef 7a 03
67 48 0f b9 3a 5b 41 5c 5d c3 cc cc cc cc 48 8d 3d 0c ef 7a 03 <67> 48
0f b9 3a 5b 41 5c 5d e9 ce 84 f5 01 48 89 df e8 06 b8 1c ff
RSP: 0018:ffff88810a877858 EFLAGS: 00010246
RAX: 0000000000000000 RBX: ffff888103d13c50 RCX: 0000000000000000
RDX: 0000000000000001 RSI: ffffffffae5f485a RDI: ffffffffb1da3750
RBP: ffff88810a877868 R08: 0000000000000292 R09: ffffed10207a278a
R10: 0000000000000003 R11: 0000000000000011 R12: 0000000000000002
R13: ffff888107b4e220 R14: ffffffffb0915660 R15: ffff88810148c000
FS: 00007ffa8c165c80(0000) GS:ffff8881a8a83000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000556be771dae0 CR3: 0000000117240005 CR4: 00000000003706f0
Call Trace:
<TASK>
revocable_alloc+0xc8/0xf0
gpio_chrdev_open+0x93/0x510
? __kasan_check_read+0x15/0x20
? do_raw_spin_unlock+0x5d/0x250
chrdev_open+0x1f3/0x620
? __pfx_chrdev_open+0x10/0x10
? do_raw_spin_unlock+0x5d/0x250
do_dentry_open+0x469/0x11a0
? devcgroup_check_permission+0x171/0x360
? __pfx_chrdev_open+0x10/0x10
vfs_open+0x7a/0x440
? may_open+0xec/0x340
? complete_walk+0xdd/0x2a0
path_openat+0x196f/0x3000
? arch_stack_walk+0xb7/0x100
? __pfx_path_openat+0x10/0x10
? stack_trace_save+0x96/0xd0
? __pfx_stack_trace_save+0x10/0x10
? stack_depot_save_flags+0x2c/0xa20
do_filp_open+0x1c5/0x460
? __kasan_check_write+0x18/0x20
? do_raw_spin_lock+0x125/0x270
? __pfx_do_filp_open+0x10/0x10
? strncpy_from_user+0x3f/0x210
do_sys_openat2+0x102/0x1a0
? __pfx_do_sys_openat2+0x10/0x10
? __seccomp_filter+0x2a6/0xc40
? __pfx___seccomp_filter+0x10/0x10
__x64_sys_openat+0x10c/0x240
? __pfx_do_readlinkat+0x10/0x10
? __pfx___x64_sys_openat+0x10/0x10
? __secure_computing+0x157/0x250
? __kasan_check_read+0x15/0x20
x64_sys_call+0x1283/0x1da0
do_syscall_64+0x74/0x3c0
entry_SYSCALL_64_after_hwframe+0x76/0x7e
RIP: 0033:0x7ffa8c4c6142
Code: 08 0f 85 d1 4b ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89
c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 66
2e 0f 1f 84 00 00 00 00 00 66 2e 0f 1f 84 00 00 00 00 00 66
RSP: 002b:00007ffc1c0e8fd8 EFLAGS: 00000246 ORIG_RAX: 0000000000000101
RAX: ffffffffffffffda RBX: 0000560fd4f96140 RCX: 00007ffa8c4c6142
RDX: 0000000000080002 RSI: 0000560fd4f96140 RDI: ffffffffffffff9c
RBP: 0000560fd4f96c30 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000001
R13: 0000000000000000 R14: 0000560fd4f83940 R15: 00007ffc1c0e9280
</TASK>
irq event stamp: 169812
hardirqs last enabled at (169811): [<ffffffffb054880b>]
_raw_spin_unlock_irqrestore+0x4b/0x60
hardirqs last disabled at (169812): [<ffffffffb0525ed5>]
__schedule+0x1395/0x4140
softirqs last enabled at (169688): [<ffffffffaf854784>] __alloc_skb+0x2c4/0x3a0
softirqs last disabled at (169686): [<ffffffffaf854784>] __alloc_skb+0x2c4/0x3a0
---[ end trace 0000000000000000 ]---
Oops: general protection fault, probably for non-canonical address
0xe019ad6c7515063f: 0000 [#1] SMP KASAN PTI
KASAN: maybe wild-memory-access in range [0x00cd8b63a8a831f8-0x00cd8b63a8a831ff]
CPU: 6 UID: 996 PID: 320 Comm: gpio-manager Tainted: G B W
6.19.0-rc6-yocto-standard+ #2 PREEMPT(full)
Tainted: [B]=BAD_PAGE, [W]=WARN
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
rel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org 04/01/2014
RIP: 0010:__srcu_check_read_flavor+0x74/0x220
Code: 48 89 fe 48 c1 ee 03 80 3c 06 00 0f 85 9b 01 00 00 48 b8 00 00
00 00 00 fc ff df 49 03 50 08 4c 8d 4a 20 4c 89 ce 48 c1 ee 03 <0f> b6
34 06 4c 89 c8 83 e0 07 83 c0 03 40 38 f0 7c 09 40 84 f6 0f
RSP: 0018:ffff88810a877ce8 EFLAGS: 00010207
RAX: dffffc0000000000 RBX: ffff888103d13c00 RCX: 0000000000000001
RDX: 00cd8b63a8a831df RSI: 0019b16c7515063f RDI: ffff88810a877ca0
RBP: ffff88810a877d10 R08: ffff888103d13c00 R09: 00cd8b63a8a831ff
R10: ffff888110e6c700 R11: ffff888107b4e220 R12: ffff888102756320
R13: ffff888103d13c18 R14: 000000008044b401 R15: ffff88810148c000
FS: 00007ffa8c165c80(0000) GS:ffff8881a8a83000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000556be771dae0 CR3: 0000000117240005 CR4: 00000000003706f0
Call Trace:
<TASK>
revocable_try_access+0x47/0x150
gpio_ioctl+0xdd/0xc20
? __pfx_do_vfs_ioctl+0x10/0x10
? lock_release+0x1d6/0x2b0
? __pfx_gpio_ioctl+0x10/0x10
? __kasan_check_read+0x15/0x20
? lock_acquire+0x223/0x2b0
? lock_release+0x1d6/0x2b0
? __fget_files+0x1b8/0x320
__x64_sys_ioctl+0x143/0x1d0
? __secure_computing+0x157/0x250
x64_sys_call+0xf3c/0x1da0
do_syscall_64+0x74/0x3c0
entry_SYSCALL_64_after_hwframe+0x76/0x7e
RIP: 0033:0x7ffa8c5381ac
Code: 1e fa 48 8d 44 24 08 48 89 54 24 e0 48 89 44 24 c0 48 8d 44 24
d0 48 89 44 24 c8 b8 10 00 00 00 c7 44 24 b8 10 00 00 00 0f 05 <89> c2
3d 00 f0 ff ff 77 0b 89 d0 c3 0f 1f 84 00 00 00 00 00 48 8b
RSP: 002b:00007ffc1c0e9578 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
RAX: ffffffffffffffda RBX: 0000560fd4f96c30 RCX: 00007ffa8c5381ac
RDX: 00007ffc1c0e9590 RSI: 000000008044b401 RDI: 000000000000000a
RBP: 00007ffc1c0e95f0 R08: 00007ffc1c0e9438 R09: 0000000000000000
R10: 00000000ffffffff R11: 0000000000000246 R12: 0000560fd4f96c30
R13: 0000560fd4f787e0 R14: 00007ffc1c0e96a8 R15: 00007ffc1c0e9640
</TASK>
Modules linked in: gpio_sim dev_sync_probe cfg80211 parport_pc parport
nfsd sch_fq_codel fuse configfs
---[ end trace 0000000000000000 ]---
RIP: 0010:__srcu_check_read_flavor+0x74/0x220
Code: 48 89 fe 48 c1 ee 03 80 3c 06 00 0f 85 9b 01 00 00 48 b8 00 00
00 00 00 fc ff df 49 03 50 08 4c 8d 4a 20 4c 89 ce 48 c1 ee 03 <0f> b6
34 06 4c 89 c8 83 e0 07 83 c0 03 40 38 f0 7c 09 40 84 f6 0f
RSP: 0018:ffff88810a877ce8 EFLAGS: 00010207
RAX: dffffc0000000000 RBX: ffff888103d13c00 RCX: 0000000000000001
RDX: 00cd8b63a8a831df RSI: 0019b16c7515063f RDI: ffff88810a877ca0
RBP: ffff88810a877d10 R08: ffff888103d13c00 R09: 00cd8b63a8a831ff
R10: ffff888110e6c700 R11: ffff888107b4e220 R12: ffff888102756320
R13: ffff888103d13c18 R14: 000000008044b401 R15: ffff88810148c000
FS: 00007ffa8c165c80(0000) GS:ffff8881a8a83000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000556be771dae0 CR3: 0000000117240005 CR4: 00000000003706f0
Thanks,
Bartosz
On Wed, Jan 21, 2026 at 03:18:12PM +0000, Bartosz Golaszewski wrote:
> On Wed, 21 Jan 2026 13:34:15 +0100, Tzung-Bi Shih <tzungbi@kernel.org> said:
> > On Wed, Jan 21, 2026 at 11:38:18AM +0100, Bartosz Golaszewski wrote:
> >> On Wed, Jan 21, 2026 at 5:03 AM Tzung-Bi Shih <tzungbi@kernel.org> wrote:
> >> >
> >> > When allocating a revocable provider via revocable_provider_alloc(),
> >> > there is no revocable consumers (i.e., RCU readers) yet. Remove the
> >> > redundant synchronize_srcu() call to save cycles.
> >> >
> >> > Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
> >> > ---
> >> > To address the performance impact reported in
> >> > https://lore.kernel.org/linux-gpio/CAMRc=McrFa42mNWmZtD1HKKKZ+USUKpQAAME50wbfxPM7L72gA@mail.gmail.com/.
> >> >
> >> > drivers/base/revocable.c | 1 -
> >> > 1 file changed, 1 deletion(-)
> >> >
> >> > diff --git a/drivers/base/revocable.c b/drivers/base/revocable.c
> >> > index f6cece275aac..b068e18a847d 100644
> >> > --- a/drivers/base/revocable.c
> >> > +++ b/drivers/base/revocable.c
> >> > @@ -99,7 +99,6 @@ struct revocable_provider *revocable_provider_alloc(void *res)
> >> >
> >> > init_srcu_struct(&rp->srcu);
> >> > rcu_assign_pointer(rp->res, res);
> >> > - synchronize_srcu(&rp->srcu);
> >> > kref_init(&rp->kref);
> >> >
> >> > return rp;
> >> > --
> >> > 2.52.0.457.g6b5491de43-goog
> >> >
> >>
> >> Do you have an up-to-date integration branch with all the series and
> >> fixes you posted that I could use for testing with GPIO?
> >
> > Please use
> > https://git.kernel.org/pub/scm/linux/kernel/git/tzungbi/chrome-platform.git/log/?h=gpio_rev
> > for the purpose which is based on driver-core-next and gpio/for-current
> > branches.
> >
>
> With this branch, I'm seeing the following KASAN splat when running libgpiod
> tests:
>
> ==================================================================
> BUG: KASAN: use-after-free in notifier_call_chain+0x222/0x270
> Read of size 8 at addr ffff888103ce6490 by task gpiod-test/479
>
> CPU: 2 UID: 0 PID: 479 Comm: gpiod-test Not tainted
> 6.19.0-rc6-yocto-standard+ #2 PREEMPT(full)
> Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
> rel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org 04/01/2014
> Call Trace:
> <TASK>
> dump_stack_lvl+0x63/0x90
> print_report+0x153/0x4c7
> ? __virt_addr_valid+0x225/0x4c0
> ? kasan_addr_to_slab+0x11/0x80
> kasan_report+0x103/0x140
> ? notifier_call_chain+0x222/0x270
> ? notifier_call_chain+0x222/0x270
> __asan_report_load8_noabort+0x18/0x20
> notifier_call_chain+0x222/0x270
> blocking_notifier_call_chain+0x70/0xb0
> gpiolib_cdev_unregister+0x5a/0x70
> gpiochip_remove+0x48e/0x5a0
> ? __kasan_slab_free+0x84/0xa0
> devm_gpio_chip_release+0x12/0x20
Even though I can't reproduce the error for now, by inspecting the calling
stack, I think what was happening:
| Thread A - removing the chip | Thread B - closing the FD |
| | |
| gpiochip_remove() | |
| revocable_provider_revoke() | |
| | The .close() finds the |
| | gpio_chip is gone, skip to |
| | unregister notifier...(1). |
| | |
| | The .close() frees the context. |
| | E.g., kfree(cdev); |
| gcdev_unregister() | |
| gpiolib_cdev_unregister() | |
| It notifies the subscribers | |
| about the GPIO chip being | |
| unregistered. And it tries | |
| to access `cdev` which has | |
| been freed...(2). | |
(1) REVOCABLE_TRY_ACCESS_SCOPED(cdev->chip_rev, gc) {
if (!gc)
break;
gdev = gc->gpiodev;
blocking_notifier_chain_unregister(&gdev->device_notifier,
&cdev->device_unregistered_nb);
scoped_guard(write_lock_irqsave, &gdev->line_state_lock)
raw_notifier_chain_unregister(&gdev->line_state_notifier,
&cdev->lineinfo_changed_nb);
}
(2) void gpiolib_cdev_unregister(struct gpio_device *gdev)
{
destroy_workqueue(gdev->line_state_wq);
cdev_device_del(&gdev->chrdev, &gdev->dev);
blocking_notifier_call_chain(&gdev->device_notifier, 0, NULL);
}
This is a separate issue. I'd find a way to reproduce it and will see
how to fix it.
On Wed, Jan 21, 2026 at 03:18:12PM +0000, Bartosz Golaszewski wrote:
> On Wed, 21 Jan 2026 13:34:15 +0100, Tzung-Bi Shih <tzungbi@kernel.org> said:
> > On Wed, Jan 21, 2026 at 11:38:18AM +0100, Bartosz Golaszewski wrote:
> >> On Wed, Jan 21, 2026 at 5:03 AM Tzung-Bi Shih <tzungbi@kernel.org> wrote:
> >> >
> >> > When allocating a revocable provider via revocable_provider_alloc(),
> >> > there is no revocable consumers (i.e., RCU readers) yet. Remove the
> >> > redundant synchronize_srcu() call to save cycles.
> >> >
> >> > Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
> >> > ---
> >> > To address the performance impact reported in
> >> > https://lore.kernel.org/linux-gpio/CAMRc=McrFa42mNWmZtD1HKKKZ+USUKpQAAME50wbfxPM7L72gA@mail.gmail.com/.
> >> >
> >> > drivers/base/revocable.c | 1 -
> >> > 1 file changed, 1 deletion(-)
> >> >
> >> > diff --git a/drivers/base/revocable.c b/drivers/base/revocable.c
> >> > index f6cece275aac..b068e18a847d 100644
> >> > --- a/drivers/base/revocable.c
> >> > +++ b/drivers/base/revocable.c
> >> > @@ -99,7 +99,6 @@ struct revocable_provider *revocable_provider_alloc(void *res)
> >> >
> >> > init_srcu_struct(&rp->srcu);
> >> > rcu_assign_pointer(rp->res, res);
> >> > - synchronize_srcu(&rp->srcu);
> >> > kref_init(&rp->kref);
> >> >
> >> > return rp;
> >> > --
> >> > 2.52.0.457.g6b5491de43-goog
> >> >
> >>
> >> Do you have an up-to-date integration branch with all the series and
> >> fixes you posted that I could use for testing with GPIO?
> >
> > Please use
> > https://git.kernel.org/pub/scm/linux/kernel/git/tzungbi/chrome-platform.git/log/?h=gpio_rev
> > for the purpose which is based on driver-core-next and gpio/for-current
> > branches.
> >
>
> With this branch, I'm seeing the following KASAN splat when running libgpiod
> tests:
>
> ==================================================================
> BUG: KASAN: use-after-free in notifier_call_chain+0x222/0x270
> Read of size 8 at addr ffff888103ce6490 by task gpiod-test/479
>
> CPU: 2 UID: 0 PID: 479 Comm: gpiod-test Not tainted
> 6.19.0-rc6-yocto-standard+ #2 PREEMPT(full)
> Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
> rel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org 04/01/2014
> Call Trace:
> <TASK>
> dump_stack_lvl+0x63/0x90
> print_report+0x153/0x4c7
> ? __virt_addr_valid+0x225/0x4c0
> ? kasan_addr_to_slab+0x11/0x80
> kasan_report+0x103/0x140
> ? notifier_call_chain+0x222/0x270
> ? notifier_call_chain+0x222/0x270
> __asan_report_load8_noabort+0x18/0x20
> notifier_call_chain+0x222/0x270
> blocking_notifier_call_chain+0x70/0xb0
> gpiolib_cdev_unregister+0x5a/0x70
> gpiochip_remove+0x48e/0x5a0
Weird, I didn't see the same error. What I roughly tried:
(host) $ git checkout origin/gpio_rev
(host) $ cat myconfig
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_KASAN=y
(host) $ vng -k --config tools/testing/selftests/gpio/config \
--config myconfig
(host) $ vng -b
(host) $ vng --user root
(vng) $ zgrep CONFIG_KASAN= /proc/config.gz
CONFIG_KASAN=y
(vng) $ ./libgpiod-2.2.2/tests/gpiod-test
TAP version 14
...
ok 1 /gpiod/chip/open_chip_good
ok 2 /gpiod/chip/open_chip_nonexistent
ok 3 /gpiod/chip/open_chip_not_a_character_device
...
ok 104 /gpiod/request-config/default_config
ok 105 /gpiod/request-config/set_consumer
ok 106 /gpiod/request-config/set_event_buffer_size
(vng) $ dmesg
Did I miss any configurations?
On Wed, 21 Jan 2026 17:04:00 +0100, Tzung-Bi Shih <tzungbi@kernel.org> said: > > Weird, I didn't see the same error. What I roughly tried: > > (host) $ git checkout origin/gpio_rev > (host) $ cat myconfig > CONFIG_IKCONFIG=y > CONFIG_IKCONFIG_PROC=y > CONFIG_KASAN=y > (host) $ vng -k --config tools/testing/selftests/gpio/config \ > --config myconfig > (host) $ vng -b > (host) $ vng --user root > > (vng) $ zgrep CONFIG_KASAN= /proc/config.gz > CONFIG_KASAN=y > (vng) $ ./libgpiod-2.2.2/tests/gpiod-test > TAP version 14 > ... > ok 1 /gpiod/chip/open_chip_good > ok 2 /gpiod/chip/open_chip_nonexistent > ok 3 /gpiod/chip/open_chip_not_a_character_device > ... > ok 104 /gpiod/request-config/default_config > ok 105 /gpiod/request-config/set_consumer > ok 106 /gpiod/request-config/set_event_buffer_size > (vng) $ dmesg > > > Did I miss any configurations? > I'm using an x86-64 qemu VM with the following config against your branch: CONFIG_SYSVIPC=y CONFIG_POSIX_MQUEUE=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y CONFIG_BPF_SYSCALL=y CONFIG_BPF_JIT=y CONFIG_PREEMPT=y CONFIG_BSD_PROCESS_ACCT=y CONFIG_BSD_PROCESS_ACCT_V3=y CONFIG_TASKSTATS=y CONFIG_TASK_DELAY_ACCT=y CONFIG_TASK_XACCT=y CONFIG_TASK_IO_ACCOUNTING=y CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y CONFIG_CGROUPS=y CONFIG_MEMCG=y CONFIG_BLK_CGROUP=y CONFIG_CGROUP_SCHED=y CONFIG_CGROUP_PIDS=y CONFIG_CGROUP_FREEZER=y CONFIG_CPUSETS=y CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT=y CONFIG_CGROUP_PERF=y CONFIG_CGROUP_BPF=y CONFIG_CGROUP_DEBUG=y CONFIG_NAMESPACES=y CONFIG_USER_NS=y CONFIG_BLK_DEV_INITRD=y CONFIG_EXPERT=y CONFIG_SMP=y CONFIG_X86_AMD_PLATFORM_DEVICE=y CONFIG_HYPERVISOR_GUEST=y CONFIG_PARAVIRT=y CONFIG_X86_MSR=y CONFIG_X86_CPUID=y CONFIG_X86_CHECK_BIOS_CORRUPTION=y CONFIG_EFI=y CONFIG_EFI_STUB=y CONFIG_HZ_1000=y CONFIG_PM_DEBUG=y CONFIG_PM_ADVANCED_DEBUG=y # CONFIG_ACPI_DEBUG is not set CONFIG_CPU_FREQ_STAT=y CONFIG_CPU_FREQ_GOV_ONDEMAND=y CONFIG_X86_ACPI_CPUFREQ=y CONFIG_INTEL_IDLE=y CONFIG_IA32_EMULATION=y CONFIG_MODULES=y CONFIG_MODULE_UNLOAD=y CONFIG_PARTITION_ADVANCED=y CONFIG_BINFMT_MISC=m CONFIG_NET=y CONFIG_PACKET=y CONFIG_UNIX=y CONFIG_XFRM_USER=m CONFIG_XFRM_SUB_POLICY=y CONFIG_NET_KEY=m CONFIG_NET_KEY_MIGRATE=y CONFIG_INET=y CONFIG_IP_MULTICAST=y CONFIG_IP_ADVANCED_ROUTER=y CONFIG_IP_MULTIPLE_TABLES=y CONFIG_IP_ROUTE_MULTIPATH=y CONFIG_IP_ROUTE_VERBOSE=y CONFIG_IP_PNP=y CONFIG_IP_PNP_DHCP=y CONFIG_IP_PNP_BOOTP=y CONFIG_IP_PNP_RARP=y CONFIG_NET_IPIP=m CONFIG_NET_IPGRE_DEMUX=m CONFIG_NET_IPGRE=m CONFIG_NET_IPGRE_BROADCAST=y CONFIG_IP_MROUTE=y CONFIG_IP_PIMSM_V1=y CONFIG_IP_PIMSM_V2=y CONFIG_INET_AH=m CONFIG_INET_ESP=m CONFIG_INET_IPCOMP=m CONFIG_IPV6_ROUTER_PREF=y CONFIG_INET6_AH=y CONFIG_INET6_ESP=y CONFIG_INET6_IPCOMP=m CONFIG_IPV6_TUNNEL=m CONFIG_NETFILTER=y CONFIG_BRIDGE_NETFILTER=y CONFIG_NF_CONNTRACK=m CONFIG_NF_CONNTRACK_TIMEOUT=y CONFIG_NF_CONNTRACK_AMANDA=m CONFIG_NF_CONNTRACK_FTP=m CONFIG_NF_CONNTRACK_H323=m CONFIG_NF_CONNTRACK_IRC=m CONFIG_NF_CONNTRACK_NETBIOS_NS=m CONFIG_NF_CONNTRACK_PPTP=m CONFIG_NF_CONNTRACK_SANE=m CONFIG_NF_CONNTRACK_SIP=m CONFIG_NF_CONNTRACK_TFTP=m CONFIG_NF_CT_NETLINK=m CONFIG_NF_TABLES=y CONFIG_NF_TABLES_INET=y CONFIG_NF_TABLES_NETDEV=y CONFIG_NFT_NUMGEN=m CONFIG_NFT_CT=m CONFIG_NFT_FLOW_OFFLOAD=m CONFIG_NFT_CONNLIMIT=m CONFIG_NFT_LOG=m CONFIG_NFT_LIMIT=m CONFIG_NFT_MASQ=m CONFIG_NFT_REDIR=m CONFIG_NFT_NAT=m CONFIG_NFT_TUNNEL=m CONFIG_NFT_QUEUE=m CONFIG_NFT_QUOTA=m CONFIG_NFT_REJECT=m CONFIG_NFT_COMPAT=m CONFIG_NFT_HASH=m CONFIG_NFT_FIB_INET=y CONFIG_NFT_XFRM=m CONFIG_NFT_SOCKET=m CONFIG_NFT_OSF=m CONFIG_NFT_SYNPROXY=m CONFIG_NF_FLOW_TABLE_INET=m CONFIG_NF_FLOW_TABLE=m CONFIG_NETFILTER_XTABLES_COMPAT=y CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m CONFIG_NETFILTER_XT_TARGET_CONNMARK=m CONFIG_NETFILTER_XT_TARGET_CT=m CONFIG_NETFILTER_XT_TARGET_DSCP=m CONFIG_NETFILTER_XT_TARGET_HL=m CONFIG_NETFILTER_XT_TARGET_LOG=m CONFIG_NETFILTER_XT_TARGET_MARK=m CONFIG_NETFILTER_XT_NAT=m CONFIG_NETFILTER_XT_TARGET_NETMAP=m CONFIG_NETFILTER_XT_TARGET_NFLOG=m CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m CONFIG_NETFILTER_XT_TARGET_REDIRECT=m CONFIG_NETFILTER_XT_TARGET_MASQUERADE=m CONFIG_NETFILTER_XT_TARGET_TCPMSS=m CONFIG_NETFILTER_XT_MATCH_COMMENT=m CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m CONFIG_NETFILTER_XT_MATCH_CONNMARK=m CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m CONFIG_NETFILTER_XT_MATCH_DCCP=m CONFIG_NETFILTER_XT_MATCH_DSCP=m CONFIG_NETFILTER_XT_MATCH_ESP=m CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m CONFIG_NETFILTER_XT_MATCH_HELPER=m CONFIG_NETFILTER_XT_MATCH_LENGTH=m CONFIG_NETFILTER_XT_MATCH_LIMIT=m CONFIG_NETFILTER_XT_MATCH_MAC=m CONFIG_NETFILTER_XT_MATCH_MARK=m CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m CONFIG_NETFILTER_XT_MATCH_POLICY=m CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m CONFIG_NETFILTER_XT_MATCH_QUOTA=m CONFIG_NETFILTER_XT_MATCH_REALM=m CONFIG_NETFILTER_XT_MATCH_STATE=m CONFIG_NETFILTER_XT_MATCH_STATISTIC=m CONFIG_NETFILTER_XT_MATCH_STRING=m CONFIG_NETFILTER_XT_MATCH_TCPMSS=m CONFIG_NETFILTER_XT_MATCH_U32=m CONFIG_NFT_FIB_IPV4=y CONFIG_NF_TABLES_ARP=y CONFIG_IP_NF_IPTABLES=m CONFIG_IP_NF_MATCH_AH=m CONFIG_IP_NF_MATCH_ECN=m CONFIG_IP_NF_MATCH_RPFILTER=m CONFIG_IP_NF_MATCH_TTL=m CONFIG_IP_NF_TARGET_REJECT=m CONFIG_IP_NF_TARGET_SYNPROXY=m CONFIG_IP_NF_TARGET_ECN=m CONFIG_IP_NF_ARP_MANGLE=m CONFIG_NFT_FIB_IPV6=y CONFIG_IP6_NF_IPTABLES=m CONFIG_IP6_NF_MATCH_EUI64=m CONFIG_IP6_NF_MATCH_FRAG=m CONFIG_IP6_NF_MATCH_OPTS=m CONFIG_IP6_NF_MATCH_HL=m CONFIG_IP6_NF_MATCH_IPV6HEADER=m CONFIG_IP6_NF_MATCH_RT=m CONFIG_NF_TABLES_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_802_3=m CONFIG_BRIDGE_EBT_AMONG=m CONFIG_BRIDGE_EBT_ARP=m CONFIG_BRIDGE_EBT_IP=m CONFIG_BRIDGE_EBT_IP6=m CONFIG_BRIDGE_EBT_LIMIT=m CONFIG_BRIDGE_EBT_MARK=m CONFIG_BRIDGE_EBT_PKTTYPE=m CONFIG_BRIDGE_EBT_STP=m CONFIG_BRIDGE_EBT_VLAN=m CONFIG_BRIDGE_EBT_ARPREPLY=m CONFIG_BRIDGE_EBT_DNAT=m CONFIG_BRIDGE_EBT_MARK_T=m CONFIG_BRIDGE_EBT_REDIRECT=m CONFIG_BRIDGE_EBT_SNAT=m CONFIG_BRIDGE_EBT_LOG=m CONFIG_BRIDGE_EBT_NFLOG=m CONFIG_IP_SCTP=m CONFIG_TIPC=m CONFIG_L2TP=y CONFIG_BRIDGE=y CONFIG_VLAN_8021Q=m CONFIG_6LOWPAN=m CONFIG_NET_SCHED=y CONFIG_NET_SCH_HTB=m CONFIG_NET_SCH_HFSC=m CONFIG_NET_SCH_PRIO=m CONFIG_NET_SCH_MULTIQ=m CONFIG_NET_SCH_RED=m CONFIG_NET_SCH_SFQ=m CONFIG_NET_SCH_TEQL=m CONFIG_NET_SCH_TBF=m CONFIG_NET_SCH_GRED=m CONFIG_NET_SCH_NETEM=m CONFIG_NET_SCH_CODEL=m CONFIG_NET_SCH_FQ_CODEL=m CONFIG_NET_SCH_INGRESS=m CONFIG_NET_CLS_BASIC=y CONFIG_NET_CLS_U32=y CONFIG_NET_CLS_CGROUP=y CONFIG_NET_CLS_FLOWER=m CONFIG_NET_EMATCH=y CONFIG_NET_EMATCH_U32=y CONFIG_NET_EMATCH_META=y CONFIG_NET_CLS_ACT=y CONFIG_NET_ACT_MIRRED=m CONFIG_NET_ACT_SKBEDIT=m CONFIG_VSOCKETS=y CONFIG_VIRTIO_VSOCKETS=y CONFIG_CGROUP_NET_PRIO=y CONFIG_NET_PKTGEN=m CONFIG_BT=y CONFIG_BT_RFCOMM=m CONFIG_BT_RFCOMM_TTY=y CONFIG_BT_BNEP=m CONFIG_BT_BNEP_MC_FILTER=y CONFIG_BT_BNEP_PROTO_FILTER=y CONFIG_BT_HIDP=m CONFIG_BT_6LOWPAN=m CONFIG_BT_LEDS=y CONFIG_CFG80211=m CONFIG_CFG80211_WEXT=y CONFIG_MAC80211=m CONFIG_RFKILL=y CONFIG_RFKILL_INPUT=y CONFIG_PCI=y CONFIG_PCIEPORTBUS=y CONFIG_PCI_MSI=y CONFIG_PCI_IOV=y CONFIG_HOTPLUG_PCI=y CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y CONFIG_CONNECTOR=y CONFIG_PARPORT=m CONFIG_PARPORT_PC=m CONFIG_BLK_DEV_FD=m CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_NBD=m CONFIG_BLK_DEV_RAM=y CONFIG_VIRTIO_BLK=y CONFIG_BLK_DEV_NVME=y CONFIG_EEPROM_AT24=m CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SR=y CONFIG_SCSI_DEBUG=m CONFIG_SCSI_VIRTIO=y CONFIG_ATA=y CONFIG_SATA_AHCI=y CONFIG_ATA_PIIX=y CONFIG_PATA_SCH=y CONFIG_MD=y CONFIG_BLK_DEV_MD=y CONFIG_MD_RAID0=y CONFIG_MD_RAID1=y CONFIG_MD_RAID10=y CONFIG_MD_RAID456=y CONFIG_BLK_DEV_DM=y CONFIG_DM_CRYPT=y CONFIG_DM_SNAPSHOT=y CONFIG_DM_MIRROR=y CONFIG_DM_ZERO=y CONFIG_NETDEVICES=y CONFIG_BONDING=m CONFIG_DUMMY=m CONFIG_NET_TEAM=m CONFIG_NET_TEAM_MODE_BROADCAST=m CONFIG_NET_TEAM_MODE_ROUNDROBIN=m CONFIG_NET_TEAM_MODE_RANDOM=m CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m CONFIG_NET_TEAM_MODE_LOADBALANCE=m CONFIG_NETCONSOLE=y CONFIG_TUN=m CONFIG_VETH=y CONFIG_VIRTIO_NET=y CONFIG_TYPHOON=m CONFIG_PCNET32=m CONFIG_ATL2=m CONFIG_ATL1=m CONFIG_ATL1E=m CONFIG_ATL1C=m CONFIG_ALX=m CONFIG_TIGON3=m CONFIG_BNX2X=m CONFIG_BNXT=m CONFIG_DL2K=m CONFIG_E100=y CONFIG_E1000=y CONFIG_E1000E=y CONFIG_IGB=y CONFIG_IGBVF=m CONFIG_IGC=m CONFIG_JME=m CONFIG_SKGE=m CONFIG_SKY2=m CONFIG_8139CP=m CONFIG_8139TOO=m CONFIG_R8169=m CONFIG_MDIO_BUS=y CONFIG_PPP=m CONFIG_PPP_BSDCOMP=m CONFIG_PPP_DEFLATE=m CONFIG_PPP_FILTER=y CONFIG_PPP_MULTILINK=y CONFIG_PPPOE=m CONFIG_PPPOL2TP=m CONFIG_PPP_ASYNC=m CONFIG_PPP_SYNC_TTY=m CONFIG_SLIP=m CONFIG_SLIP_COMPRESSED=y CONFIG_SLIP_SMART=y CONFIG_SLIP_MODE_SLIP6=y CONFIG_USB_NET_DRIVERS=m CONFIG_USB_KAWETH=m CONFIG_USB_PEGASUS=m CONFIG_USB_RTL8150=m CONFIG_USB_RTL8152=m CONFIG_USB_LAN78XX=m CONFIG_USB_USBNET=m CONFIG_USB_NET_CDC_EEM=m CONFIG_USB_NET_DM9601=m CONFIG_USB_NET_SMSC75XX=m CONFIG_USB_NET_SMSC95XX=m CONFIG_USB_NET_MCS7830=m CONFIG_USB_NET_RNDIS_HOST=m CONFIG_USB_ALI_M5632=y CONFIG_USB_AN2720=y CONFIG_USB_KC2190=y CONFIG_ATH5K=m CONFIG_ATH9K=m CONFIG_BRCMSMAC=m CONFIG_BRCMFMAC=m CONFIG_BRCMFMAC_USB=y CONFIG_BRCMFMAC_PCIE=y CONFIG_MT7601U=m CONFIG_RT2X00=m CONFIG_RT2800PCI=m CONFIG_ISDN=y CONFIG_INPUT_MOUSEDEV=y CONFIG_INPUT_EVDEV=y CONFIG_INPUT_TABLET=y CONFIG_INPUT_TOUCHSCREEN=y CONFIG_TOUCHSCREEN_USB_COMPOSITE=m CONFIG_INPUT_MISC=y CONFIG_INPUT_UINPUT=y # CONFIG_LEGACY_PTYS is not set CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y CONFIG_PRINTER=m CONFIG_VIRTIO_CONSOLE=y CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_VIRTIO=y CONFIG_HPET=y CONFIG_I2C_I801=y CONFIG_GPIOLIB=y CONFIG_GPIO_AGGREGATOR=m CONFIG_GPIO_LATCH=m CONFIG_GPIO_MOCKUP=m CONFIG_GPIO_VIRTIO=m CONFIG_GPIO_SIM=m CONFIG_GPIO_VIRTUSER=m CONFIG_WATCHDOG=y CONFIG_SOFT_WATCHDOG=m CONFIG_BCMA_DRIVER_GMAC_CMN=y CONFIG_MEDIA_SUPPORT=m CONFIG_MEDIA_SUPPORT_FILTER=y CONFIG_MEDIA_CAMERA_SUPPORT=y CONFIG_MEDIA_USB_SUPPORT=y CONFIG_USB_GSPCA=m CONFIG_USB_GSPCA_BENQ=m CONFIG_USB_GSPCA_CONEX=m CONFIG_USB_GSPCA_CPIA1=m CONFIG_USB_GSPCA_ETOMS=m CONFIG_USB_GSPCA_FINEPIX=m CONFIG_USB_GSPCA_JEILINJ=m CONFIG_USB_GSPCA_JL2005BCD=m CONFIG_USB_GSPCA_KINECT=m CONFIG_USB_GSPCA_KONICA=m CONFIG_USB_GSPCA_MARS=m CONFIG_USB_GSPCA_MR97310A=m CONFIG_USB_GSPCA_NW80X=m CONFIG_USB_GSPCA_OV519=m CONFIG_USB_GSPCA_OV534=m CONFIG_USB_GSPCA_OV534_9=m CONFIG_USB_GSPCA_PAC207=m CONFIG_USB_GSPCA_PAC7302=m CONFIG_USB_GSPCA_PAC7311=m CONFIG_USB_GSPCA_SE401=m CONFIG_USB_GSPCA_SN9C2028=m CONFIG_USB_GSPCA_SN9C20X=m CONFIG_USB_GSPCA_SONIXB=m CONFIG_USB_GSPCA_SONIXJ=m CONFIG_USB_GSPCA_SPCA1528=m CONFIG_USB_GSPCA_SPCA500=m CONFIG_USB_GSPCA_SPCA501=m CONFIG_USB_GSPCA_SPCA505=m CONFIG_USB_GSPCA_SPCA506=m CONFIG_USB_GSPCA_SPCA508=m CONFIG_USB_GSPCA_SPCA561=m CONFIG_USB_GSPCA_SQ905=m CONFIG_USB_GSPCA_SQ905C=m CONFIG_USB_GSPCA_SQ930X=m CONFIG_USB_GSPCA_STK014=m CONFIG_USB_GSPCA_STV0680=m CONFIG_USB_GSPCA_SUNPLUS=m CONFIG_USB_GSPCA_T613=m CONFIG_USB_GSPCA_TOPRO=m CONFIG_USB_GSPCA_TV8532=m CONFIG_USB_GSPCA_VC032X=m CONFIG_USB_GSPCA_VICAM=m CONFIG_USB_GSPCA_XIRLINK_CIT=m CONFIG_USB_GSPCA_ZC3XX=m CONFIG_USB_GL860=m CONFIG_USB_M5602=m CONFIG_USB_STV06XX=m CONFIG_USB_PWC=m CONFIG_USB_S2255=m CONFIG_USB_VIDEO_CLASS=m CONFIG_AGP=y CONFIG_AGP_INTEL=y CONFIG_DRM=y CONFIG_DRM_I915=m CONFIG_DRM_VMWGFX=y CONFIG_DRM_VIRTIO_GPU=y CONFIG_DRM_BOCHS=y CONFIG_DRM_CIRRUS_QEMU=m CONFIG_FB=y CONFIG_FB_UVESA=m CONFIG_FB_EFI=y CONFIG_FB_SIMPLE=y CONFIG_SOUND=m CONFIG_SND=m CONFIG_SND_HRTIMER=m CONFIG_SND_SEQUENCER=m CONFIG_SND_ALOOP=m CONFIG_SND_AC97_POWER_SAVE=y CONFIG_SND_ATIIXP=m CONFIG_SND_ATIIXP_MODEM=m CONFIG_SND_CA0106=m CONFIG_SND_CMIPCI=m CONFIG_SND_OXYGEN=m CONFIG_SND_CTXFI=m CONFIG_SND_EMU10K1=m CONFIG_SND_EMU10K1X=m CONFIG_SND_ENS1370=m CONFIG_SND_HDSP=m CONFIG_SND_HDSPM=m CONFIG_SND_ICE1712=m CONFIG_SND_ICE1724=m CONFIG_SND_INTEL8X0=m CONFIG_SND_RME96=m CONFIG_SND_RME9652=m CONFIG_SND_VIRTUOSO=m CONFIG_SND_HDA_INTEL=m CONFIG_SND_HDA_CODEC_ANALOG=m CONFIG_SND_HDA_CODEC_SIGMATEL=m CONFIG_SND_HDA_CODEC_VIA=m CONFIG_SND_HDA_CODEC_CONEXANT=m CONFIG_SND_HDA_CODEC_CA0110=m CONFIG_SND_HDA_CODEC_CA0132=m CONFIG_SND_HDA_CODEC_CMEDIA=m CONFIG_SND_HDA_CODEC_SI3054=m CONFIG_SND_HDA_CODEC_REALTEK=m CONFIG_SND_HDA_CODEC_CIRRUS=m CONFIG_SND_HDA_CODEC_HDMI=m CONFIG_SND_USB_AUDIO=m CONFIG_SND_USB_USX2Y=m CONFIG_SND_USB_US122L=m CONFIG_SND_USB_HIFACE=m CONFIG_HID_A4TECH=y CONFIG_HID_APPLE=y CONFIG_HID_BELKIN=y CONFIG_HID_CHERRY=y CONFIG_HID_CHICONY=y CONFIG_HID_CYPRESS=y CONFIG_HID_EZKEY=y CONFIG_HID_ITE=y CONFIG_HID_KENSINGTON=y CONFIG_HID_REDRAGON=y CONFIG_HID_MICROSOFT=y CONFIG_HID_MONTEREY=y CONFIG_HID_WACOM=y CONFIG_USB_HIDDEV=y CONFIG_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_OHCI_HCD=y CONFIG_USB_UHCI_HCD=y CONFIG_USB_STORAGE=y CONFIG_USB_SERIAL=y CONFIG_USB_SERIAL_CONSOLE=y CONFIG_USB_SERIAL_GENERIC=y CONFIG_USB_SERIAL_FTDI_SIO=y CONFIG_USB_SERIAL_PL2303=y CONFIG_USB_EZUSB_FX2=y CONFIG_MMC=y CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_PCI=y CONFIG_MMC_SDHCI_ACPI=y CONFIG_MMC_SDHCI_PLTFM=y CONFIG_RTC_CLASS=y CONFIG_VIRTIO_PCI=y CONFIG_VIRTIO_BALLOON=y CONFIG_VIRTIO_INPUT=m CONFIG_VIRTIO_MMIO=y CONFIG_INTEL_IOMMU=y # CONFIG_INTEL_IOMMU_DEFAULT_ON is not set CONFIG_IRQ_REMAP=y CONFIG_EXT4_FS=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y CONFIG_BTRFS_FS=y CONFIG_BTRFS_FS_POSIX_ACL=y CONFIG_FS_ENCRYPTION=y CONFIG_AUTOFS_FS=y CONFIG_FUSE_FS=m CONFIG_CUSE=m CONFIG_ISO9660_FS=y CONFIG_ZISOFS=y CONFIG_MSDOS_FS=y CONFIG_VFAT_FS=y CONFIG_PROC_KCORE=y CONFIG_TMPFS_POSIX_ACL=y CONFIG_EFIVAR_FS=y CONFIG_ROMFS_FS=m CONFIG_NFS_FS=y CONFIG_NFS_V4=y CONFIG_ROOT_NFS=y # CONFIG_NFS_DISABLE_UDP_SUPPORT is not set CONFIG_NFSD=m CONFIG_NFSD_V4=y CONFIG_CIFS=y CONFIG_CIFS_XATTR=y CONFIG_CIFS_POSIX=y CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_CODEPAGE_737=m CONFIG_NLS_CODEPAGE_775=m CONFIG_NLS_CODEPAGE_850=m CONFIG_NLS_CODEPAGE_852=m CONFIG_NLS_CODEPAGE_855=m CONFIG_NLS_CODEPAGE_857=m CONFIG_NLS_CODEPAGE_860=m CONFIG_NLS_CODEPAGE_861=m CONFIG_NLS_CODEPAGE_862=m CONFIG_NLS_CODEPAGE_863=m CONFIG_NLS_CODEPAGE_864=m CONFIG_NLS_CODEPAGE_865=m CONFIG_NLS_CODEPAGE_866=m CONFIG_NLS_CODEPAGE_869=m CONFIG_NLS_CODEPAGE_936=m CONFIG_NLS_CODEPAGE_950=m CONFIG_NLS_CODEPAGE_932=m CONFIG_NLS_CODEPAGE_949=m CONFIG_NLS_CODEPAGE_874=m CONFIG_NLS_ISO8859_8=m CONFIG_NLS_CODEPAGE_1250=m CONFIG_NLS_CODEPAGE_1251=m CONFIG_NLS_ASCII=m CONFIG_NLS_ISO8859_1=y CONFIG_NLS_ISO8859_2=m CONFIG_NLS_ISO8859_3=m CONFIG_NLS_ISO8859_4=m CONFIG_NLS_ISO8859_5=m CONFIG_NLS_ISO8859_6=m CONFIG_NLS_ISO8859_7=m CONFIG_NLS_ISO8859_9=m CONFIG_NLS_ISO8859_13=m CONFIG_NLS_ISO8859_14=m CONFIG_NLS_ISO8859_15=m CONFIG_NLS_KOI8_R=m CONFIG_NLS_KOI8_U=m CONFIG_NLS_UTF8=m CONFIG_ENCRYPTED_KEYS=y CONFIG_SECURITY=y CONFIG_SECURITY_LANDLOCK=y CONFIG_CRYPTO_NULL=y CONFIG_CRYPTO_BENCHMARK=m CONFIG_CRYPTO_BLOWFISH=m CONFIG_CRYPTO_CAMELLIA=m CONFIG_CRYPTO_CAST5=m CONFIG_CRYPTO_CAST6=m CONFIG_CRYPTO_DES=y CONFIG_CRYPTO_SERPENT=m CONFIG_CRYPTO_TWOFISH=m CONFIG_CRYPTO_MD4=y CONFIG_CRYPTO_MD5=y CONFIG_CRYPTO_MICHAEL_MIC=m CONFIG_CRYPTO_SHA1=y CONFIG_CRYPTO_WP512=m CONFIG_CRYPTO_XCBC=m CONFIG_CRYPTO_DEFLATE=y CONFIG_CRYPTO_USER_API_HASH=m CONFIG_CRYPTO_USER_API_SKCIPHER=m CONFIG_CRYPTO_USER_API_RNG=m CONFIG_CRYPTO_USER_API_AEAD=m # CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE is not set CONFIG_CRYPTO_DEV_VIRTIO=y CONFIG_PRINTK_TIME=y CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y CONFIG_KGDB=y CONFIG_KGDB_LOW_LEVEL_TRAP=y CONFIG_KGDB_KDB=y CONFIG_KDB_KEYBOARD=y CONFIG_DEBUG_KMEMLEAK=y CONFIG_DEBUG_MEMORY_INIT=y CONFIG_KASAN=y CONFIG_KFENCE=y CONFIG_PROVE_LOCKING=y CONFIG_FUNCTION_TRACER=y CONFIG_FTRACE_SYSCALLS=y CONFIG_BLK_DEV_IO_TRACE=y CONFIG_SAMPLES=y CONFIG_SAMPLE_TRACE_EVENTS=m CONFIG_SAMPLE_TRACE_PRINTK=m CONFIG_SAMPLE_KOBJECT=m CONFIG_SAMPLE_KPROBES=m CONFIG_SAMPLE_HW_BREAKPOINT=m CONFIG_SAMPLE_KFIFO=m CONFIG_SAMPLE_CONFIGFS=m CONFIG_UNWINDER_FRAME_POINTER=y Bartosz
© 2016 - 2026 Red Hat, Inc.