* [rtc-linux] Re: [PATCH v3 1/4] mfd: cros_ec: Get rid of cros_ec_check_features from cros_ec_dev.
From: 'Benson Leung' via rtc-linux @ 2017-07-17 16:37 UTC (permalink / raw)
To: Enric Balletbo Serra
Cc: Gwendal Grignou, Enric Balletbo i Serra, Jonathan Cameron,
Lee Jones, Benson Leung, Javier Martinez Canillas, Guenter Roeck,
Linux Kernel, linux-iio, rtc-linux
In-Reply-To: <CAFqH_53O8UDPnhCq7BwS7tZ9814HD5GLXWGfbeYJ2PFFk06Uzg@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 1318 bytes --]
Hi Enric,
On Mon, Jul 17, 2017 at 12:30:30PM +0200, Enric Balletbo Serra wrote:
> Hi Gwendal,
>
> Interesting I didn't know that. So are you saying that this patch will
> break support for devices like Pixel 2? I tested the patches on
> various devices but not on Pixel 2 so could be.
This would affect any systems where we have chained ECs. Samus (Chromebook
Pixel 2015) has its PD EC hooked up in this way. Practically speaking,
that would mean that the cros_usbpd-charger power supply driver may not work
correctly.
I don't think we expect any other systems to have this configuration,
but the first one we shipped did, so we will have to support it.
Thanks,
Benson
--
Benson Leung
Staff Software Engineer
Chrome OS Kernel
Google Inc.
bleung@google.com
Chromium OS Project
bleung@chromium.org
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply
* Re: [PATCH 2/2] mfd: ds1374: Add Dallas/Maxim DS1374 Multi Function Device
From: Moritz Fischer @ 2017-07-17 18:14 UTC (permalink / raw)
To: Lee Jones
Cc: robh+dt, mark.rutland, a.zummo, alexandre.belloni, wim, linux,
devicetree, linux-kernel, linux-watchdog, linux-rtc,
Moritz Fischer
In-Reply-To: <20170717075117.btnhbmgpofwn7zdk@dell>
[-- Attachment #1: Type: text/plain, Size: 17051 bytes --]
Hi Lee,
On Mon, Jul 17, 2017 at 08:51:17AM +0100, Lee Jones wrote:
> On Thu, 13 Jul 2017, Moritz Fischer wrote:
>
> > From: Moritz Fischer <moritz.fischer@ettus.com>
> >
> > Add support for the Maxim/Dallas DS1374 RTC/WDT with trickle charger.
> > The device can either be configured as simple RTC, as simple RTC with
> > Alarm (IRQ) as well as simple RTC with watchdog timer.
> >
> > Break up the old monolithic driver in drivers/rtc/rtc-ds1374.c into:
> > - rtc part in drivers/rtc/rtc-ds1374.c
> > - watchdog part under drivers/watchdog/ds1374-wdt.c
> > - mfd part drivers/mfd/ds1374.c
> >
> > The MFD part takes care of trickle charging and mode selection,
> > since the usage modes of a) RTC + Alarm or b) RTC + WDT
> > are mutually exclusive.
> >
> > Signed-off-by: Moritz Fischer <mdf@kernel.org>
> > ---
> > drivers/mfd/Kconfig | 10 +
> > drivers/mfd/Makefile | 1 +
> > drivers/mfd/ds1374.c | 260 ++++++++++++++++
> > drivers/rtc/rtc-ds1374.c | 639 ++++++++++-----------------------------
>
> It looks like this should now depend on MFD_DS1374, right?
>
> > drivers/watchdog/Kconfig | 10 +
> > drivers/watchdog/Makefile | 1 +
> > drivers/watchdog/ds1374-wdt.c | 208 +++++++++++++
>
> The RTC and Watchdog drivers need to be split out of this patch and
> placed into their own. Then we can take them through their respective
> subsystem trees and do not have to rely on immutable branches for
> unification.
Ok, I haven't found a good way to keep this bisectable in that case. I'm
open to suggestions. If the consensus ends up being to split it up, I'm
more than happy to separate it out into multiple patches.
>
> > include/dt-bindings/mfd/ds1374.h | 17 ++
> > include/linux/mfd/ds1374.h | 59 ++++
> > 9 files changed, 722 insertions(+), 483 deletions(-)
> > create mode 100644 drivers/mfd/ds1374.c
> > create mode 100644 drivers/watchdog/ds1374-wdt.c
> > create mode 100644 include/dt-bindings/mfd/ds1374.h
> > create mode 100644 include/linux/mfd/ds1374.h
> >
> > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> > index 3eb5c93..2dfef3c 100644
> > --- a/drivers/mfd/Kconfig
> > +++ b/drivers/mfd/Kconfig
> > @@ -203,6 +203,16 @@ config MFD_CROS_EC_SPI
> > response time cannot be guaranteed, we support ignoring
> > 'pre-amble' bytes before the response actually starts.
> >
> > +config MFD_DS1374
> > + tristate "Dallas/Maxim DS1374 RTC/WDT/ALARM (I2C)"
> > + select MFD_CORE
> > + depends on I2C
> > + depends on REGMAP_I2C
> > +
> > + ---help---
>
> This is an old style of help. Please remove the '-'s.
Will do.
>
> > + This driver supports the Dallas Maxim DS1374 multi function chip.
>
> "Multi-Functional"
Ok.
>
> > + The chip combines an RTC, trickle charger, Watchdog or Alarm.
>
> Why is "trickle charger" not capitalised?
No particular reason. Will fix.
>
> > +
> > config MFD_ASIC3
> > bool "Compaq ASIC3"
> > depends on GPIOLIB && ARM
> > diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> > index c16bf1e..b5cfcf4 100644
> > --- a/drivers/mfd/Makefile
> > +++ b/drivers/mfd/Makefile
> > @@ -15,6 +15,7 @@ cros_ec_core-$(CONFIG_ACPI) += cros_ec_acpi_gpe.o
> > obj-$(CONFIG_MFD_CROS_EC) += cros_ec_core.o
> > obj-$(CONFIG_MFD_CROS_EC_I2C) += cros_ec_i2c.o
> > obj-$(CONFIG_MFD_CROS_EC_SPI) += cros_ec_spi.o
> > +obj-$(CONFIG_MFD_DS1374) += ds1374.o
> > obj-$(CONFIG_MFD_EXYNOS_LPASS) += exynos-lpass.o
> >
> > rtsx_pci-objs := rtsx_pcr.o rts5209.o rts5229.o rtl8411.o rts5227.o rts5249.o
> > diff --git a/drivers/mfd/ds1374.c b/drivers/mfd/ds1374.c
> > new file mode 100644
> > index 0000000..a0cfa1b
> > --- /dev/null
> > +++ b/drivers/mfd/ds1374.c
> > @@ -0,0 +1,260 @@
> > +/*
> > + * Copyright (c) 2017, National Instruments Corp.
> > + *
> > + * Dallas/Maxim DS1374 Multi Function Device Driver
>
> "Functional"
>
> > + * The trickle charger code was taken more ore less 1:1 from
>
> "or"
>
> > + * drivers/rtc/rtc-1390.c
>
> Why does this need to be documented in this file?
>
> If the Trickle Charger code is in here (I haven't been down that far
> yet) you need to move it out into a more appropriate subsystem.
Any suggestions? Most of the RTC drivers keep the trickle charge code in
RTC drivers. I can either do that, or see if somwhere under
drivers/power/supply makes sense.
>
> > + * SPDX-License-Identifier: GPL-2.0
> > + */
> > +
> > +#include <linux/kernel.h>
> > +#include <linux/module.h>
> > +#include <linux/interrupt.h>
> > +#include <linux/i2c.h>
> > +#include <linux/slab.h>
> > +#include <linux/pm.h>
> > +#include <linux/regmap.h>
> > +#include <linux/mfd/core.h>
> > +#include <linux/mfd/ds1374.h>
>
> Alphabetical.
Ok, will do.
>
> > +#define DS1374_TRICKLE_CHARGER_ENABLE 0xa0
> > +#define DS1374_TRICKLE_CHARGER_ENABLE_MASK 0xe0
> > +
> > +#define DS1374_TRICKLE_CHARGER_250_OHM 0x01
> > +#define DS1374_TRICKLE_CHARGER_2K_OHM 0x02
> > +#define DS1374_TRICKLE_CHARGER_4K_OHM 0x03
> > +#define DS1374_TRICKLE_CHARGER_ROUT_MASK 0x03
> > +
> > +#define DS1374_TRICKLE_CHARGER_NO_DIODE 0x04
> > +#define DS1374_TRICKLE_CHARGER_DIODE 0x08
> > +#define DS1374_TRICKLE_CHARGER_DIODE_MASK 0xc
>
> Are these tabs or spaces, or a mixture?
It's a mix, I'll fix that.
>
> Did you run checkpatch.pl?
I did.
>
> > +static const struct regmap_range volatile_ranges[] = {
> > + regmap_reg_range(DS1374_REG_TOD0, DS1374_REG_WDALM2),
> > + regmap_reg_range(DS1374_REG_SR, DS1374_REG_SR),
> > +};
> > +
> > +static const struct regmap_access_table ds1374_volatile_table = {
> > + .yes_ranges = volatile_ranges,
> > + .n_yes_ranges = ARRAY_SIZE(volatile_ranges),
> > +};
> > +
> > +static struct regmap_config ds1374_regmap_config = {
>
> Genuine question: Can this be const?
Yes.
>
> > + .reg_bits = 8,
> > + .val_bits = 8,
> > + .max_register = DS1374_REG_TCR,
> > + .volatile_table = &ds1374_volatile_table,
> > + .cache_type = REGCACHE_RBTREE,
>
> It might just be the patch format, but can you check if this is
> tabs/spaces? If you're using tabs, please ensure they are all
> aligned.
Will fix.
>
> > +};
> > +
> > +static struct mfd_cell ds1374_wdt_cell = {
> > + .name = "ds1374-wdt",
> > +};
> > +
> > +static struct mfd_cell ds1374_rtc_cell = {
> > + .name = "ds1374-rtc",
> > +};
> > +
> > +static int ds1374_add_device(struct ds1374 *chip,
> > + struct mfd_cell *cell)
> > +{
> > + cell->platform_data = chip;
> > + cell->pdata_size = sizeof(*chip);
> > +
> > + return mfd_add_devices(&chip->client->dev, PLATFORM_DEVID_AUTO,
> > + cell, 1, NULL, 0, NULL);
> > +}
>
> This function appears to serve no purpose. Why don't you just use
> mfd_add_devices() instead?
Yeah, can do.
>
> > +static int ds1374_trickle_of_init(struct ds1374 *ds1374)
> > +{
> > + u32 ohms = 0;
> > + u8 value;
> > + struct i2c_client *client = ds1374->client;
> > +
> > + if (of_property_read_u32(client->dev.of_node, "trickle-resistor-ohms",
> > + &ohms))
> > + return 0;
> > +
> > + /* Enable charger */
> > + value = DS1374_TRICKLE_CHARGER_ENABLE;
> > + if (of_property_read_bool(client->dev.of_node, "trickle-diode-disable"))
> > + value |= DS1374_TRICKLE_CHARGER_NO_DIODE;
> > + else
> > + value |= DS1374_TRICKLE_CHARGER_DIODE;
> > +
> > + /* Resistor select */
> > + switch (ohms) {
> > + case 250:
> > + value |= DS1374_TRICKLE_CHARGER_250_OHM;
> > + break;
> > + case 2000:
> > + value |= DS1374_TRICKLE_CHARGER_2K_OHM;
> > + break;
> > + case 4000:
> > + value |= DS1374_TRICKLE_CHARGER_4K_OHM;
> > + break;
> > + default:
> > + dev_warn(&client->dev,
> > + "Unsupported ohm value %02ux in dt\n", ohms);
> > + return -EINVAL;
> > + }
> > + dev_dbg(&client->dev, "Trickle charge value is 0x%02x\n", value);
> > +
> > + return regmap_write(ds1374->regmap, DS1374_REG_TCR, value);
> > +}
> > +
> > +int ds1374_read_bulk(struct ds1374 *ds1374, u32 *time, int reg, int nbytes)
> > +{
> > + u8 buf[4];
> > + int ret;
> > + int i;
> > +
> > + if (WARN_ON(nbytes > 4))
> > + return -EINVAL;
> > +
> > + ret = regmap_bulk_read(ds1374->regmap, reg, buf, nbytes);
> > + if (ret) {
> > + dev_err(&ds1374->client->dev,
> > + "Failed to bulkread n = %d at R%d\n",
> > + nbytes, reg);
> > + return ret;
> > + }
> > +
> > + for (i = nbytes - 1, *time = 0; i >= 0; i--)
> > + *time = (*time << 8) | buf[i];
>
> You need at least a comment to explain what's happening here.
It's an endian conversion. Can probably be replaced with normal
endian conversion functions as Guenter suggested.
I'll try to get rid of the function and use regmap_bulk_read/write
>
> > + return 0;
> > +}
> > +EXPORT_SYMBOL_GPL(ds1374_read_bulk);
> > +
> > +int ds1374_write_bulk(struct ds1374 *ds1374, u32 time, int reg, int nbytes)
> > +{
> > + u8 buf[4];
> > + int i;
> > +
> > + if (nbytes > 4) {
> > + WARN_ON(1);
> > + return -EINVAL;
> > + }
> > +
> > + for (i = 0; i < nbytes; i++) {
> > + buf[i] = time & 0xff;
> > + time >>= 8;
> > + }
>
> Same here.
>
> > + return regmap_bulk_write(ds1374->regmap, reg, buf, nbytes);
> > +}
> > +EXPORT_SYMBOL_GPL(ds1374_write_bulk);
> > +
> > +static int ds1374_probe(struct i2c_client *client,
> > + const struct i2c_device_id *id)
> > +{
> > + struct ds1374 *ds1374;
> > + u32 mode;
> > + int err;
> > +
> > + ds1374 = devm_kzalloc(&client->dev, sizeof(struct ds1374), GFP_KERNEL);
> > + if (!ds1374)
> > + return -ENOMEM;
> > +
> > + ds1374->regmap = devm_regmap_init_i2c(client, &ds1374_regmap_config);
> > + if (IS_ERR(ds1374->regmap))
> > + return PTR_ERR(ds1374->regmap);
> > +
> > + if (IS_ENABLED(CONFIG_OF) && client->dev.of_node) {
> > + err = of_property_read_u32(client->dev.of_node,
> > + "dallas,mode", &mode);
> > + if (err < 0) {
> > + dev_err(&client->dev, "missing dallas,mode property\n");
> > + return -EINVAL;
> > + }
> > +
> > + ds1374->remapped_reset
> > + = of_property_read_bool(client->dev.of_node,
> > + "dallas,remap-reset");
> > +
> > + ds1374->mode = (enum ds1374_mode)mode;
> > + } else if (IS_ENABLED(CONFIG_RTC_DRV_DS1374_WDT)) {
> > + ds1374->mode = DS1374_MODE_RTC_WDT;
> > + } else {
> > + ds1374->mode = DS1374_MODE_RTC_ALM;
> > + }
>
> This is non-standard. So if OF is enabled, you're taking the 'mode'
> from platform data (DT) and if it's not, you're relying on Kconfig.
> May I suggest that you pick platform data OR Kconfig, but not mix the
> two.
Yeah was a (failed) attempt to not break people that relied on the
Kconfig option. But I'm fine with just making it OF based.
>
> > + ds1374->client = client;
> > + ds1374->irq = client->irq;
> > + i2c_set_clientdata(client, ds1374);
> > +
> > + /* check if we're supposed to trickle charge */
>
> "Check".
>
> > + err = ds1374_trickle_of_init(ds1374);
> > + if (err) {
> > + dev_err(&client->dev, "Failed to init trickle charger!\n");
> > + return err;
> > + }
> > +
> > + /* we always have a rtc */
>
> "We", "an RTC".
>
> Or
>
> "The RTC is always available."
>
> > + err = ds1374_add_device(ds1374, &ds1374_rtc_cell);
> > + if (err)
> > + return err;
> > +
> > + /* we might have a watchdog if configured that way */
>
> "We"
>
> > + if (ds1374->mode == DS1374_MODE_RTC_WDT)
> > + return ds1374_add_device(ds1374, &ds1374_wdt_cell);
> > +
> > + return err;
> > +}
> > +
> > +static const struct i2c_device_id ds1374_id[] = {
> > + { "ds1374", 0 },
> > + { }
> > +};
> > +MODULE_DEVICE_TABLE(i2c, ds1374_id);
> > +
> > +#ifdef CONFIG_OF
> > +static const struct of_device_id ds1374_of_match[] = {
> > + { .compatible = "dallas,ds1374" },
> > + { }
> > +};
> > +MODULE_DEVICE_TABLE(of, ds1374_of_match);
> > +#endif
> > +
> > +#ifdef CONFIG_PM_SLEEP
> > +static int ds1374_suspend(struct device *dev)
> > +{
> > + return 0;
> > +}
> > +
> > +static int ds1374_resume(struct device *dev)
> > +{
> > + return 0;
> > +}
> > +#endif
>
> These seem pointless.
>
> I'm sure there will be a nice MACRO you can use instead.
Yeah, will fix.
>
> > +static SIMPLE_DEV_PM_OPS(ds1374_pm, ds1374_suspend, ds1374_resume);
> > +
> > +static struct i2c_driver ds1374_driver = {
> > + .driver = {
> > + .name = "ds1374",
> > + .of_match_table = of_match_ptr(ds1374_of_match),
> > + .pm = &ds1374_pm,
> > + },
> > + .probe = ds1374_probe,
> > + .id_table = ds1374_id,
> > +};
> > +
> > +static int __init ds1374_init(void)
> > +{
> > + return i2c_add_driver(&ds1374_driver);
> > +}
> > +subsys_initcall(ds1374_init);
> > +
> > +static void __exit ds1374_exit(void)
> > +{
> > + i2c_del_driver(&ds1374_driver);
> > +}
> > +module_exit(ds1374_exit);
> > +
> > +MODULE_AUTHOR("Moritz Fischer <mdf@kernel.org>");
> > +MODULE_DESCRIPTION("Maxim/Dallas DS1374 MFD Driver");
> > +MODULE_LICENSE("GPL");
>
> This conflicts with your header.
>
> [...]
>
> > diff --git a/include/dt-bindings/mfd/ds1374.h b/include/dt-bindings/mfd/ds1374.h
> > new file mode 100644
> > index 0000000..b33cd5e
> > --- /dev/null
> > +++ b/include/dt-bindings/mfd/ds1374.h
> > @@ -0,0 +1,17 @@
> > +/*
> > + * This header provides macros for Maxim/Dallas DS1374 DT bindings
> > + *
> > + * Copyright (C) 2017 National Instruments Corp
> > + *
> > + * SPDX-License-Identifier: GPL-2.0
> > + *
>
> This line is superfluous.
>
> > + */
> > +
> > +#ifndef __DT_BINDINGS_MFD_DS1374_H__
> > +#define __DT_BINDINGS_MFD_DS1374_H__
> > +
> > +#define DALLAS_MODE_RTC 0
> > +#define DALLAS_MODE_ALM 1
> > +#define DALLAS_MODE_WDT 2
>
> What's stopping these becoming out of line with the #defines in the
> other header file? You should probably use these for comparison
> instead.
>
> > +#endif /* __DT_BINDINGS_MFD_DS1374_H__ */
> > diff --git a/include/linux/mfd/ds1374.h b/include/linux/mfd/ds1374.h
> > new file mode 100644
> > index 0000000..7b697f8
> > --- /dev/null
> > +++ b/include/linux/mfd/ds1374.h
> > @@ -0,0 +1,59 @@
> > +/*
> > + * Copyright (c) 2017, National Instruments Corp.
> > + *
> > + * Multi Function Device for Dallas/Maxim DS1374 RTC/WDT
>
> "Functional"
>
> > + * This program is free software; you can redistribute it and/or modify
> > + * it under the terms of the GNU General Public License as published by
> > + * the Free Software Foundation; version 2 of the License.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > + * GNU General Public License for more details.
>
> Do you have to use the long licence here?
Nope, will replace with SPDX.
>
> > + */
> > +
> > +#ifndef MFD_DS1374_H
> > +#define MFD_DS1374_H
> > +
> > +#include <linux/i2c.h>
> > +#include <linux/regmap.h>
> > +
> > +enum ds1374_mode {
> > + DS1374_MODE_RTC_ONLY,
> > + DS1374_MODE_RTC_ALM,
> > + DS1374_MODE_RTC_WDT,
> > +};
>
> Please see above.
Yeah, will get rid of them.
>
> > +/* Register definitions to for all subdrivers
> > + */
> > +#define DS1374_REG_TOD0 0x00 /* Time of Day */
> > +#define DS1374_REG_TOD1 0x01
> > +#define DS1374_REG_TOD2 0x02
> > +#define DS1374_REG_TOD3 0x03
> > +#define DS1374_REG_WDALM0 0x04 /* Watchdog/Alarm */
> > +#define DS1374_REG_WDALM1 0x05
> > +#define DS1374_REG_WDALM2 0x06
> > +#define DS1374_REG_CR 0x07 /* Control */
> > +#define DS1374_REG_CR_AIE 0x01 /* Alarm Int. Enable */
> > +#define DS1374_REG_CR_WDSTR 0x08 /* 1=Reset on INT, 0=Rreset on RST */
> > +#define DS1374_REG_CR_WDALM 0x20 /* 1=Watchdog, 0=Alarm */
> > +#define DS1374_REG_CR_WACE 0x40 /* WD/Alarm counter enable */
> > +#define DS1374_REG_SR 0x08 /* Status */
> > +#define DS1374_REG_SR_OSF 0x80 /* Oscillator Stop Flag */
> > +#define DS1374_REG_SR_AF 0x01 /* Alarm Flag */
> > +#define DS1374_REG_TCR 0x09 /* Trickle Charge */
> > +
> > +struct ds1374 {
> > + struct i2c_client *client;
> > + struct regmap *regmap;
> > + int irq;
> > + enum ds1374_mode mode;
> > + bool remapped_reset;
> > +};
>
> This could do with a KernelDoc header.
>
> > +int ds1374_read_bulk(struct ds1374 *ds1374, u32 *time, int reg, int nbytes);
> > +
> > +int ds1374_write_bulk(struct ds1374 *ds1374, u32 time, int reg, int nbytes);
>
> Do these two just read time?
>
> If so, the nomenclature could be improved.
The can most likely be replaced completely by regmap_bulk_read()/write()
>
> > +#endif /* MFD_DS1374_H */
>
> --
> Lee Jones
> Linaro STMicroelectronics Landing Team Lead
> Linaro.org │ Open source software for ARM SoCs
> Follow Linaro: Facebook | Twitter | Blog
Thanks for your feedback,
Moritz
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply
* Re: [PATCH 1/2] dt-binding: mfd: Add Maxim/Dallas DS1374 MFD device binding
From: Rob Herring @ 2017-07-17 18:50 UTC (permalink / raw)
To: Moritz Fischer
Cc: lee.jones, mark.rutland, a.zummo, alexandre.belloni, wim, linux,
devicetree, linux-kernel, linux-watchdog, linux-rtc
In-Reply-To: <1499975665-14581-1-git-send-email-mdf@kernel.org>
On Thu, Jul 13, 2017 at 12:54:24PM -0700, Moritz Fischer wrote:
> This adds a binding for the Maxim/Dallas DS1374 MFD.
>
> Signed-off-by: Moritz Fischer <mdf@kernel.org>
> ---
> Changes from RFC:
> - dallas,ds1374-mode -> dallas,mode
> - Clarified examples
> - dallas,remap-reset property
>
> On second thoughts the solution for the remapping found in the
> discussion did not seem to be a good solution, since the INT
> pin indicating watchdog reset does not necessarily have to be
> connected to an interrupt line on the machine, it could equally
> well be hooked up to a PMIC reset input or similar.
> In that case using the presence of an 'interrupt' phandle is not
> a good choice.
>
> Cheers,
>
> Moritz
>
> ---
> Documentation/devicetree/bindings/mfd/ds1374.txt | 88 ++++++++++++++++++++++
> .../devicetree/bindings/trivial-devices.txt | 1 -
> drivers/rtc/Kconfig | 2 +
This belongs in patch 2. With that dropped,
Acked-by: Rob Herring <robh@kernel.org>
> 3 files changed, 90 insertions(+), 1 deletion(-)
> create mode 100644 Documentation/devicetree/bindings/mfd/ds1374.txt
^ permalink raw reply
* [rtc-linux] Re: [PATCH v3 1/4] mfd: cros_ec: Get rid of cros_ec_check_features from cros_ec_dev.
From: Lee Jones @ 2017-07-18 9:19 UTC (permalink / raw)
To: Enric Balletbo Serra
Cc: Gwendal Grignou, Enric Balletbo i Serra, Jonathan Cameron,
Benson Leung, Javier Martinez Canillas, Guenter Roeck,
Linux Kernel, linux-iio, rtc-linux
In-Reply-To: <CAFqH_53O8UDPnhCq7BwS7tZ9814HD5GLXWGfbeYJ2PFFk06Uzg@mail.gmail.com>
On Mon, 17 Jul 2017, Enric Balletbo Serra wrote:
> Hi Gwendal,
>=20
> 2017-07-13 22:33 GMT+02:00 Gwendal Grignou <gwendal@chromium.org>:
> > On Wed, Jul 12, 2017 at 3:13 AM, Enric Balletbo i Serra
> > <enric.balletbo@collabora.com> wrote:
> >> The cros_ec_dev driver should be used only to expose the Chrome OS Emb=
edded
> >> Controller to user-space and should not be used to add MFD devices by
> >> calling mfd_add_devices. This patch moves this logic to the MFD cros_e=
c
> >> driver and removes the MFD bits from the character device driver. Also
> >> makes independent the IIO driver from the character device as also has=
no
> >> sense.
> >
> > cros_ec_dev serves another purpose: it allows to represent an EC that
> > does not have a cros_ec structure. It happens when there are several
> > EC in a chromebook, and one EC is connected through another EC.
> > One example is Samus (Pixel 2): where we have:
> >
> > (main SOC, Application Processor) AP --> (main Embedded Controller) EC
> > ---> (Power Delivery [PD}) EC
> >
> > We access to the PD EC via pass-through commands through the main EC.
> > Each EC has a cros_ec_dev structure, but only the main EC as a
> > cros_ec_device structure (I will forever regret the structure names).
> >
> > Now form the AP point of view, both ECs use the same protocol. That
> > why the sensors and other devcies that are registered by looking at
> > the feature fields are registered with cros_ec_dev as their parent.
> > Other devices that are registered from the device tree, predating the
> > feature field support, are registered with cros_ec_device as their
> > parent.
> >
>=20
> Interesting I didn't know that. So are you saying that this patch will
> break support for devices like Pixel 2? I tested the patches on
> various devices but not on Pixel 2 so could be.
Does this affect the rest of the series?
Or should I review/apply as usual?
--=20
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org =E2=94=82 Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--=20
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---=20
You received this message because you are subscribed to the Google Groups "=
rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply
* Re: [PATCH 2/2] mfd: ds1374: Add Dallas/Maxim DS1374 Multi Function Device
From: Lee Jones @ 2017-07-18 9:22 UTC (permalink / raw)
To: Moritz Fischer
Cc: robh+dt, mark.rutland, a.zummo, alexandre.belloni, wim, linux,
devicetree, linux-kernel, linux-watchdog, linux-rtc,
Moritz Fischer
In-Reply-To: <20170717181409.GB8750@tyrael.ni.corp.natinst.com>
On Mon, 17 Jul 2017, Moritz Fischer wrote:
> Hi Lee,
>
> On Mon, Jul 17, 2017 at 08:51:17AM +0100, Lee Jones wrote:
> > On Thu, 13 Jul 2017, Moritz Fischer wrote:
> >
> > > From: Moritz Fischer <moritz.fischer@ettus.com>
> > >
> > > Add support for the Maxim/Dallas DS1374 RTC/WDT with trickle charger.
> > > The device can either be configured as simple RTC, as simple RTC with
> > > Alarm (IRQ) as well as simple RTC with watchdog timer.
> > >
> > > Break up the old monolithic driver in drivers/rtc/rtc-ds1374.c into:
> > > - rtc part in drivers/rtc/rtc-ds1374.c
> > > - watchdog part under drivers/watchdog/ds1374-wdt.c
> > > - mfd part drivers/mfd/ds1374.c
> > >
> > > The MFD part takes care of trickle charging and mode selection,
> > > since the usage modes of a) RTC + Alarm or b) RTC + WDT
> > > are mutually exclusive.
> > >
> > > Signed-off-by: Moritz Fischer <mdf@kernel.org>
> > > ---
> > > drivers/mfd/Kconfig | 10 +
> > > drivers/mfd/Makefile | 1 +
> > > drivers/mfd/ds1374.c | 260 ++++++++++++++++
> > > drivers/rtc/rtc-ds1374.c | 639 ++++++++++-----------------------------
> >
> > It looks like this should now depend on MFD_DS1374, right?
> >
> > > drivers/watchdog/Kconfig | 10 +
> > > drivers/watchdog/Makefile | 1 +
> > > drivers/watchdog/ds1374-wdt.c | 208 +++++++++++++
> >
> > The RTC and Watchdog drivers need to be split out of this patch and
> > placed into their own. Then we can take them through their respective
> > subsystem trees and do not have to rely on immutable branches for
> > unification.
>
> Ok, I haven't found a good way to keep this bisectable in that case. I'm
> open to suggestions. If the consensus ends up being to split it up, I'm
> more than happy to separate it out into multiple patches.
If it's genuinely not bisectable, then leave it as is.
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
^ permalink raw reply
* Re: [PATCH 1/2] dt-binding: mfd: Add Maxim/Dallas DS1374 MFD device binding
From: Lee Jones @ 2017-07-18 9:27 UTC (permalink / raw)
To: Moritz Fischer
Cc: robh+dt, mark.rutland, a.zummo, alexandre.belloni, wim, linux,
devicetree, linux-kernel, linux-watchdog, linux-rtc
In-Reply-To: <1499975665-14581-1-git-send-email-mdf@kernel.org>
On Thu, 13 Jul 2017, Moritz Fischer wrote:
> This adds a binding for the Maxim/Dallas DS1374 MFD.
>
> Signed-off-by: Moritz Fischer <mdf@kernel.org>
> ---
> Changes from RFC:
> - dallas,ds1374-mode -> dallas,mode
> - Clarified examples
> - dallas,remap-reset property
>
> On second thoughts the solution for the remapping found in the
> discussion did not seem to be a good solution, since the INT
> pin indicating watchdog reset does not necessarily have to be
> connected to an interrupt line on the machine, it could equally
> well be hooked up to a PMIC reset input or similar.
> In that case using the presence of an 'interrupt' phandle is not
> a good choice.
For some really odd reason, my mailer is chopping the patch here!
This has never happened before and I'm struggling to find out what's
going on. Would you be kind enough to fix RobH's comment(s) and
resent please. Hopefully a resend will fix things.
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
^ permalink raw reply
* [PATCH 0/4] PM / Suspend: Print wall time
From: Mark Salyzyn @ 2017-07-18 17:24 UTC (permalink / raw)
To: linux-kernel
Cc: rjw, len.brown, pavel, linux-pm, a.zummo, alexandre.belloni,
linux-rtc, Mark Salyzyn
Helpful for post-mortem analysis to synchronize CLOCK_MONOTONIC
kernel logs with CLOCK_REALTIME user space logs. Post-mortem
analysis for Battery and Power diagnosis. Improved reporting
of suspension times against the rtc wallclock, which is
persistent even at the lowest power management states.
analyze_suspend.py requires a configured kernel to debug, these
prints can remain in a field product with CONFIG_RTC_TIME_SHOW.
Sincerely -- Mark Salyzyn
^ permalink raw reply
* [PATCH 1/4] rtc-lib: Add rtc_show_time(const char *prefix_msg)
From: Mark Salyzyn @ 2017-07-18 17:25 UTC (permalink / raw)
To: linux-kernel
Cc: rjw, len.brown, pavel, linux-pm, a.zummo, alexandre.belloni,
linux-rtc, Mark Salyzyn
Go directly to the rtc for persistent wall clock time and print.
Useful if REALTIME is required to be logged in a low level power
management function or when clock activities are suspended. An
aid to permit user space alignment of kernel activities.
Feature activated by CONFIG_RTC_SHOW_TIME.
Signed-off-by: Mark Salyzyn <salyzyn@android.com>
---
drivers/rtc/Kconfig | 11 +++++++++++
drivers/rtc/rtc-lib.c | 16 ++++++++++++++++
include/linux/rtc.h | 5 +++++
3 files changed, 32 insertions(+)
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index 72419ac2c52a..7c308605bf42 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -5,6 +5,17 @@
config RTC_LIB
bool
+config RTC_SHOW_TIME
+ bool "rtc_show_time instrumentation"
+ select RTC_LIB
+ help
+ Activate rtc_show_time(const char *msg) wall clock time
+ instrumentation.
+
+ The instrumentation is used to help triage and synchronize
+ kernel logs using CLOCK_MONOTONIC and user space activity
+ logs utilizing CLOCK_REALTIME references.
+
config RTC_MC146818_LIB
bool
select RTC_LIB
diff --git a/drivers/rtc/rtc-lib.c b/drivers/rtc/rtc-lib.c
index 1ae7da5cfc60..676d6a83e843 100644
--- a/drivers/rtc/rtc-lib.c
+++ b/drivers/rtc/rtc-lib.c
@@ -94,6 +94,22 @@ void rtc_time64_to_tm(time64_t time, struct rtc_time *tm)
}
EXPORT_SYMBOL(rtc_time64_to_tm);
+#ifdef CONFIG_RTC_SHOW_TIME
+void rtc_show_time(const char *prefix_msg)
+{
+ struct timespec ts;
+ struct rtc_time tm;
+
+ getnstimeofday(&ts);
+ rtc_time_to_tm(ts.tv_sec, &tm);
+ pr_info("%s %d-%02d-%02d %02d:%02d:%02d.%09lu UTC\n",
+ prefix_msg ? prefix_msg : "Time:",
+ tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
+ tm.tm_hour, tm.tm_min, tm.tm_sec, ts.tv_nsec);
+}
+EXPORT_SYMBOL(rtc_show_time);
+#endif
+
/*
* Does the rtc_time represent a valid date/time?
*/
diff --git a/include/linux/rtc.h b/include/linux/rtc.h
index 0a0f0d14a5fb..bf625e023799 100644
--- a/include/linux/rtc.h
+++ b/include/linux/rtc.h
@@ -22,6 +22,11 @@ extern int rtc_year_days(unsigned int day, unsigned int month, unsigned int year
extern int rtc_valid_tm(struct rtc_time *tm);
extern time64_t rtc_tm_to_time64(struct rtc_time *tm);
extern void rtc_time64_to_tm(time64_t time, struct rtc_time *tm);
+#ifdef CONFIG_RTC_SHOW_TIME
+extern void rtc_show_time(const char *prefix_msg);
+#else
+#define rtc_show_time(prefix_msg)
+#endif
ktime_t rtc_tm_to_ktime(struct rtc_time tm);
struct rtc_time rtc_ktime_to_tm(ktime_t kt);
--
2.13.2.932.g7449e964c-goog
^ permalink raw reply related
* [PATCH 2/4] rtc-lib: Print wall time at die and reboot
From: Mark Salyzyn @ 2017-07-18 17:25 UTC (permalink / raw)
To: linux-kernel
Cc: rjw, len.brown, pavel, linux-pm, a.zummo, alexandre.belloni,
linux-rtc, Mark Salyzyn
Permits power state and battery life diagnosis.
Feature activated by CONFIG_RTC_SHOW_TIME.
Signed-off-by: Mark Salyzyn <salyzyn@android.com>
---
drivers/rtc/rtc-lib.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 58 insertions(+)
diff --git a/drivers/rtc/rtc-lib.c b/drivers/rtc/rtc-lib.c
index 676d6a83e843..c28fdfbb99d4 100644
--- a/drivers/rtc/rtc-lib.c
+++ b/drivers/rtc/rtc-lib.c
@@ -12,6 +12,8 @@
*/
#include <linux/export.h>
+#include <linux/kdebug.h>
+#include <linux/reboot.h>
#include <linux/rtc.h>
static const unsigned char rtc_days_in_month[] = {
@@ -108,6 +110,62 @@ void rtc_show_time(const char *prefix_msg)
tm.tm_hour, tm.tm_min, tm.tm_sec, ts.tv_nsec);
}
EXPORT_SYMBOL(rtc_show_time);
+
+static int rtc_show_time_die_notify(struct notifier_block *self,
+ unsigned long event, void *data)
+{
+ if (event != DIE_OOPS)
+ return NOTIFY_DONE;
+ rtc_show_time("Oops");
+ return NOTIFY_DONE;
+}
+
+static struct notifier_block rtc_show_time_die_nb = {
+ .notifier_call = rtc_show_time_die_notify,
+ .priority = 0,
+};
+
+static int rtc_show_time_reboot_notify(struct notifier_block *self,
+ unsigned long event, void *data)
+{
+ const char *txt;
+
+ switch (event) {
+ case SYS_RESTART:
+ txt = "Restart";
+ break;
+ case SYS_HALT:
+ txt = "Halt";
+ break;
+ case SYS_POWER_OFF:
+ txt = "Power-Off";
+ break;
+ default:
+ return NOTIFY_DONE;
+ }
+ rtc_show_time(txt);
+ return NOTIFY_DONE;
+}
+
+static struct notifier_block rtc_show_time_reboot_nb = {
+ .notifier_call = rtc_show_time_reboot_notify,
+ .priority = 0,
+};
+
+static __init int init_rtc_show_time(void)
+{
+ int ret;
+
+ ret = register_die_notifier(&rtc_show_time_die_nb);
+ if (ret)
+ pr_warn("Failed to register rtc_show_time die notifier\n");
+ ret = register_reboot_notifier(&rtc_show_time_reboot_nb);
+ if (ret)
+ pr_warn("Failed to register rtc_show_time reboot notifier\n");
+
+ return ret;
+}
+device_initcall(init_rtc_show_time);
#endif
/*
--
2.13.2.932.g7449e964c-goog
^ permalink raw reply related
* [PATCH 3/4] PM: Print wall time at suspend entry and exit
From: Mark Salyzyn @ 2017-07-18 17:25 UTC (permalink / raw)
To: linux-kernel
Cc: rjw, len.brown, pavel, linux-pm, a.zummo, alexandre.belloni,
linux-rtc, Mark Salyzyn
Permits power state and battery life diagnosis.
Feature activated by CONFIG_RTC_SHOW_TIME.
Signed-off-by: Mark Salyzyn <salyzyn@android.com>
---
kernel/power/suspend.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
index 3ecf275d7e44..f44d2152ab3f 100644
--- a/kernel/power/suspend.c
+++ b/kernel/power/suspend.c
@@ -26,6 +26,7 @@
#include <linux/suspend.h>
#include <linux/syscore_ops.h>
#include <linux/ftrace.h>
+#include <linux/rtc.h>
#include <trace/events/power.h>
#include <linux/compiler.h>
#include <linux/moduleparam.h>
@@ -579,6 +580,7 @@ int pm_suspend(suspend_state_t state)
if (state <= PM_SUSPEND_ON || state >= PM_SUSPEND_MAX)
return -EINVAL;
+ rtc_show_time("PM: suspend entry");
error = enter_state(state);
if (error) {
suspend_stats.fail++;
@@ -586,6 +588,7 @@ int pm_suspend(suspend_state_t state)
} else {
suspend_stats.success++;
}
+ rtc_show_time("PM: suspend exit");
return error;
}
EXPORT_SYMBOL(pm_suspend);
--
2.13.2.932.g7449e964c-goog
^ permalink raw reply related
* [PATCH 4/4] PM: Print wall time at hibernate entry and exit
From: Mark Salyzyn @ 2017-07-18 17:26 UTC (permalink / raw)
To: linux-kernel
Cc: rjw, len.brown, pavel, linux-pm, a.zummo, alexandre.belloni,
linux-rtc, Mark Salyzyn
Permits power state and battery life diagnosis.
Feature activated by CONFIG_RTC_SHOW_TIME.
Signed-off-by: Mark Salyzyn <salyzyn@android.com>
---
kernel/power/hibernate.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
index e1914c7b85b1..0b5460f9189b 100644
--- a/kernel/power/hibernate.c
+++ b/kernel/power/hibernate.c
@@ -32,11 +32,11 @@
#include <linux/ctype.h>
#include <linux/genhd.h>
#include <linux/ktime.h>
+#include <linux/rtc.h>
#include <trace/events/power.h>
#include "power.h"
-
static int nocompress;
static int noresume;
static int nohibernate;
@@ -342,6 +342,7 @@ int hibernation_snapshot(int platform_mode)
pm_message_t msg;
int error;
+ rtc_show_time("PM: hibernation entry");
pm_suspend_clear_flags();
error = platform_begin(platform_mode);
if (error)
@@ -409,6 +410,7 @@ int hibernation_snapshot(int platform_mode)
thaw_kernel_threads();
Cleanup:
swsusp_free();
+ rtc_show_time("PM: hibernation exit");
goto Close;
}
--
2.13.2.932.g7449e964c-goog
^ permalink raw reply related
* Re: [PATCH 1/4] rtc-lib: Add rtc_show_time(const char *prefix_msg)
From: Andy Shevchenko @ 2017-07-18 17:46 UTC (permalink / raw)
To: Mark Salyzyn
Cc: linux-kernel@vger.kernel.org, Rafael J. Wysocki, Brown, Len,
Pavel Machek, linux-pm@vger.kernel.org, Alessandro Zummo,
Alexandre Belloni, linux-rtc
In-Reply-To: <20170718172525.114514-1-salyzyn@android.com>
On Tue, Jul 18, 2017 at 8:25 PM, Mark Salyzyn <salyzyn@android.com> wrote:
> Go directly to the rtc for persistent wall clock time and print.
> Useful if REALTIME is required to be logged in a low level power
> management function or when clock activities are suspended. An
> aid to permit user space alignment of kernel activities.
>
> Feature activated by CONFIG_RTC_SHOW_TIME.
What's wrong with procfs device nodes for that?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply
* Re: [PATCH 1/4] rtc-lib: Add rtc_show_time(const char *prefix_msg)
From: Joe Perches @ 2017-07-18 17:41 UTC (permalink / raw)
To: Mark Salyzyn, linux-kernel
Cc: rjw, len.brown, pavel, linux-pm, a.zummo, alexandre.belloni,
linux-rtc
In-Reply-To: <20170718172525.114514-1-salyzyn@android.com>
On Tue, 2017-07-18 at 10:25 -0700, Mark Salyzyn wrote:
> Go directly to the rtc for persistent wall clock time and print.
> Useful if REALTIME is required to be logged in a low level power
> management function or when clock activities are suspended. An
> aid to permit user space alignment of kernel activities.
[]
> diff --git a/include/linux/rtc.h b/include/linux/rtc.h
[]
> @@ -22,6 +22,11 @@ extern int rtc_year_days(unsigned int day, unsigned int month, unsigned int year
> extern int rtc_valid_tm(struct rtc_time *tm);
> extern time64_t rtc_tm_to_time64(struct rtc_time *tm);
> extern void rtc_time64_to_tm(time64_t time, struct rtc_time *tm);
> +#ifdef CONFIG_RTC_SHOW_TIME
> +extern void rtc_show_time(const char *prefix_msg);
> +#else
> +#define rtc_show_time(prefix_msg)
It's generally better to use a static inline to avoid
misuses in newly added code in the !CONFIG_RTC_SHOW_TIME
compile path when CONFIG_RTC_SHOW_TIME may not be compiled.
static inline void rtc_show_time(const char *prefix_msg)
{
}
^ permalink raw reply
* Re: [PATCH 1/4] rtc-lib: Add rtc_show_time(const char *prefix_msg)
From: Andy Shevchenko @ 2017-07-18 17:49 UTC (permalink / raw)
To: Mark Salyzyn
Cc: linux-kernel@vger.kernel.org, Rafael J. Wysocki, Brown, Len,
Pavel Machek, linux-pm@vger.kernel.org, Alessandro Zummo,
Alexandre Belloni, linux-rtc
In-Reply-To: <CAHp75VfZN45E2bXiaNgEfM_=NVhPhtER-8rN4PxeGsLoBQ-2Cg@mail.gmail.com>
On Tue, Jul 18, 2017 at 8:46 PM, Andy Shevchenko
<andy.shevchenko@gmail.com> wrote:
> On Tue, Jul 18, 2017 at 8:25 PM, Mark Salyzyn <salyzyn@android.com> wrote:
>> Go directly to the rtc for persistent wall clock time and print.
>> Useful if REALTIME is required to be logged in a low level power
>> management function or when clock activities are suspended. An
>> aid to permit user space alignment of kernel activities.
>>
>> Feature activated by CONFIG_RTC_SHOW_TIME.
>
> What's wrong with procfs device nodes for that?
Ah, it's internal API, ok.
Then would it be possible to use %pt [1] or alike?
[1]: https://www.spinics.net/lists/kernel/msg2528401.html
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply
* Re: [PATCH v1 00/25] lib, rtc: Print rtc_time via %pt[dt][rv]
From: Joe Perches @ 2017-07-18 17:50 UTC (permalink / raw)
To: Andy Shevchenko, Rasmus Villemoes, Greg Kroah-Hartman,
Andrew Morton, linux-kernel, Alessandro Zummo, Alexandre Belloni,
linux-rtc
Cc: Mark Salyzyn
In-Reply-To: <20170608134811.60786-1-andriy.shevchenko@linux.intel.com>
On Thu, 2017-06-08 at 16:47 +0300, Andy Shevchenko wrote:
> Recently I have noticed too many users of struct rtc_time that printing
> its content field by field.
>
> In this series I introduce %pt[dt][rv] specifier to make life a bit
> easier.
Hey Andy.
I just saw a patch with a printk for rtc time from Mark Salyzyn.
https://lkml.org/lkml/2017/7/18/885
Any idea if you want to push this extension?
I like the concept and still think it could be extended a bit more.
from: https://lkml.org/lkml/2017/6/8/1134
My preference would be for %pt[type]<output style>
where <type> is mandatory and could be:
r for struct rtc_time
6 for time64_t
k for ktime_t
T for struct timespec64
etc
and <output style> has an unspecified default of
YYYY-MM-DD:hh:mm:ss
Perhaps use the "date" formats without the leading
% uses for <output style> for additional styles.
^ permalink raw reply
* Re: [PATCH 1/4] rtc-lib: Add rtc_show_time(const char *prefix_msg)
From: Alexandre Belloni @ 2017-07-18 17:52 UTC (permalink / raw)
To: Mark Salyzyn
Cc: linux-kernel, rjw, len.brown, pavel, linux-pm, a.zummo, linux-rtc
In-Reply-To: <20170718172525.114514-1-salyzyn@android.com>
Hi,
On 18/07/2017 at 10:25:23 -0700, Mark Salyzyn wrote:
> Go directly to the rtc for persistent wall clock time and print.
> Useful if REALTIME is required to be logged in a low level power
> management function or when clock activities are suspended. An
> aid to permit user space alignment of kernel activities.
>
> Feature activated by CONFIG_RTC_SHOW_TIME.
>
> Signed-off-by: Mark Salyzyn <salyzyn@android.com>
> ---
> drivers/rtc/Kconfig | 11 +++++++++++
> drivers/rtc/rtc-lib.c | 16 ++++++++++++++++
> include/linux/rtc.h | 5 +++++
> 3 files changed, 32 insertions(+)
>
> diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
> index 72419ac2c52a..7c308605bf42 100644
> --- a/drivers/rtc/Kconfig
> +++ b/drivers/rtc/Kconfig
> @@ -5,6 +5,17 @@
> config RTC_LIB
> bool
>
> +config RTC_SHOW_TIME
> + bool "rtc_show_time instrumentation"
> + select RTC_LIB
> + help
> + Activate rtc_show_time(const char *msg) wall clock time
> + instrumentation.
> +
> + The instrumentation is used to help triage and synchronize
> + kernel logs using CLOCK_MONOTONIC and user space activity
> + logs utilizing CLOCK_REALTIME references.
> +
> config RTC_MC146818_LIB
> bool
> select RTC_LIB
> diff --git a/drivers/rtc/rtc-lib.c b/drivers/rtc/rtc-lib.c
> index 1ae7da5cfc60..676d6a83e843 100644
> --- a/drivers/rtc/rtc-lib.c
> +++ b/drivers/rtc/rtc-lib.c
> @@ -94,6 +94,22 @@ void rtc_time64_to_tm(time64_t time, struct rtc_time *tm)
> }
> EXPORT_SYMBOL(rtc_time64_to_tm);
>
> +#ifdef CONFIG_RTC_SHOW_TIME
> +void rtc_show_time(const char *prefix_msg)
> +{
> + struct timespec ts;
> + struct rtc_time tm;
> +
> + getnstimeofday(&ts);
> + rtc_time_to_tm(ts.tv_sec, &tm);
Apart from using rtc_time_to_tm (and you should probably use
rtc_time64_to_tm), none of this is actually related to the RTC
subsystem. I feel like you should find another place to put that, maybe
timekeeping_debug.c?
> + pr_info("%s %d-%02d-%02d %02d:%02d:%02d.%09lu UTC\n",
> + prefix_msg ? prefix_msg : "Time:",
> + tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
> + tm.tm_hour, tm.tm_min, tm.tm_sec, ts.tv_nsec);
> +}
> +EXPORT_SYMBOL(rtc_show_time);
> +#endif
> +
> /*
> * Does the rtc_time represent a valid date/time?
> */
> diff --git a/include/linux/rtc.h b/include/linux/rtc.h
> index 0a0f0d14a5fb..bf625e023799 100644
> --- a/include/linux/rtc.h
> +++ b/include/linux/rtc.h
> @@ -22,6 +22,11 @@ extern int rtc_year_days(unsigned int day, unsigned int month, unsigned int year
> extern int rtc_valid_tm(struct rtc_time *tm);
> extern time64_t rtc_tm_to_time64(struct rtc_time *tm);
> extern void rtc_time64_to_tm(time64_t time, struct rtc_time *tm);
> +#ifdef CONFIG_RTC_SHOW_TIME
> +extern void rtc_show_time(const char *prefix_msg);
> +#else
> +#define rtc_show_time(prefix_msg)
> +#endif
> ktime_t rtc_tm_to_ktime(struct rtc_time tm);
> struct rtc_time rtc_ktime_to_tm(ktime_t kt);
>
> --
> 2.13.2.932.g7449e964c-goog
>
--
Alexandre Belloni, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
^ permalink raw reply
* Re: [PATCH v1 00/25] lib, rtc: Print rtc_time via %pt[dt][rv]
From: Andy Shevchenko @ 2017-07-18 17:55 UTC (permalink / raw)
To: Joe Perches, Rasmus Villemoes, Greg Kroah-Hartman, Andrew Morton,
linux-kernel, Alessandro Zummo, Alexandre Belloni, linux-rtc
Cc: Mark Salyzyn
In-Reply-To: <1500400205.25934.27.camel@perches.com>
On Tue, 2017-07-18 at 10:50 -0700, Joe Perches wrote:
> On Thu, 2017-06-08 at 16:47 +0300, Andy Shevchenko wrote:
> > Recently I have noticed too many users of struct rtc_time that
> > printing
> > its content field by field.
> >
> > In this series I introduce %pt[dt][rv] specifier to make life a bit
> > easier.
>
> Hey Andy.
>
> I just saw a patch with a printk for rtc time from Mark Salyzyn.
> https://lkml.org/lkml/2017/7/18/885
Same!
> Any idea if you want to push this extension?
Yes, just really lack of time for everything.
I like the idea to make it conditional (config BLABLABLA). It will
address some comments about footprint for no users.
> I like the concept and still think it could be extended a bit more.
>
> from: https://lkml.org/lkml/2017/6/8/1134
>
> My preference would be for %pt[type]<output style>
> where <type> is mandatory and could be:
>
> r for struct rtc_time
> 6 for time64_t
> k for ktime_t
> T for struct timespec64
> etc
I dunno about this.
However, I like this more than do conversion in each case where input
reference has different type.
> and <output style> has an unspecified default of
> YYYY-MM-DD:hh:mm:ss
I'm against this, sorry. Too many variations for almost no use (users).
> Perhaps use the "date" formats without the leading
> % uses for <output style> for additional styles.
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
^ permalink raw reply
* Re: [PATCH v1 00/25] lib, rtc: Print rtc_time via %pt[dt][rv]
From: Joe Perches @ 2017-07-18 18:32 UTC (permalink / raw)
To: Andy Shevchenko, Rasmus Villemoes, Greg Kroah-Hartman,
Andrew Morton, linux-kernel, Alessandro Zummo, Alexandre Belloni,
linux-rtc
Cc: Mark Salyzyn
In-Reply-To: <1500400523.29303.92.camel@linux.intel.com>
On Tue, 2017-07-18 at 20:55 +0300, Andy Shevchenko wrote:
> On Tue, 2017-07-18 at 10:50 -0700, Joe Perches wrote:
> > On Thu, 2017-06-08 at 16:47 +0300, Andy Shevchenko wrote:
> > > Recently I have noticed too many users of struct rtc_time that
> > > printing
> > > its content field by field.
> > >
> > > In this series I introduce %pt[dt][rv] specifier to make life a bit
> > > easier.
> >
> > Hey Andy.
> >
> > I just saw a patch with a printk for rtc time from Mark Salyzyn.
> > https://lkml.org/lkml/2017/7/18/885
>
> Same!
>
> > Any idea if you want to push this extension?
>
> Yes, just really lack of time for everything.
>
> I like the idea to make it conditional (config BLABLABLA). It will
> address some comments about footprint for no users.
Only one of the other %p<foo> extensions is conditional
and that
conditional is probably not too useful.
I think the code size is relatively small and not
particularly valuable for the additional complexity.
For instance, all of the code that emits MAC and
IP[46] addresses %pM and %pI variants is 2.5K.
(x86 allnoconfig)
There are lots more code size savings than that
lying about.
And auditing all the code that might emit a MAC
address when CONFIG_NET is not set is probably
not worth the effort for the size reduction.
$ size lib/vsprintf.o*
text data bss dec hex
filename
12140 4 0 12144 2f70
lib/vsprintf.o.allnoconfig.new
14785 4 0 14789 39c5
lib/vsprintf.o.allnoconfig.old
---
lib/vsprintf.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 86c3385b9eb3..de95e78ca5f0 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -933,6 +933,7 @@ char *bitmap_list_string(char *buf, char *end, unsigned long *bitmap,
return buf;
}
+#ifdef CONFIG_NET
static noinline_for_stack
char *mac_address_string(char *buf, char *end, u8 *addr,
struct printf_spec spec, const char *fmt)
@@ -1241,6 +1242,7 @@ char *ip4_addr_string_sa(char *buf, char *end, const struct sockaddr_in *sa,
return string(buf, end, ip4_addr, spec);
}
+#endif
static noinline_for_stack
char *escaped_string(char *buf, char *end, u8 *addr, struct printf_spec spec,
@@ -1741,6 +1743,7 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
default:
return bitmap_string(buf, end, ptr, spec, fmt);
}
+#ifdef CONFIG_NET
case 'M': /* Colon separated: 00:01:02:03:04:05 */
case 'm': /* Contiguous: 000102030405 */
/* [mM]F (FDDI) */
@@ -1777,6 +1780,7 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
}}
}
break;
+#endif
case 'E':
return escaped_string(buf, end, ptr, spec, fmt);
case 'U':
^ permalink raw reply related
* Re: [PATCH v1 00/25] lib, rtc: Print rtc_time via %pt[dt][rv]
From: Mark Salyzyn @ 2017-07-18 19:57 UTC (permalink / raw)
To: Joe Perches, Andy Shevchenko, Rasmus Villemoes,
Greg Kroah-Hartman, Andrew Morton, linux-kernel, Alessandro Zummo,
Alexandre Belloni, linux-rtc
In-Reply-To: <1500400205.25934.27.camel@perches.com>
On 07/18/2017 10:50 AM, Joe Perches wrote:
> On Thu, 2017-06-08 at 16:47 +0300, Andy Shevchenko wrote:
>> Recently I have noticed too many users of struct rtc_time that printing
>> its content field by field.
>>
>> In this series I introduce %pt[dt][rv] specifier to make life a bit
>> easier.
> Hey Andy.
>
> I just saw a patch with a printk for rtc time from Mark Salyzyn.
> https://lkml.org/lkml/2017/7/18/885
>
> Any idea if you want to push this extension?
>
> I like the concept and still think it could be extended a bit more.
>
> from: https://lkml.org/lkml/2017/6/8/1134
>
> My preference would be for %pt[type]<output style>
> where <type> is mandatory and could be:
>
> r for struct rtc_time
> 6 for time64_t
> k for ktime_t
> T for struct timespec64
> etc
>
> and <output style> has an unspecified default of
> YYYY-MM-DD:hh:mm:ss
>
> Perhaps use the "date" formats without the leading
> % uses for <output style> for additional styles.
>
YYYY-MM-DD hh:mm:ss.nnnnnnnnn ?
^ permalink raw reply
* Re: [PATCH 1/4] rtc-lib: Add rtc_show_time(const char *prefix_msg)
From: Mark Salyzyn @ 2017-07-18 20:00 UTC (permalink / raw)
To: Alexandre Belloni
Cc: linux-kernel, rjw, len.brown, pavel, linux-pm, a.zummo, linux-rtc
In-Reply-To: <20170718175224.xccqnv4zjggn4shu@piout.net>
On 07/18/2017 10:52 AM, Alexandre Belloni wrote:
> Hi,
>
> On 18/07/2017 at 10:25:23 -0700, Mark Salyzyn wrote:
>> . . .
> Apart from using rtc_time_to_tm (and you should probably use
> rtc_time64_to_tm), none of this is actually related to the RTC
> subsystem. I feel like you should find another place to put that, maybe
> timekeeping_debug.c?
Makes a lot of sense!
-- Mark
^ permalink raw reply
* Re: [PATCH 1/4] rtc-lib: Add rtc_show_time(const char *prefix_msg)
From: Mark Salyzyn @ 2017-07-18 20:08 UTC (permalink / raw)
To: Alexandre Belloni
Cc: linux-kernel, rjw, len.brown, pavel, linux-pm, a.zummo, linux-rtc
In-Reply-To: <b6bce88c-a13c-8504-18ac-242f637f4d13@android.com>
On 07/18/2017 01:00 PM, Mark Salyzyn wrote:
> On 07/18/2017 10:52 AM, Alexandre Belloni wrote:
>> Hi,
>>
>> On 18/07/2017 at 10:25:23 -0700, Mark Salyzyn wrote:
>>> . . .
>> Apart from using rtc_time_to_tm (and you should probably use
>> rtc_time64_to_tm), none of this is actually related to the RTC
>> subsystem. I feel like you should find another place to put that, maybe
>> timekeeping_debug.c?
> Makes a lot of sense!
>
> -- Mark
Ooops, timekeeping_debug.c is currently only to support a debugfs node.
Perhaps a _new_ file in that hierarchy like kernel/time/rtc_show_time.c.
-- Mark
^ permalink raw reply
* [PATCH v2 0/4] PM / Suspend: Print wall time
From: Mark Salyzyn @ 2017-07-18 21:18 UTC (permalink / raw)
To: linux-kernel
Cc: rjw, len.brown, pavel, linux-pm, a.zummo, alexandre.belloni,
linux-rtc, andy.shevchenko, Mark Salyzyn
Helpful for post-mortem analysis to synchronize CLOCK_MONOTONIC
kernel logs with CLOCK_REALTIME user space logs. Post-mortem
analysis for Battery and Power diagnosis. Improved reporting
of suspension times against the rtc wallclock, which is
persistent even at the lowest power management states.
analyze_suspend.py requires a configured kernel to debug, these
prints can remain in a field product with CONFIG_RTC_TIME_SHOW.
Signed-off-by: Mark Salyzyn <salyzyn@android.com>
v2:
- move implementation to kernel timekeeping from rtc_lib files
- use rtc_time64_to_tm() instead of rtc_time_to_tm()
- use inline in include/linux/rtc.h for !CONFIG_RTC_SHOW_TIME
- use late_initcall to ensure rtc_lib driver(s) are loaded
---
include/linux/rtc.h | 5 ++
kernel/power/hibernate.c | 4 +-
kernel/power/suspend.c | 3 +
kernel/time/Kconfig | 11 +++++
kernel/time/Makefile | 1
kernel/time/rtc_show_time.c | 82 ++++++++++++++++++++++++++++++++++++++++++++
6 files changed, 105 insertions(+), 1 deletion(-)
^ permalink raw reply
* [PATCH v2 1/4] time: rtc-lib: Add rtc_show_time(const char *prefix_msg)
From: Mark Salyzyn @ 2017-07-18 21:19 UTC (permalink / raw)
To: linux-kernel
Cc: rjw, len.brown, pavel, linux-pm, a.zummo, alexandre.belloni,
linux-rtc, andy.shevchenko, Mark Salyzyn, Mark Salyzyn,
Paul E. McKenney, Thierry Strudel, Thomas Gleixner, John Stultz,
Richard Cochran, Nicolas Pitre, Kees Cook
Go directly to the rtc for persistent wall clock time and print.
Useful if REALTIME is required to be logged in a low level power
management function or when clock activities are suspended. An
aid to permit user space alignment of kernel activities.
Feature activated by CONFIG_RTC_SHOW_TIME.
Signed-off-by: Mark Salyzyn <salyzyn@android.com>
v2
- move implementation to kernel timekeeping from rtc_lib files
- use rtc_time64_to_tm() instead of rtc_time_to_tm()
- use inline in include/linux/rtc.h for !CONFIG_RTC_SHOW_TIME
---
include/linux/rtc.h | 5 +++++
kernel/time/Kconfig | 11 +++++++++++
kernel/time/Makefile | 1 +
kernel/time/rtc_show_time.c | 23 +++++++++++++++++++++++
4 files changed, 40 insertions(+)
create mode 100644 kernel/time/rtc_show_time.c
diff --git a/include/linux/rtc.h b/include/linux/rtc.h
index 0a0f0d14a5fb..779401c937d5 100644
--- a/include/linux/rtc.h
+++ b/include/linux/rtc.h
@@ -22,6 +22,11 @@ extern int rtc_year_days(unsigned int day, unsigned int month, unsigned int year
extern int rtc_valid_tm(struct rtc_time *tm);
extern time64_t rtc_tm_to_time64(struct rtc_time *tm);
extern void rtc_time64_to_tm(time64_t time, struct rtc_time *tm);
+#ifdef CONFIG_RTC_SHOW_TIME
+extern void rtc_show_time(const char *prefix_msg);
+#else
+static inline void rtc_show_time(const char *prefix_msg) { }
+#endif
ktime_t rtc_tm_to_ktime(struct rtc_time tm);
struct rtc_time rtc_ktime_to_tm(ktime_t kt);
diff --git a/kernel/time/Kconfig b/kernel/time/Kconfig
index ac09bc29eb08..4da093ae3e37 100644
--- a/kernel/time/Kconfig
+++ b/kernel/time/Kconfig
@@ -145,3 +145,14 @@ config HIGH_RES_TIMERS
endmenu
endif
+
+config RTC_SHOW_TIME
+ bool "rtc_show_time instrumentation"
+ select RTC_LIB
+ help
+ Activate rtc_show_time(const char *msg) wall clock time
+ instrumentation.
+
+ The instrumentation is used to help triage and synchronize
+ kernel logs using CLOCK_MONOTONIC and user space activity
+ logs utilizing CLOCK_REALTIME references.
diff --git a/kernel/time/Makefile b/kernel/time/Makefile
index 938dbf33ef49..66f17e641052 100644
--- a/kernel/time/Makefile
+++ b/kernel/time/Makefile
@@ -17,3 +17,4 @@ obj-$(CONFIG_GENERIC_SCHED_CLOCK) += sched_clock.o
obj-$(CONFIG_TICK_ONESHOT) += tick-oneshot.o tick-sched.o
obj-$(CONFIG_DEBUG_FS) += timekeeping_debug.o
obj-$(CONFIG_TEST_UDELAY) += test_udelay.o
+obj-$(CONFIG_RTC_SHOW_TIME) += rtc_show_time.o
diff --git a/kernel/time/rtc_show_time.c b/kernel/time/rtc_show_time.c
new file mode 100644
index 000000000000..bbf4f92abf4f
--- /dev/null
+++ b/kernel/time/rtc_show_time.c
@@ -0,0 +1,23 @@
+/*
+ * rtc time printing utility functions
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/rtc.h>
+
+void rtc_show_time(const char *prefix_msg)
+{
+ struct timespec ts;
+ struct rtc_time tm;
+
+ getnstimeofday(&ts);
+ rtc_time64_to_tm(ts.tv_sec, &tm);
+ pr_info("%s %d-%02d-%02d %02d:%02d:%02d.%09lu UTC\n",
+ prefix_msg ? prefix_msg : "Time:",
+ tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
+ tm.tm_hour, tm.tm_min, tm.tm_sec, ts.tv_nsec);
+}
+EXPORT_SYMBOL(rtc_show_time);
--
2.13.2.932.g7449e964c-goog
^ permalink raw reply related
* [PATCH v2 2/4] time: Print wall time at die and reboot
From: Mark Salyzyn @ 2017-07-18 21:21 UTC (permalink / raw)
To: linux-kernel
Cc: rjw, len.brown, pavel, linux-pm, a.zummo, alexandre.belloni,
linux-rtc, Mark Salyzyn, Mark Salyzyn, Thierry Strudel
Permits power state and battery life diagnosis.
Feature activated by CONFIG_RTC_SHOW_TIME.
Signed-off-by: Mark Salyzyn <salyzyn@android.com>
v2:
- react to implementation move to kernel timekeeping from rtc_lib
- use late_initcall to ensure rtc_lib driver(s) are loaded
---
kernel/time/rtc_show_time.c | 59 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 59 insertions(+)
diff --git a/kernel/time/rtc_show_time.c b/kernel/time/rtc_show_time.c
index bbf4f92abf4f..d52e2a76cd00 100644
--- a/kernel/time/rtc_show_time.c
+++ b/kernel/time/rtc_show_time.c
@@ -6,6 +6,8 @@
* published by the Free Software Foundation.
*/
+#include <linux/kdebug.h>
+#include <linux/reboot.h>
#include <linux/rtc.h>
void rtc_show_time(const char *prefix_msg)
@@ -21,3 +23,60 @@ void rtc_show_time(const char *prefix_msg)
tm.tm_hour, tm.tm_min, tm.tm_sec, ts.tv_nsec);
}
EXPORT_SYMBOL(rtc_show_time);
+
+static int rtc_show_time_die_notify(struct notifier_block *self,
+ unsigned long event, void *data)
+{
+ if (event != DIE_OOPS)
+ return NOTIFY_DONE;
+ rtc_show_time("Oops");
+ return NOTIFY_DONE;
+}
+
+static struct notifier_block rtc_show_time_die_nb = {
+ .notifier_call = rtc_show_time_die_notify,
+ .priority = 0,
+};
+
+static int rtc_show_time_reboot_notify(struct notifier_block *self,
+ unsigned long event, void *data)
+{
+ const char *txt;
+
+ switch (event) {
+ case SYS_RESTART:
+ txt = "Restart";
+ break;
+ case SYS_HALT:
+ txt = "Halt";
+ break;
+ case SYS_POWER_OFF:
+ txt = "Power-Off";
+ break;
+ default:
+ return NOTIFY_DONE;
+ }
+ rtc_show_time(txt);
+ return NOTIFY_DONE;
+}
+
+static struct notifier_block rtc_show_time_reboot_nb = {
+ .notifier_call = rtc_show_time_reboot_notify,
+ .priority = 0,
+};
+
+static __init int init_rtc_show_time(void)
+{
+ int ret;
+
+ ret = register_die_notifier(&rtc_show_time_die_nb);
+ if (ret)
+ pr_warn("Failed to register rtc_show_time die notifier\n");
+ ret = register_reboot_notifier(&rtc_show_time_reboot_nb);
+ if (ret)
+ pr_warn("Failed to register rtc_show_time reboot notifier\n");
+
+ return ret;
+}
+/* rtc driver needs to be loaded before this is truly functional */
+late_initcall(init_rtc_show_time);
--
2.13.2.932.g7449e964c-goog
^ permalink raw reply related
* Re: [PATCH v2 1/4] time: rtc-lib: Add rtc_show_time(const char *prefix_msg)
From: Thomas Gleixner @ 2017-07-18 21:52 UTC (permalink / raw)
To: Mark Salyzyn
Cc: linux-kernel, rjw, len.brown, pavel, linux-pm, a.zummo,
alexandre.belloni, linux-rtc, andy.shevchenko, Mark Salyzyn,
Paul E. McKenney, Thierry Strudel, John Stultz, Richard Cochran,
Nicolas Pitre, Kees Cook
In-Reply-To: <20170718211930.123077-1-salyzyn@android.com>
On Tue, 18 Jul 2017, Mark Salyzyn wrote:
> Go directly to the rtc for persistent wall clock time and print.
> Useful if REALTIME is required to be logged in a low level power
> management function or when clock activities are suspended. An
> aid to permit user space alignment of kernel activities.
That's a horrible idea, really. And there is no point at all.
> +void rtc_show_time(const char *prefix_msg)
> +{
> + struct timespec ts;
> + struct rtc_time tm;
> +
> + getnstimeofday(&ts);
It calls getnstimeofday(), which is wrong to begin with as we switch
everything in kernel to the 64bit variants.
> + rtc_time64_to_tm(ts.tv_sec, &tm);
This is even more wrong as rtc_time64_to_tm is for 64 bit wide second
values....
> + pr_info("%s %d-%02d-%02d %02d:%02d:%02d.%09lu UTC\n",
> + prefix_msg ? prefix_msg : "Time:",
> + tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
> + tm.tm_hour, tm.tm_min, tm.tm_sec, ts.tv_nsec);
Why on earth do you need to print that information in RTC format? What's
wrong with just doing:
pr_info("My so important log message %lld\n", ktime_get_real_seconds());
and then decoding the seconds in post processing? That's completely
sufficient as you intend that for logging. Correlation with user space
CLOCK_REALTIME is even simpler as this is the same as reading it from user
space.
If your main intention is logging/debugging, then you can just use
tracepoints. The tracer allows correlation to user space tracing already.
So unless you can come up with a reasonable explanation why all this voodoo
is required, this is going nowhere.
Thanks,
tglx
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox