ntb_perf: Wait for link before running test
authorLogan Gunthorpe <logang@deltatee.com>
Mon, 20 Jun 2016 19:15:07 +0000 (13:15 -0600)
committerJon Mason <jdmason@kudzu.us>
Fri, 5 Aug 2016 14:21:07 +0000 (10:21 -0400)
Instead of returning immediately with an error when the link is
down, wait for the link to come up (or the user sends a SIGINT).

This is to make scripting ntb_perf easier.

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Acked-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Jon Mason <jdmason@kudzu.us>
drivers/ntb/test/ntb_perf.c

index 05a870524a67b784fd31c5afe0cb72fa077150c4..f0784e50ceb75658967eb7b3570e18ccfa6f2979 100644 (file)
@@ -135,6 +135,7 @@ struct perf_ctx {
        bool                    link_is_up;
        struct work_struct      link_cleanup;
        struct delayed_work     link_work;
+       wait_queue_head_t       link_wq;
        struct dentry           *debugfs_node_dir;
        struct dentry           *debugfs_run;
        struct dentry           *debugfs_threads;
@@ -533,6 +534,7 @@ static void perf_link_work(struct work_struct *work)
                goto out1;
 
        perf->link_is_up = true;
+       wake_up(&perf->link_wq);
 
        return;
 
@@ -653,7 +655,7 @@ static ssize_t debugfs_run_write(struct file *filp, const char __user *ubuf,
        int node, i;
        DECLARE_WAIT_QUEUE_HEAD(wq);
 
-       if (!perf->link_is_up)
+       if (wait_event_interruptible(perf->link_wq, perf->link_is_up))
                return -ENOLINK;
 
        if (perf->perf_threads == 0)
@@ -783,6 +785,7 @@ static int perf_probe(struct ntb_client *client, struct ntb_dev *ntb)
        mutex_init(&perf->run_mutex);
        spin_lock_init(&perf->db_lock);
        perf_setup_mw(ntb, perf);
+       init_waitqueue_head(&perf->link_wq);
        INIT_DELAYED_WORK(&perf->link_work, perf_link_work);
        INIT_WORK(&perf->link_cleanup, perf_link_cleanup);