Am Wed, Mar 02, 2022 at 12:10:36AM +0100 schrieb Jason A. Donenfeld:
> /*
> * Delete a previously registered readiness callback function.
> */
> -void del_random_ready_callback(struct random_ready_callback *rdy)
> +int unregister_random_ready_notifier(struct notifier_block *nb)
> {
> unsigned long flags;
> - struct module *owner = NULL;
> -
> - spin_lock_irqsave(&random_ready_list_lock, flags);
> - if (!list_empty(&rdy->list)) {
> - list_del_init(&rdy->list);
> - owner = rdy->owner;
> - }
> - spin_unlock_irqrestore(&random_ready_list_lock, flags);
> + int ret;
>
> - module_put(owner);
> + spin_lock_irqsave(&random_ready_chain_lock, flags);
> + ret = raw_notifier_chain_unregister(&random_ready_chain, nb);
> + spin_unlock_irqrestore(&random_ready_chain_lock, flags);
> + return ret;
> }
> -EXPORT_SYMBOL(del_random_ready_callback);
That doesn't seem to be used anywhere, so I'd suggest removing this function
altogether.
Otherwise:
Reviewed-by: Dominik Brodowski <[email protected]>
Hi Dominik,
On Wed, Mar 2, 2022 at 6:35 AM Dominik Brodowski
<[email protected]> wrote:
>
> Am Wed, Mar 02, 2022 at 12:10:36AM +0100 schrieb Jason A. Donenfeld:
> > /*
> > * Delete a previously registered readiness callback function.
> > */
> > -void del_random_ready_callback(struct random_ready_callback *rdy)
> > +int unregister_random_ready_notifier(struct notifier_block *nb)
> > {
> > unsigned long flags;
> > - struct module *owner = NULL;
> > -
> > - spin_lock_irqsave(&random_ready_list_lock, flags);
> > - if (!list_empty(&rdy->list)) {
> > - list_del_init(&rdy->list);
> > - owner = rdy->owner;
> > - }
> > - spin_unlock_irqrestore(&random_ready_list_lock, flags);
> > + int ret;
> >
> > - module_put(owner);
> > + spin_lock_irqsave(&random_ready_chain_lock, flags);
> > + ret = raw_notifier_chain_unregister(&random_ready_chain, nb);
> > + spin_unlock_irqrestore(&random_ready_chain_lock, flags);
> > + return ret;
> > }
> > -EXPORT_SYMBOL(del_random_ready_callback);
>
> That doesn't seem to be used anywhere, so I'd suggest removing this function
> altogether.
I thought about this, but it feels weird to have a registration
function without an unregistration function... No other notifier is
unbalanced like that.
Jason
Hi Jason,
Am Wed, Mar 02, 2022 at 12:42:56PM +0100 schrieb Jason A. Donenfeld:
> On Wed, Mar 2, 2022 at 6:35 AM Dominik Brodowski
> <[email protected]> wrote:
> >
> > Am Wed, Mar 02, 2022 at 12:10:36AM +0100 schrieb Jason A. Donenfeld:
> > > /*
> > > * Delete a previously registered readiness callback function.
> > > */
> > > -void del_random_ready_callback(struct random_ready_callback *rdy)
> > > +int unregister_random_ready_notifier(struct notifier_block *nb)
> > > {
> > > unsigned long flags;
> > > - struct module *owner = NULL;
> > > -
> > > - spin_lock_irqsave(&random_ready_list_lock, flags);
> > > - if (!list_empty(&rdy->list)) {
> > > - list_del_init(&rdy->list);
> > > - owner = rdy->owner;
> > > - }
> > > - spin_unlock_irqrestore(&random_ready_list_lock, flags);
> > > + int ret;
> > >
> > > - module_put(owner);
> > > + spin_lock_irqsave(&random_ready_chain_lock, flags);
> > > + ret = raw_notifier_chain_unregister(&random_ready_chain, nb);
> > > + spin_unlock_irqrestore(&random_ready_chain_lock, flags);
> > > + return ret;
> > > }
> > > -EXPORT_SYMBOL(del_random_ready_callback);
> >
> > That doesn't seem to be used anywhere, so I'd suggest removing this function
> > altogether.
>
> I thought about this, but it feels weird to have a registration
> function without an unregistration function... No other notifier is
> unbalanced like that.
... but having unused code compiled in (unless LTO is enabled, of course)
seems worse. Maybe comment it out, #ifdef COMPILE_TEST or something like
that?
Thanks,
Dominik