Re: git: d160447129fe - main - vm_object: remove the charge member

From: Andrew Turner <andrew_at_fubar.geek.nz>
Date: Tue, 13 Jan 2026 16:51:33 UTC
On 2026-01-13 16:24, Konstantin Belousov wrote:
> On Tue, Jan 13, 2026 at 04:08:34PM +0000, Andrew Turner wrote:
>> On 2026-01-13 14:03, Konstantin Belousov wrote:
>> > The branch main has been updated by kib:
>> >
>> > URL: https://cgit.FreeBSD.org/src/commit/?id=d160447129fe060b28bcd6ba429d17afdf494ff2
>> >
>> > commit d160447129fe060b28bcd6ba429d17afdf494ff2
>> > Author:     Konstantin Belousov <kib@FreeBSD.org>
>> > AuthorDate: 2026-01-03 09:34:23 +0000
>> > Commit:     Konstantin Belousov <kib@FreeBSD.org>
>> > CommitDate: 2026-01-13 14:03:14 +0000
>> >
>> >     vm_object: remove the charge member
>> 
>> I'm seeing the following panic with this change on boot. If I revert 
>> this
>> change the boot succeeds.
>> 
>> Andrew
>> 
>> panic: swap_reserved 0x218c5 < decr 0xffffffffed021
>> cpuid = 99
>> time = 7
>> KDB: stack backtrace:
>> db_trace_self() at db_trace_self
>> db_trace_self_wrapper() at db_trace_self_wrapper+0x38
>> vpanic() at vpanic+0x1a0
>> panic() at panic+0x48
>> swap_release_by_cred() at swap_release_by_cred+0xf0
>> vm_map_entry_delete() at vm_map_entry_delete+0x124
>> vm_map_delete() at vm_map_delete+0x16c
>> kern_munmap() at kern_munmap+0xb8
>> do_el0_sync() at do_el0_sync+0x618
>> handle_el0_sync() at handle_el0_sync+0x4c
>> --- exception, esr 0x56000000
> 
> Try this please.
> 
> commit 870deef431f00f959e838261587b044a2913f414
> Author: Konstantin Belousov <kib@FreeBSD.org>
> Date:   Tue Jan 13 18:22:48 2026 +0200
> 
>     vm_map_entry_delete(): fix the calculation of swap release
> 
>     Reported by:    andrew
>     Fixes:  d160447129fe060b28bcd6ba429d17afdf494ff2
> 
> diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
> index 04628f44a497..b8295bb2108d 100644
> --- a/sys/vm/vm_map.c
> +++ b/sys/vm/vm_map.c
> @@ -3997,7 +3997,7 @@ vm_map_entry_delete(vm_map_t map, vm_map_entry_t 
> entry)
>  				object->size = offidxstart;
>  				if (object->cred != NULL) {
>  					swap_release_by_cred(ptoa(oldsize -
> -					    ptoa(object->size)), object->cred);
> +					    object->size), object->cred);
>  				}
>  			}
>  		}

That fixed it for me.

Andrew