2019-05-02 02:42:24

by Tobin C. Harding

[permalink] [raw]
Subject: [RFC PATCH 0/5] kobject: Add and use init predicate

Hi,

This set patches kobject to add a predicate function for determining the
initialization state of a kobject. Stripped down, the predicate is:

bool kobject_is_initialized(struct kobject *kobj)
{
return kobj->state_initialized
}

This is RFC because there are merge conflicts with Greg's driver-core
tree. I'm guessing this is caused by the cleanup patches (#2 and #3).
If the set is deemed likeable then I can re-work the set targeting
whomever's tree this would go in through.

Applies on top of:

mainline tag: v5.1-rc6
livepatching branch: for-next

Series Description
------------------

Patch #1 is a memleak patch, previously posted and not overly
interesting. Comment by Greg on the thread on that patch was the
incentive for this series.

Patch #2 and #3 are kobject kernel-doc comment clean ups. Can be
dropped if not liked.

Patch #4 adds the predicate function to the kobject API.

Patch #5 uses the new predicate to remove the custom logic from livepatch
for tracking kobject initialization state.

Testing
-------

Kernel build configuration

$ egrep LIVEPATCH .config
CONFIG_HAVE_LIVEPATCH=y
CONFIG_LIVEPATCH=y
CONFIG_TEST_LIVEPATCH=m

$ egrep FTRACE .config
CONFIG_KPROBES_ON_FTRACE=y
CONFIG_HAVE_KPROBES_ON_FTRACE=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_FTRACE=y
CONFIG_FTRACE_SYSCALLS=y
CONFIG_DYNAMIC_FTRACE=y
CONFIG_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_STARTUP_TEST is not set

Builds fine but doesn't boot in Qemu. I've never run dynamic Ftrace, it
appears to crash during this. Was hoping to run the livepatch tests but
not sure how to at this moment. Is dynamic Ftrace and livepatch testing
something that can even be done in a VM or do I need to do this or
baremetal?

Thanks for taking the time to look at this.

Tobin


Tobin C. Harding (5):
livepatch: Fix kobject memleak
kobject: Remove docstring reference to kset
kobject: Fix kernel-doc comment first line
kobject: Add kobject initialized predicate
livepatch: Do not manually track kobject initialization

include/linux/kobject.h | 2 ++
include/linux/livepatch.h | 6 ----
kernel/livepatch/core.c | 28 +++++++++---------
lib/kobject.c | 60 +++++++++++++++++++++++----------------
4 files changed, 51 insertions(+), 45 deletions(-)

--
2.21.0


2019-05-02 02:42:47

by Tobin C. Harding

[permalink] [raw]
Subject: [RFC PATCH 2/5] kobject: Remove docstring reference to kset

Currently the docstring for kobject_get_path() mentions 'kset'. The
kset is not used in the function callchain starting from this function.

Remove docstring reference to kset from the function kobject_get_path().

Signed-off-by: Tobin C. Harding <[email protected]>
---
lib/kobject.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/lib/kobject.c b/lib/kobject.c
index aa89edcd2b63..3eacd5b4643f 100644
--- a/lib/kobject.c
+++ b/lib/kobject.c
@@ -153,12 +153,11 @@ static void fill_kobj_path(struct kobject *kobj, char *path, int length)
}

/**
- * kobject_get_path - generate and return the path associated with a given kobj and kset pair.
- *
+ * kobject_get_path() - Allocate memory and fill in the path for @kobj.
* @kobj: kobject in question, with which to build the path
* @gfp_mask: the allocation type used to allocate the path
*
- * The result must be freed by the caller with kfree().
+ * Return: The newly allocated memory, caller must free with kfree().
*/
char *kobject_get_path(struct kobject *kobj, gfp_t gfp_mask)
{
--
2.21.0

2019-05-02 07:22:09

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [RFC PATCH 2/5] kobject: Remove docstring reference to kset

On Thu, May 02, 2019 at 12:31:39PM +1000, Tobin C. Harding wrote:
> Currently the docstring for kobject_get_path() mentions 'kset'. The
> kset is not used in the function callchain starting from this function.
>
> Remove docstring reference to kset from the function kobject_get_path().
>
> Signed-off-by: Tobin C. Harding <[email protected]>
> ---
> lib/kobject.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/lib/kobject.c b/lib/kobject.c
> index aa89edcd2b63..3eacd5b4643f 100644
> --- a/lib/kobject.c
> +++ b/lib/kobject.c
> @@ -153,12 +153,11 @@ static void fill_kobj_path(struct kobject *kobj, char *path, int length)
> }
>
> /**
> - * kobject_get_path - generate and return the path associated with a given kobj and kset pair.
> - *
> + * kobject_get_path() - Allocate memory and fill in the path for @kobj.

Wow, that's an old change that caused this to be not true anymore, nice catch.

greg k-h

2019-05-02 11:43:32

by Miroslav Benes

[permalink] [raw]
Subject: Re: [RFC PATCH 0/5] kobject: Add and use init predicate

> Testing
> -------
>
> Kernel build configuration
>
> $ egrep LIVEPATCH .config
> CONFIG_HAVE_LIVEPATCH=y
> CONFIG_LIVEPATCH=y
> CONFIG_TEST_LIVEPATCH=m
>
> $ egrep FTRACE .config
> CONFIG_KPROBES_ON_FTRACE=y
> CONFIG_HAVE_KPROBES_ON_FTRACE=y
> CONFIG_HAVE_DYNAMIC_FTRACE=y
> CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
> CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
> CONFIG_FTRACE=y
> CONFIG_FTRACE_SYSCALLS=y
> CONFIG_DYNAMIC_FTRACE=y
> CONFIG_DYNAMIC_FTRACE_WITH_REGS=y
> CONFIG_FTRACE_MCOUNT_RECORD=y
> # CONFIG_FTRACE_STARTUP_TEST is not set
>
> Builds fine but doesn't boot in Qemu. I've never run dynamic Ftrace, it
> appears to crash during this. Was hoping to run the livepatch tests but
> not sure how to at this moment. Is dynamic Ftrace and livepatch testing
> something that can even be done in a VM or do I need to do this or
> baremetal?

It definitely should work in VM/qemu. We use it like that all the time.

Miroslav