Author: jimharris
Date: Wed Jul 17 23:26:56 2013
New Revision: 253438
URL: http://svnweb.freebsd.org/changeset/base/253438

Log:
  Use pause() instead of DELAY() when polling for completion of admin
  commands during controller initialization.
  
  DELAY() does not work here during config_intrhook context - we need to
  explicitly relinquish the CPU for the admin command completion to
  get processed.
  
  Sponsored by: Intel
  Reported by:  Adam Brooks <adam.j.bro...@intel.com>
  Reviewed by:  carl
  MFC after:    3 days

Modified:
  head/sys/dev/nvme/nvme_ctrlr.c

Modified: head/sys/dev/nvme/nvme_ctrlr.c
==============================================================================
--- head/sys/dev/nvme/nvme_ctrlr.c      Wed Jul 17 23:23:38 2013        
(r253437)
+++ head/sys/dev/nvme/nvme_ctrlr.c      Wed Jul 17 23:26:56 2013        
(r253438)
@@ -455,7 +455,7 @@ nvme_ctrlr_identify(struct nvme_controll
        nvme_ctrlr_cmd_identify_controller(ctrlr, &ctrlr->cdata,
            nvme_completion_poll_cb, &status);
        while (status.done == FALSE)
-               DELAY(5);
+               pause("nvme", 1);
        if (nvme_completion_is_error(&status.cpl)) {
                nvme_printf(ctrlr, "nvme_identify_controller failed!\n");
                return (ENXIO);
@@ -487,7 +487,7 @@ nvme_ctrlr_set_num_qpairs(struct nvme_co
        nvme_ctrlr_cmd_set_num_queues(ctrlr, ctrlr->num_io_queues,
            nvme_completion_poll_cb, &status);
        while (status.done == FALSE)
-               DELAY(5);
+               pause("nvme", 1);
        if (nvme_completion_is_error(&status.cpl)) {
                nvme_printf(ctrlr, "nvme_set_num_queues failed!\n");
                return (ENXIO);
@@ -540,7 +540,7 @@ nvme_ctrlr_create_qpairs(struct nvme_con
                nvme_ctrlr_cmd_create_io_cq(ctrlr, qpair, qpair->vector,
                    nvme_completion_poll_cb, &status);
                while (status.done == FALSE)
-                       DELAY(5);
+                       pause("nvme", 1);
                if (nvme_completion_is_error(&status.cpl)) {
                        nvme_printf(ctrlr, "nvme_create_io_cq failed!\n");
                        return (ENXIO);
@@ -550,7 +550,7 @@ nvme_ctrlr_create_qpairs(struct nvme_con
                nvme_ctrlr_cmd_create_io_sq(qpair->ctrlr, qpair,
                    nvme_completion_poll_cb, &status);
                while (status.done == FALSE)
-                       DELAY(5);
+                       pause("nvme", 1);
                if (nvme_completion_is_error(&status.cpl)) {
                        nvme_printf(ctrlr, "nvme_create_io_sq failed!\n");
                        return (ENXIO);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to