All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anton Vorontsov <anton.vorontsov@linaro.org>
To: Pekka Enberg <penberg@kernel.org>
Cc: Leonid Moiseichuk <leonid.moiseichuk@nokia.com>,
	John Stultz <john.stultz@linaro.org>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	linaro-kernel@lists.linaro.org, patches@linaro.org,
	kernel-team@android.com
Subject: [PATCH 1/3] vmevent: Implement equal-to attribute state
Date: Tue, 1 May 2012 06:25:32 -0700	[thread overview]
Message-ID: <20120501132531.GA24226@lizard> (raw)
In-Reply-To: <20120501132409.GA22894@lizard>

This complements GT and LT, making it possible to combine GE and LE
operators. We'll use it for blended attributes: the special attributes
will return either 0 or <threshold>, so to make two-way notifications
we will pass LT | EQ bits.

Signed-off-by: Anton Vorontsov <anton.vorontsov@linaro.org>
---
 include/linux/vmevent.h |    6 +++++-
 mm/vmevent.c            |   22 +++++++++++++++-------
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/include/linux/vmevent.h b/include/linux/vmevent.h
index ca97cf0..aae0d24 100644
--- a/include/linux/vmevent.h
+++ b/include/linux/vmevent.h
@@ -27,9 +27,13 @@ enum {
 	 */
 	VMEVENT_ATTR_STATE_VALUE_GT	= (1UL << 1),
 	/*
+	 * Sample value is equal to user-specified value
+	 */
+	VMEVENT_ATTR_STATE_VALUE_EQ	= (1UL << 2),
+	/*
 	 * One-shot mode.
 	 */
-	VMEVENT_ATTR_STATE_ONE_SHOT	= (1UL << 2),
+	VMEVENT_ATTR_STATE_ONE_SHOT	= (1UL << 3),
 
 	/* Saved state, used internally by the kernel for one-shot mode. */
 	__VMEVENT_ATTR_STATE_VALUE_WAS_LT	= (1UL << 30),
diff --git a/mm/vmevent.c b/mm/vmevent.c
index 47ed448..9f1520b 100644
--- a/mm/vmevent.c
+++ b/mm/vmevent.c
@@ -87,28 +87,39 @@ static bool vmevent_match(struct vmevent_watch *watch)
 		u32 state = attr->state;
 		bool attr_lt = state & VMEVENT_ATTR_STATE_VALUE_LT;
 		bool attr_gt = state & VMEVENT_ATTR_STATE_VALUE_GT;
+		bool attr_eq = state & VMEVENT_ATTR_STATE_VALUE_EQ;
 
 		if (!state)
 			continue;
 
-		if (attr_lt || attr_gt) {
+		if (attr_lt || attr_gt || attr_eq) {
 			bool one_shot = state & VMEVENT_ATTR_STATE_ONE_SHOT;
 			u32 was_lt_mask = __VMEVENT_ATTR_STATE_VALUE_WAS_LT;
 			u32 was_gt_mask = __VMEVENT_ATTR_STATE_VALUE_WAS_GT;
 			u64 value = vmevent_sample_attr(watch, attr);
 			bool lt = value < attr->value;
 			bool gt = value > attr->value;
+			bool eq = value == attr->value;
 			bool was_lt = state & was_lt_mask;
 			bool was_gt = state & was_gt_mask;
+			bool was_eq = was_lt && was_gt;
 			bool ret = false;
 
-			if (((attr_lt && lt) || (attr_gt && gt)) && !one_shot)
+			if (((attr_lt && lt) || (attr_gt && gt) ||
+					(attr_eq && eq)) && !one_shot)
 				return true;
 
-			if (attr_lt && lt && was_lt) {
+			if (attr_eq && eq && was_eq) {
 				return false;
-			} else if (attr_gt && gt && was_gt) {
+			} else if (attr_lt && lt && was_lt && !was_eq) {
 				return false;
+			} else if (attr_gt && gt && was_gt && !was_eq) {
+				return false;
+			} else if (eq) {
+				state |= was_lt_mask;
+				state |= was_gt_mask;
+				if (attr_eq)
+					ret = true;
 			} else if (lt) {
 				state |= was_lt_mask;
 				state &= ~was_gt_mask;
@@ -119,9 +130,6 @@ static bool vmevent_match(struct vmevent_watch *watch)
 				state &= ~was_lt_mask;
 				if (attr_gt)
 					ret = true;
-			} else {
-				state &= ~was_lt_mask;
-				state &= ~was_gt_mask;
 			}
 
 			attr->state = state;
-- 
1.7.9.2

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Anton Vorontsov <anton.vorontsov@linaro.org>
To: Pekka Enberg <penberg@kernel.org>
Cc: Leonid Moiseichuk <leonid.moiseichuk@nokia.com>,
	John Stultz <john.stultz@linaro.org>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	linaro-kernel@lists.linaro.org, patches@linaro.org,
	kernel-team@android.com
Subject: [PATCH 1/3] vmevent: Implement equal-to attribute state
Date: Tue, 1 May 2012 06:25:32 -0700	[thread overview]
Message-ID: <20120501132531.GA24226@lizard> (raw)
In-Reply-To: <20120501132409.GA22894@lizard>

This complements GT and LT, making it possible to combine GE and LE
operators. We'll use it for blended attributes: the special attributes
will return either 0 or <threshold>, so to make two-way notifications
we will pass LT | EQ bits.

Signed-off-by: Anton Vorontsov <anton.vorontsov@linaro.org>
---
 include/linux/vmevent.h |    6 +++++-
 mm/vmevent.c            |   22 +++++++++++++++-------
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/include/linux/vmevent.h b/include/linux/vmevent.h
index ca97cf0..aae0d24 100644
--- a/include/linux/vmevent.h
+++ b/include/linux/vmevent.h
@@ -27,9 +27,13 @@ enum {
 	 */
 	VMEVENT_ATTR_STATE_VALUE_GT	= (1UL << 1),
 	/*
+	 * Sample value is equal to user-specified value
+	 */
+	VMEVENT_ATTR_STATE_VALUE_EQ	= (1UL << 2),
+	/*
 	 * One-shot mode.
 	 */
-	VMEVENT_ATTR_STATE_ONE_SHOT	= (1UL << 2),
+	VMEVENT_ATTR_STATE_ONE_SHOT	= (1UL << 3),
 
 	/* Saved state, used internally by the kernel for one-shot mode. */
 	__VMEVENT_ATTR_STATE_VALUE_WAS_LT	= (1UL << 30),
diff --git a/mm/vmevent.c b/mm/vmevent.c
index 47ed448..9f1520b 100644
--- a/mm/vmevent.c
+++ b/mm/vmevent.c
@@ -87,28 +87,39 @@ static bool vmevent_match(struct vmevent_watch *watch)
 		u32 state = attr->state;
 		bool attr_lt = state & VMEVENT_ATTR_STATE_VALUE_LT;
 		bool attr_gt = state & VMEVENT_ATTR_STATE_VALUE_GT;
+		bool attr_eq = state & VMEVENT_ATTR_STATE_VALUE_EQ;
 
 		if (!state)
 			continue;
 
-		if (attr_lt || attr_gt) {
+		if (attr_lt || attr_gt || attr_eq) {
 			bool one_shot = state & VMEVENT_ATTR_STATE_ONE_SHOT;
 			u32 was_lt_mask = __VMEVENT_ATTR_STATE_VALUE_WAS_LT;
 			u32 was_gt_mask = __VMEVENT_ATTR_STATE_VALUE_WAS_GT;
 			u64 value = vmevent_sample_attr(watch, attr);
 			bool lt = value < attr->value;
 			bool gt = value > attr->value;
+			bool eq = value == attr->value;
 			bool was_lt = state & was_lt_mask;
 			bool was_gt = state & was_gt_mask;
+			bool was_eq = was_lt && was_gt;
 			bool ret = false;
 
-			if (((attr_lt && lt) || (attr_gt && gt)) && !one_shot)
+			if (((attr_lt && lt) || (attr_gt && gt) ||
+					(attr_eq && eq)) && !one_shot)
 				return true;
 
-			if (attr_lt && lt && was_lt) {
+			if (attr_eq && eq && was_eq) {
 				return false;
-			} else if (attr_gt && gt && was_gt) {
+			} else if (attr_lt && lt && was_lt && !was_eq) {
 				return false;
+			} else if (attr_gt && gt && was_gt && !was_eq) {
+				return false;
+			} else if (eq) {
+				state |= was_lt_mask;
+				state |= was_gt_mask;
+				if (attr_eq)
+					ret = true;
 			} else if (lt) {
 				state |= was_lt_mask;
 				state &= ~was_gt_mask;
@@ -119,9 +130,6 @@ static bool vmevent_match(struct vmevent_watch *watch)
 				state &= ~was_lt_mask;
 				if (attr_gt)
 					ret = true;
-			} else {
-				state &= ~was_lt_mask;
-				state &= ~was_gt_mask;
 			}
 
 			attr->state = state;
-- 
1.7.9.2


  reply	other threads:[~2012-05-01 13:26 UTC|newest]

Thread overview: 188+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-01 13:24 [PATCH 0/3] vmevent: Implement 'low memory' attribute Anton Vorontsov
2012-05-01 13:24 ` Anton Vorontsov
2012-05-01 13:25 ` Anton Vorontsov [this message]
2012-05-01 13:25   ` [PATCH 1/3] vmevent: Implement equal-to attribute state Anton Vorontsov
2012-05-01 13:25 ` [PATCH 2/3] vmevent: Pass attr argument to sampling functions Anton Vorontsov
2012-05-01 13:25   ` Anton Vorontsov
2012-05-01 13:26 ` [PATCH 3/3] vmevent: Implement special low-memory attribute Anton Vorontsov
2012-05-01 13:26   ` Anton Vorontsov
2012-05-03 10:33   ` Pekka Enberg
2012-05-03 10:33     ` Pekka Enberg
2012-05-04  4:26   ` Minchan Kim
2012-05-04  4:26     ` Minchan Kim
2012-05-04  7:38     ` Anton Vorontsov
2012-05-04  7:38       ` Anton Vorontsov
2012-05-07  7:14       ` Pekka Enberg
2012-05-07  7:14         ` Pekka Enberg
2012-05-07  8:26         ` KOSAKI Motohiro
2012-05-07  8:26           ` KOSAKI Motohiro
2012-05-07 12:15           ` Anton Vorontsov
2012-05-07 12:15             ` Anton Vorontsov
2012-05-07 19:19             ` KOSAKI Motohiro
2012-05-07 19:19               ` KOSAKI Motohiro
2012-05-08  0:31               ` Anton Vorontsov
2012-05-08  0:31                 ` Anton Vorontsov
2012-05-08  5:20               ` Pekka Enberg
2012-05-08  5:20                 ` Pekka Enberg
2012-05-08  5:42                 ` KOSAKI Motohiro
2012-05-08  5:42                   ` KOSAKI Motohiro
2012-05-08  5:53                   ` Pekka Enberg
2012-05-08  5:53                     ` Pekka Enberg
2012-05-08  7:11                     ` KOSAKI Motohiro
2012-05-08  7:11                       ` KOSAKI Motohiro
2012-05-08  7:36                       ` Pekka Enberg
2012-05-08  7:36                         ` Pekka Enberg
2012-05-08  7:50                         ` KOSAKI Motohiro
2012-05-08  7:50                           ` KOSAKI Motohiro
2012-05-08  8:03                           ` Pekka Enberg
2012-05-08  8:03                             ` Pekka Enberg
2012-05-08  9:15                             ` leonid.moiseichuk
2012-05-08  9:15                               ` leonid.moiseichuk
2012-05-08  9:19                               ` Pekka Enberg
2012-05-08  9:19                                 ` Pekka Enberg
2012-05-08 10:38                                 ` leonid.moiseichuk
2012-05-08 10:38                                   ` leonid.moiseichuk
2012-06-01 12:21                         ` [PATCH 0/5] Some vmevent fixes Anton Vorontsov
2012-06-01 12:21                           ` Anton Vorontsov
2012-06-01 12:24                           ` [PATCH 1/5] vmstat: Implement refresh_vm_stats() Anton Vorontsov
2012-06-01 12:24                             ` Anton Vorontsov
2012-06-05 14:30                             ` Christoph Lameter
2012-06-05 14:30                               ` Christoph Lameter
2012-06-08  3:17                             ` KOSAKI Motohiro
2012-06-08  3:17                               ` KOSAKI Motohiro
2012-06-01 12:24                           ` [PATCH 2/5] vmevent: Convert from deferred timer to deferred work Anton Vorontsov
2012-06-01 12:24                             ` Anton Vorontsov
2012-06-08  3:25                             ` KOSAKI Motohiro
2012-06-08  3:25                               ` KOSAKI Motohiro
2012-06-08  6:58                               ` Anton Vorontsov
2012-06-08  6:58                                 ` Anton Vorontsov
2012-06-08  7:03                                 ` Pekka Enberg
2012-06-08  7:03                                   ` Pekka Enberg
2012-06-08  8:07                                   ` Anton Vorontsov
2012-06-08  8:07                                     ` Anton Vorontsov
2012-06-08  7:05                                 ` leonid.moiseichuk
2012-06-08  7:05                                   ` leonid.moiseichuk
2012-06-08  7:10                                   ` KOSAKI Motohiro
2012-06-08  7:10                                     ` KOSAKI Motohiro
2012-06-08  7:18                                     ` leonid.moiseichuk
2012-06-08  7:18                                       ` leonid.moiseichuk
2012-06-08  7:23                                       ` KOSAKI Motohiro
2012-06-08  7:23                                         ` KOSAKI Motohiro
2012-06-08  7:28                                         ` leonid.moiseichuk
2012-06-08  7:28                                           ` leonid.moiseichuk
2012-06-08  7:33                                           ` KOSAKI Motohiro
2012-06-08  7:33                                             ` KOSAKI Motohiro
2012-06-08  7:49                                             ` leonid.moiseichuk
2012-06-08  7:49                                               ` leonid.moiseichuk
2012-06-08  7:58                                   ` Anton Vorontsov
2012-06-08  7:58                                     ` Anton Vorontsov
2012-06-08  8:16                                     ` leonid.moiseichuk
2012-06-08  8:16                                       ` leonid.moiseichuk
2012-06-08  8:41                                       ` Anton Vorontsov
2012-06-08  8:41                                         ` Anton Vorontsov
2012-06-08  8:57                                         ` leonid.moiseichuk
2012-06-08  8:57                                           ` leonid.moiseichuk
2012-06-08 10:35                                           ` Anton Vorontsov
2012-06-08 10:35                                             ` Anton Vorontsov
2012-06-08 11:03                                             ` leonid.moiseichuk
2012-06-08 11:03                                               ` leonid.moiseichuk
2012-06-08 12:13                                               ` Anton Vorontsov
2012-06-08 12:13                                                 ` Anton Vorontsov
2012-06-08 12:25                                                 ` leonid.moiseichuk
2012-06-08 12:25                                                   ` leonid.moiseichuk
2012-06-01 12:24                           ` [PATCH 3/5] vmevent: Refresh vmstats before sampling Anton Vorontsov
2012-06-01 12:24                             ` Anton Vorontsov
2012-06-05 14:36                             ` Christoph Lameter
2012-06-05 14:36                               ` Christoph Lameter
2012-06-01 12:24                           ` [PATCH 4/5] vmevent: Hide meaningful names from the user-visible header Anton Vorontsov
2012-06-01 12:24                             ` Anton Vorontsov
2012-06-01 12:24                           ` [PATCH 5/5] vmevent: Rename one-shot mode to edge trigger mode Anton Vorontsov
2012-06-01 12:24                             ` Anton Vorontsov
2012-06-03 18:26                           ` [PATCH 0/5] Some vmevent fixes Pekka Enberg
2012-06-03 18:26                             ` Pekka Enberg
2012-06-04  8:45                             ` Minchan Kim
2012-06-04  8:45                               ` Minchan Kim
2012-06-04  9:20                               ` Pekka Enberg
2012-06-04  9:20                                 ` Pekka Enberg
2012-06-04 12:23                                 ` Minchan Kim
2012-06-04 12:23                                   ` Minchan Kim
2012-06-04 11:38                               ` Anton Vorontsov
2012-06-04 11:38                                 ` Anton Vorontsov
2012-06-04 12:17                                 ` Minchan Kim
2012-06-04 12:17                                   ` Minchan Kim
2012-06-04 13:35                                   ` Anton Vorontsov
2012-06-04 13:35                                     ` Anton Vorontsov
2012-06-05  7:53                                     ` Pekka Enberg
2012-06-05  7:53                                       ` Pekka Enberg
2012-06-05  8:00                                       ` Minchan Kim
2012-06-05  8:00                                         ` Minchan Kim
2012-06-05  8:01                                         ` Pekka Enberg
2012-06-05  8:01                                           ` Pekka Enberg
2012-06-05  8:16                                           ` leonid.moiseichuk
2012-06-05  8:16                                             ` leonid.moiseichuk
2012-06-05  8:27                                             ` Minchan Kim
2012-06-05  8:27                                               ` Minchan Kim
2012-06-08  3:35                                             ` KOSAKI Motohiro
2012-06-08  3:35                                               ` KOSAKI Motohiro
2012-06-04 20:05                                 ` KOSAKI Motohiro
2012-06-04 20:05                                   ` KOSAKI Motohiro
2012-06-04 22:39                                   ` Anton Vorontsov
2012-06-04 22:39                                     ` Anton Vorontsov
2012-06-08  3:45                                     ` KOSAKI Motohiro
2012-06-08  3:45                                       ` KOSAKI Motohiro
2012-06-08  6:57                                       ` Pekka Enberg
2012-06-08  6:57                                         ` Pekka Enberg
2012-06-05  7:47                                   ` Pekka Enberg
2012-06-05  7:47                                     ` Pekka Enberg
2012-06-05  8:39                                     ` Anton Vorontsov
2012-06-05  8:39                                       ` Anton Vorontsov
2012-06-07  2:41                                       ` Minchan Kim
2012-06-07  2:41                                         ` Minchan Kim
2012-06-08  7:49                                         ` Anton Vorontsov
2012-06-08  7:49                                           ` Anton Vorontsov
2012-06-08  8:43                                           ` Minchan Kim
2012-06-08  8:43                                             ` Minchan Kim
2012-06-08  8:48                                             ` Pekka Enberg
2012-06-08  8:48                                               ` Pekka Enberg
2012-06-08  9:12                                               ` leonid.moiseichuk
2012-06-08  9:12                                                 ` leonid.moiseichuk
2012-06-08  9:45                                                 ` Anton Vorontsov
2012-06-08  9:45                                                   ` Anton Vorontsov
2012-06-08 10:42                                                   ` Minchan Kim
2012-06-08 10:42                                                     ` Minchan Kim
2012-06-08 11:14                                                     ` Anton Vorontsov
2012-06-08 11:14                                                       ` Anton Vorontsov
2012-06-11  4:50                                                       ` Minchan Kim
2012-06-11  4:50                                                         ` Minchan Kim
2012-06-05  7:52                                   ` Pekka Enberg
2012-06-05  7:52                                     ` Pekka Enberg
2012-06-08  3:55                                     ` KOSAKI Motohiro
2012-06-08  3:55                                       ` KOSAKI Motohiro
2012-06-08  6:54                                       ` Pekka Enberg
2012-06-08  6:54                                         ` Pekka Enberg
2012-06-08  6:57                                         ` KOSAKI Motohiro
2012-06-08  6:57                                           ` KOSAKI Motohiro
2012-06-08  6:59                                           ` Pekka Enberg
2012-06-08  6:59                                             ` Pekka Enberg
2012-06-04 19:50                               ` KOSAKI Motohiro
2012-06-04 19:50                                 ` KOSAKI Motohiro
2012-05-08  8:32                       ` [PATCH 3/3] vmevent: Implement special low-memory attribute Minchan Kim
2012-05-08  8:32                         ` Minchan Kim
2012-05-08  9:27                         ` Pekka Enberg
2012-05-08  9:27                           ` Pekka Enberg
2012-06-05 14:40                       ` Christoph Lameter
2012-06-05 14:40                         ` Christoph Lameter
2012-05-08  6:58                   ` Anton Vorontsov
2012-05-08  6:58                     ` Anton Vorontsov
2012-05-08  7:16                     ` KOSAKI Motohiro
2012-05-08  7:16                       ` KOSAKI Motohiro
2012-05-08  8:13                       ` Anton Vorontsov
2012-05-08  8:13                         ` Anton Vorontsov
2012-05-08  8:21                         ` Anton Vorontsov
2012-05-08  8:21                           ` Anton Vorontsov
2012-05-03  8:10 ` [PATCH 0/3] vmevent: Implement 'low memory' attribute Pekka Enberg
2012-05-03  8:10   ` Pekka Enberg
2012-05-03  9:44   ` Anton Vorontsov
2012-05-03  9:44     ` Anton Vorontsov
2012-05-03 10:54 ` Pekka Enberg
2012-05-03 10:54   ` Pekka Enberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120501132531.GA24226@lizard \
    --to=anton.vorontsov@linaro.org \
    --cc=john.stultz@linaro.org \
    --cc=kernel-team@android.com \
    --cc=leonid.moiseichuk@nokia.com \
    --cc=linaro-kernel@lists.linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=patches@linaro.org \
    --cc=penberg@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.