Message ID | 1694426069-74140-2-git-send-email-quic_qianyu@quicinc.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Add lock to avoid race when ringing channel DB | expand |
Hi Qiang, kernel test robot noticed the following build warnings: https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Qiang-Yu/bus-mhi-host-Add-spinlock-to-protect-WP-access-when-queueing-TREs/20230912-072349 base: linus/master patch link: https://lore.kernel.org/r/1694426069-74140-2-git-send-email-quic_qianyu%40quicinc.com patch subject: [PATCH 1/2] bus: mhi: host: Add spinlock to protect WP access when queueing TREs config: i386-randconfig-141-20230913 (https://download.01.org/0day-ci/archive/20230913/202309131155.OQbvsWhZ-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce: (https://download.01.org/0day-ci/archive/20230913/202309131155.OQbvsWhZ-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Reported-by: Dan Carpenter <dan.carpenter@linaro.org> | Closes: https://lore.kernel.org/r/202309131155.OQbvsWhZ-lkp@intel.com/ smatch warnings: drivers/bus/mhi/host/main.c:1249 mhi_gen_tre() warn: inconsistent returns '&mhi_chan->lock'. vim +1249 drivers/bus/mhi/host/main.c 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1200 int mhi_gen_tre(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan, cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1201 struct mhi_buf_info *info, enum mhi_flags flags) 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1202 { 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1203 struct mhi_ring *buf_ring, *tre_ring; 84f5f31f110e5e drivers/bus/mhi/host/main.c Manivannan Sadhasivam 2022-03-01 1204 struct mhi_ring_element *mhi_tre; 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1205 struct mhi_buf_info *buf_info; 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1206 int eot, eob, chain, bei; 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1207 int ret; 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1208 c8a037317010d5 drivers/bus/mhi/host/main.c Bhaumik Bhatt 2023-09-11 1209 /* Protect accesses for reading and incrementing WP */ c8a037317010d5 drivers/bus/mhi/host/main.c Bhaumik Bhatt 2023-09-11 1210 write_lock_bh(&mhi_chan->lock); c8a037317010d5 drivers/bus/mhi/host/main.c Bhaumik Bhatt 2023-09-11 1211 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1212 buf_ring = &mhi_chan->buf_ring; 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1213 tre_ring = &mhi_chan->tre_ring; 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1214 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1215 buf_info = buf_ring->wp; cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1216 WARN_ON(buf_info->used); cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1217 buf_info->pre_mapped = info->pre_mapped; cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1218 if (info->pre_mapped) cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1219 buf_info->p_addr = info->p_addr; cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1220 else cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1221 buf_info->v_addr = info->v_addr; cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1222 buf_info->cb_buf = info->cb_buf; 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1223 buf_info->wp = tre_ring->wp; 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1224 buf_info->dir = mhi_chan->dir; cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1225 buf_info->len = info->len; 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1226 cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1227 if (!info->pre_mapped) { 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1228 ret = mhi_cntrl->map_single(mhi_cntrl, buf_info); 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1229 if (ret) 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1230 return ret; write_unlock_bh(&mhi_chan->lock); cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1231 } 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1232 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1233 eob = !!(flags & MHI_EOB); 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1234 eot = !!(flags & MHI_EOT); 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1235 chain = !!(flags & MHI_CHAIN); 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1236 bei = !!(mhi_chan->intmod); 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1237 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1238 mhi_tre = tre_ring->wp; 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1239 mhi_tre->ptr = MHI_TRE_DATA_PTR(buf_info->p_addr); cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1240 mhi_tre->dword[0] = MHI_TRE_DATA_DWORD0(info->len); 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1241 mhi_tre->dword[1] = MHI_TRE_DATA_DWORD1(bei, eot, eob, chain); 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1242 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1243 /* increment WP */ 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1244 mhi_add_ring_element(mhi_cntrl, tre_ring); 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1245 mhi_add_ring_element(mhi_cntrl, buf_ring); 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1246 c8a037317010d5 drivers/bus/mhi/host/main.c Bhaumik Bhatt 2023-09-11 1247 write_unlock_bh(&mhi_chan->lock); c8a037317010d5 drivers/bus/mhi/host/main.c Bhaumik Bhatt 2023-09-11 1248 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 @1249 return 0; 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1250 }
On 9/13/2023 3:18 PM, Dan Carpenter wrote: > Hi Qiang, > > kernel test robot noticed the following build warnings: > > https://git-scm.com/docs/git-format-patch#_base_tree_information] > > url: https://github.com/intel-lab-lkp/linux/commits/Qiang-Yu/bus-mhi-host-Add-spinlock-to-protect-WP-access-when-queueing-TREs/20230912-072349 > base: linus/master > patch link: https://lore.kernel.org/r/1694426069-74140-2-git-send-email-quic_qianyu%40quicinc.com > patch subject: [PATCH 1/2] bus: mhi: host: Add spinlock to protect WP access when queueing TREs > config: i386-randconfig-141-20230913 (https://download.01.org/0day-ci/archive/20230913/202309131155.OQbvsWhZ-lkp@intel.com/config) > compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 > reproduce: (https://download.01.org/0day-ci/archive/20230913/202309131155.OQbvsWhZ-lkp@intel.com/reproduce) > > If you fix the issue in a separate patch/commit (i.e. not just a new version of > the same patch/commit), kindly add following tags > | Reported-by: kernel test robot <lkp@intel.com> > | Reported-by: Dan Carpenter <dan.carpenter@linaro.org> > | Closes: https://lore.kernel.org/r/202309131155.OQbvsWhZ-lkp@intel.com/ > > smatch warnings: > drivers/bus/mhi/host/main.c:1249 mhi_gen_tre() warn: inconsistent returns '&mhi_chan->lock'. > > vim +1249 drivers/bus/mhi/host/main.c Thanks for reporting this error. Added write_unlock_bh(&mhi_chan->lock) before return because of error process in v2 patch. > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1200 int mhi_gen_tre(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan, > cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1201 struct mhi_buf_info *info, enum mhi_flags flags) > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1202 { > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1203 struct mhi_ring *buf_ring, *tre_ring; > 84f5f31f110e5e drivers/bus/mhi/host/main.c Manivannan Sadhasivam 2022-03-01 1204 struct mhi_ring_element *mhi_tre; > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1205 struct mhi_buf_info *buf_info; > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1206 int eot, eob, chain, bei; > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1207 int ret; > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1208 > c8a037317010d5 drivers/bus/mhi/host/main.c Bhaumik Bhatt 2023-09-11 1209 /* Protect accesses for reading and incrementing WP */ > c8a037317010d5 drivers/bus/mhi/host/main.c Bhaumik Bhatt 2023-09-11 1210 write_lock_bh(&mhi_chan->lock); > c8a037317010d5 drivers/bus/mhi/host/main.c Bhaumik Bhatt 2023-09-11 1211 > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1212 buf_ring = &mhi_chan->buf_ring; > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1213 tre_ring = &mhi_chan->tre_ring; > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1214 > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1215 buf_info = buf_ring->wp; > cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1216 WARN_ON(buf_info->used); > cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1217 buf_info->pre_mapped = info->pre_mapped; > cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1218 if (info->pre_mapped) > cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1219 buf_info->p_addr = info->p_addr; > cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1220 else > cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1221 buf_info->v_addr = info->v_addr; > cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1222 buf_info->cb_buf = info->cb_buf; > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1223 buf_info->wp = tre_ring->wp; > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1224 buf_info->dir = mhi_chan->dir; > cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1225 buf_info->len = info->len; > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1226 > cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1227 if (!info->pre_mapped) { > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1228 ret = mhi_cntrl->map_single(mhi_cntrl, buf_info); > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1229 if (ret) > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1230 return ret; > > write_unlock_bh(&mhi_chan->lock); > > cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1231 } > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1232 > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1233 eob = !!(flags & MHI_EOB); > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1234 eot = !!(flags & MHI_EOT); > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1235 chain = !!(flags & MHI_CHAIN); > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1236 bei = !!(mhi_chan->intmod); > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1237 > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1238 mhi_tre = tre_ring->wp; > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1239 mhi_tre->ptr = MHI_TRE_DATA_PTR(buf_info->p_addr); > cd116318803f5e drivers/bus/mhi/core/main.c Hemant Kumar 2020-05-21 1240 mhi_tre->dword[0] = MHI_TRE_DATA_DWORD0(info->len); > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1241 mhi_tre->dword[1] = MHI_TRE_DATA_DWORD1(bei, eot, eob, chain); > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1242 > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1243 /* increment WP */ > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1244 mhi_add_ring_element(mhi_cntrl, tre_ring); > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1245 mhi_add_ring_element(mhi_cntrl, buf_ring); > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1246 > c8a037317010d5 drivers/bus/mhi/host/main.c Bhaumik Bhatt 2023-09-11 1247 write_unlock_bh(&mhi_chan->lock); > c8a037317010d5 drivers/bus/mhi/host/main.c Bhaumik Bhatt 2023-09-11 1248 > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 @1249 return 0; > 189ff97cca53e3 drivers/bus/mhi/core/main.c Manivannan Sadhasivam 2020-02-20 1250 } >
diff --git a/drivers/bus/mhi/host/main.c b/drivers/bus/mhi/host/main.c index dcf627b..ce42205 100644 --- a/drivers/bus/mhi/host/main.c +++ b/drivers/bus/mhi/host/main.c @@ -642,6 +642,7 @@ static int parse_xfer_event(struct mhi_controller *mhi_cntrl, mhi_del_ring_element(mhi_cntrl, tre_ring); local_rp = tre_ring->rp; + read_unlock_bh(&mhi_chan->lock); /* notify client */ mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result); @@ -667,6 +668,7 @@ static int parse_xfer_event(struct mhi_controller *mhi_cntrl, kfree(buf_info->cb_buf); } } + read_lock_bh(&mhi_chan->lock); } break; } /* CC_EOT */ @@ -1204,6 +1206,9 @@ int mhi_gen_tre(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan, int eot, eob, chain, bei; int ret; + /* Protect accesses for reading and incrementing WP */ + write_lock_bh(&mhi_chan->lock); + buf_ring = &mhi_chan->buf_ring; tre_ring = &mhi_chan->tre_ring; @@ -1239,6 +1244,8 @@ int mhi_gen_tre(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan, mhi_add_ring_element(mhi_cntrl, tre_ring); mhi_add_ring_element(mhi_cntrl, buf_ring); + write_unlock_bh(&mhi_chan->lock); + return 0; }