Re: splassert on boot

2022-11-23 Thread Alexandr Nedvedicky
Hello,

On Thu, Nov 24, 2022 at 08:51:51AM +1000, David Gwynne wrote:
> im ok with this, but you need sashan@ to ok it too. he's been working up to 
> this anyway.
> 
> dlg
> 
> > On 24 Nov 2022, at 06:18, Vitaliy Makkoveev  wrote:
> > 
> > On Wed, Nov 23, 2022 at 02:59:05PM -0500, David Hill wrote:
> >> Hello -
> >> 
> >> I am seeing splasserts on boot (before kern.splassert=2 can be set) with
> >> -current.
> >> 
> >> 
> >> 
> >> spdmem0 at iic0 addr 0x50: 8GB DDR3 SDRAM PC3-12800 SO-DIMM
> >> isa0 at pcib0
> >> isadma0 at isa0
> >> vga0 at isa0 port 0x3b0/48 iomem 0xa/131072
> >> wsdisplay at vga0 not configured
> >> pcppi0 at isa0 port 0x61
> >> spkr0 at pcppi0
> >> vmm0 at mainbus0: VMX/EPT (using slow L1TF mitigation)
> >> splassert: pfi_attach_ifgroup: want 2 have 0
> >> splassert: pfi_group_addmember: want 2 have 0
> >> splassert: pfi_attach_ifgroup: want 2 have 0
> >> splassert: pfi_attach_ifgroup: want 2 have 0
> >> splassert: pfi_group_addmember: want 2 have 0
> >> 
> >> 
> >> - David
> >> 
> > 
> > The netlock assertion within PF_LOCK() looks wrong. The netlock should
> > be taken first, but only if both locks taken.
> > 
> > Index: sys/net/pfvar_priv.h
> > ===
> > RCS file: /cvs/src/sys/net/pfvar_priv.h,v
> > retrieving revision 1.21
> > diff -u -p -r1.21 pfvar_priv.h
> > --- sys/net/pfvar_priv.h11 Nov 2022 17:12:30 -  1.21
> > +++ sys/net/pfvar_priv.h23 Nov 2022 20:14:13 -
> > @@ -278,7 +278,6 @@ extern struct rwlockpf_lock;
> > extern struct rwlockpf_state_lock;
> > 
> > #define PF_LOCK()   do {\
> > -   NET_ASSERT_LOCKED();\
> > rw_enter_write(_lock);   \
> > } while (0)
> > 
> 

this diff is OK, please go ahead and commit it.

sorry, I have not hit this assert on my boxes, when testing this diff.

OK sashan




Re: splassert on boot

2022-11-23 Thread David Gwynne
im ok with this, but you need sashan@ to ok it too. he's been working up to 
this anyway.

dlg

> On 24 Nov 2022, at 06:18, Vitaliy Makkoveev  wrote:
> 
> On Wed, Nov 23, 2022 at 02:59:05PM -0500, David Hill wrote:
>> Hello -
>> 
>> I am seeing splasserts on boot (before kern.splassert=2 can be set) with
>> -current.
>> 
>> 
>> 
>> spdmem0 at iic0 addr 0x50: 8GB DDR3 SDRAM PC3-12800 SO-DIMM
>> isa0 at pcib0
>> isadma0 at isa0
>> vga0 at isa0 port 0x3b0/48 iomem 0xa/131072
>> wsdisplay at vga0 not configured
>> pcppi0 at isa0 port 0x61
>> spkr0 at pcppi0
>> vmm0 at mainbus0: VMX/EPT (using slow L1TF mitigation)
>> splassert: pfi_attach_ifgroup: want 2 have 0
>> splassert: pfi_group_addmember: want 2 have 0
>> splassert: pfi_attach_ifgroup: want 2 have 0
>> splassert: pfi_attach_ifgroup: want 2 have 0
>> splassert: pfi_group_addmember: want 2 have 0
>> 
>> 
>> - David
>> 
> 
> The netlock assertion within PF_LOCK() looks wrong. The netlock should
> be taken first, but only if both locks taken.
> 
> Index: sys/net/pfvar_priv.h
> ===
> RCS file: /cvs/src/sys/net/pfvar_priv.h,v
> retrieving revision 1.21
> diff -u -p -r1.21 pfvar_priv.h
> --- sys/net/pfvar_priv.h  11 Nov 2022 17:12:30 -  1.21
> +++ sys/net/pfvar_priv.h  23 Nov 2022 20:14:13 -
> @@ -278,7 +278,6 @@ extern struct rwlock  pf_lock;
> extern struct rwlock  pf_state_lock;
> 
> #define PF_LOCK() do {\
> - NET_ASSERT_LOCKED();\
>   rw_enter_write(_lock);   \
>   } while (0)
> 



