Message ID | 1645095472-26530-8-git-send-email-byungchul.park@lge.com |
---|---|
State | New |
Headers | show |
Series | DEPT(Dependency Tracker) | expand |
Hi Byungchul,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on tip/sched/core]
[also build test WARNING on linux/master linus/master v5.17-rc4]
[cannot apply to tip/locking/core hnaz-mm/master next-20220217]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Byungchul-Park/DEPT-Dependency-Tracker/20220217-190040
base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 3624ba7b5e2acc02b01301ea5fd3534971eb9896
config: arc-allyesconfig (https://download.01.org/0day-ci/archive/20220218/202202180000.zICbPUhq-lkp@intel.com/config)
compiler: arceb-elf-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/8ef6cb09cb67a0c5cd7ba4f25f4825d0a5b269b0
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Byungchul-Park/DEPT-Dependency-Tracker/20220217-190040
git checkout 8ef6cb09cb67a0c5cd7ba4f25f4825d0a5b269b0
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=arc SHELL=/bin/bash drivers/scsi/qla2xxx/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
drivers/scsi/qla2xxx/qla_dfs.c: In function 'qla2x00_dfs_tgt_port_database_show':
>> drivers/scsi/qla2xxx/qla_dfs.c:227:1: warning: the frame size of 1028 bytes is larger than 1024 bytes [-Wframe-larger-than=]
227 | }
| ^
vim +227 drivers/scsi/qla2xxx/qla_dfs.c
36c7845282eef01 Quinn Tran 2016-02-04 174
c423437e3ff41b8 Himanshu Madhani 2017-03-15 175 static int
c423437e3ff41b8 Himanshu Madhani 2017-03-15 176 qla2x00_dfs_tgt_port_database_show(struct seq_file *s, void *unused)
c423437e3ff41b8 Himanshu Madhani 2017-03-15 177 {
c423437e3ff41b8 Himanshu Madhani 2017-03-15 178 scsi_qla_host_t *vha = s->private;
c423437e3ff41b8 Himanshu Madhani 2017-03-15 179 struct qla_hw_data *ha = vha->hw;
4e5a05d1ecd92ce Arun Easi 2020-09-03 180 struct gid_list_info *gid_list;
c423437e3ff41b8 Himanshu Madhani 2017-03-15 181 dma_addr_t gid_list_dma;
c423437e3ff41b8 Himanshu Madhani 2017-03-15 182 fc_port_t fc_port;
4e5a05d1ecd92ce Arun Easi 2020-09-03 183 char *id_iter;
c423437e3ff41b8 Himanshu Madhani 2017-03-15 184 int rc, i;
c423437e3ff41b8 Himanshu Madhani 2017-03-15 185 uint16_t entries, loop_id;
c423437e3ff41b8 Himanshu Madhani 2017-03-15 186
c423437e3ff41b8 Himanshu Madhani 2017-03-15 187 seq_printf(s, "%s\n", vha->host_str);
c423437e3ff41b8 Himanshu Madhani 2017-03-15 188 gid_list = dma_alloc_coherent(&ha->pdev->dev,
c423437e3ff41b8 Himanshu Madhani 2017-03-15 189 qla2x00_gid_list_size(ha),
c423437e3ff41b8 Himanshu Madhani 2017-03-15 190 &gid_list_dma, GFP_KERNEL);
c423437e3ff41b8 Himanshu Madhani 2017-03-15 191 if (!gid_list) {
83548fe2fcbb78a Quinn Tran 2017-06-02 192 ql_dbg(ql_dbg_user, vha, 0x7018,
c423437e3ff41b8 Himanshu Madhani 2017-03-15 193 "DMA allocation failed for %u\n",
c423437e3ff41b8 Himanshu Madhani 2017-03-15 194 qla2x00_gid_list_size(ha));
c423437e3ff41b8 Himanshu Madhani 2017-03-15 195 return 0;
c423437e3ff41b8 Himanshu Madhani 2017-03-15 196 }
c423437e3ff41b8 Himanshu Madhani 2017-03-15 197
c423437e3ff41b8 Himanshu Madhani 2017-03-15 198 rc = qla24xx_gidlist_wait(vha, gid_list, gid_list_dma,
c423437e3ff41b8 Himanshu Madhani 2017-03-15 199 &entries);
c423437e3ff41b8 Himanshu Madhani 2017-03-15 200 if (rc != QLA_SUCCESS)
c423437e3ff41b8 Himanshu Madhani 2017-03-15 201 goto out_free_id_list;
c423437e3ff41b8 Himanshu Madhani 2017-03-15 202
4e5a05d1ecd92ce Arun Easi 2020-09-03 203 id_iter = (char *)gid_list;
c423437e3ff41b8 Himanshu Madhani 2017-03-15 204
c423437e3ff41b8 Himanshu Madhani 2017-03-15 205 seq_puts(s, "Port Name Port ID Loop ID\n");
c423437e3ff41b8 Himanshu Madhani 2017-03-15 206
c423437e3ff41b8 Himanshu Madhani 2017-03-15 207 for (i = 0; i < entries; i++) {
4e5a05d1ecd92ce Arun Easi 2020-09-03 208 struct gid_list_info *gid =
4e5a05d1ecd92ce Arun Easi 2020-09-03 209 (struct gid_list_info *)id_iter;
c423437e3ff41b8 Himanshu Madhani 2017-03-15 210 loop_id = le16_to_cpu(gid->loop_id);
c423437e3ff41b8 Himanshu Madhani 2017-03-15 211 memset(&fc_port, 0, sizeof(fc_port_t));
c423437e3ff41b8 Himanshu Madhani 2017-03-15 212
c423437e3ff41b8 Himanshu Madhani 2017-03-15 213 fc_port.loop_id = loop_id;
c423437e3ff41b8 Himanshu Madhani 2017-03-15 214
c423437e3ff41b8 Himanshu Madhani 2017-03-15 215 rc = qla24xx_gpdb_wait(vha, &fc_port, 0);
c423437e3ff41b8 Himanshu Madhani 2017-03-15 216 seq_printf(s, "%8phC %02x%02x%02x %d\n",
c423437e3ff41b8 Himanshu Madhani 2017-03-15 217 fc_port.port_name, fc_port.d_id.b.domain,
c423437e3ff41b8 Himanshu Madhani 2017-03-15 218 fc_port.d_id.b.area, fc_port.d_id.b.al_pa,
c423437e3ff41b8 Himanshu Madhani 2017-03-15 219 fc_port.loop_id);
4e5a05d1ecd92ce Arun Easi 2020-09-03 220 id_iter += ha->gid_list_info_size;
c423437e3ff41b8 Himanshu Madhani 2017-03-15 221 }
c423437e3ff41b8 Himanshu Madhani 2017-03-15 222 out_free_id_list:
c423437e3ff41b8 Himanshu Madhani 2017-03-15 223 dma_free_coherent(&ha->pdev->dev, qla2x00_gid_list_size(ha),
c423437e3ff41b8 Himanshu Madhani 2017-03-15 224 gid_list, gid_list_dma);
c423437e3ff41b8 Himanshu Madhani 2017-03-15 225
c423437e3ff41b8 Himanshu Madhani 2017-03-15 226 return 0;
c423437e3ff41b8 Himanshu Madhani 2017-03-15 @227 }
c423437e3ff41b8 Himanshu Madhani 2017-03-15 228
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff --git a/include/linux/completion.h b/include/linux/completion.h index 51d9ab0..0beaa17 100644 --- a/include/linux/completion.h +++ b/include/linux/completion.h @@ -26,14 +26,48 @@ struct completion { unsigned int done; struct swait_queue_head wait; + struct dept_map dmap; }; +#ifdef CONFIG_DEPT +#define dept_wfc_init(m, k, s, n) dept_map_init(m, k, s, n) +#define dept_wfc_reinit(m) dept_map_reinit(m) +#define dept_wfc_wait(m, ip) \ +do { \ + dept_ask_event(m); \ + dept_wait(m, 1UL, ip, __func__, 0); \ +} while (0) +#define dept_wfc_complete(m, ip) dept_event(m, 1UL, ip, __func__) +#define dept_wfc_enter(m, ip) dept_ecxt_enter(m, 1UL, ip, "completion_context_enter", "complete", 0) +#define dept_wfc_exit(m, ip) dept_ecxt_exit(m, ip) +#else +#define dept_wfc_init(m, k, s, n) do { (void)(n); (void)(k); } while (0) +#define dept_wfc_reinit(m) do { } while (0) +#define dept_wfc_wait(m, ip) do { } while (0) +#define dept_wfc_complete(m, ip) do { } while (0) +#define dept_wfc_enter(m, ip) do { } while (0) +#define dept_wfc_exit(m, ip) do { } while (0) +#endif + +#ifdef CONFIG_DEPT +#define WFC_DEPT_MAP_INIT(work) .dmap = { .name = #work } +#else +#define WFC_DEPT_MAP_INIT(work) +#endif + +#define init_completion(x) \ + do { \ + static struct dept_key __dkey; \ + __init_completion(x, &__dkey, #x); \ + } while (0) + #define init_completion_map(x, m) init_completion(x) static inline void complete_acquire(struct completion *x) {} static inline void complete_release(struct completion *x) {} #define COMPLETION_INITIALIZER(work) \ - { 0, __SWAIT_QUEUE_HEAD_INITIALIZER((work).wait) } + { 0, __SWAIT_QUEUE_HEAD_INITIALIZER((work).wait), \ + WFC_DEPT_MAP_INIT(work) } #define COMPLETION_INITIALIZER_ONSTACK_MAP(work, map) \ (*({ init_completion_map(&(work), &(map)); &(work); })) @@ -81,9 +115,12 @@ static inline void complete_release(struct completion *x) {} * This inline function will initialize a dynamically created completion * structure. */ -static inline void init_completion(struct completion *x) +static inline void __init_completion(struct completion *x, + struct dept_key *dkey, + const char *name) { x->done = 0; + dept_wfc_init(&x->dmap, dkey, 0, name); init_swait_queue_head(&x->wait); } @@ -97,6 +134,7 @@ static inline void init_completion(struct completion *x) static inline void reinit_completion(struct completion *x) { x->done = 0; + dept_wfc_reinit(&x->dmap); } extern void wait_for_completion(struct completion *); diff --git a/kernel/sched/completion.c b/kernel/sched/completion.c index a778554..6e31cc0 100644 --- a/kernel/sched/completion.c +++ b/kernel/sched/completion.c @@ -29,6 +29,7 @@ void complete(struct completion *x) { unsigned long flags; + dept_wfc_complete(&x->dmap, _RET_IP_); raw_spin_lock_irqsave(&x->wait.lock, flags); if (x->done != UINT_MAX) @@ -58,6 +59,7 @@ void complete_all(struct completion *x) { unsigned long flags; + dept_wfc_complete(&x->dmap, _RET_IP_); lockdep_assert_RT_in_threaded_ctx(); raw_spin_lock_irqsave(&x->wait.lock, flags); @@ -112,17 +114,23 @@ void complete_all(struct completion *x) } static long __sched -wait_for_common(struct completion *x, long timeout, int state) +_wait_for_common(struct completion *x, long timeout, int state) { return __wait_for_common(x, schedule_timeout, timeout, state); } static long __sched -wait_for_common_io(struct completion *x, long timeout, int state) +_wait_for_common_io(struct completion *x, long timeout, int state) { return __wait_for_common(x, io_schedule_timeout, timeout, state); } +#define wait_for_common(x, t, s) \ +({ dept_wfc_wait(&(x)->dmap, _RET_IP_); _wait_for_common(x, t, s); }) + +#define wait_for_common_io(x, t, s) \ +({ dept_wfc_wait(&(x)->dmap, _RET_IP_); _wait_for_common_io(x, t, s); }) + /** * wait_for_completion: - waits for completion of a task * @x: holds the state of this particular completion
Makes Dept able to track dependencies by wait_for_completion()/complete(). Signed-off-by: Byungchul Park <byungchul.park@lge.com> --- include/linux/completion.h | 42 ++++++++++++++++++++++++++++++++++++++++-- kernel/sched/completion.c | 12 ++++++++++-- 2 files changed, 50 insertions(+), 4 deletions(-)