Lines Matching +full:- +full:p
10 * See the COPYING file in the top-level directory.
37 static int multifd_zlib_send_setup(MultiFDSendParams *p, Error **errp) in multifd_zlib_send_setup() argument
40 z_stream *zs = &z->zs; in multifd_zlib_send_setup()
43 zs->zalloc = Z_NULL; in multifd_zlib_send_setup()
44 zs->zfree = Z_NULL; in multifd_zlib_send_setup()
45 zs->opaque = Z_NULL; in multifd_zlib_send_setup()
51 z->zbuff_len = compressBound(MULTIFD_PACKET_SIZE); in multifd_zlib_send_setup()
52 z->zbuff = g_try_malloc(z->zbuff_len); in multifd_zlib_send_setup()
53 if (!z->zbuff) { in multifd_zlib_send_setup()
57 z->buf = g_try_malloc(qemu_target_page_size()); in multifd_zlib_send_setup()
58 if (!z->buf) { in multifd_zlib_send_setup()
62 p->compress_data = z; in multifd_zlib_send_setup()
65 p->iov = g_new0(struct iovec, 2); in multifd_zlib_send_setup()
70 g_free(z->zbuff); in multifd_zlib_send_setup()
75 error_setg(errp, "multifd %u: %s", p->id, err_msg); in multifd_zlib_send_setup()
76 return -1; in multifd_zlib_send_setup()
79 static void multifd_zlib_send_cleanup(MultiFDSendParams *p, Error **errp) in multifd_zlib_send_cleanup() argument
81 struct zlib_data *z = p->compress_data; in multifd_zlib_send_cleanup()
83 deflateEnd(&z->zs); in multifd_zlib_send_cleanup()
84 g_free(z->zbuff); in multifd_zlib_send_cleanup()
85 z->zbuff = NULL; in multifd_zlib_send_cleanup()
86 g_free(z->buf); in multifd_zlib_send_cleanup()
87 z->buf = NULL; in multifd_zlib_send_cleanup()
88 g_free(p->compress_data); in multifd_zlib_send_cleanup()
89 p->compress_data = NULL; in multifd_zlib_send_cleanup()
91 g_free(p->iov); in multifd_zlib_send_cleanup()
92 p->iov = NULL; in multifd_zlib_send_cleanup()
95 static int multifd_zlib_send_prepare(MultiFDSendParams *p, Error **errp) in multifd_zlib_send_prepare() argument
97 MultiFDPages_t *pages = &p->data->u.ram; in multifd_zlib_send_prepare()
98 struct zlib_data *z = p->compress_data; in multifd_zlib_send_prepare()
99 z_stream *zs = &z->zs; in multifd_zlib_send_prepare()
105 if (!multifd_send_prepare_common(p)) { in multifd_zlib_send_prepare()
109 for (i = 0; i < pages->normal_num; i++) { in multifd_zlib_send_prepare()
110 uint32_t available = z->zbuff_len - out_size; in multifd_zlib_send_prepare()
113 if (i == pages->normal_num - 1) { in multifd_zlib_send_prepare()
122 memcpy(z->buf, pages->block->host + pages->offset[i], page_size); in multifd_zlib_send_prepare()
123 zs->avail_in = page_size; in multifd_zlib_send_prepare()
124 zs->next_in = z->buf; in multifd_zlib_send_prepare()
126 zs->avail_out = available; in multifd_zlib_send_prepare()
127 zs->next_out = z->zbuff + out_size; in multifd_zlib_send_prepare()
133 * - return is Z_OK in multifd_zlib_send_prepare()
134 * - there are stuff to be compressed in multifd_zlib_send_prepare()
135 * - there are output space free in multifd_zlib_send_prepare()
139 } while (ret == Z_OK && zs->avail_in && zs->avail_out); in multifd_zlib_send_prepare()
140 if (ret == Z_OK && zs->avail_in) { in multifd_zlib_send_prepare()
142 p->id); in multifd_zlib_send_prepare()
143 return -1; in multifd_zlib_send_prepare()
147 p->id, ret); in multifd_zlib_send_prepare()
148 return -1; in multifd_zlib_send_prepare()
150 out_size += available - zs->avail_out; in multifd_zlib_send_prepare()
152 p->iov[p->iovs_num].iov_base = z->zbuff; in multifd_zlib_send_prepare()
153 p->iov[p->iovs_num].iov_len = out_size; in multifd_zlib_send_prepare()
154 p->iovs_num++; in multifd_zlib_send_prepare()
155 p->next_packet_size = out_size; in multifd_zlib_send_prepare()
158 p->flags |= MULTIFD_FLAG_ZLIB; in multifd_zlib_send_prepare()
159 multifd_send_fill_packet(p); in multifd_zlib_send_prepare()
163 static int multifd_zlib_recv_setup(MultiFDRecvParams *p, Error **errp) in multifd_zlib_recv_setup() argument
166 z_stream *zs = &z->zs; in multifd_zlib_recv_setup()
168 p->compress_data = z; in multifd_zlib_recv_setup()
169 zs->zalloc = Z_NULL; in multifd_zlib_recv_setup()
170 zs->zfree = Z_NULL; in multifd_zlib_recv_setup()
171 zs->opaque = Z_NULL; in multifd_zlib_recv_setup()
172 zs->avail_in = 0; in multifd_zlib_recv_setup()
173 zs->next_in = Z_NULL; in multifd_zlib_recv_setup()
175 error_setg(errp, "multifd %u: inflate init failed", p->id); in multifd_zlib_recv_setup()
176 return -1; in multifd_zlib_recv_setup()
179 z->zbuff_len = MULTIFD_PACKET_SIZE * 2; in multifd_zlib_recv_setup()
180 z->zbuff = g_try_malloc(z->zbuff_len); in multifd_zlib_recv_setup()
181 if (!z->zbuff) { in multifd_zlib_recv_setup()
183 error_setg(errp, "multifd %u: out of memory for zbuff", p->id); in multifd_zlib_recv_setup()
184 return -1; in multifd_zlib_recv_setup()
189 static void multifd_zlib_recv_cleanup(MultiFDRecvParams *p) in multifd_zlib_recv_cleanup() argument
191 struct zlib_data *z = p->compress_data; in multifd_zlib_recv_cleanup()
193 inflateEnd(&z->zs); in multifd_zlib_recv_cleanup()
194 g_free(z->zbuff); in multifd_zlib_recv_cleanup()
195 z->zbuff = NULL; in multifd_zlib_recv_cleanup()
196 g_free(p->compress_data); in multifd_zlib_recv_cleanup()
197 p->compress_data = NULL; in multifd_zlib_recv_cleanup()
200 static int multifd_zlib_recv(MultiFDRecvParams *p, Error **errp) in multifd_zlib_recv() argument
202 struct zlib_data *z = p->compress_data; in multifd_zlib_recv()
203 z_stream *zs = &z->zs; in multifd_zlib_recv()
204 uint32_t in_size = p->next_packet_size; in multifd_zlib_recv()
206 uint32_t out_size = zs->total_out; in multifd_zlib_recv()
208 uint32_t expected_size = p->normal_num * page_size; in multifd_zlib_recv()
209 uint32_t flags = p->flags & MULTIFD_FLAG_COMPRESSION_MASK; in multifd_zlib_recv()
215 p->id, flags, MULTIFD_FLAG_ZLIB); in multifd_zlib_recv()
216 return -1; in multifd_zlib_recv()
219 multifd_recv_zero_page_process(p); in multifd_zlib_recv()
221 if (!p->normal_num) { in multifd_zlib_recv()
226 ret = qio_channel_read_all(p->c, (void *)z->zbuff, in_size, errp); in multifd_zlib_recv()
232 zs->avail_in = in_size; in multifd_zlib_recv()
233 zs->next_in = z->zbuff; in multifd_zlib_recv()
235 for (i = 0; i < p->normal_num; i++) { in multifd_zlib_recv()
237 unsigned long start = zs->total_out; in multifd_zlib_recv()
239 ramblock_recv_bitmap_set_offset(p->block, p->normal[i]); in multifd_zlib_recv()
240 if (i == p->normal_num - 1) { in multifd_zlib_recv()
244 zs->avail_out = page_size; in multifd_zlib_recv()
245 zs->next_out = p->host + p->normal[i]; in multifd_zlib_recv()
251 * - return is Z_OK in multifd_zlib_recv()
252 * - there are input available in multifd_zlib_recv()
253 * - we haven't completed a full page in multifd_zlib_recv()
257 } while (ret == Z_OK && zs->avail_in in multifd_zlib_recv()
258 && (zs->total_out - start) < page_size); in multifd_zlib_recv()
259 if (ret == Z_OK && (zs->total_out - start) < page_size) { in multifd_zlib_recv()
261 p->id); in multifd_zlib_recv()
262 return -1; in multifd_zlib_recv()
266 p->id, ret); in multifd_zlib_recv()
267 return -1; in multifd_zlib_recv()
270 out_size = zs->total_out - out_size; in multifd_zlib_recv()
273 p->id, out_size, expected_size); in multifd_zlib_recv()
274 return -1; in multifd_zlib_recv()