Re: splassert on boot

2022-11-23 Thread David Hill



On 11/23/22 15:18, Vitaliy Makkoveev wrote:

On Wed, Nov 23, 2022 at 02:59:05PM -0500, David Hill wrote:

Hello -

I am seeing splasserts on boot (before kern.splassert=2 can be set) with
-current.



spdmem0 at iic0 addr 0x50: 8GB DDR3 SDRAM PC3-12800 SO-DIMM
isa0 at pcib0
isadma0 at isa0
vga0 at isa0 port 0x3b0/48 iomem 0xa/131072
wsdisplay at vga0 not configured
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
vmm0 at mainbus0: VMX/EPT (using slow L1TF mitigation)
splassert: pfi_attach_ifgroup: want 2 have 0
splassert: pfi_group_addmember: want 2 have 0
splassert: pfi_attach_ifgroup: want 2 have 0
splassert: pfi_attach_ifgroup: want 2 have 0
splassert: pfi_group_addmember: want 2 have 0


- David


The netlock assertion within PF_LOCK() looks wrong. The netlock should
be taken first, but only if both locks taken.

Index: sys/net/pfvar_priv.h
===
RCS file: /cvs/src/sys/net/pfvar_priv.h,v
retrieving revision 1.21
diff -u -p -r1.21 pfvar_priv.h
--- sys/net/pfvar_priv.h11 Nov 2022 17:12:30 -  1.21
+++ sys/net/pfvar_priv.h23 Nov 2022 20:14:13 -
@@ -278,7 +278,6 @@ extern struct rwlockpf_lock;
  extern struct rwlock  pf_state_lock;
  
  #define PF_LOCK()		do {			\

-   NET_ASSERT_LOCKED();\
rw_enter_write(_lock);   \
} while (0)
  


with traceback

vmm0 at mainbus0: VMX/EPT (using slow L1TF mitigation)
splassert: pfi_attach_ifgroup: want 2 have 0
Starting stack trace...
pfi_attach_ifgroup(800ecc80,800ecc80,81f25c9b,800ecca8,8188cf82,82737e30) 
at pfi_attach_ifgroup+0x42
if_addgroup(8015,81f25c9b,f9c039b9154dadd0,0,8015,822d06e0) 
at if_addgroup+0x142
enc_clone_create(822d06e0,0,28d493f4921b481d,2,822e5aa0,1f) 
at enc_clone_create+0xd2
encattach(1,1,8173c274,82737f00,822d06e0,0) at 
encattach+0x14

main(0,0,2,0,abd41b90,1) at main+0x409
end trace frame: 0x0, count: 252
End of stack trace.
splassert: pfi_group_addmember: want 2 have 0
Starting stack trace...
pfi_group_addmember(81f25c9b,81f25c9b,81f25c9b,8014a228,8188d442,82737e30) 
at pfi_group_addmember+0x42
if_addgroup(8015,81f25c9b,f9c039b9154dadd0,0,8015,822d06e0) 
at if_addgroup+0x1e6
enc_clone_create(822d06e0,0,28d493f4921b481d,2,822e5aa0,1f) 
at enc_clone_create+0xd2
encattach(1,1,8173c274,82737f00,822d06e0,0) at 
encattach+0x14

