Message ID | 1468547496-16215-3-git-send-email-apronin@chromium.org |
---|---|
State | New |
Headers | show |
On Thu, Jul 14, 2016 at 06:51:36PM -0700, Andrey Pronin wrote: > - WARN_ON(chip->groups_cnt != 0); Nope. > - const struct attribute_group *groups[3]; > + /* up to 4 attribute groups: > + * - driver-specific > + * - common TPM1.2 and TPM2.0 > + * - TPM1.2/2.0-specific > + * - ppi > + */ > + const struct attribute_group *groups[5]; The prior patch needed to have groups[4], every patch much work. > + if (priv->phy_ops->attr_group) > + chip->groups[chip->groups_cnt++] = priv->phy_ops->attr_group; I am really not excited about having driver specific sysfs files. What is the justification for this? Jason ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports.http://sdm.link/zohodev2dev
On Thu, Jul 14, 2016 at 09:23:27PM -0600, Jason Gunthorpe wrote: > On Thu, Jul 14, 2016 at 06:51:36PM -0700, Andrey Pronin wrote: > > - WARN_ON(chip->groups_cnt != 0); > > Nope. > > > - const struct attribute_group *groups[3]; > > + /* up to 4 attribute groups: > > + * - driver-specific > > + * - common TPM1.2 and TPM2.0 > > + * - TPM1.2/2.0-specific > > + * - ppi > > + */ > > + const struct attribute_group *groups[5]; > > The prior patch needed to have groups[4], every patch much work. > > > + if (priv->phy_ops->attr_group) > > + chip->groups[chip->groups_cnt++] = priv->phy_ops->attr_group; > > I am really not excited about having driver specific sysfs > files. > > What is the justification for this? > > Jason Justification: give access to vendor-specific properties that are specific to a particular chip and its registers. Andrey ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports.http://sdm.link/zohodev2dev
On Thu, Jul 14, 2016 at 06:51:36PM -0700, Andrey Pronin wrote: > Add attr_group to phy_ops that a driver relying on tpm_tis_core_init > can set to have its specific attributes registered in sysfs. > > Signed-off-by: Andrey Pronin <apronin@chromium.org> > --- > drivers/char/tpm/tpm-sysfs.c | 1 - > drivers/char/tpm/tpm.h | 8 +++++++- > drivers/char/tpm/tpm_tis_core.c | 3 +++ > drivers/char/tpm/tpm_tis_core.h | 1 + > 4 files changed, 11 insertions(+), 2 deletions(-) > > diff --git a/drivers/char/tpm/tpm-sysfs.c b/drivers/char/tpm/tpm-sysfs.c > index 95ce90d..22c9874 100644 > --- a/drivers/char/tpm/tpm-sysfs.c > +++ b/drivers/char/tpm/tpm-sysfs.c > @@ -304,7 +304,6 @@ void tpm_sysfs_add_device(struct tpm_chip *chip) > * is called before ops is null'd and the sysfs core synchronizes this > * removal so that no callbacks are running or can run again > */ > - WARN_ON(chip->groups_cnt != 0); You should explain this in a commit message if you want to remove it. In general, this make user space API vendor specific, which is unacceptable. /Jarkko > chip->groups[chip->groups_cnt++] = &tpm_dev_group; > if (chip->flags & TPM_CHIP_FLAG_TPM2) > chip->groups[chip->groups_cnt++] = &tpm2_dev_group; > diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h > index 8890df2..8c69649 100644 > --- a/drivers/char/tpm/tpm.h > +++ b/drivers/char/tpm/tpm.h > @@ -173,7 +173,13 @@ struct tpm_chip { > > struct dentry **bios_dir; > > - const struct attribute_group *groups[3]; > + /* up to 4 attribute groups: > + * - driver-specific > + * - common TPM1.2 and TPM2.0 > + * - TPM1.2/2.0-specific > + * - ppi > + */ > + const struct attribute_group *groups[5]; > unsigned int groups_cnt; > #ifdef CONFIG_ACPI > acpi_handle acpi_dev_handle; > diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c > index 8110b52..6d5d8f4 100644 > --- a/drivers/char/tpm/tpm_tis_core.c > +++ b/drivers/char/tpm/tpm_tis_core.c > @@ -796,6 +796,9 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq, > } > } > > + if (priv->phy_ops->attr_group) > + chip->groups[chip->groups_cnt++] = priv->phy_ops->attr_group; > + > return tpm_chip_register(chip); > out_err: > tpm_tis_remove(chip); > diff --git a/drivers/char/tpm/tpm_tis_core.h b/drivers/char/tpm/tpm_tis_core.h > index 9191aab..4417ed9 100644 > --- a/drivers/char/tpm/tpm_tis_core.h > +++ b/drivers/char/tpm/tpm_tis_core.h > @@ -95,6 +95,7 @@ struct tpm_tis_data { > }; > > struct tpm_tis_phy_ops { > + const struct attribute_group *attr_group; > int (*read_bytes)(struct tpm_tis_data *data, u32 addr, u16 len, > u8 *result); > int (*write_bytes)(struct tpm_tis_data *data, u32 addr, u16 len, > -- > 2.6.6 > ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports.http://sdm.link/zohodev2dev
On Mon, Jul 18, 2016 at 10:11:41PM +0300, Jarkko Sakkinen wrote: > On Thu, Jul 14, 2016 at 06:51:36PM -0700, Andrey Pronin wrote: > > Add attr_group to phy_ops that a driver relying on tpm_tis_core_init > > can set to have its specific attributes registered in sysfs. > > > > Signed-off-by: Andrey Pronin <apronin@chromium.org> > > --- > > drivers/char/tpm/tpm-sysfs.c | 1 - > > drivers/char/tpm/tpm.h | 8 +++++++- > > drivers/char/tpm/tpm_tis_core.c | 3 +++ > > drivers/char/tpm/tpm_tis_core.h | 1 + > > 4 files changed, 11 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/char/tpm/tpm-sysfs.c b/drivers/char/tpm/tpm-sysfs.c > > index 95ce90d..22c9874 100644 > > --- a/drivers/char/tpm/tpm-sysfs.c > > +++ b/drivers/char/tpm/tpm-sysfs.c > > @@ -304,7 +304,6 @@ void tpm_sysfs_add_device(struct tpm_chip *chip) > > * is called before ops is null'd and the sysfs core synchronizes this > > * removal so that no callbacks are running or can run again > > */ > > - WARN_ON(chip->groups_cnt != 0); > > You should explain this in a commit message if you want to remove it. > > In general, this make user space API vendor specific, which is > unacceptable. > > /Jarkko > I will drop the vendor-specific part of the patchset and just submit tpm2-specific sysfs attributes in the next rev. WARN_ON will not be removed. ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports.http://sdm.link/zohodev2dev
On Thu, Jul 14, 2016 at 08:35:30PM -0700, Andrey Pronin wrote: > On Thu, Jul 14, 2016 at 09:23:27PM -0600, Jason Gunthorpe wrote: > > On Thu, Jul 14, 2016 at 06:51:36PM -0700, Andrey Pronin wrote: > > > - WARN_ON(chip->groups_cnt != 0); > > > > Nope. > > > > > - const struct attribute_group *groups[3]; > > > + /* up to 4 attribute groups: > > > + * - driver-specific > > > + * - common TPM1.2 and TPM2.0 > > > + * - TPM1.2/2.0-specific > > > + * - ppi > > > + */ > > > + const struct attribute_group *groups[5]; > > > > The prior patch needed to have groups[4], every patch much work. > > > > > + if (priv->phy_ops->attr_group) > > > + chip->groups[chip->groups_cnt++] = priv->phy_ops->attr_group; > > > > I am really not excited about having driver specific sysfs > > files. > > > > What is the justification for this? > > > > Jason > > Justification: give access to vendor-specific properties that are > specific to a particular chip and its registers. Please come with a vendor specific property or have this part of a series where the need becomes somehow obvious so that we can talk about a real problem and not in an abstract level. Making user API vendor wobbling is almost over my dead body type of thing but given the context there might be alternatives to consider. I honestly don't understand why this was even bundled with TPM2 patch. /Jarkko ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports.http://sdm.link/zohodev2dev
diff --git a/drivers/char/tpm/tpm-sysfs.c b/drivers/char/tpm/tpm-sysfs.c index 95ce90d..22c9874 100644 --- a/drivers/char/tpm/tpm-sysfs.c +++ b/drivers/char/tpm/tpm-sysfs.c @@ -304,7 +304,6 @@ void tpm_sysfs_add_device(struct tpm_chip *chip) * is called before ops is null'd and the sysfs core synchronizes this * removal so that no callbacks are running or can run again */ - WARN_ON(chip->groups_cnt != 0); chip->groups[chip->groups_cnt++] = &tpm_dev_group; if (chip->flags & TPM_CHIP_FLAG_TPM2) chip->groups[chip->groups_cnt++] = &tpm2_dev_group; diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h index 8890df2..8c69649 100644 --- a/drivers/char/tpm/tpm.h +++ b/drivers/char/tpm/tpm.h @@ -173,7 +173,13 @@ struct tpm_chip { struct dentry **bios_dir; - const struct attribute_group *groups[3]; + /* up to 4 attribute groups: + * - driver-specific + * - common TPM1.2 and TPM2.0 + * - TPM1.2/2.0-specific + * - ppi + */ + const struct attribute_group *groups[5]; unsigned int groups_cnt; #ifdef CONFIG_ACPI acpi_handle acpi_dev_handle; diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c index 8110b52..6d5d8f4 100644 --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -796,6 +796,9 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq, } } + if (priv->phy_ops->attr_group) + chip->groups[chip->groups_cnt++] = priv->phy_ops->attr_group; + return tpm_chip_register(chip); out_err: tpm_tis_remove(chip); diff --git a/drivers/char/tpm/tpm_tis_core.h b/drivers/char/tpm/tpm_tis_core.h index 9191aab..4417ed9 100644 --- a/drivers/char/tpm/tpm_tis_core.h +++ b/drivers/char/tpm/tpm_tis_core.h @@ -95,6 +95,7 @@ struct tpm_tis_data { }; struct tpm_tis_phy_ops { + const struct attribute_group *attr_group; int (*read_bytes)(struct tpm_tis_data *data, u32 addr, u16 len, u8 *result); int (*write_bytes)(struct tpm_tis_data *data, u32 addr, u16 len,
Add attr_group to phy_ops that a driver relying on tpm_tis_core_init can set to have its specific attributes registered in sysfs. Signed-off-by: Andrey Pronin <apronin@chromium.org> --- drivers/char/tpm/tpm-sysfs.c | 1 - drivers/char/tpm/tpm.h | 8 +++++++- drivers/char/tpm/tpm_tis_core.c | 3 +++ drivers/char/tpm/tpm_tis_core.h | 1 + 4 files changed, 11 insertions(+), 2 deletions(-)