All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH 0/2] PM / devfreq: Add delayed timer for polling
       [not found] <CGME20200703061508epcas1p171aa3c0ab832b77e5837d8bd1e563742@epcas1p1.samsung.com>
@ 2020-07-03  6:26   ` Chanwoo Choi
  0 siblings, 0 replies; 24+ messages in thread
From: Chanwoo Choi @ 2020-07-03  6:26 UTC (permalink / raw)
  To: lukasz.luba, k.konieczny, krzk, kgene
  Cc: s.nawrocki, willy.mh.wolff.ml, b.zolnierkie, cw00.choi, chanwoo,
	myungjoo.ham, kyungmin.park, linux-pm, linux-kernel,
	linux-samsung-soc, linux-arm-kernel

Add the delayed timer to devfreq framework in order to support
the periodical polling mode without stop caused by CPU idle state.
Some Non-CPU device must need to monitor the device status like
utilization regardless of CPU state.

- patch1 explains the detailed reason why the delayed timer is required.
- patch2 initializes that exynos5422-dmc device use delayed timer as default
instead of deferrable timer.

Chanwoo Choi (2):
  PM / devfreq: Add support delayed timer for polling mode
  memory: samsung: exynos5422-dmc: Use delayed timer as default

 Documentation/ABI/testing/sysfs-class-devfreq | 12 +++
 drivers/devfreq/devfreq.c                     | 83 ++++++++++++++++++-
 drivers/memory/samsung/exynos5422-dmc.c       |  1 +
 include/linux/devfreq.h                       |  9 ++
 4 files changed, 104 insertions(+), 1 deletion(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 24+ messages in thread

* [RFC PATCH 0/2] PM / devfreq: Add delayed timer for polling
@ 2020-07-03  6:26   ` Chanwoo Choi
  0 siblings, 0 replies; 24+ messages in thread
From: Chanwoo Choi @ 2020-07-03  6:26 UTC (permalink / raw)
  To: lukasz.luba, k.konieczny, krzk, kgene
  Cc: willy.mh.wolff.ml, linux-samsung-soc, s.nawrocki, b.zolnierkie,
	linux-pm, linux-kernel, cw00.choi, kyungmin.park, myungjoo.ham,
	chanwoo, linux-arm-kernel

Add the delayed timer to devfreq framework in order to support
the periodical polling mode without stop caused by CPU idle state.
Some Non-CPU device must need to monitor the device status like
utilization regardless of CPU state.

- patch1 explains the detailed reason why the delayed timer is required.
- patch2 initializes that exynos5422-dmc device use delayed timer as default
instead of deferrable timer.

Chanwoo Choi (2):
  PM / devfreq: Add support delayed timer for polling mode
  memory: samsung: exynos5422-dmc: Use delayed timer as default

 Documentation/ABI/testing/sysfs-class-devfreq | 12 +++
 drivers/devfreq/devfreq.c                     | 83 ++++++++++++++++++-
 drivers/memory/samsung/exynos5422-dmc.c       |  1 +
 include/linux/devfreq.h                       |  9 ++
 4 files changed, 104 insertions(+), 1 deletion(-)

-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 24+ messages in thread

* [RFC PATCH 1/2] PM / devfreq: Add support delayed timer for polling mode
       [not found]   ` <CGME20200703061509epcas1p10446471df6497b4b2d7066280daa7f87@epcas1p1.samsung.com>
@ 2020-07-03  6:26       ` Chanwoo Choi
  0 siblings, 0 replies; 24+ messages in thread
From: Chanwoo Choi @ 2020-07-03  6:26 UTC (permalink / raw)
  To: lukasz.luba, k.konieczny, krzk, kgene
  Cc: s.nawrocki, willy.mh.wolff.ml, b.zolnierkie, cw00.choi, chanwoo,
	myungjoo.ham, kyungmin.park, linux-pm, linux-kernel,
	linux-samsung-soc, linux-arm-kernel

Until now, the devfreq driver using polling mode like simple_ondemand
governor have used only deferrable timer for reduing the redundant
power consumption. It reduces the CPU wake-up from idle due to polling mode
which check the status of Non-CPU device.

But, it has a problem for Non-CPU device like DMC device with DMA operation.
Some Non-CPU device need to do monitor continously regardless of CPU state
in order to decide the proper next status of Non-CPU device.

So, add support the dealyed timer for polling mode to support
the periodical monitoring. The devfreq driver and user can select
the kind of timer on either deferrable and delayed timer.

For example, change the timer type of DMC device
based on Exynos5422-based Odroid-XU3 as following:

- If want to use deferrable timer as following:
echo deferrable > /sys/class/devfreq/10c20000.memory-controller/timer

- If want to use delayed timer as following:
echo delayed > /sys/class/devfreq/10c20000.memory-controller/timer

Suggested-by: Lukasz Luba <lukasz.luba@arm.com>
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
---
 Documentation/ABI/testing/sysfs-class-devfreq | 12 +++
 drivers/devfreq/devfreq.c                     | 83 ++++++++++++++++++-
 include/linux/devfreq.h                       |  9 ++
 3 files changed, 103 insertions(+), 1 deletion(-)

diff --git a/Documentation/ABI/testing/sysfs-class-devfreq b/Documentation/ABI/testing/sysfs-class-devfreq
index 9758eb85ade3..b10aa3aa230d 100644
--- a/Documentation/ABI/testing/sysfs-class-devfreq
+++ b/Documentation/ABI/testing/sysfs-class-devfreq
@@ -65,6 +65,18 @@ Description:
 		as following:
 			echo 0 > /sys/class/devfreq/.../trans_stat
 
+What:		/sys/class/devfreq/.../timer
+Date:		July 2020
+Contact:	Chanwoo Choi <cw00.choi@samsung.com>
+Description:
+		This ABI shows and stores the kind of work timer by users.
+		This work timer is used by devfreq workqueue in order to
+		monitor the device status such as utilization. The user
+		can change the work timer on runtime according to their demand
+		as following:
+			echo deferrable > /sys/class/devfreq/.../timer
+			echo delayed > /sys/class/devfreq/.../timer
+
 What:		/sys/class/devfreq/.../userspace/set_freq
 Date:		September 2011
 Contact:	MyungJoo Ham <myungjoo.ham@samsung.com>
diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
index 52b9c3e141f3..2a4aa8742520 100644
--- a/drivers/devfreq/devfreq.c
+++ b/drivers/devfreq/devfreq.c
@@ -49,6 +49,11 @@ static LIST_HEAD(devfreq_governor_list);
 static LIST_HEAD(devfreq_list);
 static DEFINE_MUTEX(devfreq_list_lock);
 
+static const char timer_name[][DEVFREQ_NAME_LEN] = {
+	[DEVFREQ_TIMER_DEFERRABLE] = { "deferrable" },
+	[DEVFREQ_TIMER_DELAYED] = { "delayed" },
+};
+
 /**
  * find_device_devfreq() - find devfreq struct using device pointer
  * @dev:	device pointer used to lookup device devfreq.
@@ -454,7 +459,17 @@ void devfreq_monitor_start(struct devfreq *devfreq)
 	if (devfreq->governor->interrupt_driven)
 		return;
 
-	INIT_DEFERRABLE_WORK(&devfreq->work, devfreq_monitor);
+	switch (devfreq->profile->timer) {
+	case DEVFREQ_TIMER_DEFERRABLE:
+		INIT_DEFERRABLE_WORK(&devfreq->work, devfreq_monitor);
+		break;
+	case DEVFREQ_TIMER_DELAYED:
+		INIT_DELAYED_WORK(&devfreq->work, devfreq_monitor);
+		break;
+	default:
+		return;
+	}
+
 	if (devfreq->profile->polling_ms)
 		queue_delayed_work(devfreq_wq, &devfreq->work,
 			msecs_to_jiffies(devfreq->profile->polling_ms));
@@ -771,6 +786,11 @@ struct devfreq *devfreq_add_device(struct device *dev,
 	devfreq->data = data;
 	devfreq->nb.notifier_call = devfreq_notifier_call;
 
+	if (devfreq->profile->timer < 0
+		|| devfreq->profile->timer >= DEVFREQ_TIMER_NUM) {
+		goto err_out;
+	}
+
 	if (!devfreq->profile->max_state && !devfreq->profile->freq_table) {
 		mutex_unlock(&devfreq->lock);
 		err = set_freq_table(devfreq);
@@ -1625,6 +1645,66 @@ static ssize_t trans_stat_store(struct device *dev,
 }
 static DEVICE_ATTR_RW(trans_stat);
 
+static ssize_t timer_show(struct device *dev,
+			     struct device_attribute *attr, char *buf)
+{
+	struct devfreq *df = to_devfreq(dev);
+
+	if (!df->governor)
+		return -EINVAL;
+
+	return sprintf(buf, "%s\n", timer_name[df->profile->timer]);
+}
+
+static ssize_t timer_store(struct device *dev, struct device_attribute *attr,
+			      const char *buf, size_t count)
+{
+	struct devfreq *df = to_devfreq(dev);
+	char str_timer[DEVFREQ_NAME_LEN + 1];
+	int timer = -1;
+	int ret = 0, i;
+
+	ret = sscanf(buf, "%16s", str_timer);
+	if (ret != 1)
+		return -EINVAL;
+
+	for (i = 0; i < DEVFREQ_TIMER_NUM; i++) {
+		if (!strncmp(timer_name[i], str_timer, DEVFREQ_NAME_LEN)) {
+			timer = i;
+			break;
+		}
+	}
+
+	if (timer < 0) {
+		ret = -EINVAL;
+		goto out;
+	}
+
+	if (df->profile->timer == timer) {
+		ret = 0;
+		goto out;
+	}
+
+	mutex_lock(&df->lock);
+	df->profile->timer = timer;
+	mutex_unlock(&df->lock);
+
+	ret = df->governor->event_handler(df, DEVFREQ_GOV_STOP, NULL);
+	if (ret) {
+		dev_warn(dev, "%s: Governor %s not stopped(%d)\n",
+			 __func__, df->governor->name, ret);
+		goto out;
+	}
+
+	ret = df->governor->event_handler(df, DEVFREQ_GOV_START, NULL);
+	if (ret)
+		dev_warn(dev, "%s: Governor %s not started(%d)\n",
+			 __func__, df->governor->name, ret);
+out:
+	return ret ? ret : count;
+}
+static DEVICE_ATTR_RW(timer);
+
 static struct attribute *devfreq_attrs[] = {
 	&dev_attr_name.attr,
 	&dev_attr_governor.attr,
@@ -1636,6 +1716,7 @@ static struct attribute *devfreq_attrs[] = {
 	&dev_attr_min_freq.attr,
 	&dev_attr_max_freq.attr,
 	&dev_attr_trans_stat.attr,
+	&dev_attr_timer.attr,
 	NULL,
 };
 ATTRIBUTE_GROUPS(devfreq);
diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h
index 57e871a559a9..12782fbb4c25 100644
--- a/include/linux/devfreq.h
+++ b/include/linux/devfreq.h
@@ -31,6 +31,13 @@
 #define	DEVFREQ_PRECHANGE		(0)
 #define DEVFREQ_POSTCHANGE		(1)
 
+/* DEVFREQ work timers */
+enum devfreq_timer {
+	DEVFREQ_TIMER_DEFERRABLE = 0,
+	DEVFREQ_TIMER_DELAYED,
+	DEVFREQ_TIMER_NUM,
+};
+
 struct devfreq;
 struct devfreq_governor;
 
