Re: [RFC PATCH 6/9] livepatch: create per-task consistency model

Josh Poimboeuf
2015-02-17T16:01:56Z

On Tue, Feb 17, 2015 at 04:48:39PM +0100, Miroslav Benes wrote:
> On Tue, 17 Feb 2015, Josh Poimboeuf wrote:
>
> > On Mon, Feb 16, 2015 at 03:19:10PM +0100, Miroslav Benes wrote:
> > > On Mon, 9 Feb 2015, Josh Poimboeuf wrote:
> > >
>
> [...]
>
> > > > +
> > > > +void klp_unpatch_objects(struct klp_patch *patch)
> > > > +{
> > > > + struct klp_object *obj;
> > > > +
> > > > + for (obj = patch->objs; obj->funcs; obj++)
> > > > + if (obj->patched)
> > > > + klp_unpatch_object(obj);
> > > > +}
> > >
> > > Maybe we should introduce for_each_* macros which could be used in the
> > > code and avoid such functions. I do not have strong opinion about it.
> >
> > Yeah, but each such loop seems to differ a little bit, so I'm not quite
> > sure how to structure the macros such that they'd be useful. Maybe for
> > a future patch.
>
> Yes, that is correct. The code in the caller of klp_unpatch_objects would
> look something like this
>
> klp_for_each_object(obj, patch->objs)
> if (obj->patched)
> klp_unpatch_object(obj)

Yeah, that is slightly more readable and less error prone. I'll do it.

> > > and externs for functions are redundant.
> >
> > I agree, but it seems to be the norm in Linux. I have no idea why. I'm
> > just following the existing convention.
>
> Yes, I know. It seems that each author does it differently. You can find
> both forms even in one header file in the kernel. There is no functional
> difference AFAIK (it is not the case for variables of course). So as long
> as we are consistent I do not care. And since we have externs already in
> livepatch.h... you can scratch this remark if you want to :)

Ok. If there are no objections, let's stick with our existing
nonsensical convention for now :-)

--
Josh