On Wed, Sep 06, 2023 at 06:12:25PM +0200, Thomas Monjalon wrote:
> Calls to rte_ctrl_thread_create() are replaced with
> rte_thread_create_control().
>
> In vhost_blk, the control thread is not forced
> to be scheduled on core 0 anymore.
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> ---
Acked-by: Tyler Retzlaff <roretzla@linux.microsoft.com>
@@ -28,6 +28,7 @@
#include <rte_pause.h>
#include <rte_dmadev.h>
#include <rte_vhost_async.h>
+#include <rte_thread.h>
#include "main.h"
@@ -1807,7 +1808,7 @@ static const struct rte_vhost_device_ops virtio_net_device_ops =
* This is a thread will wake up after a period to print stats if the user has
* enabled them.
*/
-static void *
+static uint32_t
print_stats(__rte_unused void *arg)
{
struct vhost_dev *vdev;
@@ -1852,7 +1853,7 @@ print_stats(__rte_unused void *arg)
fflush(stdout);
}
- return NULL;
+ return 0;
}
static void
@@ -1907,7 +1908,7 @@ main(int argc, char *argv[])
unsigned nb_ports, valid_num_ports;
int ret, i;
uint16_t portid;
- static pthread_t tid;
+ rte_thread_t tid;
uint64_t flags = RTE_VHOST_USER_NET_COMPLIANT_OL_FLAGS;
signal(SIGINT, sigint_handler);
@@ -1986,7 +1987,7 @@ main(int argc, char *argv[])
/* Enable stats if the user option is set. */
if (enable_stats) {
- ret = rte_ctrl_thread_create(&tid, "dpdk-vhost-stat", NULL,
+ ret = rte_thread_create_control(&tid, "dpdk-vhost-stat",
print_stats, NULL);
if (ret < 0)
rte_exit(EXIT_FAILURE,
@@ -5,8 +5,6 @@
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
-#include <pthread.h>
-#include <sched.h>
#include <stdint.h>
#include <stdlib.h>
@@ -529,12 +527,10 @@ process_vq(struct vhost_blk_queue *vq)
}
}
-static void *
+static uint32_t
ctrlr_worker(void *arg)
{
struct vhost_blk_ctrlr *ctrlr = (struct vhost_blk_ctrlr *)arg;
- cpu_set_t cpuset;
- pthread_t thread;
int i;
fprintf(stdout, "Ctrlr Worker Thread start\n");
@@ -546,11 +542,6 @@ ctrlr_worker(void *arg)
exit(0);
}
- thread = pthread_self();
- CPU_ZERO(&cpuset);
- CPU_SET(0, &cpuset);
- pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
-
for (i = 0; i < NUM_OF_BLK_QUEUES; i++)
submit_inflight_vq(&ctrlr->queues[i]);
@@ -560,7 +551,7 @@ ctrlr_worker(void *arg)
fprintf(stdout, "Ctrlr Worker Thread Exiting\n");
sem_post(&exit_sem);
- return NULL;
+ return 0;
}
static int
@@ -605,7 +596,7 @@ new_device(int vid)
struct vhost_blk_queue *vq;
char path[PATH_MAX];
uint64_t features, protocol_features;
- pthread_t tid;
+ rte_thread_t tid;
int i, ret;
bool packed_ring, inflight_shmfd;
@@ -686,15 +677,15 @@ new_device(int vid)
/* start polling vring */
worker_thread_status = WORKER_STATE_START;
fprintf(stdout, "New Device %s, Device ID %d\n", path, vid);
- if (rte_ctrl_thread_create(&tid, "dpdk-vhost-blk", NULL,
- &ctrlr_worker, ctrlr) != 0) {
+ if (rte_thread_create_control(&tid, "dpdk-vhost-blk",
+ &ctrlr_worker, ctrlr) != 0) {
fprintf(stderr, "Worker Thread Started Failed\n");
return -1;
}
/* device has been started */
ctrlr->started = 1;
- pthread_detach(tid);
+ rte_thread_detach(tid);
return 0;
}