[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [UNIKRAFT PATCH v2 3/9] lib/uk9p: Delete the old serialization
This patch deletes the old serialization implementation and removes the functions from exportsyms.uk. Signed-off-by: Cristian Banu <cristb@xxxxxxxxx> --- lib/uk9p/9pdev.c | 36 ----- lib/uk9p/9preq.c | 287 ------------------------------------ lib/uk9p/exportsyms.uk | 7 - lib/uk9p/include/uk/9pdev.h | 23 --- lib/uk9p/include/uk/9preq.h | 55 ------- 5 files changed, 408 deletions(-) diff --git a/lib/uk9p/9pdev.c b/lib/uk9p/9pdev.c index 14ea7ca..1d7e09b 100644 --- a/lib/uk9p/9pdev.c +++ b/lib/uk9p/9pdev.c @@ -288,42 +288,6 @@ void uk_9pdev_xmit_notify(struct uk_9pdev *dev) #endif } -struct uk_9preq *uk_9pdev_call(struct uk_9pdev *dev, uint8_t type, - uint32_t size, const char *fmt, ...) -{ - struct uk_9preq *req; - va_list vl; - int rc; - - req = uk_9pdev_req_create(dev, type, size); - if (PTRISERR(req)) - return req; - - va_start(vl, fmt); - rc = uk_9preq_vserialize(req, fmt, vl); - va_end(vl); - - if (rc < 0) - goto out; - - rc = uk_9preq_ready(req, UK_9PREQ_ZCDIR_NONE, NULL, 0, 0); - if (rc < 0) - goto out; - - rc = uk_9pdev_request(dev, req); - if (rc < 0) - goto out; - - rc = uk_9preq_waitreply(req); - if (rc < 0) - goto out; - - return req; -out: - uk_9pdev_req_remove(dev, req); - return ERR2PTR(rc); -} - struct uk_9preq *uk_9pdev_req_create(struct uk_9pdev *dev, uint8_t type, uint32_t size) { diff --git a/lib/uk9p/9preq.c b/lib/uk9p/9preq.c index 8d787e7..997f772 100644 --- a/lib/uk9p/9preq.c +++ b/lib/uk9p/9preq.c @@ -138,293 +138,6 @@ int uk_9preq_put(struct uk_9preq *req) return last; } -static int _fcall_write(struct uk_9preq_fcall *fcall, const void *buf, - uint32_t size) -{ - if (fcall->offset + size > fcall->size) - return -ENOBUFS; - - memcpy((char *)fcall->buf + fcall->offset, buf, size); - fcall->offset += size; - return 0; -} - -static int _fcall_serialize(struct uk_9preq_fcall *f, const char *fmt, ...); - -static int _fcall_vserialize(struct uk_9preq_fcall *fcall, const char *fmt, - va_list vl) -{ - int rc = 0; - - while (*fmt) { - switch (*fmt) { - case 'b': { - uint8_t x; - - x = va_arg(vl, unsigned int); - rc = _fcall_write(fcall, &x, sizeof(x)); - if (rc < 0) - goto out; - break; - } - case 'w': { - uint16_t x; - - x = va_arg(vl, unsigned int); - rc = _fcall_write(fcall, &x, sizeof(x)); - if (rc < 0) - goto out; - break; - } - case 'd': { - uint32_t x; - - x = va_arg(vl, uint32_t); - rc = _fcall_write(fcall, &x, sizeof(x)); - if (rc < 0) - goto out; - break; - } - case 'q': { - uint64_t x; - - x = va_arg(vl, uint64_t); - rc = _fcall_write(fcall, &x, sizeof(x)); - if (rc < 0) - goto out; - break; - } - case 's': { - struct uk_9p_str *p; - - p = va_arg(vl, struct uk_9p_str *); - rc = _fcall_write(fcall, &p->size, sizeof(p->size)); - if (rc < 0) - goto out; - rc = _fcall_write(fcall, p->data, p->size); - if (rc < 0) - goto out; - break; - } - case 'Q': { - struct uk_9p_qid *p; - - p = va_arg(vl, struct uk_9p_qid *); - rc = _fcall_serialize(fcall, "bdq", p->type, - p->version, p->path); - if (rc < 0) - goto out; - break; - } - case 'S': { - struct uk_9p_stat *p; - - p = va_arg(vl, struct uk_9p_stat *); - rc = _fcall_serialize(fcall, "wwdQdddqsssssddd", - p->size, p->type, p->dev, &p->qid, - p->mode, p->atime, p->mtime, p->length, - &p->name, &p->uid, &p->gid, &p->muid, - &p->extension, p->n_uid, p->n_gid, - p->n_muid); - if (rc < 0) - goto out; - break; - } - default: - rc = -EINVAL; - goto out; - } - - fmt++; - } - -out: - return rc; -} - -static int _fcall_serialize(struct uk_9preq_fcall *f, const char *fmt, ...) -{ - va_list vl; - int rc; - - va_start(vl, fmt); - rc = _fcall_vserialize(f, fmt, vl); - va_end(vl); - - return rc; -} - -int uk_9preq_vserialize(struct uk_9preq *req, const char *fmt, va_list vl) -{ - int rc; - - UK_ASSERT(req); - UK_ASSERT(UK_READ_ONCE(req->state) == UK_9PREQ_INITIALIZED); - rc = _fcall_vserialize(&req->xmit, fmt, vl); - - return rc; -} - -int uk_9preq_serialize(struct uk_9preq *req, const char *fmt, ...) -{ - va_list vl; - int rc; - - va_start(vl, fmt); - rc = uk_9preq_vserialize(req, fmt, vl); - va_end(vl); - - return rc; -} - -static int _fcall_read(struct uk_9preq_fcall *fcall, void *buf, uint32_t size) -{ - if (fcall->offset + size > fcall->size) - return -ENOBUFS; - - memcpy(buf, (char *)fcall->buf + fcall->offset, size); - fcall->offset += size; - return 0; -} - -static int _fcall_deserialize(struct uk_9preq_fcall *f, const char *fmt, ...); - -static int _fcall_vdeserialize(struct uk_9preq_fcall *fcall, - const char *fmt, - va_list vl) -{ - int rc = 0; - - while (*fmt) { - switch (*fmt) { - case 'b': { - uint8_t *x; - - x = va_arg(vl, uint8_t *); - rc = _fcall_read(fcall, x, sizeof(*x)); - if (rc < 0) - goto out; - break; - } - case 'w': { - uint16_t *x; - - x = va_arg(vl, uint16_t *); - rc = _fcall_read(fcall, x, sizeof(*x)); - if (rc < 0) - goto out; - break; - } - case 'd': { - uint32_t *x; - - x = va_arg(vl, uint32_t *); - rc = _fcall_read(fcall, x, sizeof(*x)); - if (rc < 0) - goto out; - break; - } - case 'q': { - uint64_t *x; - - x = va_arg(vl, uint64_t *); - rc = _fcall_read(fcall, x, sizeof(*x)); - if (rc < 0) - goto out; - break; - } - case 's': { - struct uk_9p_str *p; - - p = va_arg(vl, struct uk_9p_str *); - rc = _fcall_read(fcall, &p->size, sizeof(p->size)); - if (rc < 0) - goto out; - p->data = (char *)fcall->buf + fcall->offset; - fcall->offset += p->size; - break; - } - case 'Q': { - struct uk_9p_qid *p; - - p = va_arg(vl, struct uk_9p_qid *); - rc = _fcall_deserialize(fcall, "bdq", &p->type, - &p->version, &p->path); - if (rc < 0) - goto out; - break; - } - case 'S': { - struct uk_9p_stat *p; - - p = va_arg(vl, struct uk_9p_stat *); - rc = _fcall_deserialize(fcall, "wwdQdddqsssssddd", - &p->size, &p->type, &p->dev, &p->qid, - &p->mode, &p->atime, &p->mtime, - &p->length, &p->name, &p->uid, &p->gid, - &p->muid, &p->extension, &p->n_uid, - &p->n_gid, &p->n_muid); - if (rc < 0) - goto out; - break; - } - default: - rc = -EINVAL; - goto out; - } - - fmt++; - } - -out: - return rc; -} - -static int _fcall_deserialize(struct uk_9preq_fcall *f, const char *fmt, ...) -{ - va_list vl; - int rc; - - va_start(vl, fmt); - rc = _fcall_vdeserialize(f, fmt, vl); - va_end(vl); - - return rc; -} - -int uk_9preq_vdeserialize(struct uk_9preq *req, const char *fmt, va_list vl) -{ - int rc; - - UK_ASSERT(req); - UK_ASSERT(UK_READ_ONCE(req->state) == UK_9PREQ_RECEIVED); - rc = _fcall_vdeserialize(&req->recv, fmt, vl); - - return rc; -} - -int uk_9preq_deserialize(struct uk_9preq *req, const char *fmt, ...) -{ - va_list vl; - int rc; - - va_start(vl, fmt); - rc = uk_9preq_vdeserialize(req, fmt, vl); - va_end(vl); - - return rc; -} - -int uk_9preq_copy_to(struct uk_9preq *req, void *buf, uint32_t size) -{ - return _fcall_read(&req->recv, buf, size); -} - -int uk_9preq_copy_from(struct uk_9preq *req, const void *buf, uint32_t size) -{ - return _fcall_write(&req->xmit, buf, size); -} - int uk_9preq_ready(struct uk_9preq *req, enum uk_9preq_zcdir zc_dir, void *zc_buf, uint32_t zc_size, uint32_t zc_offset) { diff --git a/lib/uk9p/exportsyms.uk b/lib/uk9p/exportsyms.uk index aae9e8a..7f8e7dd 100644 --- a/lib/uk9p/exportsyms.uk +++ b/lib/uk9p/exportsyms.uk @@ -5,12 +5,6 @@ uk_9pdev_trans_set_default uk_9preq_get uk_9preq_put -uk_9preq_vserialize -uk_9preq_serialize -uk_9preq_vdeserialize -uk_9preq_deserialize -uk_9preq_copy_to -uk_9preq_copy_from uk_9preq_receive_cb uk_9preq_waitreply uk_9preq_error @@ -19,7 +13,6 @@ uk_9pdev_connect uk_9pdev_disconnect uk_9pdev_request uk_9pdev_xmit_notify -uk_9pdev_call uk_9pdev_set_msize uk_9pdev_get_msize diff --git a/lib/uk9p/include/uk/9pdev.h b/lib/uk9p/include/uk/9pdev.h index 139498f..04ff523 100644 --- a/lib/uk9p/include/uk/9pdev.h +++ b/lib/uk9p/include/uk/9pdev.h @@ -107,29 +107,6 @@ int uk_9pdev_request(struct uk_9pdev *dev, struct uk_9preq *req); */ void uk_9pdev_xmit_notify(struct uk_9pdev *dev); -/** - * Creates and sends 9P request to the given 9P device, serializing it with - * the given arguments. This function acts as a shorthand for the explicit - * calls to req_create(), serialize(), ready(), request(), waitreply(). - * - * @param dev - * The Unikraft 9P Device. - * @param type - * Transmit type of the request, e.g. Tversion, Tread, and so on. - * @param size - * The maximum size for the receive and send buffers. - * @param fmt - * The format of the data to be serialized, in the way uk_9preq_serialize() - * expects it. - * @param ... - * The arguments to be serialized. - * @return - * - (!PTRISERR): The 9p request in the UK_9PREQ_RECEIVED state. - * - PTRISERR: The error code with which any of the steps failed. - */ -struct uk_9preq *uk_9pdev_call(struct uk_9pdev *dev, uint8_t type, - uint32_t size, const char *fmt, ...); - /** * Create a new request, automatically allocating its tag, based on its type. * diff --git a/lib/uk9p/include/uk/9preq.h b/lib/uk9p/include/uk/9preq.h index 70c1b03..b9713e2 100644 --- a/lib/uk9p/include/uk/9preq.h +++ b/lib/uk9p/include/uk/9preq.h @@ -182,61 +182,6 @@ void uk_9preq_get(struct uk_9preq *req); */ int uk_9preq_put(struct uk_9preq *req); -/* - * The following family of serialization and deserialization functions work - * by employing a printf-like formatting mechanism for data types supported by - * the 9p protocol: - * - 'b': byte (uint8_t) - * - 'w': word (uint16_t) - * - 'd': double-word (uint32_t) - * - 'q': quad-word (uint64_t) - * - 's': uk_9p_str * - * - 'S': uk_9p_stat * - * - * Similarly to vprintf(), the vserialize() and vdeserialize() functions take - * a va_list instead of a variable number of arguments. - * - * Possible return values: - * - 0: Operation successful. - * - (-EINVAL): Invalid format specifier. - * - (-ENOBUFS): End of buffer reached. - */ - -int uk_9preq_vserialize(struct uk_9preq *req, const char *fmt, va_list vl); -int uk_9preq_serialize(struct uk_9preq *req, const char *fmt, ...); -int uk_9preq_vdeserialize(struct uk_9preq *req, const char *fmt, va_list vl); -int uk_9preq_deserialize(struct uk_9preq *req, const char *fmt, ...); - -/** - * Copies raw data from the request receive buffer to the provided buffer. - * - * @param req - * Reference to the 9p request. - * @param buf - * Destination buffer. - * @param size - * Amount to copy. - * Possible return values: - * - 0: Operation successful. - * - (-ENOBUFS): End of buffer reached. - */ -int uk_9preq_copy_to(struct uk_9preq *req, void *buf, uint32_t size); - -/** - * Copies raw data from the provided buffer to the request transmission buffer. - * - * @param req - * Reference to the 9p request. - * @param buf - * Source buffer. - * @param size - * Amount to copy. - * Possible return values: - * - 0: Operation successful. - * - (-ENOBUFS): End of buffer reached. - */ -int uk_9preq_copy_from(struct uk_9preq *req, const void *buf, uint32_t size); - /** * Marks the given request as being ready, transitioning between states * INITIALIZED and READY. -- 2.26.2
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |