SLIRP VMStatification [ for 2.9 ]
v2 cover SLIRP VMStatification [ for 2.9 ]
From: "Dr. David Alan Gilbert" <[email protected]>
Hi,
This is an update to my previous series that included VMSTATE_WITH_TMP.
I've not bothered including the VMSTATE_WITH_TMP set this time; but it's still dependent on it, so we'll wait until it's in first.
My main change in this version is that I've commoned the fhost/lhost unions
in struct socket, and that's made the 'socket level' code a lot simpler and should make it a lot easier to add IPv6 support to it.
Dave
Dr. David Alan Gilbert (10):
slirp: VMState conversion; tcpcb
slirp: VMStatify sbuf
slirp: Common lhost/fhost union
slirp: VMStatify socket level
slirp: VMStatify remaining except for loop
slirp/sbuf.h | 4 slirp/slirp.c | 459 +++++++++++++++++++++++++----------------------------- slirp/socket.h | 24 +- slirp/tcp_var.h | 6
5 files changed, 231 insertions(+), 263 deletions(-)
Signature · 1 line
2.9.3
PATCH v2 1/5 slirp: VMState conversion; tcpcb
From: "Dr. David Alan Gilbert" <[email protected]>
Convert the migration of the struct tcpcb to use a VMStateDescription, the rest of it will come later.
Mostly mechanical, except for conversion of some 'char' to uint8_t to ensure portability.
--- slirp/slirp.c | 149 ++++++++++++++++++++------------------------------------ slirp/tcp_var.h | 6 +-- 2 files changed, 57 insertions(+), 98 deletions(-)
slirp/slirp.c +54 -95
@@ -1129,53 +1129,62 @@ void slirp_socket_recv(Slirp *slirp, struct in_addr guest_addr, int guest_port,tcp_output (sototcpcb (so)); } -static void slirp_tcp_save (QEMUFile *f,struct tcpcb *tp) +static int slirp_tcp_post_load (void *opaque,int version) { -int i; +tcp_template ((struct tcpcb *)opaque); -qemu_put_sbe16 (f, tp->t_state); -for (i =0 ; i <TCPT_NTIMERS ; i++) -qemu_put_sbe16 (f, tp->t_timer[i]); -qemu_put_sbe16 (f, tp->t_rxtshift); -qemu_put_sbe16 (f, tp->t_rxtcur); -qemu_put_sbe16 (f, tp->t_dupacks); -qemu_put_be16 (f, tp->t_maxseg); -qemu_put_sbyte (f, tp->t_force); -qemu_put_be16 (f, tp->t_flags); -qemu_put_be32 (f, tp->snd_una); -qemu_put_be32 (f, tp->snd_nxt); -qemu_put_be32 (f, tp->snd_up); -qemu_put_be32 (f, tp->snd_wl1); -qemu_put_be32 (f, tp->snd_wl2); -qemu_put_be32 (f, tp->iss); -qemu_put_be32 (f, tp->snd_wnd); -qemu_put_be32 (f, tp->rcv_wnd); -qemu_put_be32 (f, tp->rcv_nxt); -qemu_put_be32 (f, tp->rcv_up); -qemu_put_be32 (f, tp->irs); -qemu_put_be32 (f, tp->rcv_adv); -qemu_put_be32 (f, tp->snd_max); -qemu_put_be32 (f, tp->snd_cwnd); -qemu_put_be32 (f, tp->snd_ssthresh); -qemu_put_sbe16 (f, tp->t_idle); -qemu_put_sbe16 (f, tp->t_rtt); -qemu_put_be32 (f, tp->t_rtseq); -qemu_put_sbe16 (f, tp->t_srtt); -qemu_put_sbe16 (f, tp->t_rttvar); -qemu_put_be16 (f, tp->t_rttmin); -qemu_put_be32 (f, tp->max_sndwnd); -qemu_put_byte (f, tp->t_oobflags); -qemu_put_byte (f, tp->t_iobc); -qemu_put_sbe16 (f, tp->t_softerror); -qemu_put_byte (f, tp->snd_scale); -qemu_put_byte (f, tp->rcv_scale); -qemu_put_byte (f, tp->request_r_scale); -qemu_put_byte (f, tp->requested_s_scale); -qemu_put_be32 (f, tp->ts_recent); -qemu_put_be32 (f, tp->ts_recent_age); -qemu_put_be32 (f, tp->last_ack_sent); +return 0 ; } +static const VMStateDescription vmstate_slirp_tcp = { + .name ="slirp-tcp" , + .version_id =0 , + .post_load = slirp_tcp_post_load, + .fields = (VMStateField []) { + VMSTATE_INT16(t_state, struct tcpcb), + VMSTATE_INT16_ARRAY(t_timer, struct tcpcb, TCPT_NTIMERS), + VMSTATE_INT16(t_rxtshift, struct tcpcb), + VMSTATE_INT16(t_rxtcur, struct tcpcb), + VMSTATE_INT16(t_dupacks, struct tcpcb), + VMSTATE_UINT16(t_maxseg, struct tcpcb), + VMSTATE_UINT8(t_force, struct tcpcb), + VMSTATE_UINT16(t_flags, struct tcpcb), + VMSTATE_UINT32(snd_una, struct tcpcb), + VMSTATE_UINT32(snd_nxt, struct tcpcb), + VMSTATE_UINT32(snd_up, struct tcpcb), + VMSTATE_UINT32(snd_wl1, struct tcpcb), + VMSTATE_UINT32(snd_wl2, struct tcpcb), + VMSTATE_UINT32(iss, struct tcpcb), + VMSTATE_UINT32(snd_wnd, struct tcpcb), + VMSTATE_UINT32(rcv_wnd, struct tcpcb), + VMSTATE_UINT32(rcv_nxt, struct tcpcb), + VMSTATE_UINT32(rcv_up, struct tcpcb), + VMSTATE_UINT32(irs, struct tcpcb), + VMSTATE_UINT32(rcv_adv, struct tcpcb), + VMSTATE_UINT32(snd_max, struct tcpcb), + VMSTATE_UINT32(snd_cwnd, struct tcpcb), + VMSTATE_UINT32(snd_ssthresh, struct tcpcb), + VMSTATE_INT16(t_idle, struct tcpcb), + VMSTATE_INT16(t_rtt, struct tcpcb), + VMSTATE_UINT32(t_rtseq, struct tcpcb), + VMSTATE_INT16(t_srtt, struct tcpcb), + VMSTATE_INT16(t_rttvar, struct tcpcb), + VMSTATE_UINT16(t_rttmin, struct tcpcb), + VMSTATE_UINT32(max_sndwnd, struct tcpcb), + VMSTATE_UINT8(t_oobflags, struct tcpcb), + VMSTATE_UINT8(t_iobc, struct tcpcb), + VMSTATE_INT16(t_softerror, struct tcpcb), + VMSTATE_UINT8(snd_scale, struct tcpcb), + VMSTATE_UINT8(rcv_scale, struct tcpcb), + VMSTATE_UINT8(request_r_scale, struct tcpcb), + VMSTATE_UINT8(requested_s_scale, struct tcpcb), + VMSTATE_UINT32(ts_recent, struct tcpcb), + VMSTATE_UINT32(ts_recent_age, struct tcpcb), + VMSTATE_UINT32(last_ack_sent, struct tcpcb), +VMSTATE_END_OF_LIST () + } +}; +static void slirp_sbuf_save (QEMUFile *f,struct sbuf *sbuf) {uint32_t off;
@@ -1218,7 +1227,7 @@ static void slirp_socket_save(QEMUFile *f, struct socket *so)qemu_put_be32 (f, so->so_state);slirp_sbuf_save (f, &so->so_rcv);slirp_sbuf_save (f, &so->so_snd); -slirp_tcp_save (f, so->so_tcpcb); +vmstate_save_state (f, &vmstate_slirp_tcp, so->so_tcpcb,0 ); }static void slirp_bootp_save (QEMUFile *f,Slirp *slirp)
@@ -1254,54 +1263,6 @@ static void slirp_state_save(QEMUFile *f, void *opaque)slirp_bootp_save (f, slirp); } -static void slirp_tcp_load (QEMUFile *f,struct tcpcb *tp) -{ -int i; - - tp->t_state =qemu_get_sbe16 (f); -for (i =0 ; i <TCPT_NTIMERS ; i++) - tp->t_timer[i] =qemu_get_sbe16 (f); - tp->t_rxtshift =qemu_get_sbe16 (f); - tp->t_rxtcur =qemu_get_sbe16 (f); - tp->t_dupacks =qemu_get_sbe16 (f); - tp->t_maxseg =qemu_get_be16 (f); - tp->t_force =qemu_get_sbyte (f); - tp->t_flags =qemu_get_be16 (f); - tp->snd_una =qemu_get_be32 (f); - tp->snd_nxt =qemu_get_be32 (f); - tp->snd_up =qemu_get_be32 (f); - tp->snd_wl1 =qemu_get_be32 (f); - tp->snd_wl2 =qemu_get_be32 (f); - tp->iss =qemu_get_be32 (f); - tp->snd_wnd =qemu_get_be32 (f); - tp->rcv_wnd =qemu_get_be32 (f); - tp->rcv_nxt =qemu_get_be32 (f); - tp->rcv_up =qemu_get_be32 (f); - tp->irs =qemu_get_be32 (f); - tp->rcv_adv =qemu_get_be32 (f); - tp->snd_max =qemu_get_be32 (f); - tp->snd_cwnd =qemu_get_be32 (f); - tp->snd_ssthresh =qemu_get_be32 (f); - tp->t_idle =qemu_get_sbe16 (f); - tp->t_rtt =qemu_get_sbe16 (f); - tp->t_rtseq =qemu_get_be32 (f); - tp->t_srtt =qemu_get_sbe16 (f); - tp->t_rttvar =qemu_get_sbe16 (f); - tp->t_rttmin =qemu_get_be16 (f); - tp->max_sndwnd =qemu_get_be32 (f); - tp->t_oobflags =qemu_get_byte (f); - tp->t_iobc =qemu_get_byte (f); - tp->t_softerror =qemu_get_sbe16 (f); - tp->snd_scale =qemu_get_byte (f); - tp->rcv_scale =qemu_get_byte (f); - tp->request_r_scale =qemu_get_byte (f); - tp->requested_s_scale =qemu_get_byte (f); - tp->ts_recent =qemu_get_be32 (f); - tp->ts_recent_age =qemu_get_be32 (f); - tp->last_ack_sent =qemu_get_be32 (f); -tcp_template (tp); -} -static int slirp_sbuf_load (QEMUFile *f,struct sbuf *sbuf) {uint32_t off, sb_cc, sb_datalen;
@@ -1367,9 +1328,7 @@ static int slirp_socket_load(QEMUFile *f, struct socket *so, int version_id)return -ENOMEM ;if (slirp_sbuf_load (f, &so->so_snd) <0 )return -ENOMEM ; -slirp_tcp_load (f, so->so_tcpcb); - -return 0 ; +return vmstate_load_state (f, &vmstate_slirp_tcp, so->so_tcpcb,0 ); }static void slirp_bootp_load (QEMUFile *f,Slirp *slirp)
slirp/tcp_var.h +3 -3
@@ -48,7 +48,7 @@ struct tcpcb {short t_rxtcur;/* current retransmit value */ short t_dupacks;/* consecutive dup acks recd */ u_short t_maxseg;/* maximum segment size */ -char t_force;/* 1 if forcing out a byte */ +uint8_t t_force;/* 1 if forcing out a byte */ u_short t_flags;#define TF_ACKNOW 0x0001/* ack peer immediately */ #define TF_DELACK 0x0002/* ack, but try to delay it */
@@ -109,8 +109,8 @@ struct tcpcb {uint32_t max_sndwnd;/* largest window peer has offered */ /* out-of-band data */ -char t_oobflags;/* have some */ -char t_iobc;/* input character */ +uint8_t t_oobflags;/* have some */ +uint8_t t_iobc;/* input character */ #define TCPOOB_HAVEDATA 0x01#define TCPOOB_HADDATA 0x02short t_softerror;/* possible error not yet reported */
Signature · 1 line
2.9.3
PATCH v2 2/5 slirp: VMStatify sbuf
In reply to Dr. David Alan Gilbert (git)From: "Dr. David Alan Gilbert" <[email protected]>
Convert the sbuf structure to a VMStateDescription. Note this uses the VMSTATE_WITH_TMP mechanism to calculate and reload the offsets based on the pointers.
--- slirp/sbuf.h | 4 +- slirp/slirp.c | 116 ++++++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 78 insertions(+), 42 deletions(-)
slirp/sbuf.h +2 -2
@@ -12,8 +12,8 @@#define sbspace (sb) ((sb)->sb_datalen - (sb)->sb_cc)struct sbuf { -u_int sb_cc;/* actual chars in buffer */ -u_int sb_datalen;/* Length of data */ +uint32_t sb_cc;/* actual chars in buffer */ +uint32_t sb_datalen;/* Length of data */ char *sb_wptr;/* write pointer. points to where the next * bytes should be written in the sbuf */ char *sb_rptr;/* read pointer. points to where the next
slirp/slirp.c +76 -40
145 lines not on this page · raw message
Signature · 1 line
2.9.3
PATCH v2 3/5 slirp: Common lhost/fhost union
In reply to Dr. David Alan Gilbert (git)From: "Dr. David Alan Gilbert" <[email protected]>
The socket structure has a pair of unions for lhost and fhost addresses; the unions are identical so split them out into a separate union declaration.
--- slirp/socket.h | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-)
slirp/socket.h +8 -10
@@ -15,6 +15,12 @@* Our socket structure */ +union slirp_sockaddr { +struct sockaddr_storage ss; +struct sockaddr_in sin; +struct sockaddr_in6 sin6; +}; +struct socket {struct socket *so_next,*so_prev;/* For a linked list of sockets */
@@ -31,22 +37,14 @@ struct socket {struct tcpiphdr *so_ti;/* Pointer to the original ti within * so_mconn, for non-blocking connections */ int so_urgc; -union {/* foreign host */ -struct sockaddr_storage ss; -struct sockaddr_in sin; -struct sockaddr_in6 sin6; - } fhost; +union slirp_sockaddr fhost;/* Foreign host */ #define so_faddr fhost.sin.sin_addr#define so_fport fhost.sin.sin_port#define so_faddr6 fhost.sin6.sin6_addr#define so_fport6 fhost.sin6.sin6_port#define so_ffamily fhost.ss.ss_family -union {/* local host */ -struct sockaddr_storage ss; -struct sockaddr_in sin; -struct sockaddr_in6 sin6; - } lhost; +union slirp_sockaddr lhost;/* Local host */ #define so_laddr lhost.sin.sin_addr#define so_lport lhost.sin.sin_port#define so_laddr6 lhost.sin6.sin6_addr
Signature · 1 line
2.9.3
PATCH v2 4/5 slirp: VMStatify socket level
In reply to Dr. David Alan Gilbert (git)From: "Dr. David Alan Gilbert" <[email protected]>
Working up the stack, this replaces the slirp_socket_load/save with VMState definitions.
--- slirp/slirp.c | 146 ++++++++++++++++++++++++++------------------------------- slirp/socket.h | 6 +-- 2 files changed, 69 insertions(+), 83 deletions(-)
slirp/slirp.c +66 -80
@@ -1250,40 +1250,75 @@ static const VMStateDescription vmstate_slirp_sbuf = { } }; +static bool slirp_older_than_v4 (void *opaque,int version_id) +{ +return version_id <4 ; +} -static void slirp_socket_save (QEMUFile *f,struct socket *so) +static bool slirp_family_inet (void *opaque,int version_id) { -qemu_put_be32 (f, so->so_urgc); -qemu_put_be16 (f, so->so_ffamily); -switch (so->so_ffamily) { -case AF_INET : -qemu_put_be32 (f, so->so_faddr.s_addr); -qemu_put_be16 (f, so->so_fport); -break ; -default : -error_report ("so_ffamily unknown, unable to save so_faddr and" -" so_fport" ); - } -qemu_put_be16 (f, so->so_lfamily); -switch (so->so_lfamily) { -case AF_INET : -qemu_put_be32 (f, so->so_laddr.s_addr); -qemu_put_be16 (f, so->so_lport); -break ; -default : -error_report ("so_ffamily unknown, unable to save so_laddr and" -" so_lport" ); +union slirp_sockaddr *ssa = (union slirp_sockaddr *)opaque; +return ssa->ss.ss_family ==AF_INET ; +} + +static int slirp_socket_pre_load (void *opaque) +{ +struct socket *so = opaque; +if (tcp_attach (so) <0 ) { +return -ENOMEM ; } -qemu_put_byte (f, so->so_iptos); -qemu_put_byte (f, so->so_emu); -qemu_put_byte (f, so->so_type); -qemu_put_be32 (f, so->so_state); -/* TODO: Build vmstate at this level */ -vmstate_save_state (f, &vmstate_slirp_sbuf, &so->so_rcv,0 ); -vmstate_save_state (f, &vmstate_slirp_sbuf, &so->so_snd,0 ); -vmstate_save_state (f, &vmstate_slirp_tcp, so->so_tcpcb,0 ); +/* Older versions don't load these fields */ + so->so_ffamily =AF_INET ; + so->so_lfamily =AF_INET ; +return 0 ; } +static const VMStateDescription vmstate_slirp_socket_addr = { + .name ="slirp-socket-addr" , + .version_id =4 , + .fields = (VMStateField []) { + VMSTATE_UINT16(ss.ss_family, union slirp_sockaddr), + VMSTATE_UINT32_TEST(sin.sin_addr.s_addr, union slirp_sockaddr, + slirp_family_inet), + VMSTATE_UINT16_TEST(sin.sin_port, union slirp_sockaddr, + slirp_family_inet), +VMSTATE_END_OF_LIST () + } +}; + +static const VMStateDescription vmstate_slirp_socket = { + .name ="slirp-socket" , + .version_id =4 , + .pre_load = slirp_socket_pre_load, + .fields = (VMStateField []) { + VMSTATE_UINT32(so_urgc, struct socket), +/* Pre-v4 versions */ + VMSTATE_UINT32_TEST(so_faddr.s_addr, struct socket, + slirp_older_than_v4), + VMSTATE_UINT32_TEST(so_laddr.s_addr, struct socket, + slirp_older_than_v4), + VMSTATE_UINT16_TEST(so_fport, struct socket, slirp_older_than_v4), + VMSTATE_UINT16_TEST(so_lport, struct socket, slirp_older_than_v4), +/* v4 and newer */ + VMSTATE_STRUCT(fhost, struct socket, 4, vmstate_slirp_socket_addr, + union slirp_sockaddr), + VMSTATE_STRUCT(lhost, struct socket, 4, vmstate_slirp_socket_addr, + union slirp_sockaddr), + + VMSTATE_UINT8(so_iptos, struct socket), + VMSTATE_UINT8(so_emu, struct socket), + VMSTATE_UINT8(so_type, struct socket), + VMSTATE_INT32(so_state, struct socket), + VMSTATE_STRUCT(so_rcv, struct socket, 0, vmstate_slirp_sbuf, + struct sbuf), + VMSTATE_STRUCT(so_snd, struct socket, 0, vmstate_slirp_sbuf, + struct sbuf), + VMSTATE_STRUCT_POINTER(so_tcpcb, struct socket, vmstate_slirp_tcp, + struct tcpcb), +VMSTATE_END_OF_LIST () + } +}; +static void slirp_bootp_save (QEMUFile *f,Slirp *slirp) {int i;
@@ -1308,7 +1343,7 @@ static void slirp_state_save(QEMUFile *f, void *opaque)continue ;qemu_put_byte (f,42 ); -slirp_socket_save (f, so); +vmstate_save_state (f, &vmstate_slirp_socket, so,NULL ); }qemu_put_byte (f,0 );
@@ -1317,55 +1352,6 @@ static void slirp_state_save(QEMUFile *f, void *opaque)slirp_bootp_save (f, slirp); } -static int slirp_socket_load (QEMUFile *f,struct socket *so,int version_id) -{ -int ret =0 ; -if (tcp_attach (so) <0 ) -return -ENOMEM ; - - so->so_urgc =qemu_get_be32 (f); -if (version_id <=3 ) { - so->so_ffamily =AF_INET ; - so->so_faddr.s_addr =qemu_get_be32 (f); - so->so_laddr.s_addr =qemu_get_be32 (f); - so->so_fport =qemu_get_be16 (f); - so->so_lport =qemu_get_be16 (f); - }else { - so->so_ffamily =qemu_get_be16 (f); -switch (so->so_ffamily) { -case AF_INET : - so->so_faddr.s_addr =qemu_get_be32 (f); - so->so_fport =qemu_get_be16 (f); -break ; -default : -error_report ( -"so_ffamily unknown, unable to restore so_faddr and so_lport" ); - } - so->so_lfamily =qemu_get_be16 (f); -switch (so->so_lfamily) { -case AF_INET : - so->so_laddr.s_addr =qemu_get_be32 (f); - so->so_lport =qemu_get_be16 (f); -break ; -default : -error_report ( -"so_ffamily unknown, unable to restore so_laddr and so_lport" ); - } - } - so->so_iptos =qemu_get_byte (f); - so->so_emu =qemu_get_byte (f); - so->so_type =qemu_get_byte (f); - so->so_state =qemu_get_be32 (f); -/* TODO: VMState at this level */ - ret =vmstate_load_state (f, &vmstate_slirp_sbuf, &so->so_rcv,0 ); -if (!ret) { - ret =vmstate_load_state (f, &vmstate_slirp_sbuf, &so->so_snd,0 ); - } -if (!ret) { - ret =vmstate_load_state (f, &vmstate_slirp_tcp, so->so_tcpcb,0 ); - } -return ret; -}static void slirp_bootp_load (QEMUFile *f,Slirp *slirp) {
@@ -1389,7 +1375,7 @@ static int slirp_state_load(QEMUFile *f, void *opaque, int version_id)if (!so)return -ENOMEM ; - ret =slirp_socket_load (f, so, version_id); + ret =vmstate_load_state (f, &vmstate_slirp_socket, so, version_id);if (ret <0 )return ret;
slirp/socket.h +3 -3
@@ -36,7 +36,7 @@ struct socket {* PING reply's */ struct tcpiphdr *so_ti;/* Pointer to the original ti within * so_mconn, for non-blocking connections */ -int so_urgc; +uint32_t so_urgc;union slirp_sockaddr fhost;/* Foreign host */ #define so_faddr fhost.sin.sin_addr#define so_fport fhost.sin.sin_port
@@ -54,8 +54,8 @@ struct socket {uint8_t so_iptos;/* Type of service */ uint8_t so_emu;/* Is the socket emulated? */ -u_char so_type;/* Type of socket, UDP or TCP */ -int so_state;/* internal state flags SS_*, below */ +uint8_t so_type;/* Type of socket, UDP or TCP */ +int32_t so_state;/* internal state flags SS_*, below */ struct tcpcb *so_tcpcb;/* pointer to TCP protocol control block */ u_int so_expire;/* When the socket will expire */
Signature · 1 line
2.9.3
Re: [Qemu-devel] [PATCH v2 4/5] slirp: VMStatify socket level
Hello,
slirp/slirp.c static const VMStateDescription vmstate_slirp_sbuf = { · line 1287
Quoted 12 lines · Dr. David Alan Gilbert (git), on Wed 23 Nov 2016 18:52:57 +0000, wrote:
slirp/slirp.c +12
-0+static const VMStateDescription vmstate_slirp_socket_addr = { + .name ="slirp-socket-addr" , + .version_id =4 , + .fields = (VMStateField []) { + VMSTATE_UINT16(ss.ss_family, union slirp_sockaddr), + VMSTATE_UINT32_TEST(sin.sin_addr.s_addr, union slirp_sockaddr, + slirp_family_inet), + VMSTATE_UINT16_TEST(sin.sin_port, union slirp_sockaddr, + slirp_family_inet), +VMSTATE_END_OF_LIST () + } +};
How will we be able to add the IPv6 case here?
Samuel
Re: [Qemu-devel] [PATCH v2 4/5] slirp: VMStatify socket level
Quoted 15 lines · Samuel Thibault, on Sun 27 Nov 2016 16:13:46 +0100, wrote:
slirp/slirp.c static const VMStateDescription vmstate_slirp_sbuf = { · line 1287
Quoted 12 lines · Dr. David Alan Gilbert (git), on Wed 23 Nov 2016 18:52:57 +0000, wrote:
slirp/slirp.c +12
-0+static const VMStateDescription vmstate_slirp_socket_addr = { + .name ="slirp-socket-addr" , + .version_id =4 , + .fields = (VMStateField []) { + VMSTATE_UINT16(ss.ss_family, union slirp_sockaddr), + VMSTATE_UINT32_TEST(sin.sin_addr.s_addr, union slirp_sockaddr, + slirp_family_inet), + VMSTATE_UINT16_TEST(sin.sin_port, union slirp_sockaddr, + slirp_family_inet), +VMSTATE_END_OF_LIST () + } +};How will we be able to add the IPv6 case here?
Reading again your previous post, it seemed it'd be in slirp_family_inet, but I don't immediately see how.
Applying your patch for 2.9 would thus make porting the code to IPv6 more difficult than how it is now, so I'm quite reluctant :)
Could you perhaps simply add the IPv6 case in your patch series already? It shouldn't be much work for you who actually know how the VMSTATE machinery is supposed to work (I guess the amount of people who care about slirp *and* know about VMSTATE is extremely small), and a proof of concept for the portability to non-ipv4 addresse spaces.
Samuel
Re: [Qemu-devel] [PATCH v2 4/5] slirp: VMStatify socket level
Quoted 20 lines · * Samuel Thibault ([email protected]) wrote:
Quoted 15 lines · Samuel Thibault, on Sun 27 Nov 2016 16:13:46 +0100, wrote:
slirp/slirp.c static const VMStateDescription vmstate_slirp_sbuf = { · line 1287
Quoted 12 lines · Dr. David Alan Gilbert (git), on Wed 23 Nov 2016 18:52:57 +0000, wrote:
slirp/slirp.c +12
-0+static const VMStateDescription vmstate_slirp_socket_addr = { + .name ="slirp-socket-addr" , + .version_id =4 , + .fields = (VMStateField []) { + VMSTATE_UINT16(ss.ss_family, union slirp_sockaddr), + VMSTATE_UINT32_TEST(sin.sin_addr.s_addr, union slirp_sockaddr, + slirp_family_inet), + VMSTATE_UINT16_TEST(sin.sin_port, union slirp_sockaddr, + slirp_family_inet), +VMSTATE_END_OF_LIST () + } +};How will we be able to add the IPv6 case here?
Reading again your previous post, it seemed it'd be in
slirp_family_inet, but I don't immediately see how.
Quoted 8 lines
Applying your patch for 2.9 would thus make porting the code to IPv6 more difficult than how it is now, so I'm quite reluctant :)
Could you perhaps simply add the IPv6 case in your patch series already? It shouldn't be much work for you who actually know how the VMSTATE machinery is supposed to work (I guess the amount of people who care about slirp *and* know about VMSTATE is extremely small), and a proof of concept for the portability to non-ipv4 addresse spaces.
The number of people who care about slirp, IPv6, VMState is even smaller :-) Hmm, I don't really know IPv6 but I'm thinking this code will become something like the following (says he not knowing whether a scope-id or a flowinfo
is something that needs migrating) (untested):
static const VMStateDescription vmstate_slirp_socket_addr = {
.name = "slirp-socket-addr",
.version_id = 4,
.fields = (VMStateField[]) {
VMSTATE_UINT16(ss.ss_family, union slirp_sockaddr), VMSTATE_UINT32_TEST(sin.sin_addr.s_addr, union slirp_sockaddr,
slirp_family_inet),
VMSTATE_UINT16_TEST(sin.sin_port, union slirp_sockaddr,
slirp_family_inet),
VMSTATE_BUFFER_TEST(sin6.sin6_addr, union slirp_sockaddr,
slirp_family_inet6),
VMSTATE_UINT16_TEST(sin6.sin6_port, union slirp_sockaddr,
slirp_family_inet6),
VMSTATE_UINT32_TEST(sin6.sin6_flowinfo, union slirp_sockaddr,
slirp_family_inet6),
VMSTATE_UINT32_TEST(sin6.sin6_scope_id, union slirp_sockaddr,
slirp_family_inet6),
VMSTATE_END_OF_LIST()
}
};
So to me that looks pretty clean, we need to add another slirp_family_inet6 test function, but then we just add the extra fields for the IPv6 stuff.
Can you suggest an IPv6 command line for testing that ?
Dave
--
Dr. David Alan Gilbert / [email protected] / Manchester, UK
Re: [Qemu-devel] [PATCH v2 4/5] slirp: VMStatify socket level
Hello,
Quoted 24 lines · Dr. David Alan Gilbert, on Mon 28 Nov 2016 09:08:16 +0000, wrote:
Hmm, I don't really know IPv6 but I'm thinking this code will become something like the following (says he not knowing whether a scope-id or a flowinfo
is something that needs migrating) (untested):static const VMStateDescription
vmstate_slirp_socket_addr= {
.name = "slirp-socket-addr",
.version_id = 4,
.fields = (VMStateField[]) {
VMSTATE_UINT16(ss.ss_family, union slirp_sockaddr), VMSTATE_UINT32_TEST(sin.sin_addr.s_addr, unionslirp_sockaddr,
slirp_family_inet),
VMSTATE_UINT16_TEST(sin.sin_port, unionslirp_sockaddr,
slirp_family_inet),VMSTATE_BUFFER_TEST(sin6.sin6_addr, union
slirp_sockaddr,
slirp_family_inet6),
VMSTATE_UINT16_TEST(sin6.sin6_port, unionslirp_sockaddr,
slirp_family_inet6),
VMSTATE_UINT32_TEST(sin6.sin6_flowinfo, unionslirp_sockaddr,
slirp_family_inet6),
VMSTATE_UINT32_TEST(sin6.sin6_scope_id, unionslirp_sockaddr,
slirp_family_inet6),
Quoted 3 lines
VMSTATE_END_OF_LIST()
}
};
Ok, that looks good :)
Quoted 2 lines
So to me that looks pretty clean, we need to add another
slirp_family_inet6test function, but then we just add the extra fields for the IPv6 stuff.
Yes, now I see.
Quoted 1 line
Can you suggest an IPv6 command line for testing that ?
Well, it doesn't exist yet, that's the problem. And applying your patch would have made it to exist even harder, so that's why I was afraid.
I would say that your patch should contain these IPv6 lines, but as comments since they are untested, for the person who will at some point want to implement the IPv6 case here.
Samuel
Re: [Qemu-devel] [PATCH v2 4/5] slirp: VMStatify socket level
Quoted 38 lines · * Samuel Thibault ([email protected]) wrote:
Hello,
Quoted 24 lines · Dr. David Alan Gilbert, on Mon 28 Nov 2016 09:08:16 +0000, wrote:
Hmm, I don't really know IPv6 but I'm thinking this code will become something like the following (says he not knowing whether a scope-id or a flowinfo
is something that needs migrating) (untested):static const VMStateDescription
vmstate_slirp_socket_addr= {
.name = "slirp-socket-addr",
.version_id = 4,
.fields = (VMStateField[]) {
VMSTATE_UINT16(ss.ss_family, union slirp_sockaddr), VMSTATE_UINT32_TEST(sin.sin_addr.s_addr, unionslirp_sockaddr,
slirp_family_inet),
VMSTATE_UINT16_TEST(sin.sin_port, unionslirp_sockaddr,
slirp_family_inet),VMSTATE_BUFFER_TEST(sin6.sin6_addr, union
slirp_sockaddr,
slirp_family_inet6),
VMSTATE_UINT16_TEST(sin6.sin6_port, unionslirp_sockaddr,
slirp_family_inet6),
VMSTATE_UINT32_TEST(sin6.sin6_flowinfo, unionslirp_sockaddr,
slirp_family_inet6),
VMSTATE_UINT32_TEST(sin6.sin6_scope_id, unionslirp_sockaddr,
slirp_family_inet6),Quoted 3 lines
VMSTATE_END_OF_LIST()
}
};Ok, that looks good :)
Quoted 2 lines
So to me that looks pretty clean, we need to add another
slirp_family_inet6test function, but then we just add the extra fields for the IPv6 stuff.Yes, now I see.
Quoted 8 lines
Quoted 1 line
Can you suggest an IPv6 command line for testing that ?
Well, it doesn't exist yet, that's the problem. And applying your patch would have made it to exist even harder, so that's why I was afraid.
I would say that your patch should contain these IPv6 lines, but as comments since they are untested, for the person who will at some point want to implement the IPv6 case here.
OK, yes I can just add them as a comment and let someone who fixes the rest of the IPv6 code turn it on.
Dave
Quoted 1 line
Samuel
--
Dr. David Alan Gilbert / [email protected] / Manchester, UK
PATCH v2 5/5 slirp: VMStatify remaining except for loop
In reply to Dr. David Alan Gilbert (git)From: "Dr. David Alan Gilbert" <[email protected]>
This converts the remaining components, except for the top level loop, to VMState.
--- slirp/slirp.c | 48 +++++++++++++++++++----------------------------- 1 file changed, 19 insertions(+), 29 deletions(-)
slirp/slirp.c +19 -29
@@ -1319,15 +1319,25 @@ static const VMStateDescription vmstate_slirp_socket = { } }; -static void slirp_bootp_save (QEMUFile *f,Slirp *slirp) -{ -int i; +static const VMStateDescription vmstate_slirp_bootp_client = { + .name ="slirp_bootpclient" , + .fields = (VMStateField []) { +VMSTATE_UINT16 (allocated, BOOTPClient), +VMSTATE_BUFFER (macaddr, BOOTPClient), +VMSTATE_END_OF_LIST () + } +}; -for (i =0 ; i <NB_BOOTP_CLIENTS ; i++) { -qemu_put_be16 (f, slirp->bootp_clients[i].allocated); -qemu_put_buffer (f, slirp->bootp_clients[i].macaddr,6 ); +static const VMStateDescription vmstate_slirp = { + .name ="slirp" , + .version_id =4 , + .fields = (VMStateField []) { +VMSTATE_UINT16_V (ip_id, Slirp,2 ), +VMSTATE_STRUCT_ARRAY (bootp_clients, Slirp,NB_BOOTP_CLIENTS ,3 , + vmstate_slirp_bootp_client, BOOTPClient), +VMSTATE_END_OF_LIST () } -} +};static void slirp_state_save (QEMUFile *f,void *opaque) {
@@ -1347,22 +1357,10 @@ static void slirp_state_save(QEMUFile *f, void *opaque) }qemu_put_byte (f,0 ); -qemu_put_be16 (f, slirp->ip_id); - -slirp_bootp_save (f, slirp); +vmstate_save_state (f, &vmstate_slirp, slirp,NULL ); } -static void slirp_bootp_load (QEMUFile *f,Slirp *slirp) -{ -int i; - -for (i =0 ; i <NB_BOOTP_CLIENTS ; i++) { - slirp->bootp_clients[i].allocated =qemu_get_be16 (f); -qemu_get_buffer (f, slirp->bootp_clients[i].macaddr,6 ); - } -} -static int slirp_state_load (QEMUFile *f,void *opaque,int version_id) {Slirp *slirp = opaque;
@@ -1397,13 +1395,5 @@ static int slirp_state_load(QEMUFile *f, void *opaque, int version_id) so->extra = (void *)ex_ptr->ex_exec; } -if (version_id >=2 ) { - slirp->ip_id =qemu_get_be16 (f); - } - -if (version_id >=3 ) { -slirp_bootp_load (f, slirp); - } - -return 0 ; +return vmstate_load_state (f, &vmstate_slirp, slirp, version_id); }
Signature · 1 line
2.9.3
Your series failed automatic build test. Please find the testing commands and their output below. If you have docker installed, you can probably reproduce it locally.
Hi,
Your series failed automatic build test. Please find the testing commands and their output below. If you have docker installed, you can probably reproduce it locally.
Subject: [Qemu-devel] [PATCH v2 0/5] SLIRP VMStatification [ for 2.9 ]
Type: series
Message-id: [email protected]
=== TEST SCRIPT BEGIN ===
#!/bin/bash
set -e
git submodule update --init dtc
# Let docker tests dump environment info
export SHOW_ENV=1
export J=16
make docker-test-quick@centos6
make docker-test-mingw@fedora
make docker-test-build@min-glib
=== TEST SCRIPT END ===
Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384 Switched to a new branch 'test'
061e104 slirp: VMStatify remaining except for loop 135c6f1 slirp: VMStatify socket level 6ac402d slirp: Common lhost/fhost union c896e4c slirp: VMStatify sbuf
1be2227 slirp: VMState conversion; tcpcb
=== OUTPUT BEGIN ===
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc' Cloning into 'dtc'...
Submodule path 'dtc': checked out '65cc4d2748a2c2e6f27f1cf39e07a5dbabd80ebf'
BUILD centos6
make[1]: Entering directory `/var/tmp/patchew-tester-tmp-11md39u7/src'
ARCHIVE qemu.tgz
ARCHIVE dtc.tgz
COPY RUNNER
RUN test-quick in qemu:centos6
Packages installed:
SDL-devel-1.2.14-7.el6_7.1.x86_64
ccache-3.1.6-2.el6.x86_64
epel-release-6-8.noarch
gcc-4.4.7-17.el6.x86_64
git-1.7.1-4.el6_7.1.x86_64
glib2-devel-2.28.8-5.el6.x86_64
libfdt-devel-1.4.0-1.el6.x86_64
make-3.81-23.el6.x86_64
package g++ is not installed
pixman-devel-0.32.8-1.el6.x86_64
tar-1.23-15.el6_8.x86_64
zlib-devel-1.2.3-29.el6.x86_64
Environment variables:
PACKAGES=libfdt-devel ccache tar git make gcc g++ zlib-devel glib2-devel SDL-devel pixman-devel epel-release
HOSTNAME=5925680360d7
TERM=xterm
MAKEFLAGS= -j16
HISTSIZE=1000
J=16
USER=root
CCACHE_DIR=/var/tmp/ccache
EXTRA_CONFIGURE_OPTS=
V=
SHOW_ENV=1
MAIL=/var/spool/mail/root PATH=/usr/lib/ccache:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/
LANG=en_US.UTF-8
TARGET_LIST=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
TEST_DIR=/tmp/qemu-test
LOGNAME=root
LESSOPEN=||/usr/bin/lesspipe.sh %s
FEATURES= dtc
DEBUG=
G_BROKEN_FILENAMES=1
CCACHE_HASHDIR=
_=/usr/bin/env
Configure options:
--enable-werror --target-list=x86_64-softmmu,aarch64-softmmu --prefix=/var/tmp/qemu-build/install No C++ compiler available; disabling C++ specific optional code
Install prefix /var/tmp/qemu-build/install BIOS directory /var/tmp/qemu-build/install/share/qemu binary directory /var/tmp/qemu-build/install/bin
library directory /var/tmp/qemu-build/install/lib module directory /var/tmp/qemu-build/install/lib/qemu libexec directory /var/tmp/qemu-build/install/libexec include directory /var/tmp/qemu-build/install/include config directory /var/tmp/qemu-build/install/etc
local state directory /var/tmp/qemu-build/install/var
Manual directory /var/tmp/qemu-build/install/share/man ELF interp prefix /usr/gnemul/qemu-%M
Source path /tmp/qemu-test/src C compiler cc Host C compiler cc C++ compiler Objective-C compiler cc ARFLAGS rv CFLAGS -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g QEMU_CFLAGS -I/usr/include/pixman-1 -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wendif-labels -Wmissing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-all LDFLAGS -Wl,--warn-common -Wl,-z,relro -Wl,-z,now -pie -m64 -g make make install install python python -B smbd /usr/sbin/smbd module support no host CPU x86_64 host big endian no target list x86_64-softmmu aarch64-softmmu tcg debug enabled no gprof enabled no sparse enabled no strip binaries yes profiler no static build no pixman system SDL support yes (1.2.14) GTK support no GTK GL support no VTE support no TLS priority NORMAL GNUTLS support no GNUTLS rnd no libgcrypt no libgcrypt kdf no nettle no nettle kdf no libtasn1 no curses support no virgl support no curl support no mingw32 support no Audio drivers oss Block whitelist (rw) Block whitelist (ro) VirtFS support no VNC support yes VNC SASL support no VNC JPEG support no VNC PNG support no xen support no brlapi support no bluez support no Documentation no PIE yes vde support no netmap support no Linux AIO support no ATTR/XATTR support yes Install blobs yes KVM support yes COLO support yes RDMA support no TCG interpreter no fdt support yes preadv support yes fdatasync yes madvise yes posix_madvise yes
libcap-ng support no
vhost-net support yes
vhost-scsi support yes
vhost-vsock support yes
Trace backends log spice support no rbd support no xfsctl support no smartcard support no libusb no usb net redir no OpenGL support no OpenGL dmabufs no libiscsi support no libnfs support no
build guest agent yes
QGA VSS support no
QGA w32 disk info no
QGA MSI support no
seccomp support no
coroutine backend ucontext
coroutine pool yes
debug stack usage no
GlusterFS support no
Archipelago support no
gcov gcov gcov enabled no TPM support yes libssh2 support no TPM passthrough yes QOM debugging yes lzo support no snappy support no bzip2 support no
NUMA host support no
tcmalloc support no
jemalloc support no
avx2 optimization no
replication support yes
GEN x86_64-softmmu/config-devices.mak.tmp GEN aarch64-softmmu/config-devices.mak.tmp GEN config-host.h GEN qemu-options.def GEN qmp-commands.h GEN qapi-types.h GEN qapi-visit.h GEN qapi-event.h GEN qmp-introspect.h GEN x86_64-softmmu/config-devices.mak GEN aarch64-softmmu/config-devices.mak GEN module_block.h GEN tests/test-qapi-types.h GEN tests/test-qapi-visit.h GEN tests/test-qmp-commands.h GEN tests/test-qapi-event.h GEN tests/test-qmp-introspect.h GEN config-all-devices.mak GEN trace/generated-tracers.h GEN trace/generated-tcg-tracers.h GEN trace/generated-helpers-wrappers.h GEN trace/generated-helpers.h CC tests/qemu-iotests/socket_scm_helper.o GEN qga/qapi-generated/qga-qapi-visit.h GEN qga/qapi-generated/qga-qapi-types.h GEN qga/qapi-generated/qga-qmp-commands.h GEN qga/qapi-generated/qga-qapi-types.c GEN qga/qapi-generated/qga-qapi-visit.c GEN qga/qapi-generated/qga-qmp-marshal.c GEN qmp-introspect.c GEN qapi-types.c GEN qapi-visit.c GEN qapi-event.c CC qapi/qapi-visit-core.o CC qapi/qapi-dealloc-visitor.o CC qapi/qobject-input-visitor.o CC qapi/qobject-output-visitor.o CC qapi/qmp-registry.o CC qapi/qmp-dispatch.o CC qapi/string-input-visitor.o CC qapi/string-output-visitor.o CC qapi/opts-visitor.o CC qapi/qapi-clone-visitor.o CC qapi/qmp-event.o CC qapi/qapi-util.o CC qobject/qnull.o CC qobject/qint.o CC qobject/qstring.o CC qobject/qdict.o CC qobject/qlist.o CC qobject/qfloat.o CC qobject/qbool.o CC qobject/qjson.o CC qobject/qobject.o CC qobject/json-lexer.o CC qobject/json-streamer.o CC qobject/json-parser.o GEN trace/generated-tracers.c CC trace/control.o CC trace/qmp.o CC util/osdep.o CC util/cutils.o CC util/unicode.o CC util/qemu-timer-common.o CC util/bufferiszero.o CC util/compatfd.o CC util/event_notifier-posix.o CC util/mmap-alloc.o CC util/oslib-posix.o CC util/qemu-openpty.o CC util/qemu-thread-posix.o CC util/memfd.o CC util/envlist.o CC util/path.o CC util/module.o CC util/bitmap.o CC util/bitops.o CC util/hbitmap.o CC util/fifo8.o CC util/acl.o CC util/error.o CC util/qemu-error.o CC util/id.o CC util/iov.o CC util/qemu-config.o CC util/qemu-sockets.o CC util/uri.o CC util/notify.o CC util/qemu-option.o CC util/qemu-progress.o CC util/hexdump.o CC util/crc32c.o CC util/uuid.o CC util/throttle.o CC util/getauxval.o CC util/readline.o CC util/rcu.o CC util/qemu-coroutine.o CC util/qemu-coroutine-lock.o CC util/qemu-coroutine-io.o CC util/qemu-coroutine-sleep.o CC util/coroutine-ucontext.o CC util/buffer.o CC util/timed-average.o CC util/base64.o CC util/log.o CC util/qdist.o CC util/qht.o CC util/range.o CC crypto/pbkdf-stub.o CC stubs/arch-query-cpu-def.o CC stubs/arch-query-cpu-model-expansion.o CC stubs/arch-query-cpu-model-comparison.o CC stubs/arch-query-cpu-model-baseline.o CC stubs/bdrv-next-monitor-owned.o CC stubs/blk-commit-all.o CC stubs/blockdev-close-all-bdrv-states.o CC stubs/clock-warp.o CC stubs/cpu-get-clock.o CC stubs/cpu-get-icount.o CC stubs/dump.o CC stubs/error-printf.o CC stubs/fdset-add-fd.o CC stubs/fdset-find-fd.o CC stubs/fdset-get-fd.o CC stubs/fdset-remove-fd.o CC stubs/gdbstub.o CC stubs/get-fd.o CC stubs/get-next-serial.o CC stubs/get-vm-name.o CC stubs/iothread.o CC stubs/iothread-lock.o CC stubs/is-daemonized.o CC stubs/machine-init-done.o CC stubs/migr-blocker.o CC stubs/mon-is-qmp.o CC stubs/monitor-init.o CC stubs/notify-event.o CC stubs/qtest.o CC stubs/replay.o CC stubs/replay-user.o CC stubs/reset.o CC stubs/runstate-check.o CC stubs/set-fd-handler.o CC stubs/slirp.o CC stubs/sysbus.o CC stubs/trace-control.o CC stubs/vm-stop.o CC stubs/uuid.o CC stubs/vmstate.o CC stubs/cpus.o CC stubs/kvm.o CC stubs/qmp_pc_dimm_device_list.o CC stubs/target-monitor-defs.o CC stubs/target-get-monitor-def.o CC stubs/vhost.o CC stubs/iohandler.o CC stubs/smbios_type_38.o CC stubs/ipmi.o CC contrib/ivshmem-client/ivshmem-client.o CC stubs/pc_madt_cpu_entry.o CC stubs/migration-colo.o CC contrib/ivshmem-client/main.o CC contrib/ivshmem-server/main.o CC contrib/ivshmem-server/ivshmem-server.o CC qemu-nbd.o CC async.o CC thread-pool.o CC block.o CC blockjob.o CC main-loop.o CC iohandler.o CC qemu-timer.o CC aio-posix.o CC qemu-io-cmds.o CC replication.o CC block/raw_bsd.o CC block/vdi.o CC block/qcow.o CC block/vmdk.o CC block/cloop.o CC block/vpc.o CC block/bochs.o CC block/vvfat.o CC block/dmg.o CC block/qcow2.o CC block/qcow2-refcount.o CC block/qcow2-cluster.o CC block/qcow2-snapshot.o CC block/qcow2-cache.o CC block/qed-gencb.o CC block/qed.o CC block/qed-l2-cache.o CC block/qed-table.o CC block/qed-cluster.o CC block/vhdx.o CC block/qed-check.o CC block/vhdx-endian.o CC block/vhdx-log.o CC block/quorum.o CC block/parallels.o CC block/blkdebug.o CC block/blkverify.o CC block/blkreplay.o CC block/qapi.o CC block/block-backend.o CC block/snapshot.o CC block/raw-posix.o CC block/null.o CC block/mirror.o CC block/commit.o CC block/io.o CC block/throttle-groups.o CC block/nbd.o CC block/nbd-client.o CC block/sheepdog.o CC block/accounting.o CC block/dirty-bitmap.o CC block/backup.o CC block/write-threshold.o CC block/replication.o CC block/crypto.o CC nbd/server.o CC nbd/client.o CC nbd/common.o CC crypto/init.o CC crypto/hash.o CC crypto/hash-glib.o CC crypto/aes.o CC crypto/desrfb.o CC crypto/cipher.o CC crypto/tlscreds.o CC crypto/tlscredsanon.o CC crypto/tlscredsx509.o CC crypto/secret.o CC crypto/tlssession.o CC crypto/random-platform.o CC crypto/pbkdf.o CC crypto/ivgen.o CC crypto/ivgen-essiv.o CC crypto/ivgen-plain.o CC crypto/afsplit.o CC crypto/ivgen-plain64.o CC crypto/block.o CC crypto/xts.o CC crypto/block-qcow.o CC crypto/block-luks.o CC io/channel-buffer.o CC io/channel.o CC io/channel-command.o CC io/channel-tls.o CC io/channel-file.o CC io/channel-util.o CC io/channel-watch.o CC io/channel-socket.o CC io/channel-websock.o CC io/task.o CC qom/object.o CC qom/container.o CC qom/qom-qobject.o CC qom/object_interfaces.o GEN qemu-img-cmds.h CC qemu-bridge-helper.o CC qemu-io.o CC blockdev.o CC blockdev-nbd.o CC iothread.o CC qdev-monitor.o CC device-hotplug.o CC os-posix.o CC qemu-char.o CC page_cache.o CC accel.o CC bt-host.o CC bt-vhci.o CC dma-helpers.o CC tpm.o CC vl.o CC device_tree.o GEN qmp-marshal.c CC qmp.o CC hmp.o CC audio/audio.o CC cpus-common.o CC audio/mixeng.o CC audio/noaudio.o CC audio/wavaudio.o CC audio/sdlaudio.o CC audio/ossaudio.o CC audio/wavcapture.o CC backends/rng.o CC backends/rng-random.o CC backends/rng-egd.o CC backends/testdev.o CC backends/msmouse.o CC backends/tpm.o CC backends/hostmem.o CC backends/hostmem-ram.o CC backends/hostmem-file.o CC backends/cryptodev.o CC backends/cryptodev-builtin.o CC block/stream.o CC disas/arm.o CC disas/i386.o CC fsdev/qemu-fsdev-dummy.o CC fsdev/qemu-fsdev-opts.o CC hw/acpi/core.o CC hw/acpi/piix4.o CC hw/acpi/ich9.o CC hw/acpi/pcihp.o CC hw/acpi/tco.o CC hw/acpi/cpu_hotplug.o CC hw/acpi/memory_hotplug.o CC hw/acpi/memory_hotplug_acpi_table.o CC hw/acpi/cpu.o CC hw/acpi/nvdimm.o CC hw/acpi/acpi_interface.o CC hw/acpi/bios-linker-loader.o CC hw/acpi/ipmi.o CC hw/acpi/aml-build.o CC hw/audio/sb16.o CC hw/audio/es1370.o CC hw/audio/ac97.o CC hw/audio/fmopl.o CC hw/audio/adlib.o CC hw/audio/gus.o CC hw/audio/gusemu_hal.o CC hw/audio/gusemu_mixer.o CC hw/audio/cs4231a.o CC hw/audio/intel-hda.o CC hw/audio/pcspk.o CC hw/audio/hda-codec.o CC hw/audio/wm8750.o CC hw/audio/pl041.o CC hw/audio/lm4549.o CC hw/audio/marvell_88w8618.o CC hw/block/block.o CC hw/block/cdrom.o CC hw/block/hd-geometry.o CC hw/block/fdc.o CC hw/block/m25p80.o CC hw/block/nand.o CC hw/block/pflash_cfi01.o CC hw/block/pflash_cfi02.o CC hw/block/onenand.o CC hw/block/ecc.o CC hw/block/nvme.o CC hw/bt/core.o CC hw/bt/l2cap.o CC hw/bt/sdp.o CC hw/bt/hci.o CC hw/bt/hid.o CC hw/bt/hci-csr.o CC hw/char/ipoctal232.o CC hw/char/parallel.o CC hw/char/pl011.o CC hw/char/serial.o CC hw/char/serial-isa.o CC hw/char/serial-pci.o CC hw/char/virtio-console.o CC hw/char/cadence_uart.o CC hw/char/imx_serial.o CC hw/char/debugcon.o CC hw/core/qdev.o CC hw/core/qdev-properties.o CC hw/core/bus.o CC hw/core/fw-path-provider.o CC hw/core/irq.o CC hw/core/hotplug.o CC hw/core/ptimer.o CC hw/core/sysbus.o CC hw/core/machine.o CC hw/core/null-machine.o CC hw/core/loader.o CC hw/core/qdev-properties-system.o CC hw/core/register.o CC hw/core/or-irq.o CC hw/core/platform-bus.o CC hw/display/ads7846.o CC hw/display/cirrus_vga.o CC hw/display/pl110.o CC hw/display/ssd0303.o CC hw/display/ssd0323.o CC hw/display/vga-pci.o CC hw/display/vga-isa.o CC hw/display/vmware_vga.o CC hw/display/blizzard.o CC hw/display/exynos4210_fimd.o CC hw/display/framebuffer.o CC hw/display/tc6393xb.o CC hw/dma/pl080.o CC hw/dma/i8257.o CC hw/dma/pl330.o CC hw/dma/xlnx-zynq-devcfg.o CC hw/gpio/max7310.o CC hw/gpio/pl061.o CC hw/gpio/zaurus.o CC hw/gpio/gpio_key.o CC hw/i2c/core.o CC hw/i2c/smbus.o CC hw/i2c/smbus_eeprom.o CC hw/i2c/i2c-ddc.o CC hw/i2c/versatile_i2c.o CC hw/i2c/smbus_ich9.o CC hw/i2c/pm_smbus.o CC hw/i2c/bitbang_i2c.o CC hw/i2c/exynos4210_i2c.o CC hw/i2c/aspeed_i2c.o CC hw/i2c/imx_i2c.o CC hw/ide/core.o CC hw/ide/atapi.o CC hw/ide/qdev.o CC hw/ide/pci.o CC hw/ide/isa.o CC hw/ide/piix.o CC hw/ide/microdrive.o CC hw/ide/ahci.o CC hw/ide/ich.o CC hw/input/hid.o CC hw/input/lm832x.o CC hw/input/pckbd.o CC hw/input/pl050.o CC hw/input/ps2.o CC hw/input/stellaris_input.o CC hw/input/tsc2005.o CC hw/input/virtio-input.o CC hw/input/vmmouse.o CC hw/input/virtio-input-hid.o CC hw/input/virtio-input-host.o CC hw/intc/i8259_common.o CC hw/intc/i8259.o CC hw/intc/pl190.o CC hw/intc/imx_avic.o CC hw/intc/realview_gic.o CC hw/intc/ioapic_common.o CC hw/intc/arm_gic_common.o CC hw/intc/arm_gic.o CC hw/intc/arm_gicv2m.o CC hw/intc/arm_gicv3_common.o CC hw/intc/arm_gicv3.o CC hw/intc/arm_gicv3_dist.o CC hw/intc/intc.o CC hw/intc/arm_gicv3_redist.o CC hw/intc/arm_gicv3_its_common.o CC hw/ipack/ipack.o CC hw/ipack/tpci200.o CC hw/ipmi/ipmi.o CC hw/ipmi/ipmi_bmc_sim.o CC hw/ipmi/ipmi_bmc_extern.o CC hw/ipmi/isa_ipmi_kcs.o CC hw/ipmi/isa_ipmi_bt.o CC hw/isa/isa-bus.o CC hw/isa/apm.o CC hw/mem/pc-dimm.o CC hw/mem/nvdimm.o CC hw/misc/applesmc.o CC hw/misc/max111x.o CC hw/misc/tmp105.o CC hw/misc/debugexit.o CC hw/misc/sga.o CC hw/misc/pc-testdev.o CC hw/misc/pci-testdev.o CC hw/misc/arm_l2x0.o CC hw/misc/a9scu.o CC hw/misc/arm_integrator_debug.o CC hw/misc/arm11scu.o CC hw/net/ne2000.o CC hw/net/eepro100.o CC hw/net/pcnet-pci.o CC hw/net/pcnet.o CC hw/net/e1000.o CC hw/net/e1000x_common.o CC hw/net/net_tx_pkt.o CC hw/net/net_rx_pkt.o CC hw/net/e1000e.o CC hw/net/e1000e_core.o CC hw/net/rtl8139.o CC hw/net/vmxnet3.o CC hw/net/smc91c111.o CC hw/net/lan9118.o CC hw/net/ne2000-isa.o CC hw/net/xgmac.o CC hw/net/allwinner_emac.o CC hw/net/imx_fec.o CC hw/net/cadence_gem.o CC hw/net/stellaris_enet.o CC hw/net/rocker/rocker.o CC hw/net/rocker/rocker_fp.o CC hw/net/rocker/rocker_desc.o CC hw/net/rocker/rocker_world.o CC hw/net/rocker/rocker_of_dpa.o CC hw/nvram/eeprom93xx.o CC hw/nvram/fw_cfg.o CC hw/nvram/chrp_nvram.o CC hw/pci-bridge/pci_bridge_dev.o CC hw/pci-bridge/pci_expander_bridge.o /tmp/qemu-test/src/hw/nvram/fw_cfg.c: In function ‘fw_cfg_dma_transfer’: /tmp/qemu-test/src/hw/nvram/fw_cfg.c:329: warning: ‘read’ may be used uninitialized in this function CC hw/pci-bridge/xio3130_upstream.o CC hw/pci-bridge/xio3130_downstream.o CC hw/pci-bridge/ioh3420.o CC hw/pci-host/piix.o CC hw/pci-bridge/i82801b11.o CC hw/pci-host/pam.o CC hw/pci-host/versatile.o CC hw/pci-host/q35.o CC hw/pci-host/gpex.o CC hw/pci/pci.o CC hw/pci/pci_bridge.o CC hw/pci/msix.o CC hw/pci/msi.o CC hw/pci/shpc.o CC hw/pci/slotid_cap.o CC hw/pci/pci_host.o CC hw/pci/pcie_host.o CC hw/pci/pcie.o CC hw/pci/pcie_aer.o CC hw/pci/pci-stub.o CC hw/pci/pcie_port.o CC hw/pcmcia/pcmcia.o CC hw/scsi/scsi-disk.o CC hw/scsi/scsi-generic.o CC hw/scsi/scsi-bus.o CC hw/scsi/lsi53c895a.o CC hw/scsi/mptsas.o CC hw/scsi/mptconfig.o CC hw/scsi/mptendian.o CC hw/scsi/vmw_pvscsi.o CC hw/scsi/megasas.o CC hw/scsi/esp.o CC hw/scsi/esp-pci.o CC hw/sd/pl181.o CC hw/sd/ssi-sd.o CC hw/sd/sd.o CC hw/sd/sdhci.o CC hw/sd/core.o CC hw/smbios/smbios_type_38.o CC hw/smbios/smbios.o CC hw/ssi/ssi.o CC hw/ssi/pl022.o CC hw/ssi/xilinx_spips.o CC hw/ssi/aspeed_smc.o CC hw/ssi/stm32f2xx_spi.o CC hw/timer/arm_timer.o CC hw/timer/arm_mptimer.o CC hw/timer/cadence_ttc.o CC hw/timer/a9gtimer.o CC hw/timer/hpet.o CC hw/timer/ds1338.o CC hw/timer/i8254_common.o CC hw/timer/i8254.o CC hw/timer/imx_epit.o CC hw/timer/pl031.o CC hw/timer/imx_gpt.o CC hw/timer/twl92230.o CC hw/timer/stm32f2xx_timer.o CC hw/timer/aspeed_timer.o CC hw/tpm/tpm_tis.o CC hw/tpm/tpm_passthrough.o CC hw/tpm/tpm_util.o CC hw/usb/core.o CC hw/usb/combined-packet.o CC hw/usb/libhw.o CC hw/usb/bus.o CC hw/usb/desc.o CC hw/usb/hcd-uhci.o CC hw/usb/desc-msos.o CC hw/usb/hcd-ohci.o CC hw/usb/hcd-ehci.o CC hw/usb/hcd-ehci-pci.o CC hw/usb/hcd-ehci-sysbus.o CC hw/usb/hcd-xhci.o CC hw/usb/hcd-musb.o CC hw/usb/dev-hid.o CC hw/usb/dev-hub.o CC hw/usb/dev-wacom.o CC hw/usb/dev-storage.o CC hw/usb/dev-uas.o CC hw/usb/dev-audio.o CC hw/usb/dev-serial.o CC hw/usb/dev-network.o CC hw/usb/dev-bluetooth.o CC hw/usb/dev-smartcard-reader.o CC hw/usb/dev-mtp.o CC hw/usb/host-stub.o CC hw/virtio/virtio-pci.o CC hw/virtio/virtio-rng.o CC hw/virtio/virtio-bus.o CC hw/watchdog/watchdog.o CC hw/virtio/virtio-mmio.o CC hw/watchdog/wdt_ib700.o CC hw/watchdog/wdt_i6300esb.o CC migration/migration.o CC migration/socket.o CC migration/exec.o CC migration/fd.o CC migration/tls.o CC migration/colo-comm.o CC migration/colo.o CC migration/colo-failover.o CC migration/vmstate.o CC migration/qemu-file.o CC migration/xbzrle.o CC migration/qemu-file-channel.o CC migration/postcopy-ram.o CC migration/block.o CC migration/qjson.o CC net/net.o CC net/queue.o CC net/checksum.o CC net/util.o CC net/hub.o CC net/socket.o CC net/dump.o CC net/l2tpv3.o CC net/eth.o CC net/tap.o CC net/vhost-user.o CC net/tap-linux.o CC net/slirp.o CC net/filter.o CC net/filter-buffer.o CC net/filter-mirror.o CC net/colo-compare.o CC net/colo.o CC net/filter-rewriter.o CC qom/cpu.o CC replay/replay.o CC replay/replay-internal.o CC replay/replay-events.o CC replay/replay-time.o CC replay/replay-char.o CC replay/replay-snapshot.o CC replay/replay-input.o CC slirp/cksum.o CC slirp/if.o /tmp/qemu-test/src/replay/replay-internal.c: In function ‘replay_put_array’: /tmp/qemu-test/src/replay/replay-internal.c:65: warning: ignoring return value of ‘fwrite’, declared with attribute warn_unused_result CC slirp/ip_icmp.o CC slirp/ip6_icmp.o CC slirp/ip6_input.o CC slirp/ip6_output.o CC slirp/ip_input.o CC slirp/ip_output.o CC slirp/dnssearch.o CC slirp/slirp.o CC slirp/dhcpv6.o CC slirp/mbuf.o CC slirp/misc.o CC slirp/sbuf.o CC slirp/socket.o
/tmp/qemu-test/src/slirp/slirp.c:1247: warning: implicit declaration of function ‘VMSTATE_WITH_TMP’ /tmp/qemu-test/src/slirp/slirp.c:1247: error: expected expression before ‘struct’
make: *** [slirp/slirp.o] Error 1
make: *** Waiting for unfinished jobs....
make[1]: *** [docker-run] Error 2
make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-11md39u7/src'
make: *** [docker-run-test-quick@centos6] Error 2
=== OUTPUT END ===
Test command exited with code: 2
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to [email protected]
Your series seems to have some coding style problems. See output below for more information:
Hi,
Your series seems to have some coding style problems. See output below for more information:
Subject: [Qemu-devel] [PATCH v2 0/5] SLIRP VMStatification [ for 2.9 ]
Type: series
Message-id: [email protected]
=== TEST SCRIPT BEGIN ===
#!/bin/bash
BASE=base
n=1
total=$(git log --oneline $BASE.. | wc -l)
failed=0
# Useful git options
git config --local diff.renamelimit 0
git config --local diff.renames True
commits="$(git log --format=%H --reverse $BASE..)" for c in $commits; do
echo "Checking PATCH $n/$total: $(git log -n 1 --format=%s $c)..."
if ! git show $c --format=email | ./scripts/checkpatch.pl --mailback -; then
failed=1
echo
fi
n=$((n+1))done
exit $failed
=== TEST SCRIPT END ===
Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384 Switched to a new branch 'test'
061e104 slirp: VMStatify remaining except for loop 135c6f1 slirp: VMStatify socket level 6ac402d slirp: Common lhost/fhost union c896e4c slirp: VMStatify sbuf
1be2227 slirp: VMState conversion; tcpcb
=== OUTPUT BEGIN ===
Checking PATCH 1/5: slirp: VMState conversion; tcpcb...
ERROR: code indent should never use tabs
#210: FILE: slirp/tcp_var.h:51:
+^Iuint8_t t_force;^I^I/* 1 if forcing out a byte */$
ERROR: code indent should never use tabs
#220: FILE: slirp/tcp_var.h:112:
+^Iuint8_t^It_oobflags;^I^I/* have some */$
ERROR: code indent should never use tabs
#221: FILE: slirp/tcp_var.h:113:
+^Iuint8_t^It_iobc;^I^I^I/* input character */$
total: 3 errors, 0 warnings, 195 lines checked
Your patch has style problems, please review. If any of these errors are false positives report them to the maintainer, see CHECKPATCH in MAINTAINERS.
Checking PATCH 2/5: slirp: VMStatify sbuf...
ERROR: code indent should never use tabs #25: FILE: slirp/sbuf.h:15:
+^Iuint32_t sb_cc;^I^I/* actual chars in buffer */$
ERROR: code indent should never use tabs
#26: FILE: slirp/sbuf.h:16:
+^Iuint32_t sb_datalen;^I/* Length of data */$
total: 2 errors, 0 warnings, 155 lines checked
Your patch has style problems, please review. If any of these errors are false positives report them to the maintainer, see CHECKPATCH in MAINTAINERS.
Checking PATCH 3/5: slirp: Common lhost/fhost union... Checking PATCH 4/5: slirp: VMStatify socket level... Checking PATCH 5/5: slirp: VMStatify remaining except for loop... === OUTPUT END ===
Test command exited with code: 1
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to [email protected]