未验证 提交 add19239 编写于 作者: O openeuler-ci-bot 提交者: Gitee

!1680 nvme-pci: fix doorbell buffer value endianness

Merge Pull Request from: @ci-robot 
 
PR sync from: Yong Hu <yong.hu@windriver.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/TIXNFEQX2EKNZWJEDDC35XWBM67ZPDFR/ 
 
https://gitee.com/openeuler/kernel/issues/I7PZZC 
 
Link:https://gitee.com/openeuler/kernel/pulls/1680 

Reviewed-by: Zheng Zengkai <zhengzengkai@huawei.com> 
Signed-off-by: Zheng Zengkai <zhengzengkai@huawei.com> 
...@@ -139,9 +139,9 @@ struct nvme_dev { ...@@ -139,9 +139,9 @@ struct nvme_dev {
mempool_t *iod_mempool; mempool_t *iod_mempool;
/* shadow doorbell buffer support: */ /* shadow doorbell buffer support: */
u32 *dbbuf_dbs; __le32 *dbbuf_dbs;
dma_addr_t dbbuf_dbs_dma_addr; dma_addr_t dbbuf_dbs_dma_addr;
u32 *dbbuf_eis; __le32 *dbbuf_eis;
dma_addr_t dbbuf_eis_dma_addr; dma_addr_t dbbuf_eis_dma_addr;
/* host memory buffer support: */ /* host memory buffer support: */
...@@ -209,10 +209,10 @@ struct nvme_queue { ...@@ -209,10 +209,10 @@ struct nvme_queue {
#define NVMEQ_SQ_CMB 1 #define NVMEQ_SQ_CMB 1
#define NVMEQ_DELETE_ERROR 2 #define NVMEQ_DELETE_ERROR 2
#define NVMEQ_POLLED 3 #define NVMEQ_POLLED 3
u32 *dbbuf_sq_db; __le32 *dbbuf_sq_db;
u32 *dbbuf_cq_db; __le32 *dbbuf_cq_db;
u32 *dbbuf_sq_ei; __le32 *dbbuf_sq_ei;
u32 *dbbuf_cq_ei; __le32 *dbbuf_cq_ei;
struct completion delete_done; struct completion delete_done;
}; };
...@@ -334,11 +334,11 @@ static inline int nvme_dbbuf_need_event(u16 event_idx, u16 new_idx, u16 old) ...@@ -334,11 +334,11 @@ static inline int nvme_dbbuf_need_event(u16 event_idx, u16 new_idx, u16 old)
} }
/* Update dbbuf and return true if an MMIO is required */ /* Update dbbuf and return true if an MMIO is required */
static bool nvme_dbbuf_update_and_check_event(u16 value, u32 *dbbuf_db, static bool nvme_dbbuf_update_and_check_event(u16 value, __le32 *dbbuf_db,
volatile u32 *dbbuf_ei) volatile __le32 *dbbuf_ei)
{ {
if (dbbuf_db) { if (dbbuf_db) {
u16 old_value; u16 old_value, event_idx;
/* /*
* Ensure that the queue is written before updating * Ensure that the queue is written before updating
...@@ -346,8 +346,8 @@ static bool nvme_dbbuf_update_and_check_event(u16 value, u32 *dbbuf_db, ...@@ -346,8 +346,8 @@ static bool nvme_dbbuf_update_and_check_event(u16 value, u32 *dbbuf_db,
*/ */
wmb(); wmb();
old_value = *dbbuf_db; old_value = le32_to_cpu(*dbbuf_db);
*dbbuf_db = value; *dbbuf_db = cpu_to_le32(value);
/* /*
* Ensure that the doorbell is updated before reading the event * Ensure that the doorbell is updated before reading the event
...@@ -357,7 +357,8 @@ static bool nvme_dbbuf_update_and_check_event(u16 value, u32 *dbbuf_db, ...@@ -357,7 +357,8 @@ static bool nvme_dbbuf_update_and_check_event(u16 value, u32 *dbbuf_db,
*/ */
mb(); mb();
if (!nvme_dbbuf_need_event(*dbbuf_ei, value, old_value)) event_idx = le32_to_cpu(*dbbuf_ei);
if (!nvme_dbbuf_need_event(event_idx, value, old_value))
return false; return false;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册