From fe160f5c8657e390da657e9b8a5dafc494babfe8 Mon Sep 17 00:00:00 2001 From: Bjarne von Horn Date: Wed, 3 Apr 2024 10:14:59 +0200 Subject: [PATCH] Use -ENOBUFS to indicate insufficient preallocated buffer --- include/ecrt.h | 10 ++++++++-- master/fsm_coe.c | 4 ++-- master/ioctl.c | 12 ++++++------ master/mailbox.c | 2 +- master/master.c | 4 ++-- 5 files changed, 19 insertions(+), 13 deletions(-) diff --git a/include/ecrt.h b/include/ecrt.h index ba36d4d3..ae4dc9d6 100644 --- a/include/ecrt.h +++ b/include/ecrt.h @@ -2079,7 +2079,7 @@ ec_request_state_t ecrt_sdo_request_state( * \ingroup ApplicationInterfaceRT * \return 0 on success, otherwise negative error code. * \retval -EINVAL Invalid input data, e.g. data size == 0. - * \retval -ENOMEM Reserved memory in ecrt_slave_config_create_sdo_request() + * \retval -ENOBUFS Reserved memory in ecrt_slave_config_create_sdo_request() * too small. */ EC_PUBLIC_API int ecrt_sdo_request_write( @@ -2220,7 +2220,7 @@ EC_PUBLIC_API ec_request_state_t ecrt_soe_request_state( * \ingroup ApplicationInterfaceRT * \return 0 on success, otherwise negative error code. * \retval -EINVAL Invalid input data, e.g. data size == 0. - * \retval -ENOMEM Reserved memory in ecrt_slave_config_create_soe_request() + * \retval -ENOBUFS Reserved memory in ecrt_slave_config_create_soe_request() * too small. */ EC_PUBLIC_API int ecrt_soe_request_write( @@ -2342,6 +2342,8 @@ EC_PUBLIC_API size_t ecrt_voe_handler_data_size( * * \ingroup ApplicationInterfaceRT * \return 0 on success, otherwise negative error code. + * \retval -ENOBUFS Reserved memory in ecrt_slave_config_create_voe_handler + * too small. */ EC_PUBLIC_API int ecrt_voe_handler_write( ec_voe_handler_t *voe, /**< VoE handler. */ @@ -2473,6 +2475,8 @@ ec_request_state_t ecrt_reg_request_state( * * \ingroup ApplicationInterfaceRT * \return 0 on success, otherwise negative error code. + * \retval -ENOBUFS Reserved memory in ecrt_slave_config_create_reg_request + * too small. */ EC_PUBLIC_API int ecrt_reg_request_write( ec_reg_request_t *req, /**< Register request. */ @@ -2493,6 +2497,8 @@ EC_PUBLIC_API int ecrt_reg_request_write( * * \ingroup ApplicationInterfaceRT * \return 0 on success, otherwise negative error code. + * \retval -ENOBUFS Reserved memory in ecrt_slave_config_create_reg_request + * too small. */ EC_PUBLIC_API int ecrt_reg_request_read( ec_reg_request_t *req, /**< Register request. */ diff --git a/master/fsm_coe.c b/master/fsm_coe.c index f12bbcd8..9b015de1 100644 --- a/master/fsm_coe.c +++ b/master/fsm_coe.c @@ -1309,7 +1309,7 @@ void ec_fsm_coe_down_start( if (slave->configured_rx_mailbox_size < EC_MBOX_HEADER_SIZE + EC_COE_DOWN_REQ_HEADER_SIZE) { EC_SLAVE_ERR(slave, "Mailbox too small!\n"); - request->errno = EOVERFLOW; + request->errno = ENOBUFS; fsm->state = ec_fsm_coe_error; return; } @@ -2463,7 +2463,7 @@ void ec_fsm_coe_up_seg_response( EC_SLAVE_ERR(slave, "SDO upload 0x%04X:%02X failed: Fragment" " exceeding complete size!\n", request->index, request->subindex); - request->errno = EOVERFLOW; + request->errno = ENOBUFS; fsm->state = ec_fsm_coe_error; return; } diff --git a/master/ioctl.c b/master/ioctl.c index 1289e27d..9361b6b9 100644 --- a/master/ioctl.c +++ b/master/ioctl.c @@ -3626,7 +3626,7 @@ static ATTRIBUTES int ec_ioctl_sdo_request_write( } if (data.size > req->mem_size) - return -ENOMEM; + return -ENOBUFS; if (ec_copy_from_user(req->data, (void __user *) data.data, data.size, ctx)) @@ -3870,7 +3870,7 @@ static ATTRIBUTES int ec_ioctl_soe_request_write( } if (data.size > req->mem_size) - return -ENOMEM; + return -ENOBUFS; if (ec_copy_from_user(req->data, (void __user *) data.data, data.size, ctx)) @@ -4048,7 +4048,7 @@ static ATTRIBUTES int ec_ioctl_reg_request_write( } if (io.transfer_size > reg->mem_size) { - return -EOVERFLOW; + return -ENOBUFS; } if (ec_copy_from_user(reg->data, (void __user *) io.data, @@ -4095,7 +4095,7 @@ static ATTRIBUTES int ec_ioctl_reg_request_read( } if (io.transfer_size > reg->mem_size) { - return -EOVERFLOW; + return -ENOBUFS; } return ecrt_reg_request_read(reg, io.address, io.transfer_size); @@ -4306,7 +4306,7 @@ static ATTRIBUTES int ec_ioctl_voe_write( if (data.size) { if (data.size > ec_voe_handler_mem_size(voe)) - return -EOVERFLOW; + return -ENOBUFS; if (ec_copy_from_user(ecrt_voe_handler_data(voe), (void __user *) data.data, data.size, ctx)) @@ -4482,7 +4482,7 @@ static ATTRIBUTES int ec_ioctl_slave_foe_read( if (request.data_size > io.buffer_size) { EC_SLAVE_ERR(slave, "%s(): Buffer too small.\n", __func__); ec_foe_request_clear(&request); - return -EOVERFLOW; + return -ENOBUFS; } io.data_size = request.data_size; if (copy_to_user((void __user *) io.buffer, diff --git a/master/mailbox.c b/master/mailbox.c index dacf3392..05a10fd1 100644 --- a/master/mailbox.c +++ b/master/mailbox.c @@ -60,7 +60,7 @@ uint8_t *ec_slave_mbox_prepare_send(const ec_slave_t *slave, /**< slave */ if (unlikely(total_size > slave->configured_rx_mailbox_size)) { EC_SLAVE_ERR(slave, "Data size (%zu) does not fit in mailbox (%u)!\n", total_size, slave->configured_rx_mailbox_size); - return ERR_PTR(-EOVERFLOW); + return ERR_PTR(-ENOBUFS); } ret = ec_datagram_fpwr(datagram, slave->station_address, diff --git a/master/master.c b/master/master.c index 5c83a041..d327337a 100644 --- a/master/master.c +++ b/master/master.c @@ -3092,7 +3092,7 @@ int ecrt_master_sdo_upload(ec_master_t *master, uint16_t slave_position, } else { if (request.data_size > target_size) { EC_SLAVE_ERR(slave, "%s(): Buffer too small.\n", __func__); - ret = -EOVERFLOW; + ret = -ENOBUFS; } else { memcpy(target, request.data, request.data_size); @@ -3250,7 +3250,7 @@ int ecrt_master_read_idn(ec_master_t *master, uint16_t slave_position, } else { // success if (request.data_size > target_size) { EC_SLAVE_ERR(slave, "%s(): Buffer too small.\n", __func__); - ret = -EOVERFLOW; + ret = -ENOBUFS; } else { // data fits in buffer if (result_size) {