* [PATCH 0/2] fsi: core: Lock scan mutex for master index removal @ 2023-04-12 18:56 Eddie James 2023-04-12 18:56 ` [PATCH 1/2] " Eddie James 2023-04-12 18:56 ` [PATCH 2/2] fsi: core: Add trace events for scan and unregister Eddie James 0 siblings, 2 replies; 6+ messages in thread From: Eddie James @ 2023-04-12 18:56 UTC (permalink / raw) To: linux-fsi; +Cc: linux-kernel, joel, jk, alistair, Eddie James If a master scan occurs while the master is being unregistered, the devicecs may end up with incorrect and possibly duplicate names, resulting in kernel warnings. Ensure the master index isn't changed outside of the scan mutex. In addition, add some trace events to debug any further issues in this area. Eddie James (2): fsi: core: Lock scan mutex for master index removal fsi: core: Add trace events for scan and unregister drivers/fsi/fsi-core.c | 6 +++++- include/trace/events/fsi.h | 31 +++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) -- 2.31.1 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] fsi: core: Lock scan mutex for master index removal 2023-04-12 18:56 [PATCH 0/2] fsi: core: Lock scan mutex for master index removal Eddie James @ 2023-04-12 18:56 ` Eddie James 2023-05-31 7:47 ` Joel Stanley 2023-04-12 18:56 ` [PATCH 2/2] fsi: core: Add trace events for scan and unregister Eddie James 1 sibling, 1 reply; 6+ messages in thread From: Eddie James @ 2023-04-12 18:56 UTC (permalink / raw) To: linux-fsi; +Cc: linux-kernel, joel, jk, alistair, Eddie James If a master scan occurs while the master is being unregistered, the devicecs may end up with incorrect and possibly duplicate names, resulting in kernel warnings. Ensure the master index isn't changed outside of the scan mutex. Signed-off-by: Eddie James <eajames@linux.ibm.com> --- drivers/fsi/fsi-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c index fcbf0469ce3f..18d4d68482d7 100644 --- a/drivers/fsi/fsi-core.c +++ b/drivers/fsi/fsi-core.c @@ -1354,12 +1354,12 @@ EXPORT_SYMBOL_GPL(fsi_master_register); void fsi_master_unregister(struct fsi_master *master) { + mutex_lock(&master->scan_lock); if (master->idx >= 0) { ida_simple_remove(&master_ida, master->idx); master->idx = -1; } - mutex_lock(&master->scan_lock); fsi_master_unscan(master); mutex_unlock(&master->scan_lock); device_unregister(&master->dev); -- 2.31.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] fsi: core: Lock scan mutex for master index removal 2023-04-12 18:56 ` [PATCH 1/2] " Eddie James @ 2023-05-31 7:47 ` Joel Stanley 2023-06-08 16:45 ` Eddie James 0 siblings, 1 reply; 6+ messages in thread From: Joel Stanley @ 2023-05-31 7:47 UTC (permalink / raw) To: Eddie James; +Cc: linux-fsi, linux-kernel, jk, alistair On Wed, 12 Apr 2023 at 18:56, Eddie James <eajames@linux.ibm.com> wrote: > > If a master scan occurs while the master is being unregistered, > the devicecs may end up with incorrect and possibly duplicate names, typo: devices > resulting in kernel warnings. Ensure the master index isn't changed > outside of the scan mutex. > > Signed-off-by: Eddie James <eajames@linux.ibm.com> > --- > drivers/fsi/fsi-core.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c > index fcbf0469ce3f..18d4d68482d7 100644 > --- a/drivers/fsi/fsi-core.c > +++ b/drivers/fsi/fsi-core.c > @@ -1354,12 +1354,12 @@ EXPORT_SYMBOL_GPL(fsi_master_register); > > void fsi_master_unregister(struct fsi_master *master) > { > + mutex_lock(&master->scan_lock); The ida functions are supposed to not require locking, but protecting against the test and changing of ->idx makes sense. Do you want to add a Fixes: line? > if (master->idx >= 0) { > ida_simple_remove(&master_ida, master->idx); the ida_simple functions are depreciated, at some point we should replace them with ida_alloc/ida_free. > master->idx = -1; > } > > - mutex_lock(&master->scan_lock); > fsi_master_unscan(master); > mutex_unlock(&master->scan_lock); > device_unregister(&master->dev); > -- > 2.31.1 > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] fsi: core: Lock scan mutex for master index removal 2023-05-31 7:47 ` Joel Stanley @ 2023-06-08 16:45 ` Eddie James 0 siblings, 0 replies; 6+ messages in thread From: Eddie James @ 2023-06-08 16:45 UTC (permalink / raw) To: Joel Stanley; +Cc: linux-fsi, linux-kernel, jk, alistair On 5/31/23 02:47, Joel Stanley wrote: > On Wed, 12 Apr 2023 at 18:56, Eddie James <eajames@linux.ibm.com> wrote: >> If a master scan occurs while the master is being unregistered, >> the devicecs may end up with incorrect and possibly duplicate names, > typo: devices Thanks... > >> resulting in kernel warnings. Ensure the master index isn't changed >> outside of the scan mutex. >> >> Signed-off-by: Eddie James <eajames@linux.ibm.com> >> --- >> drivers/fsi/fsi-core.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c >> index fcbf0469ce3f..18d4d68482d7 100644 >> --- a/drivers/fsi/fsi-core.c >> +++ b/drivers/fsi/fsi-core.c >> @@ -1354,12 +1354,12 @@ EXPORT_SYMBOL_GPL(fsi_master_register); >> >> void fsi_master_unregister(struct fsi_master *master) >> { >> + mutex_lock(&master->scan_lock); > The ida functions are supposed to not require locking, but protecting > against the test and changing of ->idx makes sense. > > Do you want to add a Fixes: line? Sure. > >> if (master->idx >= 0) { >> ida_simple_remove(&master_ida, master->idx); > the ida_simple functions are depreciated, at some point we should > replace them with ida_alloc/ida_free. OK, I'll see if it makes sense to do that now. Thanks! Eddie > >> master->idx = -1; >> } >> >> - mutex_lock(&master->scan_lock); >> fsi_master_unscan(master); >> mutex_unlock(&master->scan_lock); >> device_unregister(&master->dev); >> -- >> 2.31.1 >> ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/2] fsi: core: Add trace events for scan and unregister 2023-04-12 18:56 [PATCH 0/2] fsi: core: Lock scan mutex for master index removal Eddie James 2023-04-12 18:56 ` [PATCH 1/2] " Eddie James @ 2023-04-12 18:56 ` Eddie James 2023-05-31 1:52 ` Joel Stanley 1 sibling, 1 reply; 6+ messages in thread From: Eddie James @ 2023-04-12 18:56 UTC (permalink / raw) To: linux-fsi; +Cc: linux-kernel, joel, jk, alistair, Eddie James Add more trace events for the scanning and unregistration functions for debug purposes. Signed-off-by: Eddie James <eajames@linux.ibm.com> --- drivers/fsi/fsi-core.c | 4 ++++ include/trace/events/fsi.h | 31 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c index 18d4d68482d7..2dc119ab073c 100644 --- a/drivers/fsi/fsi-core.c +++ b/drivers/fsi/fsi-core.c @@ -1220,6 +1220,7 @@ static int fsi_master_scan(struct fsi_master *master) { int link, rc; + trace_fsi_master_scan(master, true); for (link = 0; link < master->n_links; link++) { rc = fsi_master_link_enable(master, link); if (rc) { @@ -1261,6 +1262,7 @@ static int fsi_master_remove_slave(struct device *dev, void *arg) static void fsi_master_unscan(struct fsi_master *master) { + trace_fsi_master_scan(master, false); device_for_each_child(&master->dev, NULL, fsi_master_remove_slave); } @@ -1355,6 +1357,8 @@ EXPORT_SYMBOL_GPL(fsi_master_register); void fsi_master_unregister(struct fsi_master *master) { mutex_lock(&master->scan_lock); + trace_fsi_master_unregister(master); + if (master->idx >= 0) { ida_simple_remove(&master_ida, master->idx); master->idx = -1; diff --git a/include/trace/events/fsi.h b/include/trace/events/fsi.h index c9a72e8432b8..5ff15126ad9d 100644 --- a/include/trace/events/fsi.h +++ b/include/trace/events/fsi.h @@ -122,6 +122,37 @@ TRACE_EVENT(fsi_master_break, ) ); +TRACE_EVENT(fsi_master_scan, + TP_PROTO(const struct fsi_master *master, bool scan), + TP_ARGS(master, scan), + TP_STRUCT__entry( + __field(int, master_idx) + __field(int, n_links) + __field(bool, scan) + ), + TP_fast_assign( + __entry->master_idx = master->idx; + __entry->n_links = master->n_links; + __entry->scan = scan; + ), + TP_printk("fsi%d (%d links) %s", __entry->master_idx, __entry->n_links, + __entry->scan ? "scan" : "unscan") +); + +TRACE_EVENT(fsi_master_unregister, + TP_PROTO(const struct fsi_master *master), + TP_ARGS(master), + TP_STRUCT__entry( + __field(int, master_idx) + __field(int, n_links) + ), + TP_fast_assign( + __entry->master_idx = master->idx; + __entry->n_links = master->n_links; + ), + TP_printk("fsi%d (%d links)", __entry->master_idx, __entry->n_links) +); + TRACE_EVENT(fsi_slave_init, TP_PROTO(const struct fsi_slave *slave), TP_ARGS(slave), -- 2.31.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] fsi: core: Add trace events for scan and unregister 2023-04-12 18:56 ` [PATCH 2/2] fsi: core: Add trace events for scan and unregister Eddie James @ 2023-05-31 1:52 ` Joel Stanley 0 siblings, 0 replies; 6+ messages in thread From: Joel Stanley @ 2023-05-31 1:52 UTC (permalink / raw) To: Eddie James; +Cc: linux-fsi, linux-kernel, jk, alistair On Wed, 12 Apr 2023 at 18:56, Eddie James <eajames@linux.ibm.com> wrote: > > Add more trace events for the scanning and unregistration > functions for debug purposes. > > Signed-off-by: Eddie James <eajames@linux.ibm.com> Reviewed-by: Joel Stanley <joel@jms.id.au> > --- > drivers/fsi/fsi-core.c | 4 ++++ > include/trace/events/fsi.h | 31 +++++++++++++++++++++++++++++++ > 2 files changed, 35 insertions(+) > > diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c > index 18d4d68482d7..2dc119ab073c 100644 > --- a/drivers/fsi/fsi-core.c > +++ b/drivers/fsi/fsi-core.c > @@ -1220,6 +1220,7 @@ static int fsi_master_scan(struct fsi_master *master) > { > int link, rc; > > + trace_fsi_master_scan(master, true); > for (link = 0; link < master->n_links; link++) { > rc = fsi_master_link_enable(master, link); > if (rc) { > @@ -1261,6 +1262,7 @@ static int fsi_master_remove_slave(struct device *dev, void *arg) > > static void fsi_master_unscan(struct fsi_master *master) > { > + trace_fsi_master_scan(master, false); > device_for_each_child(&master->dev, NULL, fsi_master_remove_slave); > } > > @@ -1355,6 +1357,8 @@ EXPORT_SYMBOL_GPL(fsi_master_register); > void fsi_master_unregister(struct fsi_master *master) > { > mutex_lock(&master->scan_lock); > + trace_fsi_master_unregister(master); > + > if (master->idx >= 0) { > ida_simple_remove(&master_ida, master->idx); > master->idx = -1; > diff --git a/include/trace/events/fsi.h b/include/trace/events/fsi.h > index c9a72e8432b8..5ff15126ad9d 100644 > --- a/include/trace/events/fsi.h > +++ b/include/trace/events/fsi.h > @@ -122,6 +122,37 @@ TRACE_EVENT(fsi_master_break, > ) > ); > > +TRACE_EVENT(fsi_master_scan, > + TP_PROTO(const struct fsi_master *master, bool scan), > + TP_ARGS(master, scan), > + TP_STRUCT__entry( > + __field(int, master_idx) > + __field(int, n_links) > + __field(bool, scan) > + ), > + TP_fast_assign( > + __entry->master_idx = master->idx; > + __entry->n_links = master->n_links; > + __entry->scan = scan; > + ), > + TP_printk("fsi%d (%d links) %s", __entry->master_idx, __entry->n_links, > + __entry->scan ? "scan" : "unscan") > +); > + > +TRACE_EVENT(fsi_master_unregister, > + TP_PROTO(const struct fsi_master *master), > + TP_ARGS(master), > + TP_STRUCT__entry( > + __field(int, master_idx) > + __field(int, n_links) > + ), > + TP_fast_assign( > + __entry->master_idx = master->idx; > + __entry->n_links = master->n_links; > + ), > + TP_printk("fsi%d (%d links)", __entry->master_idx, __entry->n_links) > +); > + > TRACE_EVENT(fsi_slave_init, > TP_PROTO(const struct fsi_slave *slave), > TP_ARGS(slave), > -- > 2.31.1 > ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-06-08 16:46 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-04-12 18:56 [PATCH 0/2] fsi: core: Lock scan mutex for master index removal Eddie James 2023-04-12 18:56 ` [PATCH 1/2] " Eddie James 2023-05-31 7:47 ` Joel Stanley 2023-06-08 16:45 ` Eddie James 2023-04-12 18:56 ` [PATCH 2/2] fsi: core: Add trace events for scan and unregister Eddie James 2023-05-31 1:52 ` Joel Stanley
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox