x86 mmiotrace: fix save/restore page table state
[linux-2.6] / arch / x86 / mm / kmmio.c
1 /* Support for MMIO probes.
2  * Benfit many code from kprobes
3  * (C) 2002 Louis Zhuang <louis.zhuang@intel.com>.
4  *     2007 Alexander Eichner
5  *     2008 Pekka Paalanen <pq@iki.fi>
6  */
7
8 #include <linux/list.h>
9 #include <linux/rculist.h>
10 #include <linux/spinlock.h>
11 #include <linux/hash.h>
12 #include <linux/init.h>
13 #include <linux/module.h>
14 #include <linux/kernel.h>
15 #include <linux/uaccess.h>
16 #include <linux/ptrace.h>
17 #include <linux/preempt.h>
18 #include <linux/percpu.h>
19 #include <linux/kdebug.h>
20 #include <linux/mutex.h>
21 #include <linux/io.h>
22 #include <asm/cacheflush.h>
23 #include <asm/tlbflush.h>
24 #include <linux/errno.h>
25 #include <asm/debugreg.h>
26 #include <linux/mmiotrace.h>
27
28 #define KMMIO_PAGE_HASH_BITS 4
29 #define KMMIO_PAGE_TABLE_SIZE (1 << KMMIO_PAGE_HASH_BITS)
30
31 struct kmmio_fault_page {
32         struct list_head list;
33         struct kmmio_fault_page *release_next;
34         unsigned long page; /* location of the fault page */
35         bool old_presence; /* page presence prior to arming */
36         bool armed;
37
38         /*
39          * Number of times this page has been registered as a part
40          * of a probe. If zero, page is disarmed and this may be freed.
41          * Used only by writers (RCU).
42          */
43         int count;
44 };
45
46 struct kmmio_delayed_release {
47         struct rcu_head rcu;
48         struct kmmio_fault_page *release_list;
49 };
50
51 struct kmmio_context {
52         struct kmmio_fault_page *fpage;
53         struct kmmio_probe *probe;
54         unsigned long saved_flags;
55         unsigned long addr;
56         int active;
57 };
58
59 static DEFINE_SPINLOCK(kmmio_lock);
60
61 /* Protected by kmmio_lock */
62 unsigned int kmmio_count;
63
64 /* Read-protected by RCU, write-protected by kmmio_lock. */
65 static struct list_head kmmio_page_table[KMMIO_PAGE_TABLE_SIZE];
66 static LIST_HEAD(kmmio_probes);
67
68 static struct list_head *kmmio_page_list(unsigned long page)
69 {
70         return &kmmio_page_table[hash_long(page, KMMIO_PAGE_HASH_BITS)];
71 }
72
73 /* Accessed per-cpu */
74 static DEFINE_PER_CPU(struct kmmio_context, kmmio_ctx);
75
76 /*
77  * this is basically a dynamic stabbing problem:
78  * Could use the existing prio tree code or
79  * Possible better implementations:
80  * The Interval Skip List: A Data Structure for Finding All Intervals That
81  * Overlap a Point (might be simple)
82  * Space Efficient Dynamic Stabbing with Fast Queries - Mikkel Thorup
83  */
84 /* Get the kmmio at this addr (if any). You must be holding RCU read lock. */
85 static struct kmmio_probe *get_kmmio_probe(unsigned long addr)
86 {
87         struct kmmio_probe *p;
88         list_for_each_entry_rcu(p, &kmmio_probes, list) {
89                 if (addr >= p->addr && addr <= (p->addr + p->len))
90                         return p;
91         }
92         return NULL;
93 }
94
95 /* You must be holding RCU read lock. */
96 static struct kmmio_fault_page *get_kmmio_fault_page(unsigned long page)
97 {
98         struct list_head *head;
99         struct kmmio_fault_page *p;
100
101         page &= PAGE_MASK;
102         head = kmmio_page_list(page);
103         list_for_each_entry_rcu(p, head, list) {
104                 if (p->page == page)
105                         return p;
106         }
107         return NULL;
108 }
109
110 static int set_page_presence(unsigned long addr, bool present, bool *old)
111 {
112         pteval_t pteval;
113         pmdval_t pmdval;
114         unsigned int level;
115         pmd_t *pmd;
116         pte_t *pte = lookup_address(addr, &level);
117
118         if (!pte) {
119                 pr_err("kmmio: no pte for page 0x%08lx\n", addr);
120                 return -1;
121         }
122
123         switch (level) {
124         case PG_LEVEL_2M:
125                 pmd = (pmd_t *)pte;
126                 pmdval = pmd_val(*pmd);
127                 *old = !!(pmdval & _PAGE_PRESENT);
128                 pmdval &= ~_PAGE_PRESENT;
129                 if (present)
130                         pmdval |= _PAGE_PRESENT;
131                 set_pmd(pmd, __pmd(pmdval));
132                 break;
133
134         case PG_LEVEL_4K:
135                 pteval = pte_val(*pte);
136                 *old = !!(pteval & _PAGE_PRESENT);
137                 pteval &= ~_PAGE_PRESENT;
138                 if (present)
139                         pteval |= _PAGE_PRESENT;
140                 set_pte_atomic(pte, __pte(pteval));
141                 break;
142
143         default:
144                 pr_err("kmmio: unexpected page level 0x%x.\n", level);
145                 return -1;
146         }
147
148         __flush_tlb_one(addr);
149
150         return 0;
151 }
152
153 /*
154  * Mark the given page as not present. Access to it will trigger a fault.
155  *
156  * Struct kmmio_fault_page is protected by RCU and kmmio_lock, but the
157  * protection is ignored here. RCU read lock is assumed held, so the struct
158  * will not disappear unexpectedly. Furthermore, the caller must guarantee,
159  * that double arming the same virtual address (page) cannot occur.
160  *
161  * Double disarming on the other hand is allowed, and may occur when a fault
162  * and mmiotrace shutdown happen simultaneously.
163  */
164 static int arm_kmmio_fault_page(struct kmmio_fault_page *f)
165 {
166         int ret;
167         WARN_ONCE(f->armed, KERN_ERR "kmmio page already armed.\n");
168         if (f->armed) {
169                 pr_warning("kmmio double-arm: page 0x%08lx, ref %d, old %d\n",
170                                         f->page, f->count, f->old_presence);
171         }
172         ret = set_page_presence(f->page, false, &f->old_presence);
173         WARN_ONCE(ret < 0, KERN_ERR "kmmio arming 0x%08lx failed.\n", f->page);
174         f->armed = true;
175         return ret;
176 }
177
178 /** Restore the given page to saved presence state. */
179 static void disarm_kmmio_fault_page(struct kmmio_fault_page *f)
180 {
181         bool tmp;
182         int ret = set_page_presence(f->page, f->old_presence, &tmp);
183         WARN_ONCE(ret < 0,
184                         KERN_ERR "kmmio disarming 0x%08lx failed.\n", f->page);
185         f->armed = false;
186 }
187
188 /*
189  * This is being called from do_page_fault().
190  *
191  * We may be in an interrupt or a critical section. Also prefecthing may
192  * trigger a page fault. We may be in the middle of process switch.
193  * We cannot take any locks, because we could be executing especially
194  * within a kmmio critical section.
195  *
196  * Local interrupts are disabled, so preemption cannot happen.
197  * Do not enable interrupts, do not sleep, and watch out for other CPUs.
198  */
199 /*
200  * Interrupts are disabled on entry as trap3 is an interrupt gate
201  * and they remain disabled thorough out this function.
202  */
203 int kmmio_handler(struct pt_regs *regs, unsigned long addr)
204 {
205         struct kmmio_context *ctx;
206         struct kmmio_fault_page *faultpage;
207         int ret = 0; /* default to fault not handled */
208
209         /*
210          * Preemption is now disabled to prevent process switch during
211          * single stepping. We can only handle one active kmmio trace
212          * per cpu, so ensure that we finish it before something else
213          * gets to run. We also hold the RCU read lock over single
214          * stepping to avoid looking up the probe and kmmio_fault_page
215          * again.
216          */
217         preempt_disable();
218         rcu_read_lock();
219
220         faultpage = get_kmmio_fault_page(addr);
221         if (!faultpage) {
222                 /*
223                  * Either this page fault is not caused by kmmio, or
224                  * another CPU just pulled the kmmio probe from under
225                  * our feet. The latter case should not be possible.
226                  */
227                 goto no_kmmio;
228         }
229
230         ctx = &get_cpu_var(kmmio_ctx);
231         if (ctx->active) {
232                 disarm_kmmio_fault_page(faultpage);
233                 if (addr == ctx->addr) {
234                         /*
235                          * On SMP we sometimes get recursive probe hits on the
236                          * same address. Context is already saved, fall out.
237                          */
238                         pr_debug("kmmio: duplicate probe hit on CPU %d, for "
239                                                 "address 0x%08lx.\n",
240                                                 smp_processor_id(), addr);
241                         ret = 1;
242                         goto no_kmmio_ctx;
243                 }
244                 /*
245                  * Prevent overwriting already in-flight context.
246                  * This should not happen, let's hope disarming at least
247                  * prevents a panic.
248                  */
249                 pr_emerg("kmmio: recursive probe hit on CPU %d, "
250                                         "for address 0x%08lx. Ignoring.\n",
251                                         smp_processor_id(), addr);
252                 pr_emerg("kmmio: previous hit was at 0x%08lx.\n",
253                                         ctx->addr);
254                 goto no_kmmio_ctx;
255         }
256         ctx->active++;
257
258         ctx->fpage = faultpage;
259         ctx->probe = get_kmmio_probe(addr);
260         ctx->saved_flags = (regs->flags & (X86_EFLAGS_TF | X86_EFLAGS_IF));
261         ctx->addr = addr;
262
263         if (ctx->probe && ctx->probe->pre_handler)
264                 ctx->probe->pre_handler(ctx->probe, regs, addr);
265
266         /*
267          * Enable single-stepping and disable interrupts for the faulting
268          * context. Local interrupts must not get enabled during stepping.
269          */
270         regs->flags |= X86_EFLAGS_TF;
271         regs->flags &= ~X86_EFLAGS_IF;
272
273         /* Now we set present bit in PTE and single step. */
274         disarm_kmmio_fault_page(ctx->fpage);
275
276         /*
277          * If another cpu accesses the same page while we are stepping,
278          * the access will not be caught. It will simply succeed and the
279          * only downside is we lose the event. If this becomes a problem,
280          * the user should drop to single cpu before tracing.
281          */
282
283         put_cpu_var(kmmio_ctx);
284         return 1; /* fault handled */
285
286 no_kmmio_ctx:
287         put_cpu_var(kmmio_ctx);
288 no_kmmio:
289         rcu_read_unlock();
290         preempt_enable_no_resched();
291         return ret;
292 }
293
294 /*
295  * Interrupts are disabled on entry as trap1 is an interrupt gate
296  * and they remain disabled thorough out this function.
297  * This must always get called as the pair to kmmio_handler().
298  */
299 static int post_kmmio_handler(unsigned long condition, struct pt_regs *regs)
300 {
301         int ret = 0;
302         struct kmmio_context *ctx = &get_cpu_var(kmmio_ctx);
303
304         if (!ctx->active) {
305                 pr_debug("kmmio: spurious debug trap on CPU %d.\n",
306                                                         smp_processor_id());
307                 goto out;
308         }
309
310         if (ctx->probe && ctx->probe->post_handler)
311                 ctx->probe->post_handler(ctx->probe, condition, regs);
312
313         arm_kmmio_fault_page(ctx->fpage);
314
315         regs->flags &= ~X86_EFLAGS_TF;
316         regs->flags |= ctx->saved_flags;
317
318         /* These were acquired in kmmio_handler(). */
319         ctx->active--;
320         BUG_ON(ctx->active);
321         rcu_read_unlock();
322         preempt_enable_no_resched();
323
324         /*
325          * if somebody else is singlestepping across a probe point, flags
326          * will have TF set, in which case, continue the remaining processing
327          * of do_debug, as if this is not a probe hit.
328          */
329         if (!(regs->flags & X86_EFLAGS_TF))
330                 ret = 1;
331 out:
332         put_cpu_var(kmmio_ctx);
333         return ret;
334 }
335
336 /* You must be holding kmmio_lock. */
337 static int add_kmmio_fault_page(unsigned long page)
338 {
339         struct kmmio_fault_page *f;
340
341         page &= PAGE_MASK;
342         f = get_kmmio_fault_page(page);
343         if (f) {
344                 if (!f->count)
345                         arm_kmmio_fault_page(f);
346                 f->count++;
347                 return 0;
348         }
349
350         f = kzalloc(sizeof(*f), GFP_ATOMIC);
351         if (!f)
352                 return -1;
353
354         f->count = 1;
355         f->page = page;
356
357         if (arm_kmmio_fault_page(f)) {
358                 kfree(f);
359                 return -1;
360         }
361
362         list_add_rcu(&f->list, kmmio_page_list(f->page));
363
364         return 0;
365 }
366
367 /* You must be holding kmmio_lock. */
368 static void release_kmmio_fault_page(unsigned long page,
369                                 struct kmmio_fault_page **release_list)
370 {
371         struct kmmio_fault_page *f;
372
373         page &= PAGE_MASK;
374         f = get_kmmio_fault_page(page);
375         if (!f)
376                 return;
377
378         f->count--;
379         BUG_ON(f->count < 0);
380         if (!f->count) {
381                 disarm_kmmio_fault_page(f);
382                 f->release_next = *release_list;
383                 *release_list = f;
384         }
385 }
386
387 /*
388  * With page-unaligned ioremaps, one or two armed pages may contain
389  * addresses from outside the intended mapping. Events for these addresses
390  * are currently silently dropped. The events may result only from programming
391  * mistakes by accessing addresses before the beginning or past the end of a
392  * mapping.
393  */
394 int register_kmmio_probe(struct kmmio_probe *p)
395 {
396         unsigned long flags;
397         int ret = 0;
398         unsigned long size = 0;
399         const unsigned long size_lim = p->len + (p->addr & ~PAGE_MASK);
400
401         spin_lock_irqsave(&kmmio_lock, flags);
402         if (get_kmmio_probe(p->addr)) {
403                 ret = -EEXIST;
404                 goto out;
405         }
406         kmmio_count++;
407         list_add_rcu(&p->list, &kmmio_probes);
408         while (size < size_lim) {
409                 if (add_kmmio_fault_page(p->addr + size))
410                         pr_err("kmmio: Unable to set page fault.\n");
411                 size += PAGE_SIZE;
412         }
413 out:
414         spin_unlock_irqrestore(&kmmio_lock, flags);
415         /*
416          * XXX: What should I do here?
417          * Here was a call to global_flush_tlb(), but it does not exist
418          * anymore. It seems it's not needed after all.
419          */
420         return ret;
421 }
422 EXPORT_SYMBOL(register_kmmio_probe);
423
424 static void rcu_free_kmmio_fault_pages(struct rcu_head *head)
425 {
426         struct kmmio_delayed_release *dr = container_of(
427                                                 head,
428                                                 struct kmmio_delayed_release,
429                                                 rcu);
430         struct kmmio_fault_page *p = dr->release_list;
431         while (p) {
432                 struct kmmio_fault_page *next = p->release_next;
433                 BUG_ON(p->count);
434                 kfree(p);
435                 p = next;
436         }
437         kfree(dr);
438 }
439
440 static void remove_kmmio_fault_pages(struct rcu_head *head)
441 {
442         struct kmmio_delayed_release *dr = container_of(
443                                                 head,
444                                                 struct kmmio_delayed_release,
445                                                 rcu);
446         struct kmmio_fault_page *p = dr->release_list;
447         struct kmmio_fault_page **prevp = &dr->release_list;
448         unsigned long flags;
449         spin_lock_irqsave(&kmmio_lock, flags);
450         while (p) {
451                 if (!p->count)
452                         list_del_rcu(&p->list);
453                 else
454                         *prevp = p->release_next;
455                 prevp = &p->release_next;
456                 p = p->release_next;
457         }
458         spin_unlock_irqrestore(&kmmio_lock, flags);
459         /* This is the real RCU destroy call. */
460         call_rcu(&dr->rcu, rcu_free_kmmio_fault_pages);
461 }
462
463 /*
464  * Remove a kmmio probe. You have to synchronize_rcu() before you can be
465  * sure that the callbacks will not be called anymore. Only after that
466  * you may actually release your struct kmmio_probe.
467  *
468  * Unregistering a kmmio fault page has three steps:
469  * 1. release_kmmio_fault_page()
470  *    Disarm the page, wait a grace period to let all faults finish.
471  * 2. remove_kmmio_fault_pages()
472  *    Remove the pages from kmmio_page_table.
473  * 3. rcu_free_kmmio_fault_pages()
474  *    Actally free the kmmio_fault_page structs as with RCU.
475  */
476 void unregister_kmmio_probe(struct kmmio_probe *p)
477 {
478         unsigned long flags;
479         unsigned long size = 0;
480         const unsigned long size_lim = p->len + (p->addr & ~PAGE_MASK);
481         struct kmmio_fault_page *release_list = NULL;
482         struct kmmio_delayed_release *drelease;
483
484         spin_lock_irqsave(&kmmio_lock, flags);
485         while (size < size_lim) {
486                 release_kmmio_fault_page(p->addr + size, &release_list);
487                 size += PAGE_SIZE;
488         }
489         list_del_rcu(&p->list);
490         kmmio_count--;
491         spin_unlock_irqrestore(&kmmio_lock, flags);
492
493         drelease = kmalloc(sizeof(*drelease), GFP_ATOMIC);
494         if (!drelease) {
495                 pr_crit("kmmio: leaking kmmio_fault_page objects.\n");
496                 return;
497         }
498         drelease->release_list = release_list;
499
500         /*
501          * This is not really RCU here. We have just disarmed a set of
502          * pages so that they cannot trigger page faults anymore. However,
503          * we cannot remove the pages from kmmio_page_table,
504          * because a probe hit might be in flight on another CPU. The
505          * pages are collected into a list, and they will be removed from
506          * kmmio_page_table when it is certain that no probe hit related to
507          * these pages can be in flight. RCU grace period sounds like a
508          * good choice.
509          *
510          * If we removed the pages too early, kmmio page fault handler might
511          * not find the respective kmmio_fault_page and determine it's not
512          * a kmmio fault, when it actually is. This would lead to madness.
513          */
514         call_rcu(&drelease->rcu, remove_kmmio_fault_pages);
515 }
516 EXPORT_SYMBOL(unregister_kmmio_probe);
517
518 static int kmmio_die_notifier(struct notifier_block *nb, unsigned long val,
519                                                                 void *args)
520 {
521         struct die_args *arg = args;
522
523         if (val == DIE_DEBUG && (arg->err & DR_STEP))
524                 if (post_kmmio_handler(arg->err, arg->regs) == 1)
525                         return NOTIFY_STOP;
526
527         return NOTIFY_DONE;
528 }
529
530 static struct notifier_block nb_die = {
531         .notifier_call = kmmio_die_notifier
532 };
533
534 static int __init init_kmmio(void)
535 {
536         int i;
537         for (i = 0; i < KMMIO_PAGE_TABLE_SIZE; i++)
538                 INIT_LIST_HEAD(&kmmio_page_table[i]);
539         return register_die_notifier(&nb_die);
540 }
541 fs_initcall(init_kmmio); /* should be before device_initcall() */