@@ -70,6 +77,7 @@ struct devfreq_dev_status {
  * @initial_freq:	The operating frequency when devfreq_add_device() is
  *			called.
  * @polling_ms:		The polling interval in ms. 0 disables polling.
+ * @timer:		Timer type is either deferrable or delayed timer.
  * @target:		The device should set its operating frequency at
  *			freq or lowest-upper-than-freq value. If freq is
  *			higher than any operable frequency, set maximum.
@@ -96,6 +104,7 @@ struct devfreq_dev_status {
 struct devfreq_dev_profile {
 	unsigned long initial_freq;
 	unsigned int polling_ms;
+	enum devfreq_timer timer;
 
 	int (*target)(struct device *dev, unsigned long *freq, u32 flags);
 	int (*get_dev_status)(struct device *dev,
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [RFC PATCH 1/2] PM / devfreq: Add support delayed timer for polling mode
@ 2020-07-03  6:26       ` Chanwoo Choi
  0 siblings, 0 replies; 24+ messages in thread
From: Chanwoo Choi @ 2020-07-03  6:26 UTC (permalink / raw)
  To: lukasz.luba, k.konieczny, krzk, kgene
  Cc: willy.mh.wolff.ml, linux-samsung-soc, s.nawrocki, b.zolnierkie,
	linux-pm, linux-kernel, cw00.choi, kyungmin.park, myungjoo.ham,
	chanwoo, linux-arm-kernel

Until now, the devfreq driver using polling mode like simple_ondemand
governor have used only deferrable timer for reduing the redundant
power consumption. It reduces the CPU wake-up from idle due to polling mode
which check the status of Non-CPU device.

But, it has a problem for Non-CPU device like DMC device with DMA operation.
Some Non-CPU device need to do monitor continously regardless of CPU state
in order to decide the proper next status of Non-CPU device.

So, add support the dealyed timer for polling mode to support
the periodical monitoring. The devfreq driver and user can select
the kind of timer on either deferrable and delayed timer.

For example, change the timer type of DMC device
based on Exynos5422-based Odroid-XU3 as following:

- If want to use deferrable timer as following:
echo deferrable > /sys/class/devfreq/10c20000.memory-controller/timer

- If want to use delayed timer as following:
echo delayed > /sys/class/devfreq/10c20000.memory-controller/timer

Suggested-by: Lukasz Luba <lukasz.luba@arm.com>
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
---
 Documentation/ABI/testing/sysfs-class-devfreq | 12 +++
 drivers/devfreq/devfreq.c                     | 83 ++++++++++++++++++-
 include/linux/devfreq.h                       |  9 ++
 3 files changed, 103 insertions(+), 1 deletion(-)

diff --git a/Documentation/ABI/testing/sysfs-class-devfreq b/Documentation/ABI/testing/sysfs-class-devfreq
index 9758eb85ade3..b10aa3aa230d 100644
--- a/Documentation/ABI/testing/sysfs-class-devfreq
+++ b/Documentation/ABI/testing/sysfs-class-devfreq
@@ -65,6 +65,18 @@ Description:
 		as following:
 			echo 0 > /sys/class/devfreq/.../trans_stat
 
+What:		/sys/class/devfreq/.../timer
+Date:		July 2020
+Contact:	Chanwoo Choi <cw00.choi@samsung.com>
+Description:
+		This ABI shows and stores the kind of work timer by users.
+		This work timer is used by devfreq workqueue in order to
+		monitor the device status such as utilization. The user
+		can change the work timer on runtime according to their demand
+		as following:
+			echo deferrable > /sys/class/devfreq/.../timer
+			echo delayed > /sys/class/devfreq/.../timer
+
 What:		/sys/class/devfreq/.../userspace/set_freq
 Date:		September 2011
 Contact:	MyungJoo Ham <myungjoo.ham@samsung.com>
diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
index 52b9c3e141f3..2a4aa8742520 100644
--- a/drivers/devfreq/devfreq.c
+++ b/drivers/devfreq/devfreq.c
@@ -49,6 +49,11 @@ static LIST_HEAD(devfreq_governor_list);
 static LIST_HEAD(devfreq_list);
 static DEFINE_MUTEX(devfreq_list_lock);
 
+static const char timer_name[][DEVFREQ_NAME_LEN] = {
+	[DEVFREQ_TIMER_DEFERRABLE] = { "deferrable" },
+	[DEVFREQ_TIMER_DELAYED] = { "delayed" },
+};
+
 /**
  * find_device_devfreq() - find devfreq struct using device pointer
  * @dev:	device pointer used to lookup device devfreq.
@@ -454,7 +459,17 @@ void devfreq_monitor_start(struct devfreq *devfreq)
 	if (devfreq->governor->interrupt_driven)
 		return;
 
-	INIT_DEFERRABLE_WORK(&devfreq->work, devfreq_monitor);
+	switch (devfreq->profile->timer) {
+	case DEVFREQ_TIMER_DEFERRABLE:
+		INIT_DEFERRABLE_WORK(&devfreq->work, devfreq_monitor);
+		break;
+	case DEVFREQ_TIMER_DELAYED:
+		INIT_DELAYED_WORK(&devfreq->work, devfreq_monitor);
+		break;
+	default:
+		return;
+	}
+
 	if (devfreq->profile->polling_ms)
 		queue_delayed_work(devfreq_wq, &devfreq->work,
 			msecs_to_jiffies(devfreq->profile->polling_ms));
@@ -771,6 +786,11 @@ struct devfreq *devfreq_add_device(struct device *dev,
 	devfreq->data = data;
 	devfreq->nb.notifier_call = devfreq_notifier_call;
 
+	if (devfreq->profile->timer < 0
+		|| devfreq->profile->timer >= DEVFREQ_TIMER_NUM) {
+		goto err_out;
+	}
+
 	if (!devfreq->profile->max_state && !devfreq->profile->freq_table) {
 		mutex_unlock(&devfreq->lock);
 		err = set_freq_table(devfreq);
@@ -1625,6 +1645,66 @@ static ssize_t trans_stat_store(struct device *dev,
 }
 static DEVICE_ATTR_RW(trans_stat);
 
+static ssize_t timer_show(struct device *dev,
+			     struct device_attribute *attr, char *buf)
+{
+	struct devfreq *df = to_devfreq(dev);
+
+	if (!df->governor)
+		return -EINVAL;
+
+	return sprintf(buf, "%s\n", timer_name[df->profile->timer]);
+}
+
+static ssize_t timer_store(struct device *dev, struct device_attribute *attr,
+			      const char *buf, size_t count)
+{
+	struct devfreq *df = to_devfreq(dev);
+	char str_timer[DEVFREQ_NAME_LEN + 1];
+	int timer = -1;
+	int ret = 0, i;
+
+	ret = sscanf(buf, "%16s", str_timer);
+	if (ret != 1)
+		return -EINVAL;
+
+	for (i = 0; i < DEVFREQ_TIMER_NUM; i++) {
+		if (!strncmp(timer_name[i], str_timer, DEVFREQ_NAME_LEN)) {
+			timer = i;
+			break;
+		}
+	}
+
+	if (timer < 0) {
+		ret = -EINVAL;
+		goto out;
+	}
+
+	if (df->profile->timer == timer) {
+		ret = 0;
+		goto out;
+	}
+
+	mutex_lock(&df->lock);
+	df->profile->timer = timer;
+	mutex_unlock(&df->lock);
+
+	ret = df->governor->event_handler(df, DEVFREQ_GOV_STOP, NULL);
+	if (ret) {
+		dev_warn(dev, "%s: Governor %s not stopped(%d)\n",
+			 __func__, df->governor->name, ret);
+		goto out;
+	}
+
+	ret = df->governor->event_handler(df, DEVFREQ_GOV_START, NULL);
+	if (ret)
+		dev_warn(dev, "%s: Governor %s not started(%d)\n",
+			 __func__, df->governor->name, ret);
+out:
+	return ret ? ret : count;
+}
+static DEVICE_ATTR_RW(timer);
+
 static struct attribute *devfreq_attrs[] = {
 	&dev_attr_name.attr,
 	&dev_attr_governor.attr,
@@ -1636,6 +1716,7 @@ static struct attribute *devfreq_attrs[] = {
 	&dev_attr_min_freq.attr,
 	&dev_attr_max_freq.attr,
 	&dev_attr_trans_stat.attr,
+	&dev_attr_timer.attr,
 	NULL,
 };
 ATTRIBUTE_GROUPS(devfreq);
diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h
index 57e871a559a9..12782fbb4c25 100644
--- a/include/linux/devfreq.h
+++ b/include/linux/devfreq.h
@@ -31,6 +31,13 @@
 #define	DEVFREQ_PRECHANGE		(0)
 #define DEVFREQ_POSTCHANGE		(1)
 
+/* DEVFREQ work timers */
+enum devfreq_timer {
+	DEVFREQ_TIMER_DEFERRABLE = 0,
+	DEVFREQ_TIMER_DELAYED,
+	DEVFREQ_TIMER_NUM,
+};
+
 struct devfreq;
 struct devfreq_governor;
 
@@ -70,6 +77,7 @@ struct devfreq_dev_status {
  * @initial_freq:	The operating frequency when devfreq_add_device() is
  *			called.
  * @polling_ms:		The polling interval in ms. 0 disables polling.
+ * @timer:		Timer type is either deferrable or delayed timer.
  * @target:		The device should set its operating frequency at
  *			freq or lowest-upper-than-freq value. If freq is
  *			higher than any operable frequency, set maximum.
@@ -96,6 +104,7 @@ struct devfreq_dev_status {
 struct devfreq_dev_profile {
 	unsigned long initial_freq;
 	unsigned int polling_ms;
+	enum devfreq_timer timer;
 
 	int (*target)(struct device *dev, unsigned long *freq, u32 flags);
 	int (*get_dev_status)(struct device *dev,
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [RFC PATCH 2/2] memory: samsung: exynos5422-dmc: Use delayed timer as default
       [not found]   ` <CGME20200703061509epcas1p3e338b614c44f5d8b566dae92f11cc8cb@epcas1p3.samsung.com>
@ 2020-07-03  6:26       ` Chanwoo Choi
  0 siblings, 0 replies; 24+ messages in thread
From: Chanwoo Choi @ 2020-07-03  6:26 UTC (permalink / raw)
  To: lukasz.luba, k.konieczny, krzk, kgene
  Cc: s.nawrocki, willy.mh.wolff.ml, b.zolnierkie, cw00.choi, chanwoo,
	myungjoo.ham, kyungmin.park, linux-pm, linux-kernel,
	linux-samsung-soc, linux-arm-kernel

Use delayed timer as default instead of deferrable timer
in order to monitor the DMC status regardless of CPU idle.

Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
---
 drivers/memory/samsung/exynos5422-dmc.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/memory/samsung/exynos5422-dmc.c b/drivers/memory/samsung/exynos5422-dmc.c
index 25196d6268e2..93e9c2429c0d 100644
--- a/drivers/memory/samsung/exynos5422-dmc.c
+++ b/drivers/memory/samsung/exynos5422-dmc.c
@@ -945,6 +945,7 @@ static int exynos5_dmc_get_cur_freq(struct device *dev, unsigned long *freq)
  * It provides to the devfreq framework needed functions and polling period.
  */
 static struct devfreq_dev_profile exynos5_dmc_df_profile = {
+	.timer = DEVFREQ_TIMER_DELAYED,
 	.target = exynos5_dmc_target,
 	.get_dev_status = exynos5_dmc_get_status,
 	.get_cur_freq = exynos5_dmc_get_cur_freq,
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [RFC PATCH 2/2] memory: samsung: exynos5422-dmc: Use delayed timer as default
@ 2020-07-03  6:26       ` Chanwoo Choi
  0 siblings, 0 replies; 24+ messages in thread
From: Chanwoo Choi @ 2020-07-03  6:26 UTC (permalink / raw)
  To: lukasz.luba, k.konieczny, krzk, kgene
  Cc: willy.mh.wolff.ml, linux-samsung-soc, s.nawrocki, b.zolnierkie,
	linux-pm, linux-kernel, cw00.choi, kyungmin.park, myungjoo.ham,
	chanwoo, linux-arm-kernel

Use delayed timer as default instead of deferrable timer
in order to monitor the DMC status regardless of CPU idle.

Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
---
 drivers/memory/samsung/exynos5422-dmc.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/memory/samsung/exynos5422-dmc.c b/drivers/memory/samsung/exynos5422-dmc.c
index 25196d6268e2..93e9c2429c0d 100644
--- a/drivers/memory/samsung/exynos5422-dmc.c
+++ b/drivers/memory/samsung/exynos5422-dmc.c
@@ -945,6 +945,7 @@ static int exynos5_dmc_get_cur_freq(struct device *dev, unsigned long *freq)
  * It provides to the devfreq framework needed functions and polling period.
  */
 static struct devfreq_dev_profile exynos5_dmc_df_profile = {
+	.timer = DEVFREQ_TIMER_DELAYED,
 	.target = exynos5_dmc_target,
 	.get_dev_status = exynos5_dmc_get_status,
 	.get_cur_freq = exynos5_dmc_get_cur_freq,
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 0/2] PM / devfreq: Add delayed timer for polling
  2020-07-03  6:26   ` Chanwoo Choi
@ 2020-07-03 12:33     ` Willy Wolff
  -1 siblings, 0 replies; 24+ messages in thread
From: Willy Wolff @ 2020-07-03 12:33 UTC (permalink / raw)
  To: Chanwoo Choi
  Cc: lukasz.luba, k.konieczny, krzk, kgene, s.nawrocki, b.zolnierkie,
	chanwoo, myungjoo.ham, kyungmin.park, linux-pm, linux-kernel,
	linux-samsung-soc, linux-arm-kernel

Hi Chanwoo,

I think it doesn't help on the benchmark I suggested that is doing only memory
accesses. With both timer, I have the same timing.

To test the benchmark with these new patches about timer:

git clone https://github.com/wwilly/benchmark.git \
  && cd benchmark \
  && source env.sh \
  && ./bench_build.sh \
  && bash source/scripts/test_dvfs_mem_patched.sh

The benchmark is set by default to run for 1s, but you can increase this by
tweaking the script as:

taskset 8 ./bench_install/bin/microbe_cache 33554431 0 9722222 <TIME in sec> ${little_freq}


Also, as I reported the issue, would it be possible to add a
Reported-by: Willy Wolff <willy.mh.wolff.ml@gmail.com> ?
Many thanks in advance.


Best Regards,
Willy

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 0/2] PM / devfreq: Add delayed timer for polling
@ 2020-07-03 12:33     ` Willy Wolff
  0 siblings, 0 replies; 24+ messages in thread
From: Willy Wolff @ 2020-07-03 12:33 UTC (permalink / raw)
  To: Chanwoo Choi
  Cc: linux-arm-kernel, linux-samsung-soc, chanwoo, b.zolnierkie,
	k.konieczny, linux-pm, linux-kernel, krzk, kyungmin.park, kgene,
	myungjoo.ham, s.nawrocki, lukasz.luba

Hi Chanwoo,

I think it doesn't help on the benchmark I suggested that is doing only memory
accesses. With both timer, I have the same timing.

To test the benchmark with these new patches about timer:

git clone https://github.com/wwilly/benchmark.git \
  && cd benchmark \
  && source env.sh \
  && ./bench_build.sh \
  && bash source/scripts/test_dvfs_mem_patched.sh

The benchmark is set by default to run for 1s, but you can increase this by
tweaking the script as:

taskset 8 ./bench_install/bin/microbe_cache 33554431 0 9722222 <TIME in sec> ${little_freq}


Also, as I reported the issue, would it be possible to add a
Reported-by: Willy Wolff <willy.mh.wolff.ml@gmail.com> ?
Many thanks in advance.


Best Regards,
Willy

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 1/2] PM / devfreq: Add support delayed timer for polling mode
  2020-07-03  6:26       ` Chanwoo Choi
@ 2020-07-07 14:13         ` Dan Carpenter
  -1 siblings, 0 replies; 24+ messages in thread
From: Dan Carpenter @ 2020-07-07 14:13 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 14641 bytes --]

Hi Chanwoo,

url:    https://github.com/0day-ci/linux/commits/Chanwoo-Choi/PM-devfreq-Add-delayed-timer-for-polling/20200703-141747
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 7cc2a8ea104820dd9e702202621e8fd4d9f6c8cf
config: x86_64-randconfig-m001-20200703 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-14) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
drivers/devfreq/devfreq.c:910 devfreq_add_device() warn: passing zero to 'ERR_PTR'

# https://github.com/0day-ci/linux/commit/c7e29acd5781b7d5ae02d4cdaa825aa1ba89e33e
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout c7e29acd5781b7d5ae02d4cdaa825aa1ba89e33e
vim +/ERR_PTR +910 drivers/devfreq/devfreq.c

a3c98b8b2ede1f MyungJoo Ham           2011-10-02  746  struct devfreq *devfreq_add_device(struct device *dev,
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  747  				   struct devfreq_dev_profile *profile,
1b5c1be2c88e84 Nishanth Menon         2012-10-29  748  				   const char *governor_name,
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  749  				   void *data)
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  750  {
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  751  	struct devfreq *devfreq;
1b5c1be2c88e84 Nishanth Menon         2012-10-29  752  	struct devfreq_governor *governor;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  753  	int err = 0;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  754  
1b5c1be2c88e84 Nishanth Menon         2012-10-29  755  	if (!dev || !profile || !governor_name) {
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  756  		dev_err(dev, "%s: Invalid parameters.\n", __func__);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  757  		return ERR_PTR(-EINVAL);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  758  	}
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  759  
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  760  	mutex_lock(&devfreq_list_lock);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  761  	devfreq = find_device_devfreq(dev);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  762  	mutex_unlock(&devfreq_list_lock);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  763  	if (!IS_ERR(devfreq)) {
df4d7b1451bf51 Matthias Kaehlcke      2019-09-18  764  		dev_err(dev, "%s: devfreq device already exists!\n",
9d0109be482cf7 Chanwoo Choi           2016-11-19  765  			__func__);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  766  		err = -EINVAL;
3f19f08a7ec74c Axel Lin               2011-11-15  767  		goto err_out;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  768  	}
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  769  
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  770  	devfreq = kzalloc(sizeof(struct devfreq), GFP_KERNEL);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  771  	if (!devfreq) {
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  772  		err = -ENOMEM;
3f19f08a7ec74c Axel Lin               2011-11-15  773  		goto err_out;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  774  	}
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  775  
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  776  	mutex_init(&devfreq->lock);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  777  	mutex_lock(&devfreq->lock);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  778  	devfreq->dev.parent = dev;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  779  	devfreq->dev.class = devfreq_class;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  780  	devfreq->dev.release = devfreq_dev_release;
42a6b25e67df6e Leonard Crestez        2019-11-14  781  	INIT_LIST_HEAD(&devfreq->node);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  782  	devfreq->profile = profile;
a316b5ca9ead80 Dmitry Osipenko        2020-02-27  783  	strscpy(devfreq->governor_name, governor_name, DEVFREQ_NAME_LEN);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  784  	devfreq->previous_freq = profile->initial_freq;
8d39fc085d268a Lukasz Luba            2016-05-31  785  	devfreq->last_status.current_frequency = profile->initial_freq;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  786  	devfreq->data = data;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  787  	devfreq->nb.notifier_call = devfreq_notifier_call;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  788  
c7e29acd5781b7 Chanwoo Choi           2020-07-03  789  	if (devfreq->profile->timer < 0
c7e29acd5781b7 Chanwoo Choi           2020-07-03  790  		|| devfreq->profile->timer >= DEVFREQ_TIMER_NUM) {
c7e29acd5781b7 Chanwoo Choi           2020-07-03  791  		goto err_out;

"err" not set.

c7e29acd5781b7 Chanwoo Choi           2020-07-03  792  	}
c7e29acd5781b7 Chanwoo Choi           2020-07-03  793  
0ec09ac2cebe97 Chanwoo Choi           2015-11-18  794  	if (!devfreq->profile->max_state && !devfreq->profile->freq_table) {
0ec09ac2cebe97 Chanwoo Choi           2015-11-18  795  		mutex_unlock(&devfreq->lock);
ea572f816032be Chanwoo Choi           2017-10-23  796  		err = set_freq_table(devfreq);
ea572f816032be Chanwoo Choi           2017-10-23  797  		if (err < 0)
a9487917ba6728 Yangtao Li             2019-01-19  798  			goto err_dev;
0ec09ac2cebe97 Chanwoo Choi           2015-11-18  799  		mutex_lock(&devfreq->lock);
0ec09ac2cebe97 Chanwoo Choi           2015-11-18  800  	}
0ec09ac2cebe97 Chanwoo Choi           2015-11-18  801  
2c2cb1e6b05b90 Matthias Kaehlcke      2018-05-25  802  	devfreq->scaling_min_freq = find_available_min_freq(devfreq);
2c2cb1e6b05b90 Matthias Kaehlcke      2018-05-25  803  	if (!devfreq->scaling_min_freq) {
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  804  		mutex_unlock(&devfreq->lock);
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  805  		err = -EINVAL;
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  806  		goto err_dev;
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  807  	}
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  808  
2c2cb1e6b05b90 Matthias Kaehlcke      2018-05-25  809  	devfreq->scaling_max_freq = find_available_max_freq(devfreq);
2c2cb1e6b05b90 Matthias Kaehlcke      2018-05-25  810  	if (!devfreq->scaling_max_freq) {
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  811  		mutex_unlock(&devfreq->lock);
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  812  		err = -EINVAL;
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  813  		goto err_dev;
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  814  	}
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  815  
83f8ca45afbf04 Lukasz Luba            2018-12-05  816  	devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev);
83f8ca45afbf04 Lukasz Luba            2018-12-05  817  	atomic_set(&devfreq->suspend_count, 0);
83f8ca45afbf04 Lukasz Luba            2018-12-05  818  
66d0e797bf095d Orson Zhai             2020-02-21  819  	dev_set_name(&devfreq->dev, "%s", dev_name(dev));
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  820  	err = device_register(&devfreq->dev);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  821  	if (err) {
7e6fdd4bad033f Rajagopal Venkat       2012-10-26  822  		mutex_unlock(&devfreq->lock);
2d803dc8f7a5f6 Arvind Yadav           2018-03-30  823  		put_device(&devfreq->dev);
2d803dc8f7a5f6 Arvind Yadav           2018-03-30  824  		goto err_out;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  825  	}
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  826  
1ebd0bc0e8adbf Kamil Konieczny        2019-12-06  827  	devfreq->stats.trans_table = devm_kzalloc(&devfreq->dev,
a86854d0c599b3 Kees Cook              2018-06-12  828  			array3_size(sizeof(unsigned int),
3e1d7fb0d279fe MyungJoo Ham           2015-10-02  829  				    devfreq->profile->max_state,
a86854d0c599b3 Kees Cook              2018-06-12  830  				    devfreq->profile->max_state),
3e1d7fb0d279fe MyungJoo Ham           2015-10-02  831  			GFP_KERNEL);
1ebd0bc0e8adbf Kamil Konieczny        2019-12-06  832  	if (!devfreq->stats.trans_table) {
25846fa1cedada Yangtao Li             2019-01-19  833  		mutex_unlock(&devfreq->lock);
25846fa1cedada Yangtao Li             2019-01-19  834  		err = -ENOMEM;
25846fa1cedada Yangtao Li             2019-01-19  835  		goto err_devfreq;
25846fa1cedada Yangtao Li             2019-01-19  836  	}
25846fa1cedada Yangtao Li             2019-01-19  837  
1ebd0bc0e8adbf Kamil Konieczny        2019-12-06  838  	devfreq->stats.time_in_state = devm_kcalloc(&devfreq->dev,
3e1d7fb0d279fe MyungJoo Ham           2015-10-02  839  			devfreq->profile->max_state,
1ebd0bc0e8adbf Kamil Konieczny        2019-12-06  840  			sizeof(*devfreq->stats.time_in_state),
3e1d7fb0d279fe MyungJoo Ham           2015-10-02  841  			GFP_KERNEL);
1ebd0bc0e8adbf Kamil Konieczny        2019-12-06  842  	if (!devfreq->stats.time_in_state) {
25846fa1cedada Yangtao Li             2019-01-19  843  		mutex_unlock(&devfreq->lock);
25846fa1cedada Yangtao Li             2019-01-19  844  		err = -ENOMEM;
25846fa1cedada Yangtao Li             2019-01-19  845  		goto err_devfreq;
25846fa1cedada Yangtao Li             2019-01-19  846  	}
25846fa1cedada Yangtao Li             2019-01-19  847  
1ebd0bc0e8adbf Kamil Konieczny        2019-12-06  848  	devfreq->stats.total_trans = 0;
1ebd0bc0e8adbf Kamil Konieczny        2019-12-06  849  	devfreq->stats.last_update = get_jiffies_64();
3e1d7fb0d279fe MyungJoo Ham           2015-10-02  850  
0fe3a66410a3ba Chanwoo Choi           2016-01-26  851  	srcu_init_notifier_head(&devfreq->transition_notifier_list);
0fe3a66410a3ba Chanwoo Choi           2016-01-26  852  
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  853  	mutex_unlock(&devfreq->lock);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  854  
27dbc542f651ed Leonard Crestez        2019-12-05  855  	err = dev_pm_qos_add_request(dev, &devfreq->user_min_freq_req,
27dbc542f651ed Leonard Crestez        2019-12-05  856  				     DEV_PM_QOS_MIN_FREQUENCY, 0);
27dbc542f651ed Leonard Crestez        2019-12-05  857  	if (err < 0)
27dbc542f651ed Leonard Crestez        2019-12-05  858  		goto err_devfreq;
27dbc542f651ed Leonard Crestez        2019-12-05  859  	err = dev_pm_qos_add_request(dev, &devfreq->user_max_freq_req,
27dbc542f651ed Leonard Crestez        2019-12-05  860  				     DEV_PM_QOS_MAX_FREQUENCY,
27dbc542f651ed Leonard Crestez        2019-12-05  861  				     PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE);
27dbc542f651ed Leonard Crestez        2019-12-05  862  	if (err < 0)
27dbc542f651ed Leonard Crestez        2019-12-05  863  		goto err_devfreq;
27dbc542f651ed Leonard Crestez        2019-12-05  864  
05d7ae15cfb18f Leonard Crestez        2019-12-05  865  	devfreq->nb_min.notifier_call = qos_min_notifier_call;
05d7ae15cfb18f Leonard Crestez        2019-12-05  866  	err = dev_pm_qos_add_notifier(devfreq->dev.parent, &devfreq->nb_min,
05d7ae15cfb18f Leonard Crestez        2019-12-05  867  				      DEV_PM_QOS_MIN_FREQUENCY);
05d7ae15cfb18f Leonard Crestez        2019-12-05  868  	if (err)
05d7ae15cfb18f Leonard Crestez        2019-12-05  869  		goto err_devfreq;
05d7ae15cfb18f Leonard Crestez        2019-12-05  870  
05d7ae15cfb18f Leonard Crestez        2019-12-05  871  	devfreq->nb_max.notifier_call = qos_max_notifier_call;
05d7ae15cfb18f Leonard Crestez        2019-12-05  872  	err = dev_pm_qos_add_notifier(devfreq->dev.parent, &devfreq->nb_max,
05d7ae15cfb18f Leonard Crestez        2019-12-05  873  				      DEV_PM_QOS_MAX_FREQUENCY);
05d7ae15cfb18f Leonard Crestez        2019-12-05  874  	if (err)
05d7ae15cfb18f Leonard Crestez        2019-12-05  875  		goto err_devfreq;
05d7ae15cfb18f Leonard Crestez        2019-12-05  876  
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  877  	mutex_lock(&devfreq_list_lock);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  878  
23c7b54ca1cd17 Enric Balletbo i Serra 2018-07-04  879  	governor = try_then_request_governor(devfreq->governor_name);
73613b16cb5c5d Chanwoo Choi           2016-12-28  880  	if (IS_ERR(governor)) {
73613b16cb5c5d Chanwoo Choi           2016-12-28  881  		dev_err(dev, "%s: Unable to find governor for the device\n",
73613b16cb5c5d Chanwoo Choi           2016-12-28  882  			__func__);
73613b16cb5c5d Chanwoo Choi           2016-12-28  883  		err = PTR_ERR(governor);
73613b16cb5c5d Chanwoo Choi           2016-12-28  884  		goto err_init;
73613b16cb5c5d Chanwoo Choi           2016-12-28  885  	}
73613b16cb5c5d Chanwoo Choi           2016-12-28  886  
1b5c1be2c88e84 Nishanth Menon         2012-10-29  887  	devfreq->governor = governor;
73613b16cb5c5d Chanwoo Choi           2016-12-28  888  	err = devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_START,
73613b16cb5c5d Chanwoo Choi           2016-12-28  889  						NULL);
7e6fdd4bad033f Rajagopal Venkat       2012-10-26  890  	if (err) {
7e6fdd4bad033f Rajagopal Venkat       2012-10-26  891  		dev_err(dev, "%s: Unable to start governor for the device\n",
7e6fdd4bad033f Rajagopal Venkat       2012-10-26  892  			__func__);
7e6fdd4bad033f Rajagopal Venkat       2012-10-26  893  		goto err_init;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  894  	}
23c7b54ca1cd17 Enric Balletbo i Serra 2018-07-04  895  
23c7b54ca1cd17 Enric Balletbo i Serra 2018-07-04  896  	list_add(&devfreq->node, &devfreq_list);
23c7b54ca1cd17 Enric Balletbo i Serra 2018-07-04  897  
0f376c9cd86c23 Axel Lin               2016-09-29  898  	mutex_unlock(&devfreq_list_lock);
7e6fdd4bad033f Rajagopal Venkat       2012-10-26  899  
3f19f08a7ec74c Axel Lin               2011-11-15  900  	return devfreq;
3f19f08a7ec74c Axel Lin               2011-11-15  901  
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  902  err_init:
0f376c9cd86c23 Axel Lin               2016-09-29  903  	mutex_unlock(&devfreq_list_lock);
25846fa1cedada Yangtao Li             2019-01-19  904  err_devfreq:
2f061fd0c2d852 Vincent Donnefort      2018-09-03  905  	devfreq_remove_device(devfreq);
2d803dc8f7a5f6 Arvind Yadav           2018-03-30  906  	devfreq = NULL;
9e14de1077e9c3 Chanwoo Choi           2017-08-24  907  err_dev:
9e14de1077e9c3 Chanwoo Choi           2017-08-24  908  	kfree(devfreq);
3f19f08a7ec74c Axel Lin               2011-11-15  909  err_out:
a3c98b8b2ede1f MyungJoo Ham           2011-10-02 @910  	return ERR_PTR(err);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  911  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 32259 bytes --]

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 1/2] PM / devfreq: Add support delayed timer for polling mode
@ 2020-07-07 14:13         ` Dan Carpenter
  0 siblings, 0 replies; 24+ messages in thread
From: Dan Carpenter @ 2020-07-07 14:13 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 14641 bytes --]

Hi Chanwoo,

url:    https://github.com/0day-ci/linux/commits/Chanwoo-Choi/PM-devfreq-Add-delayed-timer-for-polling/20200703-141747
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 7cc2a8ea104820dd9e702202621e8fd4d9f6c8cf
config: x86_64-randconfig-m001-20200703 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-14) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
drivers/devfreq/devfreq.c:910 devfreq_add_device() warn: passing zero to 'ERR_PTR'

# https://github.com/0day-ci/linux/commit/c7e29acd5781b7d5ae02d4cdaa825aa1ba89e33e
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout c7e29acd5781b7d5ae02d4cdaa825aa1ba89e33e
vim +/ERR_PTR +910 drivers/devfreq/devfreq.c

a3c98b8b2ede1f MyungJoo Ham           2011-10-02  746  struct devfreq *devfreq_add_device(struct device *dev,
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  747  				   struct devfreq_dev_profile *profile,
1b5c1be2c88e84 Nishanth Menon         2012-10-29  748  				   const char *governor_name,
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  749  				   void *data)
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  750  {
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  751  	struct devfreq *devfreq;
1b5c1be2c88e84 Nishanth Menon         2012-10-29  752  	struct devfreq_governor *governor;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  753  	int err = 0;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  754  
1b5c1be2c88e84 Nishanth Menon         2012-10-29  755  	if (!dev || !profile || !governor_name) {
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  756  		dev_err(dev, "%s: Invalid parameters.\n", __func__);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  757  		return ERR_PTR(-EINVAL);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  758  	}
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  759  
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  760  	mutex_lock(&devfreq_list_lock);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  761  	devfreq = find_device_devfreq(dev);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  762  	mutex_unlock(&devfreq_list_lock);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  763  	if (!IS_ERR(devfreq)) {
df4d7b1451bf51 Matthias Kaehlcke      2019-09-18  764  		dev_err(dev, "%s: devfreq device already exists!\n",
9d0109be482cf7 Chanwoo Choi           2016-11-19  765  			__func__);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  766  		err = -EINVAL;
3f19f08a7ec74c Axel Lin               2011-11-15  767  		goto err_out;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  768  	}
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  769  
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  770  	devfreq = kzalloc(sizeof(struct devfreq), GFP_KERNEL);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  771  	if (!devfreq) {
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  772  		err = -ENOMEM;
3f19f08a7ec74c Axel Lin               2011-11-15  773  		goto err_out;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  774  	}
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  775  
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  776  	mutex_init(&devfreq->lock);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  777  	mutex_lock(&devfreq->lock);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  778  	devfreq->dev.parent = dev;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  779  	devfreq->dev.class = devfreq_class;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  780  	devfreq->dev.release = devfreq_dev_release;
42a6b25e67df6e Leonard Crestez        2019-11-14  781  	INIT_LIST_HEAD(&devfreq->node);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  782  	devfreq->profile = profile;
a316b5ca9ead80 Dmitry Osipenko        2020-02-27  783  	strscpy(devfreq->governor_name, governor_name, DEVFREQ_NAME_LEN);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  784  	devfreq->previous_freq = profile->initial_freq;
8d39fc085d268a Lukasz Luba            2016-05-31  785  	devfreq->last_status.current_frequency = profile->initial_freq;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  786  	devfreq->data = data;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  787  	devfreq->nb.notifier_call = devfreq_notifier_call;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  788  
c7e29acd5781b7 Chanwoo Choi           2020-07-03  789  	if (devfreq->profile->timer < 0
c7e29acd5781b7 Chanwoo Choi           2020-07-03  790  		|| devfreq->profile->timer >= DEVFREQ_TIMER_NUM) {
c7e29acd5781b7 Chanwoo Choi           2020-07-03  791  		goto err_out;

"err" not set.

c7e29acd5781b7 Chanwoo Choi           2020-07-03  792  	}
c7e29acd5781b7 Chanwoo Choi           2020-07-03  793  
0ec09ac2cebe97 Chanwoo Choi           2015-11-18  794  	if (!devfreq->profile->max_state && !devfreq->profile->freq_table) {
0ec09ac2cebe97 Chanwoo Choi           2015-11-18  795  		mutex_unlock(&devfreq->lock);
ea572f816032be Chanwoo Choi           2017-10-23  796  		err = set_freq_table(devfreq);
ea572f816032be Chanwoo Choi           2017-10-23  797  		if (err < 0)
a9487917ba6728 Yangtao Li             2019-01-19  798  			goto err_dev;
0ec09ac2cebe97 Chanwoo Choi           2015-11-18  799  		mutex_lock(&devfreq->lock);
0ec09ac2cebe97 Chanwoo Choi           2015-11-18  800  	}
0ec09ac2cebe97 Chanwoo Choi           2015-11-18  801  
2c2cb1e6b05b90 Matthias Kaehlcke      2018-05-25  802  	devfreq->scaling_min_freq = find_available_min_freq(devfreq);
2c2cb1e6b05b90 Matthias Kaehlcke      2018-05-25  803  	if (!devfreq->scaling_min_freq) {
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  804  		mutex_unlock(&devfreq->lock);
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  805  		err = -EINVAL;
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  806  		goto err_dev;
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  807  	}
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  808  
2c2cb1e6b05b90 Matthias Kaehlcke      2018-05-25  809  	devfreq->scaling_max_freq = find_available_max_freq(devfreq);
2c2cb1e6b05b90 Matthias Kaehlcke      2018-05-25  810  	if (!devfreq->scaling_max_freq) {
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  811  		mutex_unlock(&devfreq->lock);
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  812  		err = -EINVAL;
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  813  		goto err_dev;
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  814  	}
ab8f58ad72c4d1 Chanwoo Choi           2017-10-23  815  
83f8ca45afbf04 Lukasz Luba            2018-12-05  816  	devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev);
83f8ca45afbf04 Lukasz Luba            2018-12-05  817  	atomic_set(&devfreq->suspend_count, 0);
83f8ca45afbf04 Lukasz Luba            2018-12-05  818  
66d0e797bf095d Orson Zhai             2020-02-21  819  	dev_set_name(&devfreq->dev, "%s", dev_name(dev));
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  820  	err = device_register(&devfreq->dev);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  821  	if (err) {
7e6fdd4bad033f Rajagopal Venkat       2012-10-26  822  		mutex_unlock(&devfreq->lock);
2d803dc8f7a5f6 Arvind Yadav           2018-03-30  823  		put_device(&devfreq->dev);
2d803dc8f7a5f6 Arvind Yadav           2018-03-30  824  		goto err_out;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  825  	}
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  826  
1ebd0bc0e8adbf Kamil Konieczny        2019-12-06  827  	devfreq->stats.trans_table = devm_kzalloc(&devfreq->dev,
a86854d0c599b3 Kees Cook              2018-06-12  828  			array3_size(sizeof(unsigned int),
3e1d7fb0d279fe MyungJoo Ham           2015-10-02  829  				    devfreq->profile->max_state,
a86854d0c599b3 Kees Cook              2018-06-12  830  				    devfreq->profile->max_state),
3e1d7fb0d279fe MyungJoo Ham           2015-10-02  831  			GFP_KERNEL);
1ebd0bc0e8adbf Kamil Konieczny        2019-12-06  832  	if (!devfreq->stats.trans_table) {
25846fa1cedada Yangtao Li             2019-01-19  833  		mutex_unlock(&devfreq->lock);
25846fa1cedada Yangtao Li             2019-01-19  834  		err = -ENOMEM;
25846fa1cedada Yangtao Li             2019-01-19  835  		goto err_devfreq;
25846fa1cedada Yangtao Li             2019-01-19  836  	}
25846fa1cedada Yangtao Li             2019-01-19  837  
1ebd0bc0e8adbf Kamil Konieczny        2019-12-06  838  	devfreq->stats.time_in_state = devm_kcalloc(&devfreq->dev,
3e1d7fb0d279fe MyungJoo Ham           2015-10-02  839  			devfreq->profile->max_state,
1ebd0bc0e8adbf Kamil Konieczny        2019-12-06  840  			sizeof(*devfreq->stats.time_in_state),
3e1d7fb0d279fe MyungJoo Ham           2015-10-02  841  			GFP_KERNEL);
1ebd0bc0e8adbf Kamil Konieczny        2019-12-06  842  	if (!devfreq->stats.time_in_state) {
25846fa1cedada Yangtao Li             2019-01-19  843  		mutex_unlock(&devfreq->lock);
25846fa1cedada Yangtao Li             2019-01-19  844  		err = -ENOMEM;
25846fa1cedada Yangtao Li             2019-01-19  845  		goto err_devfreq;
25846fa1cedada Yangtao Li             2019-01-19  846  	}
25846fa1cedada Yangtao Li             2019-01-19  847  
1ebd0bc0e8adbf Kamil Konieczny        2019-12-06  848  	devfreq->stats.total_trans = 0;
1ebd0bc0e8adbf Kamil Konieczny        2019-12-06  849  	devfreq->stats.last_update = get_jiffies_64();
3e1d7fb0d279fe MyungJoo Ham           2015-10-02  850  
0fe3a66410a3ba Chanwoo Choi           2016-01-26  851  	srcu_init_notifier_head(&devfreq->transition_notifier_list);
0fe3a66410a3ba Chanwoo Choi           2016-01-26  852  
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  853  	mutex_unlock(&devfreq->lock);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  854  
27dbc542f651ed Leonard Crestez        2019-12-05  855  	err = dev_pm_qos_add_request(dev, &devfreq->user_min_freq_req,
27dbc542f651ed Leonard Crestez        2019-12-05  856  				     DEV_PM_QOS_MIN_FREQUENCY, 0);
27dbc542f651ed Leonard Crestez        2019-12-05  857  	if (err < 0)
27dbc542f651ed Leonard Crestez        2019-12-05  858  		goto err_devfreq;
27dbc542f651ed Leonard Crestez        2019-12-05  859  	err = dev_pm_qos_add_request(dev, &devfreq->user_max_freq_req,
27dbc542f651ed Leonard Crestez        2019-12-05  860  				     DEV_PM_QOS_MAX_FREQUENCY,
27dbc542f651ed Leonard Crestez        2019-12-05  861  				     PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE);
27dbc542f651ed Leonard Crestez        2019-12-05  862  	if (err < 0)
27dbc542f651ed Leonard Crestez        2019-12-05  863  		goto err_devfreq;
27dbc542f651ed Leonard Crestez        2019-12-05  864  
05d7ae15cfb18f Leonard Crestez        2019-12-05  865  	devfreq->nb_min.notifier_call = qos_min_notifier_call;
05d7ae15cfb18f Leonard Crestez        2019-12-05  866  	err = dev_pm_qos_add_notifier(devfreq->dev.parent, &devfreq->nb_min,
05d7ae15cfb18f Leonard Crestez        2019-12-05  867  				      DEV_PM_QOS_MIN_FREQUENCY);
05d7ae15cfb18f Leonard Crestez        2019-12-05  868  	if (err)
05d7ae15cfb18f Leonard Crestez        2019-12-05  869  		goto err_devfreq;
05d7ae15cfb18f Leonard Crestez        2019-12-05  870  
05d7ae15cfb18f Leonard Crestez        2019-12-05  871  	devfreq->nb_max.notifier_call = qos_max_notifier_call;
05d7ae15cfb18f Leonard Crestez        2019-12-05  872  	err = dev_pm_qos_add_notifier(devfreq->dev.parent, &devfreq->nb_max,
05d7ae15cfb18f Leonard Crestez        2019-12-05  873  				      DEV_PM_QOS_MAX_FREQUENCY);
05d7ae15cfb18f Leonard Crestez        2019-12-05  874  	if (err)
05d7ae15cfb18f Leonard Crestez        2019-12-05  875  		goto err_devfreq;
05d7ae15cfb18f Leonard Crestez        2019-12-05  876  
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  877  	mutex_lock(&devfreq_list_lock);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  878  
23c7b54ca1cd17 Enric Balletbo i Serra 2018-07-04  879  	governor = try_then_request_governor(devfreq->governor_name);
73613b16cb5c5d Chanwoo Choi           2016-12-28  880  	if (IS_ERR(governor)) {
73613b16cb5c5d Chanwoo Choi           2016-12-28  881  		dev_err(dev, "%s: Unable to find governor for the device\n",
73613b16cb5c5d Chanwoo Choi           2016-12-28  882  			__func__);
73613b16cb5c5d Chanwoo Choi           2016-12-28  883  		err = PTR_ERR(governor);
73613b16cb5c5d Chanwoo Choi           2016-12-28  884  		goto err_init;
73613b16cb5c5d Chanwoo Choi           2016-12-28  885  	}
73613b16cb5c5d Chanwoo Choi           2016-12-28  886  
1b5c1be2c88e84 Nishanth Menon         2012-10-29  887  	devfreq->governor = governor;
73613b16cb5c5d Chanwoo Choi           2016-12-28  888  	err = devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_START,
73613b16cb5c5d Chanwoo Choi           2016-12-28  889  						NULL);
7e6fdd4bad033f Rajagopal Venkat       2012-10-26  890  	if (err) {
7e6fdd4bad033f Rajagopal Venkat       2012-10-26  891  		dev_err(dev, "%s: Unable to start governor for the device\n",
7e6fdd4bad033f Rajagopal Venkat       2012-10-26  892  			__func__);
7e6fdd4bad033f Rajagopal Venkat       2012-10-26  893  		goto err_init;
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  894  	}
23c7b54ca1cd17 Enric Balletbo i Serra 2018-07-04  895  
23c7b54ca1cd17 Enric Balletbo i Serra 2018-07-04  896  	list_add(&devfreq->node, &devfreq_list);
23c7b54ca1cd17 Enric Balletbo i Serra 2018-07-04  897  
0f376c9cd86c23 Axel Lin               2016-09-29  898  	mutex_unlock(&devfreq_list_lock);
7e6fdd4bad033f Rajagopal Venkat       2012-10-26  899  
3f19f08a7ec74c Axel Lin               2011-11-15  900  	return devfreq;
3f19f08a7ec74c Axel Lin               2011-11-15  901  
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  902  err_init:
0f376c9cd86c23 Axel Lin               2016-09-29  903  	mutex_unlock(&devfreq_list_lock);
25846fa1cedada Yangtao Li             2019-01-19  904  err_devfreq:
2f061fd0c2d852 Vincent Donnefort      2018-09-03  905  	devfreq_remove_device(devfreq);
2d803dc8f7a5f6 Arvind Yadav           2018-03-30  906  	devfreq = NULL;
9e14de1077e9c3 Chanwoo Choi           2017-08-24  907  err_dev:
9e14de1077e9c3 Chanwoo Choi           2017-08-24  908  	kfree(devfreq);
3f19f08a7ec74c Axel Lin               2011-11-15  909  err_out:
a3c98b8b2ede1f MyungJoo Ham           2011-10-02 @910  	return ERR_PTR(err);
a3c98b8b2ede1f MyungJoo Ham           2011-10-02  911  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 32259 bytes --]

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 0/2] PM / devfreq: Add delayed timer for polling
  2020-07-03  6:26   ` Chanwoo Choi
@ 2020-07-08 10:52     ` Bartlomiej Zolnierkiewicz
  -1 siblings, 0 replies; 24+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2020-07-08 10:52 UTC (permalink / raw)
  To: Chanwoo Choi
  Cc: lukasz.luba, k.konieczny, krzk, kgene, s.nawrocki,
	willy.mh.wolff.ml, chanwoo, myungjoo.ham, kyungmin.park,
	linux-pm, linux-kernel, linux-samsung-soc, linux-arm-kernel


