aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2018-01-29 00:00:52 +0000
committerWarner Losh <imp@FreeBSD.org>2018-01-29 00:00:52 +0000
commit29077eb456831a384cda7ec9f5a789f7013f4cf1 (patch)
tree821cb69bdc16b2f223146bcb336ec1f6262d98b8 /sys
parent8cc3cfa86d0d5c6d4ca064ba319ba561d2faaba4 (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/nvme/nvme.c3
-rw-r--r--sys/dev/nvme/nvme_ctrlr.c20
-rw-r--r--sys/dev/nvme/nvme_private.h2
3 files changed, 12 insertions, 13 deletions
diff --git a/sys/dev/nvme/nvme.c b/sys/dev/nvme/nvme.c
index 9b9040b31128..b13cad757759 100644
--- a/sys/dev/nvme/nvme.c
+++ b/sys/dev/nvme/nvme.c
@@ -469,6 +469,5 @@ nvme_completion_poll_cb(void *arg, const struct nvme_completion *cpl)
* the request passed or failed.
*/
memcpy(&status->cpl, cpl, sizeof(*cpl));
- wmb();
- status->done = TRUE;
+ atomic_store_rel_int(&status->done, 1);
}
diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c
index fdd582793780..9f32bc9033a4 100644
--- a/sys/dev/nvme/nvme_ctrlr.c
+++ b/sys/dev/nvme/nvme_ctrlr.c
@@ -404,10 +404,10 @@ nvme_ctrlr_identify(struct nvme_controller *ctrlr)
{
struct nvme_completion_poll_status status;
- status.done = FALSE;
+ status.done = 0;
nvme_ctrlr_cmd_identify_controller(ctrlr, &ctrlr->cdata,
nvme_completion_poll_cb, &status);
- while (status.done == FALSE)
+ while (!atomic_load_acq_int(&status.done))
pause("nvme", 1);
if (nvme_completion_is_error(&status.cpl)) {
nvme_printf(ctrlr, "nvme_identify_controller failed!\n");
@@ -431,10 +431,10 @@ nvme_ctrlr_set_num_qpairs(struct nvme_controller *ctrlr)
struct nvme_completion_poll_status status;
int cq_allocated, sq_allocated;
- status.done = FALSE;
+ status.done = 0;
nvme_ctrlr_cmd_set_num_queues(ctrlr, ctrlr->num_io_queues,
nvme_completion_poll_cb, &status);
- while (status.done == FALSE)
+ while (!atomic_load_acq_int(&status.done))
pause("nvme", 1);
if (nvme_completion_is_error(&status.cpl)) {
nvme_printf(ctrlr, "nvme_ctrlr_set_num_qpairs failed!\n");
@@ -470,20 +470,20 @@ nvme_ctrlr_create_qpairs(struct nvme_controller *ctrlr)
for (i = 0; i < ctrlr->num_io_queues; i++) {
qpair = &ctrlr->ioq[i];
- status.done = FALSE;
+ status.done = 0;
nvme_ctrlr_cmd_create_io_cq(ctrlr, qpair, qpair->vector,
nvme_completion_poll_cb, &status);
- while (status.done == FALSE)
+ while (!atomic_load_acq_int(&status.done))
pause("nvme", 1);
if (nvme_completion_is_error(&status.cpl)) {
nvme_printf(ctrlr, "nvme_create_io_cq failed!\n");
return (ENXIO);
}
- status.done = FALSE;
+ status.done = 0;
nvme_ctrlr_cmd_create_io_sq(qpair->ctrlr, qpair,
nvme_completion_poll_cb, &status);
- while (status.done == FALSE)
+ while (!atomic_load_acq_int(&status.done))
pause("nvme", 1);
if (nvme_completion_is_error(&status.cpl)) {
nvme_printf(ctrlr, "nvme_create_io_sq failed!\n");
@@ -693,10 +693,10 @@ nvme_ctrlr_configure_aer(struct nvme_controller *ctrlr)
ctrlr->async_event_config.raw = 0xFF;
ctrlr->async_event_config.bits.reserved = 0;
- status.done = FALSE;
+ status.done = 0;
nvme_ctrlr_cmd_get_feature(ctrlr, NVME_FEAT_TEMPERATURE_THRESHOLD,
0, NULL, 0, nvme_completion_poll_cb, &status);
- while (status.done == FALSE)
+ while (!atomic_load_acq_int(&status.done))
pause("nvme", 1);
if (nvme_completion_is_error(&status.cpl) ||
(status.cpl.cdw0 & 0xFFFF) == 0xFFFF ||
diff --git a/sys/dev/nvme/nvme_private.h b/sys/dev/nvme/nvme_private.h
index 19825ac6d336..9064ae10a902 100644
--- a/sys/dev/nvme/nvme_private.h
+++ b/sys/dev/nvme/nvme_private.h
@@ -128,7 +128,7 @@ extern int32_t nvme_retry_count;
struct nvme_completion_poll_status {
struct nvme_completion cpl;
- boolean_t done;
+ int done;
};
#define NVME_REQUEST_VADDR 1