Lines Matching +full:- +full:p

10  * See the COPYING file in the top-level directory.
40 static int multifd_zstd_send_setup(MultiFDSendParams *p, Error **errp) in multifd_zstd_send_setup() argument
45 z->zcs = ZSTD_createCStream(); in multifd_zstd_send_setup()
46 if (!z->zcs) { in multifd_zstd_send_setup()
48 error_setg(errp, "multifd %u: zstd createCStream failed", p->id); in multifd_zstd_send_setup()
49 return -1; in multifd_zstd_send_setup()
52 res = ZSTD_initCStream(z->zcs, migrate_multifd_zstd_level()); in multifd_zstd_send_setup()
54 ZSTD_freeCStream(z->zcs); in multifd_zstd_send_setup()
57 p->id, ZSTD_getErrorName(res)); in multifd_zstd_send_setup()
58 return -1; in multifd_zstd_send_setup()
61 z->zbuff_len = ZSTD_compressBound(MULTIFD_PACKET_SIZE); in multifd_zstd_send_setup()
62 z->zbuff = g_try_malloc(z->zbuff_len); in multifd_zstd_send_setup()
63 if (!z->zbuff) { in multifd_zstd_send_setup()
64 ZSTD_freeCStream(z->zcs); in multifd_zstd_send_setup()
66 error_setg(errp, "multifd %u: out of memory for zbuff", p->id); in multifd_zstd_send_setup()
67 return -1; in multifd_zstd_send_setup()
69 p->compress_data = z; in multifd_zstd_send_setup()
72 p->iov = g_new0(struct iovec, 2); in multifd_zstd_send_setup()
76 static void multifd_zstd_send_cleanup(MultiFDSendParams *p, Error **errp) in multifd_zstd_send_cleanup() argument
78 struct zstd_data *z = p->compress_data; in multifd_zstd_send_cleanup()
80 ZSTD_freeCStream(z->zcs); in multifd_zstd_send_cleanup()
81 z->zcs = NULL; in multifd_zstd_send_cleanup()
82 g_free(z->zbuff); in multifd_zstd_send_cleanup()
83 z->zbuff = NULL; in multifd_zstd_send_cleanup()
84 g_free(p->compress_data); in multifd_zstd_send_cleanup()
85 p->compress_data = NULL; in multifd_zstd_send_cleanup()
87 g_free(p->iov); in multifd_zstd_send_cleanup()
88 p->iov = NULL; in multifd_zstd_send_cleanup()
91 static int multifd_zstd_send_prepare(MultiFDSendParams *p, Error **errp) in multifd_zstd_send_prepare() argument
93 MultiFDPages_t *pages = &p->data->u.ram; in multifd_zstd_send_prepare()
94 struct zstd_data *z = p->compress_data; in multifd_zstd_send_prepare()
98 if (!multifd_send_prepare_common(p)) { in multifd_zstd_send_prepare()
102 z->out.dst = z->zbuff; in multifd_zstd_send_prepare()
103 z->out.size = z->zbuff_len; in multifd_zstd_send_prepare()
104 z->out.pos = 0; in multifd_zstd_send_prepare()
106 for (i = 0; i < pages->normal_num; i++) { in multifd_zstd_send_prepare()
109 if (i == pages->normal_num - 1) { in multifd_zstd_send_prepare()
112 z->in.src = pages->block->host + pages->offset[i]; in multifd_zstd_send_prepare()
113 z->in.size = multifd_ram_page_size(); in multifd_zstd_send_prepare()
114 z->in.pos = 0; in multifd_zstd_send_prepare()
120 * - return is > 0 in multifd_zstd_send_prepare()
121 * - there is input available in multifd_zstd_send_prepare()
122 * - there is output space free in multifd_zstd_send_prepare()
125 ret = ZSTD_compressStream2(z->zcs, &z->out, &z->in, flush); in multifd_zstd_send_prepare()
126 } while (ret > 0 && (z->in.size > z->in.pos) in multifd_zstd_send_prepare()
127 && (z->out.size > z->out.pos)); in multifd_zstd_send_prepare()
128 if (ret > 0 && (z->in.size > z->in.pos)) { in multifd_zstd_send_prepare()
130 p->id); in multifd_zstd_send_prepare()
131 return -1; in multifd_zstd_send_prepare()
135 p->id, ZSTD_getErrorName(ret)); in multifd_zstd_send_prepare()
136 return -1; in multifd_zstd_send_prepare()
139 p->iov[p->iovs_num].iov_base = z->zbuff; in multifd_zstd_send_prepare()
140 p->iov[p->iovs_num].iov_len = z->out.pos; in multifd_zstd_send_prepare()
141 p->iovs_num++; in multifd_zstd_send_prepare()
142 p->next_packet_size = z->out.pos; in multifd_zstd_send_prepare()
145 p->flags |= MULTIFD_FLAG_ZSTD; in multifd_zstd_send_prepare()
146 multifd_send_fill_packet(p); in multifd_zstd_send_prepare()
150 static int multifd_zstd_recv_setup(MultiFDRecvParams *p, Error **errp) in multifd_zstd_recv_setup() argument
155 p->compress_data = z; in multifd_zstd_recv_setup()
156 z->zds = ZSTD_createDStream(); in multifd_zstd_recv_setup()
157 if (!z->zds) { in multifd_zstd_recv_setup()
159 error_setg(errp, "multifd %u: zstd createDStream failed", p->id); in multifd_zstd_recv_setup()
160 return -1; in multifd_zstd_recv_setup()
163 ret = ZSTD_initDStream(z->zds); in multifd_zstd_recv_setup()
165 ZSTD_freeDStream(z->zds); in multifd_zstd_recv_setup()
168 p->id, ZSTD_getErrorName(ret)); in multifd_zstd_recv_setup()
169 return -1; in multifd_zstd_recv_setup()
173 z->zbuff_len = MULTIFD_PACKET_SIZE * 2; in multifd_zstd_recv_setup()
174 z->zbuff = g_try_malloc(z->zbuff_len); in multifd_zstd_recv_setup()
175 if (!z->zbuff) { in multifd_zstd_recv_setup()
176 ZSTD_freeDStream(z->zds); in multifd_zstd_recv_setup()
178 error_setg(errp, "multifd %u: out of memory for zbuff", p->id); in multifd_zstd_recv_setup()
179 return -1; in multifd_zstd_recv_setup()
184 static void multifd_zstd_recv_cleanup(MultiFDRecvParams *p) in multifd_zstd_recv_cleanup() argument
186 struct zstd_data *z = p->compress_data; in multifd_zstd_recv_cleanup()
188 ZSTD_freeDStream(z->zds); in multifd_zstd_recv_cleanup()
189 z->zds = NULL; in multifd_zstd_recv_cleanup()
190 g_free(z->zbuff); in multifd_zstd_recv_cleanup()
191 z->zbuff = NULL; in multifd_zstd_recv_cleanup()
192 g_free(p->compress_data); in multifd_zstd_recv_cleanup()
193 p->compress_data = NULL; in multifd_zstd_recv_cleanup()
196 static int multifd_zstd_recv(MultiFDRecvParams *p, Error **errp) in multifd_zstd_recv() argument
198 uint32_t in_size = p->next_packet_size; in multifd_zstd_recv()
201 uint32_t expected_size = p->normal_num * page_size; in multifd_zstd_recv()
202 uint32_t flags = p->flags & MULTIFD_FLAG_COMPRESSION_MASK; in multifd_zstd_recv()
203 struct zstd_data *z = p->compress_data; in multifd_zstd_recv()
209 p->id, flags, MULTIFD_FLAG_ZSTD); in multifd_zstd_recv()
210 return -1; in multifd_zstd_recv()
213 multifd_recv_zero_page_process(p); in multifd_zstd_recv()
215 if (!p->normal_num) { in multifd_zstd_recv()
220 ret = qio_channel_read_all(p->c, (void *)z->zbuff, in_size, errp); in multifd_zstd_recv()
226 z->in.src = z->zbuff; in multifd_zstd_recv()
227 z->in.size = in_size; in multifd_zstd_recv()
228 z->in.pos = 0; in multifd_zstd_recv()
230 for (i = 0; i < p->normal_num; i++) { in multifd_zstd_recv()
231 ramblock_recv_bitmap_set_offset(p->block, p->normal[i]); in multifd_zstd_recv()
232 z->out.dst = p->host + p->normal[i]; in multifd_zstd_recv()
233 z->out.size = page_size; in multifd_zstd_recv()
234 z->out.pos = 0; in multifd_zstd_recv()
240 * - return is > 0 in multifd_zstd_recv()
241 * - there is input available in multifd_zstd_recv()
242 * - we haven't put out a full page in multifd_zstd_recv()
245 ret = ZSTD_decompressStream(z->zds, &z->out, &z->in); in multifd_zstd_recv()
246 } while (ret > 0 && (z->in.size > z->in.pos) in multifd_zstd_recv()
247 && (z->out.pos < page_size)); in multifd_zstd_recv()
248 if (ret > 0 && (z->out.pos < page_size)) { in multifd_zstd_recv()
250 p->id); in multifd_zstd_recv()
251 return -1; in multifd_zstd_recv()
255 p->id, ZSTD_getErrorName(ret)); in multifd_zstd_recv()
258 out_size += z->out.pos; in multifd_zstd_recv()
262 p->id, out_size, expected_size); in multifd_zstd_recv()
263 return -1; in multifd_zstd_recv()