Re: panic in sctp_del_addr_from_vrf() ?
Andrey Smagin
samspeed at mail.ru
Wed May 8 05:57:25 UTC 2013
I tried by analogy your patch add _padalign in all places where was before r250300, and in stcp. Uptime now 15hours, before - 5min - 3hour max. I waiting for more statistic.
my changes:
Index: sys/netinet/tcp_subr.c
===================================================================
--- sys/netinet/tcp_subr.c (revision 250330)
+++ sys/netinet/tcp_subr.c (working copy)
@@ -255,7 +255,7 @@
#define V_tcpcb_zone VNET(tcpcb_zone)
MALLOC_DEFINE(M_TCPLOG, "tcplog", "TCP address and flags print buffers");
-static struct mtx isn_mtx;
+static struct mtx_padalign isn_mtx;
#define ISN_LOCK_INIT() mtx_init(&isn_mtx, "isn_mtx", NULL, MTX_DEF)
#define ISN_LOCK() mtx_lock(&isn_mtx)
Index: sys/netinet/in_pcb.h
===================================================================
--- sys/netinet/in_pcb.h (revision 250330)
+++ sys/netinet/in_pcb.h (working copy)
@@ -330,7 +330,7 @@
/*
* Global lock protecting non-pcbgroup hash lookup tables.
*/
- struct rwlock ipi_hash_lock;
+ struct rwlock_padalign ipi_hash_lock;
/*
* Global hash of inpcbs, hashed by local and foreign addresses and
Index: sys/netinet/in_var.h
===================================================================
--- sys/netinet/in_var.h (revision 250330)
+++ sys/netinet/in_var.h (working copy)
@@ -116,7 +116,7 @@
#define INADDR_HASH(x) \
(&V_in_ifaddrhashtbl[INADDR_HASHVAL(x) & V_in_ifaddrhmask])
-extern struct rwlock in_ifaddr_lock;
+extern struct rwlock_padalign in_ifaddr_lock;
#define IN_IFADDR_LOCK_ASSERT() rw_assert(&in_ifaddr_lock, RA_LOCKED)
#define IN_IFADDR_RLOCK() rw_rlock(&in_ifaddr_lock)
Index: sys/netinet/sctp_pcb.h
===================================================================
--- sys/netinet/sctp_pcb.h (revision 250330)
+++ sys/netinet/sctp_pcb.h (working copy)
@@ -193,11 +193,11 @@
sctp_zone_t ipi_zone_asconf;
sctp_zone_t ipi_zone_asconf_ack;
- struct rwlock ipi_ep_mtx;
- struct mtx ipi_iterator_wq_mtx;
- struct rwlock ipi_addr_mtx;
- struct mtx ipi_pktlog_mtx;
- struct mtx wq_addr_mtx;
+ struct rwlock_padalign ipi_ep_mtx;
+ struct mtx_padalign ipi_iterator_wq_mtx;
+ struct rwlock_padalign ipi_addr_mtx;
+ struct mtx_padalign ipi_pktlog_mtx;
+ struct mtx_padalign wq_addr_mtx;
uint32_t ipi_count_ep;
/* assoc/tcb zone info */
Index: sys/netinet/ip_id.c
===================================================================
--- sys/netinet/ip_id.c (revision 250330)
+++ sys/netinet/ip_id.c (working copy)
@@ -97,7 +97,7 @@
static int array_size = 8192;
static int random_id_collisions = 0;
static int random_id_total = 0;
-static struct mtx ip_id_mtx;
+static struct mtx_padalign ip_id_mtx;
static void ip_initid(void);
static int sysctl_ip_id_change(SYSCTL_HANDLER_ARGS);
Index: sys/netinet/ip_input.c
===================================================================
--- sys/netinet/ip_input.c (revision 250330)
+++ sys/netinet/ip_input.c (working copy)
@@ -85,7 +85,7 @@
CTASSERT(sizeof(struct ip) == 20);
#endif
-struct rwlock in_ifaddr_lock;
+struct rwlock_padalign in_ifaddr_lock;
RW_SYSINIT(in_ifaddr_lock, &in_ifaddr_lock, "in_ifaddr_lock");
VNET_DEFINE(int, rsvp_on);
@@ -155,7 +155,7 @@
static VNET_DEFINE(uma_zone_t, ipq_zone);
static VNET_DEFINE(TAILQ_HEAD(ipqhead, ipq), ipq[IPREASS_NHASH]);
-static struct mtx ipqlock;
+static struct mtx_padalign ipqlock;
#define V_ipq_zone VNET(ipq_zone)
#define V_ipq VNET(ipq)
Index: sys/sys/socketvar.h
===================================================================
--- sys/sys/socketvar.h (revision 250330)
+++ sys/sys/socketvar.h (working copy)
@@ -133,7 +133,7 @@
* avoid defining a lock order between listen and accept sockets
* until such time as it proves to be a good idea.
*/
-extern struct mtx accept_mtx;
+extern struct mtx_padalign accept_mtx;
#define ACCEPT_LOCK_ASSERT() mtx_assert(&accept_mtx, MA_OWNED)
#define ACCEPT_UNLOCK_ASSERT() mtx_assert(&accept_mtx, MA_NOTOWNED)
#define ACCEPT_LOCK() mtx_lock(&accept_mtx)
Index: sys/kern/uipc_socket.c
===================================================================
--- sys/kern/uipc_socket.c (revision 250330)
+++ sys/kern/uipc_socket.c (working copy)
@@ -240,14 +240,14 @@
* accept_mtx locks down per-socket fields relating to accept queues. See
* socketvar.h for an annotation of the protected fields of struct socket.
*/
-struct mtx accept_mtx;
+struct mtx_padalign accept_mtx;
MTX_SYSINIT(accept_mtx, &accept_mtx, "accept", MTX_DEF);
/*
* so_global_mtx protects so_gencnt, numopensockets, and the per-socket
* so_gencnt field.
*/
-static struct mtx so_global_mtx;
+static struct mtx_padalign so_global_mtx;
MTX_SYSINIT(so_global_mtx, &so_global_mtx, "so_glabel", MTX_DEF);
/*
Index: sys/net/if.c
===================================================================
--- sys/net/if.c (revision 250330)
+++ sys/net/if.c (working copy)
@@ -206,7 +206,7 @@
* also to stablize it over long-running ioctls, without introducing priority
* inversions and deadlocks.
*/
-struct rwlock ifnet_rwlock;
+struct rwlock_padalign ifnet_rwlock;
struct sx ifnet_sxlock;
/*
Index: sys/net/if_var.h
===================================================================
--- sys/net/if_var.h (revision 250330)
+++ sys/net/if_var.h (working copy)
@@ -191,9 +191,9 @@
void *if_unused[2];
void *if_afdata[AF_MAX];
int if_afdata_initialized;
- struct rwlock if_afdata_lock;
+ struct rwlock_padalign if_afdata_lock;
struct task if_linktask; /* task for link change events */
- struct rwlock if_addr_lock; /* lock to protect address lists */
+ struct rwlock_padalign if_addr_lock; /* lock to protect address lists */
LIST_ENTRY(ifnet) if_clones; /* interfaces of a cloner */
TAILQ_HEAD(, ifg_list) if_groups; /* linked list of groups per if */
@@ -832,7 +832,7 @@
#ifdef _KERNEL
-extern struct rwlock ifnet_rwlock;
+extern struct rwlock_padalign ifnet_rwlock;
extern struct sx ifnet_sxlock;
#define IFNET_LOCK_INIT() do { \
Index: sys/net/if_llatbl.c
===================================================================
--- sys/net/if_llatbl.c (revision 250330)
+++ sys/net/if_llatbl.c (working copy)
@@ -67,7 +67,7 @@
static void vnet_lltable_init(void);
-struct rwlock lltable_rwlock;
+struct rwlock_padalign lltable_rwlock;
RW_SYSINIT(lltable_rwlock, &lltable_rwlock, "lltable_rwlock");
/*
Index: sys/net/if_llatbl.h
===================================================================
--- sys/net/if_llatbl.h (revision 250330)
+++ sys/net/if_llatbl.h (working copy)
@@ -43,7 +43,7 @@
struct llentry;
LIST_HEAD(llentries, llentry);
-extern struct rwlock lltable_rwlock;
+extern struct rwlock_padalign lltable_rwlock;
#define LLTABLE_RLOCK() rw_rlock(&lltable_rwlock)
#define LLTABLE_RUNLOCK() rw_runlock(&lltable_rwlock)
#define LLTABLE_WLOCK() rw_wlock(&lltable_rwlock)
Понедельник, 6 мая 2013, 20:50 -07:00 от kit <ktsin at acm.org>:
>ah, it's should be fixed now as per r250300. changes that caused this panic have been backed out.
>
>kit
>
>--- On Tue, 5/7/13, kit < ktsin at acm.org > wrote:
>
>From: kit < ktsin at acm.org >
>Subject: Re: panic in sctp_del_addr_from_vrf() ?
>To: "Andrey Smagin" < samspeed at mail.ru >, freebsd-current at freebsd.org
>Date: Tuesday, May 7, 2013, 8:59 AM
>
>not sure why. for my case, padaligining one of the rwlocks solved it.
>you may want to try the patch attached and see if it works for you.
>
>anyway, i'm filing a PR if nobody has done so already.
>
>thanks
>kit
>
>On Sat, May 04, 2013 at 09:22:23PM +0400, Andrey Smagin wrote:
>>
>> I have panic like your but in sctp_add_addr_to_vrf. I think need PR. My panic screenshoot http://vvtlan.ru/panic1.jpg and second one http://vvtlan.ru/panic2.jpg
>>
>> Суббота, 4 мая 2013, 20:55 +08:00 от kit < ktsin at acm.org >:
>> >
>> got this panic when network interfaces were being unconfigured during
>> system shutdown. has anyone seen this? should i file a PR?
>>
>> thanks
>> kit
>>
>> test.yahoo.com dumped core - see /home/crash/vmcore.2
>>
>> Sat May 4 20:43:55 MYT 2013
>>
>> FreeBSD test.yahoo.com 10.0-CURRENT FreeBSD 10.0-CURRENT #0 r250229: Sat May 4 20:30:17 MYT 2013 ktsin at test.yahoo.com:/tmp/obj/usr/src/sys/SHUTTLE amd64
>>
>> panic: page fault
>>
>> GNU gdb 6.1.1 [FreeBSD]
>> Copyright 2004 Free Software Foundation, Inc.
>> GDB is free software, covered by the GNU General Public License, and you are
>> welcome to change it and/or distribute copies of it under certain conditions.
>> Type "show copying" to see the conditions.
>> There is absolutely no warranty for GDB. Type "show warranty" for details.
>> This GDB was configured as "amd64-marcel-freebsd"...
>>
>> Unread portion of the kernel message buffer:
>> .
>> <118>Writing entropy file:.
>> <118>.
>> <118>Terminated
>> <118>May 4 20:42:00 test syslogd: exiting on signal 15
>>
>> Fatal trap 12: page fault while in kernel mode
>> cpuid = 4; apic id = 04
>> fault virtual address = 0x8c
>> fault code = supervisor read data, page not present
>> instruction pointer = 0x20:0xffffffff8066e71c
>> stack pointer = 0x28:0xffffff82187fb5d0
>> frame pointer = 0x28:0xffffff82187fb620
>> code segment = base 0x0, limit 0xfffff, type 0x1b
>> = DPL 0, pres 1, long 1, def32 0, gran 1
>> processor eflags = interrupt enabled, resume, IOPL = 0
>> current process = 474 (wpa_supplicant)
>> trap number = 12
>> panic: page fault
>> cpuid = 4
>> KDB: stack backtrace:
>> db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xffffff82187fb190
>> kdb_backtrace() at kdb_backtrace+0x39/frame 0xffffff82187fb240
>> panic() at panic+0x155/frame 0xffffff82187fb2c0
>> trap_fatal() at trap_fatal+0x37a/frame 0xffffff82187fb320
>> trap_pfault() at trap_pfault+0x257/frame 0xffffff82187fb3c0
>> trap() at trap+0x43a/frame 0xffffff82187fb510
>> calltrap() at calltrap+0x8/frame 0xffffff82187fb510
>> --- trap 0xc, rip = 0xffffffff8066e71c, rsp = 0xffffff82187fb5d0, rbp = 0xffffff82187fb620 ---
>> sctp_del_addr_from_vrf() at sctp_del_addr_from_vrf+0x7c/frame 0xffffff82187fb620
>> rt_newaddrmsg_fib() at rt_newaddrmsg_fib+0x44/frame 0xffffff82187fb6e0
>> rtinit1() at rtinit1+0x57b/frame 0xffffff82187fb860
>> in_scrubprefix() at in_scrubprefix+0x376/frame 0xffffff82187fb900
>> rip_ctlinput() at rip_ctlinput+0x143/frame 0xffffff82187fb930
>> pfctlinput() at pfctlinput+0x5c/frame 0xffffff82187fb960
>> ifioctl() at ifioctl+0x7f2/frame 0xffffff82187fba20
>> kern_ioctl() at kern_ioctl+0x22e/frame 0xffffff82187fba90
>> sys_ioctl() at sys_ioctl+0x142/frame 0xffffff82187fbae0
>> amd64_syscall() at amd64_syscall+0x2b4/frame 0xffffff82187fbbf0
>> Xfast_syscall() at Xfast_syscall+0xfb/frame 0xffffff82187fbbf0
>> --- syscall (54, FreeBSD ELF64, sys_ioctl), rip = 0x80122c26a, rsp = 0x7fffffffdb18, rbp = 0x7fffffffdb90 ---
>> Uptime: 4m55s
>>
>> _______________________________________________
>> freebsd-current at freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-current
>> To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
>> >
>>
>> Отправлено из мобильной Почты Mail.Ru
>_______________________________________________
>freebsd-current at freebsd.org mailing list
>http://lists.freebsd.org/mailman/listinfo/freebsd-current
>To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
More information about the freebsd-current
mailing list