From: Jianyu Zhan <nasa4836@gmail.com>
To: jack@suse.cz
Cc: axboe@kernel.dk, linux-kernel@vger.kernel.org,
viro@zeniv.linux.org.uk, Jianyu Zhan <nasa4836@gmail.com>
Subject: Re: [PATCH] blkdev: use an efficient way to check merge flags
Date: Thu, 3 Apr 2014 21:37:57 +0800 [thread overview]
Message-ID: <1396532277-14226-1-git-send-email-nasa4836@gmail.com> (raw)
Hi, Jan,
I've just renewed the patch as you suggusted. Actually it isn't quite
performance sensitive, but the point is one less branch leads to
less penalty caused by branch prediction failure. Ok, this may be
way too paranoid.:-)
A bitwise flag comparison could be done using a more efficient bit-ops
way, by mimicking GCC logic of optimizing such bitwise comparison.
Signed-off-by: Jianyu Zhan <nasa4836@gmail.com>
---
include/linux/blkdev.h | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 1e1fa3f..f2b79fc 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -655,16 +655,18 @@ static inline bool rq_mergeable(struct request *rq)
static inline bool blk_check_merge_flags(unsigned int flags1,
unsigned int flags2)
{
- if ((flags1 & REQ_DISCARD) != (flags2 & REQ_DISCARD))
- return false;
-
- if ((flags1 & REQ_SECURE) != (flags2 & REQ_SECURE))
- return false;
-
- if ((flags1 & REQ_WRITE_SAME) != (flags2 & REQ_WRITE_SAME))
- return false;
-
- return true;
+ /*
+ * Check whether all tree flags are the same in both
+ * flags.
+ *
+ * Replace original three-if's comparision with a
+ * more efficient method, by mimicking the GCC logic of
+ * optimizing such bitwise comparion. This makes GCC
+ * to spit out most compact and least brach code.
+ */
+ return ((flags1 ^ flags2) &
+ (REQ_DISCARD | REQ_SECURE | REQ_WRITE_SAME))
+ == 0;
}
static inline bool blk_write_same_mergeable(struct bio *a, struct bio *b)
--
1.9.0.GIT
next reply other threads:[~2014-04-03 13:38 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-03 13:37 Jianyu Zhan [this message]
-- strict thread matches above, loose matches on Subject: below --
2014-04-02 15:19 Jianyu Zhan
2014-04-02 18:13 ` Jan Kara
2014-04-03 8:00 ` Zhan Jianyu
2014-04-03 12:45 ` Jan Kara
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=1396532277-14226-1-git-send-email-nasa4836@gmail.com \
--to=nasa4836@gmail.com \
--cc=axboe@kernel.dk \
--cc=jack@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=viro@zeniv.linux.org.uk \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®