All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
To: linux-hotplug@vger.kernel.org
Subject: [PATCH] udevd: Shrink struct token to 12 bytes
Date: Wed, 05 Nov 2008 19:55:59 +0000	[thread overview]
Message-ID: <4911FA4F.2000900@tuffmail.co.uk> (raw)

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>

diff --git a/udev/udev-rules.c b/udev/udev-rules.c
index e07cd32..a0564e2 100644
--- a/udev/udev-rules.c
+++ b/udev/udev-rules.c
@@ -144,20 +144,20 @@ enum token_type {
 /* we try to pack stuff in a way that we take only 16 bytes per token */
 struct token {
 	union {
-		unsigned short type;		/* same as in rule and key */
+		unsigned char type;		/* same as in rule and key */
 		struct {
-			unsigned short type;
-			unsigned short flags;
-			unsigned int next_rule;
+			unsigned char type;
+			unsigned char flags;
+			unsigned short token_count;
 			unsigned int label_off;
 			unsigned short filename_off;
 			unsigned short filename_line;
 		} rule;
 		struct {
-			unsigned short type;
-			unsigned short flags;
-			unsigned short op;
-			unsigned short glob;
+			unsigned char type;
+			unsigned char flags;
+			unsigned char op;
+			unsigned char glob;
 			unsigned int value_off;
 			union {
 				unsigned int attr_off;
@@ -274,10 +274,11 @@ static void dump_token(struct udev_rules *rules, struct token *token)
 			const char *tk_ptr = (char *)token;
 			unsigned int off = tk_ptr - tks_ptr;
 
-			dbg(rules->udev, "* RULE %s:%u, off: %u(%u), next: %u, label: '%s', flags: 0x%02x\n",
+			dbg(rules->udev, "* RULE %s:%u, off: %u(%u), token_count: %u(%u), label: '%s', flags: 0x%02x\n",
 			    &rules->buf[token->rule.filename_off], token->rule.filename_line,
 			    off / (unsigned int) sizeof(struct token), off,
-			    token->rule.next_rule,
+			    token->rule.token_count,
+			    token->rule.token_count * (unsigned int) sizeof(struct token),
 			    &rules->buf[token->rule.label_off],
 			    token->rule.flags);
 			break;
@@ -1439,12 +1440,14 @@ static int add_rule(struct udev_rules *rules, char *line,
 		goto invalid;
 
 	/* add rule token */
+	rule_tmp.rule.rule.token_count = 1 + rule_tmp.token_cur;
 	if (add_token(rules, &rule_tmp.rule) != 0)
 		goto invalid;
 
 	/* add tokens to list, sorted by type */
 	if (sort_token(rules, &rule_tmp) != 0)
 		goto invalid;
+
 	return 0;
 invalid:
 	err(rules->udev, "invalid rule '%s:%u'\n", filename, lineno);
@@ -1689,15 +1692,6 @@ struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names)
 	end_token.type = TK_END;
 	add_token(rules, &end_token);
 
-	/* link all TK_RULE tokens to be able to fast-forward to next TK_RULE */
-	prev_rule = 0;
-	for (i = 1; i < rules->token_cur; i++) {
-		if (rules->tokens[i].type = TK_RULE) {
-			rules->tokens[prev_rule].rule.next_rule = i;
-			prev_rule = i;
-		}
-	}
-
 	/* shrink allocated token and string buffer */
 	if (rules->token_cur < rules->token_max) {
 		struct token *tokens;
@@ -2426,10 +2420,8 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event
 		continue;
 	nomatch:
 		/* fast-forward to next rule */
-		idx = rule->rule.next_rule;
-		if (idx = 0)
-			return 0;
-		dbg(rules->udev, "forward to rule: %u\n", idx);
-		cur = &rules->tokens[idx];
+		cur = rule + rule->rule.token_count;
+		dbg(rules->udev, "forward to rule: %u\n",
+		                 (unsigned int) (cur - rules->tokens));
 	}
 }



             reply	other threads:[~2008-11-05 19:55 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-05 19:55 Alan Jenkins [this message]
2008-11-05 22:30 ` [PATCH] udevd: Shrink struct token to 12 bytes Kay Sievers
2008-11-05 23:04 ` Alan Jenkins
2008-11-05 23:15 ` Kay Sievers
2008-11-11 20:14 ` Alan Jenkins

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=4911FA4F.2000900@tuffmail.co.uk \
    --to=alan-jenkins@tuffmail.co.uk \
    --cc=linux-hotplug@vger.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.