From: "K.Prasad" <prasad@linux.vnet.ibm.com>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>,
Ingo Molnar <mingo@elte.hu>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Lai Jiangshan <laijs@cn.fujitsu.com>,
Steven Rostedt <rostedt@goodmis.org>,
Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>,
Alan Stern <stern@rowland.harvard.edu>,
"K.Prasad" <prasad@linux.vnet.ibm.com>
Subject: [Patch 2/2] HW-BKPT: Allow kernel breakpoints to be modified through a new API
Date: Wed, 26 Aug 2009 01:51:59 +0530 [thread overview]
Message-ID: <20090825202159.GC1166@in.ibm.com> (raw)
In-Reply-To: 20090825201310.268198183@linux.vnet.ibm.com
[-- Attachment #1: modify_kernel_hbp_02 --]
[-- Type: text/plain, Size: 3125 bytes --]
Introduce modify_kernel_hw_breakpoint() API that can quickly change the
characteristics (such as address, length, type but not cpumask) of a
kernel-space breakpoint without having to unregister first and then
re-register it.
Signed-off-by: K.Prasad <prasad@linux.vnet.ibm.com>
---
include/asm-generic/hw_breakpoint.h | 2 +
kernel/hw_breakpoint.c | 49 ++++++++++++++++++++++++++++++++++++
2 files changed, 51 insertions(+)
Index: linux-2.6-tip.hbkpt/include/asm-generic/hw_breakpoint.h
===================================================================
--- linux-2.6-tip.hbkpt.orig/include/asm-generic/hw_breakpoint.h
+++ linux-2.6-tip.hbkpt/include/asm-generic/hw_breakpoint.h
@@ -133,6 +133,8 @@ extern void unregister_user_hw_breakpoin
* Kernel breakpoints are not associated with any particular thread.
*/
extern int register_kernel_hw_breakpoint(struct hw_breakpoint *bp);
+extern int modify_kernel_hw_breakpoint(struct hw_breakpoint *old_bp,
+ struct hw_breakpoint *new_bp);
extern void unregister_kernel_hw_breakpoint(struct hw_breakpoint *bp);
extern unsigned int hbp_kernel_pos;
Index: linux-2.6-tip.hbkpt/kernel/hw_breakpoint.c
===================================================================
--- linux-2.6-tip.hbkpt.orig/kernel/hw_breakpoint.c
+++ linux-2.6-tip.hbkpt/kernel/hw_breakpoint.c
@@ -362,6 +362,55 @@ err_ret:
}
EXPORT_SYMBOL_GPL(register_kernel_hw_breakpoint);
+/**
+ * modify_kernel_hw_breakpoint - modify characteristics of a previously registered breakpoint request
+ * @old_bp: pointer to the registered breakpoint structure
+ * @new_bp: pointer to the breakpoint structure that replaces @old_bp
+ *
+ */
+int modify_kernel_hw_breakpoint(struct hw_breakpoint *old_bp,
+ struct hw_breakpoint *new_bp)
+{
+ int i, rc;
+ unsigned int cpu;
+ const cpumask_t *new_cpumask = new_bp->cpumask;
+
+ /* Default to ALL CPUs if cpumask is not specified */
+ if (!new_cpumask)
+ new_cpumask = new_bp->cpumask = cpu_possible_mask;
+ /*
+ * The user cannot modify the cpumask of the registered breakpoint
+ * It requires non-trivial amount of code and new data-structures to
+ * allow a change in cpumask value. The user must instead 'unregister'
+ * and re-register a new breakpoint if 'cpumask' should be changed
+ */
+ if (!cpumask_equal(old_bp->cpumask, new_cpumask))
+ return -EINVAL;
+
+ rc = arch_validate_hwbkpt_settings(new_bp, NULL);
+ if (rc)
+ return rc;
+
+ spin_lock_bh(&hw_breakpoint_lock);
+ for_each_cpu(cpu, new_cpumask) {
+ for (i = HBP_NUM-1; i >= hbp_kernel_pos; i--) {
+ if (per_cpu(this_hbp_kernel[i], cpu) == old_bp) {
+ per_cpu(this_hbp_kernel[i], cpu) = new_bp;
+ break;
+ }
+ }
+ }
+
+ if (cpumask_test_cpu(smp_processor_id(), new_cpumask))
+ arch_update_kernel_hw_breakpoint(NULL);
+ smp_call_function_many(new_cpumask,
+ arch_update_kernel_hw_breakpoint, NULL, 1);
+
+ spin_unlock_bh(&hw_breakpoint_lock);
+ return 0;
+}
+EXPORT_SYMBOL_GPL(modify_kernel_hw_breakpoint);
+
/* Removes breakpoint structure from the per-cpu breakpoint data-structure */
static void remove_each_cpu_kernel_hbp(void *bp_param)
{
next prev parent reply other threads:[~2009-08-25 20:22 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20090825201310.268198183@linux.vnet.ibm.com>
2009-08-25 20:21 ` [Patch 1/2] HW-BKPT: Allow per-cpu kernel-space Hardware Breakpoint requests K.Prasad
2009-08-25 20:21 ` K.Prasad [this message]
2009-08-26 4:09 ` [Patch 2/2] HW-BKPT: Allow kernel breakpoints to be modified through a new API Frederic Weisbecker
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=20090825202159.GC1166@in.ibm.com \
--to=prasad@linux.vnet.ibm.com \
--cc=a.p.zijlstra@chello.nl \
--cc=fweisbec@gmail.com \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@polymtl.ca \
--cc=mingo@elte.hu \
--cc=rostedt@goodmis.org \
--cc=stern@rowland.harvard.edu \
/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.