Hi Chanwoo,

On 7/3/20 8:26 AM, Chanwoo Choi wrote:
> Add the delayed timer to devfreq framework in order to support
> the periodical polling mode without stop caused by CPU idle state.

Thank you, this patchset looks fine to me and is a step in the right
direction:

Reviewed-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>

> Some Non-CPU device must need to monitor the device status like
> utilization regardless of CPU state.

This is probably true for all devfreq devices using simple_ondemand
governor by default:

drivers/devfreq/exynos-bus.c
drivers/devfreq/rk3399_dmc.c
drivers/devfreq/tegra20-devfreq.c
drivers/gpu/drm/lima/lima_devfreq.c
drivers/gpu/drm/msm/msm_gpu.c
drivers/gpu/drm/panfrost/panfrost_devfreq.c
drivers/memory/samsung/exynos5422-dmc.c
drivers/scsi/ufs/ufshcd.c

With devfreq device polling being "coupled" to CPU idle state
the devfreq subsystem behavior is completely unpredictable and
unreliable.

It affects both performance (device opp change up happening too
late) and power consumption (device opp change down happening too
late).

It also causes hardware usage counters support to report too high
values (because of CPU idle "coupling" the real polling period
becomes larger than maximum period supported by the counter and
the counter becomes fully "saturated") which negatively affects
power consumption (as has been observed when using Odroid XU3/4).

