lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <alpine.DEB.2.20.1609131642410.6233@nanos>
Date:   Tue, 13 Sep 2016 16:50:34 +0200 (CEST)
From:   Thomas Gleixner <tglx@...utronix.de>
To:     Craig Gallek <kraigatgoog@...il.com>
cc:     David Decotigny <decot@...gle.com>, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v5] genirq: Machine-parsable version of
 /proc/interrupts

On Mon, 12 Sep 2016, Craig Gallek wrote:

> From: Craig Gallek <kraig@...gle.com>
 
> Add struct kobject to struct irq_desc to allow for easy export
> to sysfs.  This allows for much simpler userspace-parsing of
> the information contained in struct irq_desc.

This lacks a rationale WHY we want to add this. Something like:

"/proc/interrupts is hard to parse by tools because <add content>."

Then add some blurb why and how a sysfs based interface solves the above
problem.

The fact that you add a kobject is an implementation detail and completely
irrelevant for the changelog. We can see that from the patch.
 
> Note that sysfs is not available at the time of early irq initialization.
> These interrupts are accounted for using a postcore_initcall callback.

That want's to be documented in the code .
 
>  /*
>   * Core internal functions to deal with irq descriptors
> @@ -45,6 +46,7 @@ struct pt_regs;
>   * @rcu:		rcu head for delayed free
>   * @dir:		/proc/irq/ procfs entry
>   * @name:		flow handler name for /proc/interrupts output
> + * @kobj:		kobject used to represent this struct in sysfs
>   */
>  struct irq_desc {
>  	struct irq_common_data	irq_common_data;
> @@ -92,6 +94,7 @@ struct irq_desc {
>  	int			parent_irq;
>  	struct module		*owner;
>  	const char		*name;
> +	struct kobject		kobj;

Can you please move that into the CONFIG_SPARSE_IRQ conditional section
where we have the rcu head ?

> +
> +#ifdef CONFIG_SPARSE_IRQ
> +#ifdef CONFIG_SYSFS

We use 

#if defined(A) && defined(B)

but please move it into the #ifdef SYSFS section which you add anyway.

> +static int __init irq_sysfs_init(void)
> +{
> +	struct irq_desc *desc;
> +	int irq;
> +
> +	irq_kobj_base = kobject_create_and_add("irq", kernel_kobj);
> +	if (!irq_kobj_base)
> +		return -ENOMEM;

This is racy versus a concurrent interrupt setup. You need to move that
into the sparse locked section.

> +
> +	irq_lock_sparse();
> +	for_each_irq_desc(irq, desc)
> +		irq_sysfs_add(irq, desc);
> +	irq_unlock_sparse();

Thanks,

	tglx

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