main(0,0,2,0,abd41b90,1) at main+0x409
end trace frame: 0x0, count: 252
End of stack trace.
splassert: pfi_attach_ifgroup: want 2 have 0
Starting stack trace...
pfi_attach_ifgroup(80102e80,80102e80,80102e80,80102ea8,8188cf82,82737e90) 
at pfi_attach_ifgroup+0x42
if_creategroup(81f501b2,81f501b2,ea09b7f381ae3cd3,2,822e5b50,822a6790) 
at if_creategroup+0x6f
carpattach(1,1,e1e0b7d5818b2660,822a6790,811da510,82737f00) 
at carpattach+0x20

main(0,0,2,0,abd41b90,1) at main+0x409
end trace frame: 0x0, count: 253
End of stack trace.
splassert: pfi_attach_ifgroup: want 2 have 0
Starting stack trace...
pfi_attach_ifgroup(800f2f00,800f2f00,81f77eea,800f2f28,8188cf82,82737e70) 
at pfi_attach_ifgroup+0x42
if_addgroup(80150800,81f77eea,f9c039b91557e57e,2,80150800,1f) 
at if_addgroup+0x142
loopattach(1,1,822e5b90,822db440,8169888c,82737f00) 
at loopattach+0xbc

main(0,0,2,0,abd41b90,1) at main+0x409
end trace frame: 0x0, count: 253
End of stack trace.
splassert: pfi_group_addmember: want 2 have 0
Starting stack trace...
pfi_group_addmember(81f77eea,81f77eea,81f77eea,8014a2e8,8188d442,82737e70) 
at pfi_group_addmember+0x42
if_addgroup(80150800,81f77eea,f9c039b91557e57e,2,80150800,1f) 
at if_addgroup+0x1e6
loopattach(1,1,822e5b90,822db440,8169888c,82737f00) 
at loopattach+0xbc

main(0,0,2,0,abd41b90,1) at main+0x409
end trace frame: 0x0, count: 253
End of stack trace.



Re: splassert on boot

2022-11-23 Thread Vitaliy Makkoveev
On Wed, Nov 23, 2022 at 02:59:05PM -0500, David Hill wrote:
> Hello -
> 
> I am seeing splasserts on boot (before kern.splassert=2 can be set) with
> -current.
> 
> 
> 
> spdmem0 at iic0 addr 0x50: 8GB DDR3 SDRAM PC3-12800 SO-DIMM
> isa0 at pcib0
> isadma0 at isa0
> vga0 at isa0 port 0x3b0/48 iomem 0xa/131072
> wsdisplay at vga0 not configured
> pcppi0 at isa0 port 0x61
> spkr0 at pcppi0
> vmm0 at mainbus0: VMX/EPT (using slow L1TF mitigation)
> splassert: pfi_attach_ifgroup: want 2 have 0
> splassert: pfi_group_addmember: want 2 have 0
> splassert: pfi_attach_ifgroup: want 2 have 0
> splassert: pfi_attach_ifgroup: want 2 have 0
> splassert: pfi_group_addmember: want 2 have 0
> 
> 
> - David
> 

The netlock assertion within PF_LOCK() looks wrong. The netlock should
be taken first, but only if both locks taken.

Index: sys/net/pfvar_priv.h
===
RCS file: /cvs/src/sys/net/pfvar_priv.h,v
retrieving revision 1.21
diff -u -p -r1.21 pfvar_priv.h
--- sys/net/pfvar_priv.h11 Nov 2022 17:12:30 -  1.21
+++ sys/net/pfvar_priv.h23 Nov 2022 20:14:13 -
@@ -278,7 +278,6 @@ extern struct rwlockpf_lock;
 extern struct rwlock   pf_state_lock;
 
 #define PF_LOCK()  do {\
-   NET_ASSERT_LOCKED();\
rw_enter_write(_lock);   \
} while (0)