[ The only upside of using such "coupling" is lowered CPU power
  usage (in some situations) but at the (unacceptable IMHO) cost
  of the correctness of operations of devfreq subsystem. ]

Unfortunately this patchset currently fixes only exynos5422-dmc
devfreq driver. To fix problems for Exynos platforms we need to
also fix exynos-bus devfreq driver.

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

> - patch1 explains the detailed reason why the delayed timer is required.
> - patch2 initializes that exynos5422-dmc device use delayed timer as default
> instead of deferrable timer.
> 
> Chanwoo Choi (2):
>   PM / devfreq: Add support delayed timer for polling mode
>   memory: samsung: exynos5422-dmc: Use delayed timer as default
> 
>  Documentation/ABI/testing/sysfs-class-devfreq | 12 +++
>  drivers/devfreq/devfreq.c                     | 83 ++++++++++++++++++-
>  drivers/memory/samsung/exynos5422-dmc.c       |  1 +
>  include/linux/devfreq.h                       |  9 ++
>  4 files changed, 104 insertions(+), 1 deletion(-)

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 0/2] PM / devfreq: Add delayed timer for polling
@ 2020-07-08 10:52     ` Bartlomiej Zolnierkiewicz
  0 siblings, 0 replies; 24+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2020-07-08 10:52 UTC (permalink / raw)
  To: Chanwoo Choi
  Cc: linux-arm-kernel, willy.mh.wolff.ml, linux-samsung-soc, chanwoo,
	linux-pm, k.konieczny, linux-kernel, krzk, kyungmin.park, kgene,
	myungjoo.ham, s.nawrocki, lukasz.luba


Hi Chanwoo,

On 7/3/20 8:26 AM, Chanwoo Choi wrote:
> Add the delayed timer to devfreq framework in order to support
> the periodical polling mode without stop caused by CPU idle state.

Thank you, this patchset looks fine to me and is a step in the right
direction:

Reviewed-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>

> Some Non-CPU device must need to monitor the device status like
> utilization regardless of CPU state.

This is probably true for all devfreq devices using simple_ondemand
governor by default:

drivers/devfreq/exynos-bus.c
drivers/devfreq/rk3399_dmc.c
drivers/devfreq/tegra20-devfreq.c
drivers/gpu/drm/lima/lima_devfreq.c
drivers/gpu/drm/msm/msm_gpu.c
drivers/gpu/drm/panfrost/panfrost_devfreq.c
drivers/memory/samsung/exynos5422-dmc.c
drivers/scsi/ufs/ufshcd.c

With devfreq device polling being "coupled" to CPU idle state
the devfreq subsystem behavior is completely unpredictable and
unreliable.

It affects both performance (device opp change up happening too
late) and power consumption (device opp change down happening too
late).

It also causes hardware usage counters support to report too high
values (because of CPU idle "coupling" the real polling period
becomes larger than maximum period supported by the counter and
the counter becomes fully "saturated") which negatively affects
power consumption (as has been observed when using Odroid XU3/4).

[ The only upside of using such "coupling" is lowered CPU power
  usage (in some situations) but at the (unacceptable IMHO) cost
  of the correctness of operations of devfreq subsystem. ]

Unfortunately this patchset currently fixes only exynos5422-dmc
devfreq driver. To fix problems for Exynos platforms we need to
also fix exynos-bus devfreq driver.

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

> - patch1 explains the detailed reason why the delayed timer is required.
> - patch2 initializes that exynos5422-dmc device use delayed timer as default
> instead of deferrable timer.
> 
> Chanwoo Choi (2):
>   PM / devfreq: Add support delayed timer for polling mode
>   memory: samsung: exynos5422-dmc: Use delayed timer as default
> 
>  Documentation/ABI/testing/sysfs-class-devfreq | 12 +++
>  drivers/devfreq/devfreq.c                     | 83 ++++++++++++++++++-
>  drivers/memory/samsung/exynos5422-dmc.c       |  1 +
>  include/linux/devfreq.h                       |  9 ++
>  4 files changed, 104 insertions(+), 1 deletion(-)

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 2/2] memory: samsung: exynos5422-dmc: Use delayed timer as default
  2020-07-03  6:26       ` Chanwoo Choi
@ 2020-07-08 12:33         ` Krzysztof Kozlowski
  -1 siblings, 0 replies; 24+ messages in thread
From: Krzysztof Kozlowski @ 2020-07-08 12:33 UTC (permalink / raw)
  To: Chanwoo Choi
  Cc: lukasz.luba, k.konieczny, kgene, s.nawrocki, willy.mh.wolff.ml,
	b.zolnierkie, chanwoo, myungjoo.ham, kyungmin.park, linux-pm,
	linux-kernel, linux-samsung-soc, linux-arm-kernel

On Fri, Jul 03, 2020 at 03:26:22PM +0900, Chanwoo Choi wrote:
> Use delayed timer as default instead of deferrable timer
> in order to monitor the DMC status regardless of CPU idle.
> 
> Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
> ---
>  drivers/memory/samsung/exynos5422-dmc.c | 1 +
>  1 file changed, 1 insertion(+)

If you want to take this through devfreq tree, I'm fine:
Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>

Otherwise I could grab it through samsung-soc after devfreq change ends
in mainline.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 2/2] memory: samsung: exynos5422-dmc: Use delayed timer as default
@ 2020-07-08 12:33         ` Krzysztof Kozlowski
  0 siblings, 0 replies; 24+ messages in thread
From: Krzysztof Kozlowski @ 2020-07-08 12:33 UTC (permalink / raw)
  To: Chanwoo Choi
  Cc: linux-arm-kernel, linux-samsung-soc, chanwoo, b.zolnierkie,
	k.konieczny, linux-pm, kyungmin.park, linux-kernel, myungjoo.ham,
	willy.mh.wolff.ml, kgene, s.nawrocki, lukasz.luba

On Fri, Jul 03, 2020 at 03:26:22PM +0900, Chanwoo Choi wrote:
> Use delayed timer as default instead of deferrable timer
> in order to monitor the DMC status regardless of CPU idle.
> 
> Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
> ---
>  drivers/memory/samsung/exynos5422-dmc.c | 1 +
>  1 file changed, 1 insertion(+)

If you want to take this through devfreq tree, I'm fine:
Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>

Otherwise I could grab it through samsung-soc after devfreq change ends
in mainline.

Best regards,
Krzysztof

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 0/2] PM / devfreq: Add delayed timer for polling
  2020-07-03  6:26   ` Chanwoo Choi
@ 2020-07-08 14:01     ` Lukasz Luba
  -1 siblings, 0 replies; 24+ messages in thread
From: Lukasz Luba @ 2020-07-08 14:01 UTC (permalink / raw)
  To: Chanwoo Choi, k.konieczny, krzk, kgene
  Cc: s.nawrocki, willy.mh.wolff.ml, b.zolnierkie, chanwoo,
	myungjoo.ham, kyungmin.park, linux-pm, linux-kernel,
	linux-samsung-soc, linux-arm-kernel

Hi all,

On 7/3/20 7:26 AM, Chanwoo Choi wrote:
> Add the delayed timer to devfreq framework in order to support
> the periodical polling mode without stop caused by CPU idle state.
> Some Non-CPU device must need to monitor the device status like
> utilization regardless of CPU state.
> 
> - patch1 explains the detailed reason why the delayed timer is required.
> - patch2 initializes that exynos5422-dmc device use delayed timer as default
> instead of deferrable timer.
> 
> Chanwoo Choi (2):
>    PM / devfreq: Add support delayed timer for polling mode
>    memory: samsung: exynos5422-dmc: Use delayed timer as default
> 
>   Documentation/ABI/testing/sysfs-class-devfreq | 12 +++
>   drivers/devfreq/devfreq.c                     | 83 ++++++++++++++++++-
>   drivers/memory/samsung/exynos5422-dmc.c       |  1 +
>   include/linux/devfreq.h                       |  9 ++
>   4 files changed, 104 insertions(+), 1 deletion(-)
> 


