+int rte_intr_event_list_update(struct rte_intr_handle *intr_handle, int size)
+{
+ struct rte_epoll_event *tmp_elist;
+ bool uses_rte_memory;
+ int *tmp_efds;
+
+ CHECK_VALID_INTR_HANDLE(intr_handle);
+
+ if (size == 0) {
+ RTE_LOG(DEBUG, EAL, "Size can't be zero\n");
+ rte_errno = EINVAL;
+ goto fail;
+ }
+
+ uses_rte_memory =
+ RTE_INTR_INSTANCE_USES_RTE_MEMORY(intr_handle->alloc_flags);
+ if (uses_rte_memory) {
+ tmp_efds = rte_realloc(intr_handle->efds, size * sizeof(int),
+ 0);
+ } else {
+ tmp_efds = realloc(intr_handle->efds, size * sizeof(int));
+ }
+ if (tmp_efds == NULL) {
+ RTE_LOG(ERR, EAL, "Failed to realloc the efds list\n");
+ rte_errno = ENOMEM;
+ goto fail;
+ }
+ intr_handle->efds = tmp_efds;
+
+ if (uses_rte_memory) {
+ tmp_elist = rte_realloc(intr_handle->elist,
+ size * sizeof(struct rte_epoll_event), 0);
+ } else {
+ tmp_elist = realloc(intr_handle->elist,
+ size * sizeof(struct rte_epoll_event));
+ }
+ if (tmp_elist == NULL) {
+ RTE_LOG(ERR, EAL, "Failed to realloc the event list\n");
+ rte_errno = ENOMEM;
+ goto fail;
+ }
+ intr_handle->elist = tmp_elist;
+
+ intr_handle->nb_intr = size;
+
+ return 0;
+fail:
+ return -rte_errno;
+}
+