Lines Matching +full:- +full:p
10 * See the COPYING file in the top-level directory.
20 #include "qemu/error-report.h"
36 if (ret && ret != -WD_EEXIST) { in uadk_hw_init()
67 wd->handle = wd_comp_alloc_sess(&ss); in multifd_uadk_init_sess()
68 if (!wd->handle) { in multifd_uadk_init_sess()
77 wd->buf = g_try_malloc(size); in multifd_uadk_init_sess()
78 if (!wd->buf) { in multifd_uadk_init_sess()
82 wd->buf_hdr = g_new0(uint32_t, count); in multifd_uadk_init_sess()
86 if (wd->handle) { in multifd_uadk_init_sess()
87 wd_comp_free_sess(wd->handle); in multifd_uadk_init_sess()
97 if (wd->handle) { in multifd_uadk_uninit_sess()
98 wd_comp_free_sess(wd->handle); in multifd_uadk_uninit_sess()
101 g_free(wd->buf); in multifd_uadk_uninit_sess()
102 g_free(wd->buf_hdr); in multifd_uadk_uninit_sess()
106 static int multifd_uadk_send_setup(MultiFDSendParams *p, Error **errp) in multifd_uadk_send_setup() argument
114 return -1; in multifd_uadk_send_setup()
117 p->compress_data = wd; in multifd_uadk_send_setup()
118 assert(p->iov == NULL); in multifd_uadk_send_setup()
125 p->iov = g_new0(struct iovec, page_count + 2); in multifd_uadk_send_setup()
129 static void multifd_uadk_send_cleanup(MultiFDSendParams *p, Error **errp) in multifd_uadk_send_cleanup() argument
131 struct wd_data *wd = p->compress_data; in multifd_uadk_send_cleanup()
134 p->compress_data = NULL; in multifd_uadk_send_cleanup()
135 g_free(p->iov); in multifd_uadk_send_cleanup()
136 p->iov = NULL; in multifd_uadk_send_cleanup()
139 static inline void prepare_next_iov(MultiFDSendParams *p, void *base, in prepare_next_iov() argument
142 p->iov[p->iovs_num].iov_base = (uint8_t *)base; in prepare_next_iov()
143 p->iov[p->iovs_num].iov_len = len; in prepare_next_iov()
144 p->next_packet_size += len; in prepare_next_iov()
145 p->iovs_num++; in prepare_next_iov()
148 static int multifd_uadk_send_prepare(MultiFDSendParams *p, Error **errp) in multifd_uadk_send_prepare() argument
150 struct wd_data *uadk_data = p->compress_data; in multifd_uadk_send_prepare()
153 uint8_t *buf = uadk_data->buf; in multifd_uadk_send_prepare()
155 MultiFDPages_t *pages = &p->data->u.ram; in multifd_uadk_send_prepare()
157 if (!multifd_send_prepare_common(p)) { in multifd_uadk_send_prepare()
161 hdr_size = pages->normal_num * sizeof(uint32_t); in multifd_uadk_send_prepare()
163 prepare_next_iov(p, uadk_data->buf_hdr, hdr_size); in multifd_uadk_send_prepare()
165 for (int i = 0; i < pages->normal_num; i++) { in multifd_uadk_send_prepare()
168 .src = pages->block->host + pages->offset[i], in multifd_uadk_send_prepare()
175 if (uadk_data->handle) { in multifd_uadk_send_prepare()
176 ret = wd_do_comp_sync(uadk_data->handle, &creq); in multifd_uadk_send_prepare()
179 p->id, ret, creq.status); in multifd_uadk_send_prepare()
180 return -1; in multifd_uadk_send_prepare()
183 uadk_data->buf_hdr[i] = cpu_to_be32(creq.dst_len); in multifd_uadk_send_prepare()
184 prepare_next_iov(p, buf, creq.dst_len); in multifd_uadk_send_prepare()
194 if (!uadk_data->handle || creq.dst_len >= page_size) { in multifd_uadk_send_prepare()
195 uadk_data->buf_hdr[i] = cpu_to_be32(page_size); in multifd_uadk_send_prepare()
196 prepare_next_iov(p, pages->block->host + pages->offset[i], in multifd_uadk_send_prepare()
202 p->flags |= MULTIFD_FLAG_UADK; in multifd_uadk_send_prepare()
203 multifd_send_fill_packet(p); in multifd_uadk_send_prepare()
207 static int multifd_uadk_recv_setup(MultiFDRecvParams *p, Error **errp) in multifd_uadk_recv_setup() argument
215 return -1; in multifd_uadk_recv_setup()
217 p->compress_data = wd; in multifd_uadk_recv_setup()
221 static void multifd_uadk_recv_cleanup(MultiFDRecvParams *p) in multifd_uadk_recv_cleanup() argument
223 struct wd_data *wd = p->compress_data; in multifd_uadk_recv_cleanup()
226 p->compress_data = NULL; in multifd_uadk_recv_cleanup()
229 static int multifd_uadk_recv(MultiFDRecvParams *p, Error **errp) in multifd_uadk_recv() argument
231 struct wd_data *uadk_data = p->compress_data; in multifd_uadk_recv()
232 uint32_t in_size = p->next_packet_size; in multifd_uadk_recv()
233 uint32_t flags = p->flags & MULTIFD_FLAG_COMPRESSION_MASK; in multifd_uadk_recv()
234 uint32_t hdr_len = p->normal_num * sizeof(uint32_t); in multifd_uadk_recv()
237 uint8_t *buf = uadk_data->buf; in multifd_uadk_recv()
242 p->id, flags, MULTIFD_FLAG_ZLIB); in multifd_uadk_recv()
243 return -1; in multifd_uadk_recv()
246 multifd_recv_zero_page_process(p); in multifd_uadk_recv()
247 if (!p->normal_num) { in multifd_uadk_recv()
254 ret = qio_channel_read_all(p->c, (void *) uadk_data->buf_hdr, in multifd_uadk_recv()
260 for (int i = 0; i < p->normal_num; i++) { in multifd_uadk_recv()
261 uadk_data->buf_hdr[i] = be32_to_cpu(uadk_data->buf_hdr[i]); in multifd_uadk_recv()
262 data_len += uadk_data->buf_hdr[i]; in multifd_uadk_recv()
263 assert(uadk_data->buf_hdr[i] <= page_size); in multifd_uadk_recv()
268 ret = qio_channel_read_all(p->c, (void *)buf, data_len, errp); in multifd_uadk_recv()
273 for (int i = 0; i < p->normal_num; i++) { in multifd_uadk_recv()
277 .src_len = uadk_data->buf_hdr[i], in multifd_uadk_recv()
278 .dst = p->host + p->normal[i], in multifd_uadk_recv()
282 if (uadk_data->buf_hdr[i] == page_size) { in multifd_uadk_recv()
283 memcpy(p->host + p->normal[i], buf, page_size); in multifd_uadk_recv()
288 if (unlikely(!uadk_data->handle)) { in multifd_uadk_recv()
290 p->id); in multifd_uadk_recv()
291 return -1; in multifd_uadk_recv()
294 ret = wd_do_comp_sync(uadk_data->handle, &creq); in multifd_uadk_recv()
297 p->id, ret, creq.status); in multifd_uadk_recv()
298 return -1; in multifd_uadk_recv()
301 error_setg(errp, "multifd %u: decompressed length error", p->id); in multifd_uadk_recv()
302 return -1; in multifd_uadk_recv()
304 buf += uadk_data->buf_hdr[i]; in multifd_uadk_recv()