On Tue, Jul 30, 2024 at 12:34:08PM -1000, Tejun Heo wrote: > Hello, Matthew. > > On Tue, Jul 30, 2024 at 03:17:40PM -0700, Matthew Brost wrote: > > +/** > > + * wq_init_user_lockdep_map - init user lockdep map for workqueue > > + * @wq: workqueue to init lockdep map for > > + * @lockdep_map: lockdep map to use for workqueue > > + * > > + * Initialize workqueue with a user defined lockdep map. WQ_USER_OWNED_LOCKDEP > > + * must be set for workqueue. > > + */ > > +void wq_init_user_lockdep_map(struct workqueue_struct *wq, > > + struct lockdep_map *lockdep_map) > > +{ > > + if (WARN_ON_ONCE(!(wq->flags & WQ_USER_OWNED_LOCKDEP))) > > + return; > > + > > + wq->lockdep_map = lockdep_map; > > +} > > +EXPORT_SYMBOL_GPL(wq_init_user_lockdep_map); > > Would it be possible to make it a one-piece interface - ie. add > alloc_workqueue_lockdep_map() which takes an external lockdep map rather > than splitting it over two calls? > I didn't want to change the export alloc_workqueue() arguments so I went with this approach. Are you suggesting export a new function alloc_workqueue_lockdep_map() which will share an internal implementation with the existing alloc_workqueue() but passes in a lockdep map? That could work. Matt > Thanks. > > -- > tejun