My apologizes for being late for the party. I wasn't able to run tests
and I had to fix my setup after I messed up some scripts.

The patch set looks good to me, so you can add my (to both patches):

Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>

I have run these Willy's benchmark tests and I will send some
follow up patches in a few minutes.

Regards,
Lukasz

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 0/2] PM / devfreq: Add delayed timer for polling
@ 2020-07-08 14:01     ` Lukasz Luba
  0 siblings, 0 replies; 24+ messages in thread
From: Lukasz Luba @ 2020-07-08 14:01 UTC (permalink / raw)
  To: Chanwoo Choi, k.konieczny, krzk, kgene
  Cc: willy.mh.wolff.ml, linux-samsung-soc, s.nawrocki, b.zolnierkie,
	linux-pm, linux-kernel, kyungmin.park, myungjoo.ham, chanwoo,
	linux-arm-kernel

Hi all,

On 7/3/20 7:26 AM, Chanwoo Choi wrote:
> Add the delayed timer to devfreq framework in order to support
> the periodical polling mode without stop caused by CPU idle state.
> Some Non-CPU device must need to monitor the device status like
> utilization regardless of CPU state.
> 
> - patch1 explains the detailed reason why the delayed timer is required.
> - patch2 initializes that exynos5422-dmc device use delayed timer as default
> instead of deferrable timer.
> 
> Chanwoo Choi (2):
>    PM / devfreq: Add support delayed timer for polling mode
>    memory: samsung: exynos5422-dmc: Use delayed timer as default
> 
>   Documentation/ABI/testing/sysfs-class-devfreq | 12 +++
>   drivers/devfreq/devfreq.c                     | 83 ++++++++++++++++++-
>   drivers/memory/samsung/exynos5422-dmc.c       |  1 +
>   include/linux/devfreq.h                       |  9 ++
>   4 files changed, 104 insertions(+), 1 deletion(-)
> 


My apologizes for being late for the party. I wasn't able to run tests
and I had to fix my setup after I messed up some scripts.

The patch set looks good to me, so you can add my (to both patches):

Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>

I have run these Willy's benchmark tests and I will send some
follow up patches in a few minutes.

Regards,
Lukasz

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 0/2] PM / devfreq: Add delayed timer for polling
  2020-07-03 12:33     ` Willy Wolff
@ 2020-07-08 14:25       ` Lukasz Luba
  -1 siblings, 0 replies; 24+ messages in thread
From: Lukasz Luba @ 2020-07-08 14:25 UTC (permalink / raw)
  To: Willy Wolff, Chanwoo Choi
  Cc: k.konieczny, krzk, kgene, s.nawrocki, b.zolnierkie, chanwoo,
	myungjoo.ham, kyungmin.park, linux-pm, linux-kernel,
	linux-samsung-soc, linux-arm-kernel

Hi Willy,

On 7/3/20 1:33 PM, Willy Wolff wrote:
> Hi Chanwoo,
> 
> I think it doesn't help on the benchmark I suggested that is doing only memory
> accesses. With both timer, I have the same timing.
> 
> To test the benchmark with these new patches about timer:
> 
> git clone https://github.com/wwilly/benchmark.git \
>    && cd benchmark \
>    && source env.sh \
>    && ./bench_build.sh \
>    && bash source/scripts/test_dvfs_mem_patched.sh
> 
> The benchmark is set by default to run for 1s, but you can increase this by
> tweaking the script as:
> 
> taskset 8 ./bench_install/bin/microbe_cache 33554431 0 9722222 <TIME in sec> ${little_freq}
> 
> 
> Also, as I reported the issue, would it be possible to add a
> Reported-by: Willy Wolff <willy.mh.wolff.ml@gmail.com> ?
> Many thanks in advance.

Thank you for your good work and the benchmark. I hope you will continue
to use it and report some issues. I am going to send a follow up patches
for the DMC and I will add your 'Reported-by'. In the tests I can see
the improvements, but it's worth to consult with you if I understand
the new results correctly.

I think there is still some area for improvements in the devfreq and you
could find the interesting bits to contribute.

Regards,
Lukasz

> 
> 
> Best Regards,
> Willy
> 

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 0/2] PM / devfreq: Add delayed timer for polling
@ 2020-07-08 14:25       ` Lukasz Luba
  0 siblings, 0 replies; 24+ messages in thread
From: Lukasz Luba @ 2020-07-08 14:25 UTC (permalink / raw)
  To: Willy Wolff, Chanwoo Choi
  Cc: linux-samsung-soc, s.nawrocki, b.zolnierkie, k.konieczny,
	linux-pm, linux-kernel, krzk, kyungmin.park, kgene, myungjoo.ham,
	chanwoo, linux-arm-kernel

Hi Willy,

On 7/3/20 1:33 PM, Willy Wolff wrote:
> Hi Chanwoo,
> 
> I think it doesn't help on the benchmark I suggested that is doing only memory
> accesses. With both timer, I have the same timing.
> 
> To test the benchmark with these new patches about timer:
> 
> git clone https://github.com/wwilly/benchmark.git \
>    && cd benchmark \
>    && source env.sh \
>    && ./bench_build.sh \
>    && bash source/scripts/test_dvfs_mem_patched.sh
> 
> The benchmark is set by default to run for 1s, but you can increase this by
> tweaking the script as:
> 
> taskset 8 ./bench_install/bin/microbe_cache 33554431 0 9722222 <TIME in sec> ${little_freq}
> 
> 
> Also, as I reported the issue, would it be possible to add a
> Reported-by: Willy Wolff <willy.mh.wolff.ml@gmail.com> ?
> Many thanks in advance.

Thank you for your good work and the benchmark. I hope you will continue
to use it and report some issues. I am going to send a follow up patches
for the DMC and I will add your 'Reported-by'. In the tests I can see
the improvements, but it's worth to consult with you if I understand
the new results correctly.

I think there is still some area for improvements in the devfreq and you
could find the interesting bits to contribute.

Regards,
Lukasz

> 
> 
> Best Regards,
> Willy
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 2/2] memory: samsung: exynos5422-dmc: Use delayed timer as default
  2020-07-08 12:33         ` Krzysztof Kozlowski
@ 2020-07-09  5:44           ` Chanwoo Choi
  -1 siblings, 0 replies; 24+ messages in thread
From: Chanwoo Choi @ 2020-07-09  5:44 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: lukasz.luba, k.konieczny, kgene, s.nawrocki, willy.mh.wolff.ml,
	b.zolnierkie, chanwoo, myungjoo.ham, kyungmin.park, linux-pm,
	linux-kernel, linux-samsung-soc, linux-arm-kernel

Hi Krzysztof,

On 7/8/20 9:33 PM, Krzysztof Kozlowski wrote:
> On Fri, Jul 03, 2020 at 03:26:22PM +0900, Chanwoo Choi wrote:
>> Use delayed timer as default instead of deferrable timer
>> in order to monitor the DMC status regardless of CPU idle.
>>
>> Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
>> ---
>>  drivers/memory/samsung/exynos5422-dmc.c | 1 +
>>  1 file changed, 1 insertion(+)
> 
> If you want to take this through devfreq tree, I'm fine:
> Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>

OK. I'll take it to devfreq-next for v5.9-rc1. Thanks.

> 
> Otherwise I could grab it through samsung-soc after devfreq change ends
> in mainline.
> 
> Best regards,
> Krzysztof
> 
> 


-- 
Best Regards,
Chanwoo Choi
Samsung Electronics

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 2/2] memory: samsung: exynos5422-dmc: Use delayed timer as default
@ 2020-07-09  5:44           ` Chanwoo Choi
  0 siblings, 0 replies; 24+ messages in thread
From: Chanwoo Choi @ 2020-07-09  5:44 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: linux-arm-kernel, linux-samsung-soc, chanwoo, b.zolnierkie,
	k.konieczny, linux-pm, kyungmin.park, linux-kernel, myungjoo.ham,
	willy.mh.wolff.ml, kgene, s.nawrocki, lukasz.luba

Hi Krzysztof,

On 7/8/20 9:33 PM, Krzysztof Kozlowski wrote:
> On Fri, Jul 03, 2020 at 03:26:22PM +0900, Chanwoo Choi wrote:
>> Use delayed timer as default instead of deferrable timer
>> in order to monitor the DMC status regardless of CPU idle.
>>
>> Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
>> ---
>>  drivers/memory/samsung/exynos5422-dmc.c | 1 +
>>  1 file changed, 1 insertion(+)
> 
> If you want to take this through devfreq tree, I'm fine:
> Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>

OK. I'll take it to devfreq-next for v5.9-rc1. Thanks.

> 
> Otherwise I could grab it through samsung-soc after devfreq change ends
> in mainline.
> 
> Best regards,
> Krzysztof
> 
> 


-- 
Best Regards,
Chanwoo Choi
Samsung Electronics

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 0/2] PM / devfreq: Add delayed timer for polling
  2020-07-08 14:25       ` Lukasz Luba
@ 2020-07-10 15:12         ` Willy Wolff
  -1 siblings, 0 replies; 24+ messages in thread
From: Willy Wolff @ 2020-07-10 15:12 UTC (permalink / raw)
  To: Lukasz Luba
  Cc: Chanwoo Choi, k.konieczny, krzk, kgene, s.nawrocki, b.zolnierkie,
	chanwoo, myungjoo.ham, kyungmin.park, linux-pm, linux-kernel,
	linux-samsung-soc, linux-arm-kernel

Hi Lukasz,

On 2020-07-08-15-25-03, Lukasz Luba wrote:
> Hi Willy,
> 
> On 7/3/20 1:33 PM, Willy Wolff wrote:
> > Hi Chanwoo,
> > 
> > I think it doesn't help on the benchmark I suggested that is doing only memory
> > accesses. With both timer, I have the same timing.
> > 
> > To test the benchmark with these new patches about timer:
> > 
> > git clone https://github.com/wwilly/benchmark.git \
> >    && cd benchmark \
> >    && source env.sh \
> >    && ./bench_build.sh \
> >    && bash source/scripts/test_dvfs_mem_patched.sh
> > 
> > The benchmark is set by default to run for 1s, but you can increase this by
> > tweaking the script as:
> > 
> > taskset 8 ./bench_install/bin/microbe_cache 33554431 0 9722222 <TIME in sec> ${little_freq}
> > 
> > 
> > Also, as I reported the issue, would it be possible to add a
> > Reported-by: Willy Wolff <willy.mh.wolff.ml@gmail.com> ?
> > Many thanks in advance.
> 
> Thank you for your good work and the benchmark. I hope you will continue
> to use it and report some issues. I am going to send a follow up patches
> for the DMC and I will add your 'Reported-by'. In the tests I can see
> the improvements, but it's worth to consult with you if I understand
> the new results correctly.
> 

Thanks for that. I will follow on the other patch thread discussion.

> I think there is still some area for improvements in the devfreq and you
> could find the interesting bits to contribute.

In fact, this benchmark is motivated about part of my PhD research that has just
been accepted at LCTES2020: "Performance Optimization on big.LITTLE Architectures:
A Memory-latency Aware Approach" at https://dl.acm.org/doi/10.1145/3372799.3394370

Basically, it's about snooping latency with "bad" CPU DVFS choice on big.LITTLE
systems or more generally SMP/AMP architecture. I'm cleaning up my code and will
propose patches as an RFC later. It introduces a new CPU DVFS governor to limit
snooping latency.

Cheers,
Willy

> 
> Regards,
> Lukasz
> 
> > 
> > 
> > Best Regards,
> > Willy
> > 

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 0/2] PM / devfreq: Add delayed timer for polling
@ 2020-07-10 15:12         ` Willy Wolff
  0 siblings, 0 replies; 24+ messages in thread
