Messages in this thread Patch in this message | | | Subject | [PATCH][v850] Move `ptrinfo' function from mm/slab.c to mm/memory.c | Date | Mon, 6 Oct 2003 14:29:05 +0900 (JST) | From | (Miles Bader) |
| |
Linus, please apply.
This function doesn't compile on non-MMU systems, so put it in a place where it won't cause problems (mm/memory.c is only compiled if CONFIG_MMU is defined).
diff -ruN -X../cludes linux-2.6.0-test6-moo/mm/memory.c linux-2.6.0-test6-moo-v850-20031006/mm/memory.c --- linux-2.6.0-test6-moo/mm/memory.c 2003-09-29 13:19:22.000000000 +0900 +++ linux-2.6.0-test6-moo-v850-20031006/mm/memory.c 2003-10-06 14:07:08.000000000 +0900 @@ -1685,3 +1685,76 @@ } return page; } + +void ptrinfo(unsigned long addr) +{ + struct page *page; + + printk("Dumping data about address %p.\n", (void*)addr); + if (!virt_addr_valid((void*)addr)) { + printk("virt addr invalid.\n"); + return; + } + do { + pgd_t *pgd = pgd_offset_k(addr); + pmd_t *pmd; + if (pgd_none(*pgd)) { + printk("No pgd.\n"); + break; + } + pmd = pmd_offset(pgd, addr); + if (pmd_none(*pmd)) { + printk("No pmd.\n"); + break; + } +#ifdef CONFIG_X86 + if (pmd_large(*pmd)) { + printk("Large page.\n"); + break; + } +#endif + printk("normal page, pte_val 0x%llx\n", + (unsigned long long)pte_val(*pte_offset_kernel(pmd, addr))); + } while(0); + + page = virt_to_page((void*)addr); + printk("struct page at %p, flags %lxh.\n", page, page->flags); + if (PageSlab(page)) { + kmem_cache_t *c; + struct slab *s; + unsigned long flags; + int objnr; + void *objp; + + c = GET_PAGE_CACHE(page); + printk("belongs to cache %s.\n",c->name); + + spin_lock_irqsave(&c->spinlock, flags); + s = GET_PAGE_SLAB(page); + printk("slabp %p with %d inuse objects (from %d).\n", + s, s->inuse, c->num); + check_slabp(c,s); + + objnr = (addr-(unsigned long)s->s_mem)/c->objsize; + objp = s->s_mem+c->objsize*objnr; + printk("points into object no %d, starting at %p, len %d.\n", + objnr, objp, c->objsize); + if (objnr >= c->num) { + printk("Bad obj number.\n"); + } else { + kernel_map_pages(virt_to_page(objp), + c->objsize/PAGE_SIZE, 1); + + if (c->flags & SLAB_RED_ZONE) + printk("redzone: 0x%lx/0x%lx.\n", + *dbg_redzone1(c, objp), + *dbg_redzone2(c, objp)); + + if (c->flags & SLAB_STORE_USER) + printk("Last user: %p.\n", + *dbg_userword(c, objp)); + } + spin_unlock_irqrestore(&c->spinlock, flags); + + } +} diff -ruN -X../cludes linux-2.6.0-test6-moo/mm/slab.c linux-2.6.0-test6-moo-v850-20031006/mm/slab.c --- linux-2.6.0-test6-moo/mm/slab.c 2003-09-29 13:19:22.000000000 +0900 +++ linux-2.6.0-test6-moo-v850-20031006/mm/slab.c 2003-10-03 16:53:56.000000000 +0900 @@ -2739,76 +2739,3 @@ return size; } - -void ptrinfo(unsigned long addr) -{ - struct page *page; - - printk("Dumping data about address %p.\n", (void*)addr); - if (!virt_addr_valid((void*)addr)) { - printk("virt addr invalid.\n"); - return; - } - do { - pgd_t *pgd = pgd_offset_k(addr); - pmd_t *pmd; - if (pgd_none(*pgd)) { - printk("No pgd.\n"); - break; - } - pmd = pmd_offset(pgd, addr); - if (pmd_none(*pmd)) { - printk("No pmd.\n"); - break; - } -#ifdef CONFIG_X86 - if (pmd_large(*pmd)) { - printk("Large page.\n"); - break; - } -#endif - printk("normal page, pte_val 0x%llx\n", - (unsigned long long)pte_val(*pte_offset_kernel(pmd, addr))); - } while(0); - - page = virt_to_page((void*)addr); - printk("struct page at %p, flags %lxh.\n", page, page->flags); - if (PageSlab(page)) { - kmem_cache_t *c; - struct slab *s; - unsigned long flags; - int objnr; - void *objp; - - c = GET_PAGE_CACHE(page); - printk("belongs to cache %s.\n",c->name); - - spin_lock_irqsave(&c->spinlock, flags); - s = GET_PAGE_SLAB(page); - printk("slabp %p with %d inuse objects (from %d).\n", - s, s->inuse, c->num); - check_slabp(c,s); - - objnr = (addr-(unsigned long)s->s_mem)/c->objsize; - objp = s->s_mem+c->objsize*objnr; - printk("points into object no %d, starting at %p, len %d.\n", - objnr, objp, c->objsize); - if (objnr >= c->num) { - printk("Bad obj number.\n"); - } else { - kernel_map_pages(virt_to_page(objp), - c->objsize/PAGE_SIZE, 1); - - if (c->flags & SLAB_RED_ZONE) - printk("redzone: 0x%lx/0x%lx.\n", - *dbg_redzone1(c, objp), - *dbg_redzone2(c, objp)); - - if (c->flags & SLAB_STORE_USER) - printk("Last user: %p.\n", - *dbg_userword(c, objp)); - } - spin_unlock_irqrestore(&c->spinlock, flags); - - } -} - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |