Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F153873096
D23097.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D23097.diff
View Options
Index: head/UPDATING
===================================================================
--- head/UPDATING
+++ head/UPDATING
@@ -26,6 +26,11 @@
disable the most expensive debugging functionality run
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
+20200217:
+ The size of struct vnet and the magic cookie have changed.
+ Users need to recompile libkvm and all modules using VIMAGE
+ together with their new kernel.
+
20200212:
Defining the long deprecated NO_CTF, NO_DEBUG_FILES, NO_INSTALLLIB,
NO_MAN, NO_PROFILE, and NO_WARNS variables is now an error. Update
Index: head/lib/libkvm/kvm.c
===================================================================
--- head/lib/libkvm/kvm.c
+++ head/lib/libkvm/kvm.c
@@ -49,6 +49,7 @@
#include <sys/sysctl.h>
#include <sys/mman.h>
+#include <stdbool.h>
#include <net/vnet.h>
#include <fcntl.h>
Index: head/lib/libkvm/kvm_private.c
===================================================================
--- head/lib/libkvm/kvm_private.c
+++ head/lib/libkvm/kvm_private.c
@@ -45,6 +45,7 @@
#include <sys/stat.h>
#include <sys/mman.h>
+#include <stdbool.h>
#include <net/vnet.h>
#include <assert.h>
Index: head/lib/libkvm/kvm_vnet.c
===================================================================
--- head/lib/libkvm/kvm_vnet.c
+++ head/lib/libkvm/kvm_vnet.c
@@ -43,6 +43,7 @@
#include <sys/proc.h>
#include <sys/types.h>
+#include <stdbool.h>
#include <net/vnet.h>
#include <kvm.h>
Index: head/sys/net/if.c
===================================================================
--- head/sys/net/if.c
+++ head/sys/net/if.c
@@ -322,6 +322,11 @@
*/
#define IFNET_HOLD (void *)(uintptr_t)(-1)
+#ifdef VIMAGE
+#define VNET_IS_SHUTTING_DOWN(_vnet) \
+ ((_vnet)->vnet_shutdown && (_vnet)->vnet_state < SI_SUB_VNET_DONE)
+#endif
+
static if_com_alloc_t *if_com_alloc[256];
static if_com_free_t *if_com_free[256];
@@ -1080,7 +1085,7 @@
#ifdef VIMAGE
bool shutdown;
- shutdown = ifp->if_vnet->vnet_shutdown;
+ shutdown = VNET_IS_SHUTTING_DOWN(ifp->if_vnet);
#endif
IFNET_WLOCK();
CK_STAILQ_FOREACH(iter, &V_ifnet, if_link)
@@ -1339,6 +1344,7 @@
struct prison *pr;
struct ifnet *difp;
int error;
+ bool shutdown;
/* Try to find the prison within our visibility. */
sx_slock(&allprison_lock);
@@ -1366,7 +1372,8 @@
}
/* Make sure the VNET is stable. */
- if (ifp->if_vnet->vnet_shutdown) {
+ shutdown = VNET_IS_SHUTTING_DOWN(ifp->if_vnet);
+ if (shutdown) {
CURVNET_RESTORE();
prison_free(pr);
return (EBUSY);
@@ -1391,6 +1398,7 @@
struct vnet *vnet_dst;
struct ifnet *ifp;
int error;
+ bool shutdown;
/* Try to find the prison within our visibility. */
sx_slock(&allprison_lock);
@@ -1419,7 +1427,8 @@
}
/* Make sure the VNET is stable. */
- if (ifp->if_vnet->vnet_shutdown) {
+ shutdown = VNET_IS_SHUTTING_DOWN(ifp->if_vnet);
+ if (shutdown) {
CURVNET_RESTORE();
prison_free(pr);
return (EBUSY);
@@ -2950,11 +2959,15 @@
struct ifreq *ifr;
int error;
int oif_flags;
+#ifdef VIMAGE
+ bool shutdown;
+#endif
CURVNET_SET(so->so_vnet);
#ifdef VIMAGE
/* Make sure the VNET is stable. */
- if (so->so_vnet->vnet_shutdown) {
+ shutdown = VNET_IS_SHUTTING_DOWN(so->so_vnet);
+ if (shutdown) {
CURVNET_RESTORE();
return (EBUSY);
}
Index: head/sys/net/vnet.h
===================================================================
--- head/sys/net/vnet.h
+++ head/sys/net/vnet.h
@@ -72,11 +72,12 @@
u_int vnet_magic_n;
u_int vnet_ifcnt;
u_int vnet_sockcnt;
- u_int vnet_shutdown; /* Shutdown in progress. */
+ u_int vnet_state; /* SI_SUB_* */
void *vnet_data_mem;
uintptr_t vnet_data_base;
-};
-#define VNET_MAGIC_N 0x3e0d8f29
+ bool vnet_shutdown; /* Shutdown in progress. */
+} __aligned(CACHE_LINE_SIZE);
+#define VNET_MAGIC_N 0x5e4a6f28
/*
* These two virtual network stack allocator definitions are also required
Index: head/sys/net/vnet.c
===================================================================
--- head/sys/net/vnet.c
+++ head/sys/net/vnet.c
@@ -279,6 +279,9 @@
LIST_REMOVE(vnet, vnet_le);
VNET_LIST_WUNLOCK();
+ /* Signal that VNET is being shutdown. */
+ vnet->vnet_shutdown = true;
+
CURVNET_SET_QUIET(vnet);
vnet_sysuninit();
CURVNET_RESTORE();
@@ -350,15 +353,15 @@
}
SYSINIT(vnet_data, SI_SUB_KLD, SI_ORDER_FIRST, vnet_data_startup, NULL);
+/* Dummy VNET_SYSINIT to make sure we always reach the final end state. */
static void
-vnet_sysuninit_shutdown(void *unused __unused)
+vnet_sysinit_done(void *unused __unused)
{
- /* Signal that VNET is being shutdown. */
- curvnet->vnet_shutdown = 1;
+ return;
}
-VNET_SYSUNINIT(vnet_sysuninit_shutdown, SI_SUB_VNET_DONE, SI_ORDER_FIRST,
- vnet_sysuninit_shutdown, NULL);
+VNET_SYSINIT(vnet_sysinit_done, SI_SUB_VNET_DONE, SI_ORDER_ANY,
+ vnet_sysinit_done, NULL);
/*
* When a module is loaded and requires storage for a virtualized global
@@ -572,8 +575,10 @@
struct vnet_sysinit *vs;
VNET_SYSINIT_RLOCK();
- TAILQ_FOREACH(vs, &vnet_constructors, link)
+ TAILQ_FOREACH(vs, &vnet_constructors, link) {
+ curvnet->vnet_state = vs->subsystem;
vs->func(vs->arg);
+ }
VNET_SYSINIT_RUNLOCK();
}
@@ -589,8 +594,10 @@
VNET_SYSINIT_RLOCK();
TAILQ_FOREACH_REVERSE(vs, &vnet_destructors, vnet_sysuninit_head,
- link)
+ link) {
+ curvnet->vnet_state = vs->subsystem;
vs->func(vs->arg);
+ }
VNET_SYSINIT_RUNLOCK();
}
@@ -704,7 +711,8 @@
db_printf(" vnet_data_mem = %p\n", vnet->vnet_data_mem);
db_printf(" vnet_data_base = %#jx\n",
(uintmax_t)vnet->vnet_data_base);
- db_printf(" vnet_shutdown = %#08x\n", vnet->vnet_shutdown);
+ db_printf(" vnet_state = %#08x\n", vnet->vnet_state);
+ db_printf(" vnet_shutdown = %#03x\n", vnet->vnet_shutdown);
db_printf("\n");
}
Index: head/sys/sys/param.h
===================================================================
--- head/sys/sys/param.h
+++ head/sys/sys/param.h
@@ -60,7 +60,7 @@
* in the range 5 to 9.
*/
#undef __FreeBSD_version
-#define __FreeBSD_version 1300077 /* Master, propagated to newvers */
+#define __FreeBSD_version 1300078 /* Master, propagated to newvers */
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 25, 10:46 AM (54 m, 4 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32121630
Default Alt Text
D23097.diff (6 KB)
Attached To
Mode
D23097: Revert VNET change and expand VNET structure.
Attached
Detach File
Event Timeline
Log In to Comment