From: Willy Wolff @ 2020-07-10 15:12 UTC (permalink / raw)
  To: Lukasz Luba
  Cc: linux-samsung-soc, chanwoo, b.zolnierkie, k.konieczny, linux-pm,
	linux-kernel, krzk, Chanwoo Choi, kyungmin.park, kgene,
	myungjoo.ham, s.nawrocki, linux-arm-kernel

Hi Lukasz,

On 2020-07-08-15-25-03, Lukasz Luba wrote:
> Hi Willy,
> 
> On 7/3/20 1:33 PM, Willy Wolff wrote:
> > Hi Chanwoo,
> > 
> > I think it doesn't help on the benchmark I suggested that is doing only memory
> > accesses. With both timer, I have the same timing.
> > 
> > To test the benchmark with these new patches about timer:
> > 
> > git clone https://github.com/wwilly/benchmark.git \
> >    && cd benchmark \
> >    && source env.sh \
> >    && ./bench_build.sh \
> >    && bash source/scripts/test_dvfs_mem_patched.sh
> > 
> > The benchmark is set by default to run for 1s, but you can increase this by
> > tweaking the script as:
> > 
> > taskset 8 ./bench_install/bin/microbe_cache 33554431 0 9722222 <TIME in sec> ${little_freq}
> > 
> > 
> > Also, as I reported the issue, would it be possible to add a
> > Reported-by: Willy Wolff <willy.mh.wolff.ml@gmail.com> ?
> > Many thanks in advance.
> 
> Thank you for your good work and the benchmark. I hope you will continue
> to use it and report some issues. I am going to send a follow up patches
> for the DMC and I will add your 'Reported-by'. In the tests I can see
> the improvements, but it's worth to consult with you if I understand
> the new results correctly.
> 

Thanks for that. I will follow on the other patch thread discussion.

> I think there is still some area for improvements in the devfreq and you
> could find the interesting bits to contribute.

In fact, this benchmark is motivated about part of my PhD research that has just
been accepted at LCTES2020: "Performance Optimization on big.LITTLE Architectures:
A Memory-latency Aware Approach" at https://dl.acm.org/doi/10.1145/3372799.3394370

Basically, it's about snooping latency with "bad" CPU DVFS choice on big.LITTLE
systems or more generally SMP/AMP architecture. I'm cleaning up my code and will
propose patches as an RFC later. It introduces a new CPU DVFS governor to limit
snooping latency.

Cheers,
Willy

> 
> Regards,
> Lukasz
> 
> > 
> > 
> > Best Regards,
> > Willy
> > 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 0/2] PM / devfreq: Add delayed timer for polling
  2020-07-10 15:12         ` Willy Wolff
@ 2020-07-13  8:55           ` Lukasz Luba
  -1 siblings, 0 replies; 24+ messages in thread
From: Lukasz Luba @ 2020-07-13  8:55 UTC (permalink / raw)
  To: Willy Wolff
  Cc: Chanwoo Choi, k.konieczny, krzk, kgene, s.nawrocki, b.zolnierkie,
	chanwoo, myungjoo.ham, kyungmin.park, linux-pm, linux-kernel,
	linux-samsung-soc, linux-arm-kernel

Hi Willy

On 7/10/20 4:12 PM, Willy Wolff wrote:
> Hi Lukasz,
> 
> On 2020-07-08-15-25-03, Lukasz Luba wrote:
>> Hi Willy,
>>
>> On 7/3/20 1:33 PM, Willy Wolff wrote:
>>> Hi Chanwoo,
>>>
>>> I think it doesn't help on the benchmark I suggested that is doing only memory
>>> accesses. With both timer, I have the same timing.
>>>
>>> To test the benchmark with these new patches about timer:
>>>
>>> git clone https://github.com/wwilly/benchmark.git \
>>>     && cd benchmark \
>>>     && source env.sh \
>>>     && ./bench_build.sh \
>>>     && bash source/scripts/test_dvfs_mem_patched.sh
>>>
>>> The benchmark is set by default to run for 1s, but you can increase this by
>>> tweaking the script as:
>>>
>>> taskset 8 ./bench_install/bin/microbe_cache 33554431 0 9722222 <TIME in sec> ${little_freq}
>>>
>>>
>>> Also, as I reported the issue, would it be possible to add a
>>> Reported-by: Willy Wolff <willy.mh.wolff.ml@gmail.com> ?
>>> Many thanks in advance.
>>
>> Thank you for your good work and the benchmark. I hope you will continue
>> to use it and report some issues. I am going to send a follow up patches
>> for the DMC and I will add your 'Reported-by'. In the tests I can see
>> the improvements, but it's worth to consult with you if I understand
>> the new results correctly.
>>
> 
> Thanks for that. I will follow on the other patch thread discussion.
> 
>> I think there is still some area for improvements in the devfreq and you
>> could find the interesting bits to contribute.
> 
> In fact, this benchmark is motivated about part of my PhD research that has just
> been accepted at LCTES2020: "Performance Optimization on big.LITTLE Architectures:
> A Memory-latency Aware Approach" at https://dl.acm.org/doi/10.1145/3372799.3394370
> 

Congrats and thank you for the link (I will read it).

> Basically, it's about snooping latency with "bad" CPU DVFS choice on big.LITTLE
> systems or more generally SMP/AMP architecture. I'm cleaning up my code and will
> propose patches as an RFC later. It introduces a new CPU DVFS governor to limit
> snooping latency.

This is interesting, please add me on CC in the patch set.

Regards,
Lukasz

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFC PATCH 0/2] PM / devfreq: Add delayed timer for polling
@ 2020-07-13  8:55           ` Lukasz Luba
  0 siblings, 0 replies; 24+ messages in thread
From: Lukasz Luba @ 2020-07-13  8:55 UTC (permalink / raw)
  To: Willy Wolff
  Cc: linux-samsung-soc, chanwoo, b.zolnierkie, k.konieczny, linux-pm,
	linux-kernel, krzk, Chanwoo Choi, kyungmin.park, kgene,
	myungjoo.ham, s.nawrocki, linux-arm-kernel

Hi Willy

On 7/10/20 4:12 PM, Willy Wolff wrote:
> Hi Lukasz,
> 
> On 2020-07-08-15-25-03, Lukasz Luba wrote:
>> Hi Willy,
>>
>> On 7/3/20 1:33 PM, Willy Wolff wrote:
>>> Hi Chanwoo,
>>>
>>> I think it doesn't help on the benchmark I suggested that is doing only memory
>>> accesses. With both timer, I have the same timing.
>>>
>>> To test the benchmark with these new patches about timer:
>>>
>>> git clone https://github.com/wwilly/benchmark.git \
>>>     && cd benchmark \
>>>     && source env.sh \
>>>     && ./bench_build.sh \
>>>     && bash source/scripts/test_dvfs_mem_patched.sh
>>>
>>> The benchmark is set by default to run for 1s, but you can increase this by
>>> tweaking the script as:
>>>
>>> taskset 8 ./bench_install/bin/microbe_cache 33554431 0 9722222 <TIME in sec> ${little_freq}
>>>
>>>
>>> Also, as I reported the issue, would it be possible to add a
>>> Reported-by: Willy Wolff <willy.mh.wolff.ml@gmail.com> ?
>>> Many thanks in advance.
>>
>> Thank you for your good work and the benchmark. I hope you will continue
>> to use it and report some issues. I am going to send a follow up patches
>> for the DMC and I will add your 'Reported-by'. In the tests I can see
>> the improvements, but it's worth to consult with you if I understand
>> the new results correctly.
>>
> 
> Thanks for that. I will follow on the other patch thread discussion.
> 
>> I think there is still some area for improvements in the devfreq and you
>> could find the interesting bits to contribute.
> 
> In fact, this benchmark is motivated about part of my PhD research that has just
> been accepted at LCTES2020: "Performance Optimization on big.LITTLE Architectures:
> A Memory-latency Aware Approach" at https://dl.acm.org/doi/10.1145/3372799.3394370
> 

Congrats and thank you for the link (I will read it).

> Basically, it's about snooping latency with "bad" CPU DVFS choice on big.LITTLE
> systems or more generally SMP/AMP architecture. I'm cleaning up my code and will
> propose patches as an RFC later. It introduces a new CPU DVFS governor to limit
> snooping latency.

This is interesting, please add me on CC in the patch set.

Regards,
Lukasz

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2020-07-13  8:57 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CGME20200703061508epcas1p171aa3c0ab832b77e5837d8bd1e563742@epcas1p1.samsung.com>
2020-07-03  6:26 ` [RFC PATCH 0/2] PM / devfreq: Add delayed timer for polling Chanwoo Choi
2020-07-03  6:26   ` Chanwoo Choi
     [not found]   ` <CGME20200703061509epcas1p10446471df6497b4b2d7066280daa7f87@epcas1p1.samsung.com>
2020-07-03  6:26     ` [RFC PATCH 1/2] PM / devfreq: Add support delayed timer for polling mode Chanwoo Choi
2020-07-03  6:26       ` Chanwoo Choi
2020-07-07 14:13       ` Dan Carpenter
2020-07-07 14:13         ` Dan Carpenter
     [not found]   ` <CGME20200703061509epcas1p3e338b614c44f5d8b566dae92f11cc8cb@epcas1p3.samsung.com>
2020-07-03  6:26     ` [RFC PATCH 2/2] memory: samsung: exynos5422-dmc: Use delayed timer as default Chanwoo Choi
2020-07-03  6:26       ` Chanwoo Choi
2020-07-08 12:33       ` Krzysztof Kozlowski
2020-07-08 12:33         ` Krzysztof Kozlowski
2020-07-09  5:44         ` Chanwoo Choi
2020-07-09  5:44           ` Chanwoo Choi
2020-07-03 12:33   ` [RFC PATCH 0/2] PM / devfreq: Add delayed timer for polling Willy Wolff
2020-07-03 12:33     ` Willy Wolff
2020-07-08 14:25     ` Lukasz Luba
2020-07-08 14:25       ` Lukasz Luba
2020-07-10 15:12       ` Willy Wolff
2020-07-10 15:12         ` Willy Wolff
2020-07-13  8:55         ` Lukasz Luba
2020-07-13  8:55           ` Lukasz Luba
2020-07-08 10:52   ` Bartlomiej Zolnierkiewicz
2020-07-08 10:52     ` Bartlomiej Zolnierkiewicz
2020-07-08 14:01   ` Lukasz Luba
2020-07-08 14:01     ` Lukasz Luba

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.