PERFORCE change 113483 for review
Marko Zec
zec at FreeBSD.org
Wed Jan 24 21:04:53 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=113483
Change 113483 by zec at zec_tca51 on 2007/01/24 21:04:11
Rearrange the location of the "snd_limited" field in
struct tcpcb so that enough room can be create to accomodate
a pointer to struct vnet without introducing any churn
to other field's position nor the size of struct tcpcb.
This allows vnet_tbl[] to be nuked...
Don't link a newly created vnet to a list of all vnets
before it has been completely initialized.
Affected files ...
.. //depot/projects/vimage/src/sys/kern/kern_vimage.c#13 edit
.. //depot/projects/vimage/src/sys/netinet/tcp_subr.c#8 edit
.. //depot/projects/vimage/src/sys/netinet/tcp_timer.c#6 edit
.. //depot/projects/vimage/src/sys/netinet/tcp_var.h#3 edit
.. //depot/projects/vimage/src/sys/sys/vimage.h#12 edit
Differences ...
==== //depot/projects/vimage/src/sys/kern/kern_vimage.c#13 (text+ko) ====
@@ -68,8 +68,6 @@
struct vcpu vcpu_0;
struct vnet_base vnetb_0;
-struct vnet_base *vnetb_tbl[100]; /* XXX used in struct tcb */
-
struct vimage_list_head vimage_head;
struct vnetb_list_head vnetb_head;
struct vprocg_list_head vprocg_head;
@@ -394,13 +392,16 @@
struct vprocg *vprocg;
struct vcpu *vcpu;
struct domain *dp;
- int i;
+
+ /*
+ * XXX don't forget the locking
+ */
printf("vi_alloc: %s\n", name);
/* A brute force check whether there's enough mem for a new vimage */
vip = malloc(127*1024, M_VIMAGE, M_NOWAIT); /* XXX aaaargh... */
if (vip == NULL)
- return NULL;
+ goto vi_alloc_done;
vip = realloc(vip, sizeof(struct vimage), M_VIMAGE, M_NOWAIT);
if (vip == NULL)
@@ -414,12 +415,6 @@
bzero(vnetb, sizeof(struct vnet_base));
vip->v_vnetb = vnetb;
vnetb->vnet_magic_n = VNET_MAGIC_N;
- for (i = 0; i < 100; i++) /* XXX !!! */
- if (vnetb_tbl[i] == NULL) {
- vnetb->vnet_id = i;
- vnetb_tbl[i] = vnetb;
- break;
- }
vprocg = malloc(sizeof(struct vprocg), M_VPROCG, M_NOWAIT);
if (vprocg == NULL)
@@ -436,14 +431,6 @@
/* Some initialization stuff... */
sprintf(vip->vi_name, "%s", name);
- /*
- * XXX don't forget locking ->
- * is it really needed given that the timers are giant-protected?
- */
- LIST_INSERT_HEAD(&vimage_head, vip, vi_le);
- LIST_INSERT_HEAD(&vnetb_head, vnetb, vnetb_le);
- LIST_INSERT_HEAD(&vprocg_head, vprocg, vprocg_le);
- LIST_INSERT_HEAD(&vcpu_head, vcpu, vcpu_le);
CURVNETB_SET_QUIET(vnetb);
/*
@@ -487,8 +474,14 @@
}
CURVNETB_RESTORE();
+
+ LIST_INSERT_HEAD(&vimage_head, vip, vi_le);
+ LIST_INSERT_HEAD(&vnetb_head, vnetb, vnetb_le);
+ LIST_INSERT_HEAD(&vprocg_head, vprocg, vprocg_le);
+ LIST_INSERT_HEAD(&vcpu_head, vcpu, vcpu_le);
printf("done.\n");
+vi_alloc_done:
return (vip);
}
@@ -568,9 +561,6 @@
vimage_0.v_procg = &vprocg_0;
vimage_0.v_cpu = &vcpu_0;
- vnetb_0.vnet_id = 1; /* XXX */
- vnetb_tbl[0] = (void *) 0xc0dedead; /* XXX */
- vnetb_tbl[1] = &vnetb_0; /* XXX */
vnetb_0.vnet_magic_n = VNET_MAGIC_N;
TAILQ_INIT(&vnet_modlink_head);
==== //depot/projects/vimage/src/sys/netinet/tcp_subr.c#8 (text+ko) ====
@@ -189,16 +189,17 @@
static int
tcptw_auto_size(void)
{
+ INIT_VNET_INET(curvnetb);
int halfrange;
/*
* Max out at half the ephemeral port range so that TIME_WAIT
* sockets don't tie up too many ephemeral ports.
*/
- if (ipport_lastauto > ipport_firstauto)
- halfrange = (ipport_lastauto - ipport_firstauto) / 2;
+ if (V_ipport_lastauto > V_ipport_firstauto)
+ halfrange = (V_ipport_lastauto - V_ipport_firstauto) / 2;
else
- halfrange = (ipport_firstauto - ipport_lastauto) / 2;
+ halfrange = (V_ipport_firstauto - V_ipport_lastauto) / 2;
/* Protect against goofy port ranges smaller than 32. */
return (imin(imax(halfrange, 32), maxsockets / 5));
}
@@ -686,7 +687,7 @@
return (NULL);
tp = &tm->tcb;
#ifdef VIMAGE
- tp->vnet_id = inp->inp_vnetb->vnet_id;
+ tp->t_vnetb = inp->inp_vnetb;
#endif
/* LIST_INIT(&tp->t_segq); */ /* XXX covered by M_ZERO */
tp->t_maxseg = tp->t_maxopd =
==== //depot/projects/vimage/src/sys/netinet/tcp_timer.c#6 (text+ko) ====
@@ -145,8 +145,8 @@
{
struct tcpcb *tp = xtp;
struct inpcb *inp;
- CURVNETB_SET(vnetb_tbl[tp->vnet_id]);
- INIT_VNET_INET(vnetb_tbl[tp->vnet_id]);
+ CURVNETB_SET(tp->t_vnetb);
+ INIT_VNET_INET(tp->t_vnetb);
INP_INFO_RLOCK(&V_tcbinfo);
inp = tp->t_inpcb;
@@ -187,8 +187,8 @@
{
struct tcpcb *tp = xtp;
struct inpcb *inp;
- CURVNETB_SET(vnetb_tbl[tp->vnet_id]);
- INIT_VNET_INET(vnetb_tbl[tp->vnet_id]);
+ CURVNETB_SET(tp->t_vnetb);
+ INIT_VNET_INET(tp->t_vnetb);
#ifdef TCPDEBUG
int ostate;
@@ -313,8 +313,8 @@
struct tcpcb *tp = xtp;
struct tcptemp *t_template;
struct inpcb *inp;
- CURVNETB_SET(vnetb_tbl[tp->vnet_id]);
- INIT_VNET_INET(vnetb_tbl[tp->vnet_id]);
+ CURVNETB_SET(tp->t_vnetb);
+ INIT_VNET_INET(tp->t_vnetb);
#ifdef TCPDEBUG
int ostate;
@@ -411,8 +411,8 @@
{
struct tcpcb *tp = xtp;
struct inpcb *inp;
- CURVNETB_SET(vnetb_tbl[tp->vnet_id]);
- INIT_VNET_INET(vnetb_tbl[tp->vnet_id]);
+ CURVNETB_SET(tp->t_vnetb);
+ INIT_VNET_INET(tp->t_vnetb);
#ifdef TCPDEBUG
int ostate;
@@ -486,8 +486,8 @@
int rexmt;
int headlocked;
struct inpcb *inp;
- CURVNETB_SET(vnetb_tbl[tp->vnet_id]);
- INIT_VNET_INET(vnetb_tbl[tp->vnet_id]);
+ CURVNETB_SET(tp->t_vnetb);
+ INIT_VNET_INET(tp->t_vnetb);
#ifdef TCPDEBUG
int ostate;
==== //depot/projects/vimage/src/sys/netinet/tcp_var.h#3 (text+ko) ====
@@ -177,6 +177,7 @@
u_char rcv_scale; /* window scaling for recv window */
u_char request_r_scale; /* pending window scaling */
u_char requested_s_scale; /* unused, to be reused later */
+ u_char snd_limited; /* segments limited transmitted */
u_int32_t ts_recent; /* timestamp echo data */
u_long ts_recent_age; /* when last updated */
u_int32_t ts_offset; /* our timestamp offset */
@@ -187,8 +188,7 @@
u_long snd_ssthresh_prev; /* ssthresh prior to retransmit */
tcp_seq snd_recover_prev; /* snd_recover prior to retransmit */
u_long t_badrxtwin; /* window for retransmit recovery */
- u_char snd_limited; /* segments limited transmitted */
- u_short vnet_id; /* index to vnetb_table */
+ struct vnet_base *t_vnetb; /* back pointer to parent vnet */
/* anti DoS counters */
u_long rcv_second; /* start of interval second */
u_long rcv_pps; /* received packets per second */
==== //depot/projects/vimage/src/sys/sys/vimage.h#12 (text+ko) ====
@@ -88,8 +88,6 @@
int ifccnt;
int sockcnt;
- int vnet_id; /* index to vnetb_tbl */
-
int vnet_magic_n;
};
@@ -226,8 +224,6 @@
LIST_HEAD(vnetb_list_head, vnet_base);
extern struct vnetb_list_head vnetb_head;
-extern struct vnet_base *vnetb_tbl[]; /* XXX hack used in tcb */
-
/*
* XXX The stuff bellow needs a major cleanup / rewrite from scratch.
More information about the p4-projects
mailing list