Use -ENOBUFS to indicate insufficient preallocated buffer

This commit is contained in:
Bjarne von Horn
2024-04-03 10:14:59 +02:00
parent 614a309bcc
commit fe160f5c86
5 changed files with 19 additions and 13 deletions

View File

@@ -2079,7 +2079,7 @@ ec_request_state_t ecrt_sdo_request_state(
* \ingroup ApplicationInterfaceRT * \ingroup ApplicationInterfaceRT
* \return 0 on success, otherwise negative error code. * \return 0 on success, otherwise negative error code.
* \retval -EINVAL Invalid input data, e.g. data size == 0. * \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. * too small.
*/ */
EC_PUBLIC_API int ecrt_sdo_request_write( 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 * \ingroup ApplicationInterfaceRT
* \return 0 on success, otherwise negative error code. * \return 0 on success, otherwise negative error code.
* \retval -EINVAL Invalid input data, e.g. data size == 0. * \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. * too small.
*/ */
EC_PUBLIC_API int ecrt_soe_request_write( EC_PUBLIC_API int ecrt_soe_request_write(
@@ -2342,6 +2342,8 @@ EC_PUBLIC_API size_t ecrt_voe_handler_data_size(
* *
* \ingroup ApplicationInterfaceRT * \ingroup ApplicationInterfaceRT
* \return 0 on success, otherwise negative error code. * \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_PUBLIC_API int ecrt_voe_handler_write(
ec_voe_handler_t *voe, /**< VoE handler. */ ec_voe_handler_t *voe, /**< VoE handler. */
@@ -2473,6 +2475,8 @@ ec_request_state_t ecrt_reg_request_state(
* *
* \ingroup ApplicationInterfaceRT * \ingroup ApplicationInterfaceRT
* \return 0 on success, otherwise negative error code. * \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_PUBLIC_API int ecrt_reg_request_write(
ec_reg_request_t *req, /**< Register request. */ ec_reg_request_t *req, /**< Register request. */
@@ -2493,6 +2497,8 @@ EC_PUBLIC_API int ecrt_reg_request_write(
* *
* \ingroup ApplicationInterfaceRT * \ingroup ApplicationInterfaceRT
* \return 0 on success, otherwise negative error code. * \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_PUBLIC_API int ecrt_reg_request_read(
ec_reg_request_t *req, /**< Register request. */ ec_reg_request_t *req, /**< Register request. */

View File

@@ -1309,7 +1309,7 @@ void ec_fsm_coe_down_start(
if (slave->configured_rx_mailbox_size < if (slave->configured_rx_mailbox_size <
EC_MBOX_HEADER_SIZE + EC_COE_DOWN_REQ_HEADER_SIZE) { EC_MBOX_HEADER_SIZE + EC_COE_DOWN_REQ_HEADER_SIZE) {
EC_SLAVE_ERR(slave, "Mailbox too small!\n"); EC_SLAVE_ERR(slave, "Mailbox too small!\n");
request->errno = EOVERFLOW; request->errno = ENOBUFS;
fsm->state = ec_fsm_coe_error; fsm->state = ec_fsm_coe_error;
return; return;
} }
@@ -2463,7 +2463,7 @@ void ec_fsm_coe_up_seg_response(
EC_SLAVE_ERR(slave, "SDO upload 0x%04X:%02X failed: Fragment" EC_SLAVE_ERR(slave, "SDO upload 0x%04X:%02X failed: Fragment"
" exceeding complete size!\n", " exceeding complete size!\n",
request->index, request->subindex); request->index, request->subindex);
request->errno = EOVERFLOW; request->errno = ENOBUFS;
fsm->state = ec_fsm_coe_error; fsm->state = ec_fsm_coe_error;
return; return;
} }

View File

@@ -3626,7 +3626,7 @@ static ATTRIBUTES int ec_ioctl_sdo_request_write(
} }
if (data.size > req->mem_size) if (data.size > req->mem_size)
return -ENOMEM; return -ENOBUFS;
if (ec_copy_from_user(req->data, (void __user *) data.data, if (ec_copy_from_user(req->data, (void __user *) data.data,
data.size, ctx)) data.size, ctx))
@@ -3870,7 +3870,7 @@ static ATTRIBUTES int ec_ioctl_soe_request_write(
} }
if (data.size > req->mem_size) if (data.size > req->mem_size)
return -ENOMEM; return -ENOBUFS;
if (ec_copy_from_user(req->data, (void __user *) data.data, if (ec_copy_from_user(req->data, (void __user *) data.data,
data.size, ctx)) data.size, ctx))
@@ -4048,7 +4048,7 @@ static ATTRIBUTES int ec_ioctl_reg_request_write(
} }
if (io.transfer_size > reg->mem_size) { if (io.transfer_size > reg->mem_size) {
return -EOVERFLOW; return -ENOBUFS;
} }
if (ec_copy_from_user(reg->data, (void __user *) io.data, 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) { if (io.transfer_size > reg->mem_size) {
return -EOVERFLOW; return -ENOBUFS;
} }
return ecrt_reg_request_read(reg, io.address, io.transfer_size); 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) {
if (data.size > ec_voe_handler_mem_size(voe)) if (data.size > ec_voe_handler_mem_size(voe))
return -EOVERFLOW; return -ENOBUFS;
if (ec_copy_from_user(ecrt_voe_handler_data(voe), if (ec_copy_from_user(ecrt_voe_handler_data(voe),
(void __user *) data.data, data.size, ctx)) (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) { if (request.data_size > io.buffer_size) {
EC_SLAVE_ERR(slave, "%s(): Buffer too small.\n", __func__); EC_SLAVE_ERR(slave, "%s(): Buffer too small.\n", __func__);
ec_foe_request_clear(&request); ec_foe_request_clear(&request);
return -EOVERFLOW; return -ENOBUFS;
} }
io.data_size = request.data_size; io.data_size = request.data_size;
if (copy_to_user((void __user *) io.buffer, if (copy_to_user((void __user *) io.buffer,

View File

@@ -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)) { if (unlikely(total_size > slave->configured_rx_mailbox_size)) {
EC_SLAVE_ERR(slave, "Data size (%zu) does not fit in mailbox (%u)!\n", EC_SLAVE_ERR(slave, "Data size (%zu) does not fit in mailbox (%u)!\n",
total_size, slave->configured_rx_mailbox_size); total_size, slave->configured_rx_mailbox_size);
return ERR_PTR(-EOVERFLOW); return ERR_PTR(-ENOBUFS);
} }
ret = ec_datagram_fpwr(datagram, slave->station_address, ret = ec_datagram_fpwr(datagram, slave->station_address,

View File

@@ -3092,7 +3092,7 @@ int ecrt_master_sdo_upload(ec_master_t *master, uint16_t slave_position,
} else { } else {
if (request.data_size > target_size) { if (request.data_size > target_size) {
EC_SLAVE_ERR(slave, "%s(): Buffer too small.\n", __func__); EC_SLAVE_ERR(slave, "%s(): Buffer too small.\n", __func__);
ret = -EOVERFLOW; ret = -ENOBUFS;
} }
else { else {
memcpy(target, request.data, request.data_size); 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 } else { // success
if (request.data_size > target_size) { if (request.data_size > target_size) {
EC_SLAVE_ERR(slave, "%s(): Buffer too small.\n", __func__); EC_SLAVE_ERR(slave, "%s(): Buffer too small.\n", __func__);
ret = -EOVERFLOW; ret = -ENOBUFS;
} }
else { // data fits in buffer else { // data fits in buffer
if (result_size) { if (result_size) {