diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2009-09-24 16:22:33 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2009-09-24 16:22:33 -0400 |
commit | baea7b946f00a291b166ccae7fcfed6c01530cc6 (patch) | |
tree | 4aa275fbdbec9c7b9b4629e8bee2bbecd3c6a6af /arch/arm/plat-omap/iommu.c | |
parent | ae19ffbadc1b2100285a5b5b3d0a4e0a11390904 (diff) | |
parent | 94e0fb086fc5663c38bbc0fe86d698be8314f82f (diff) |
Merge branch 'origin' into for-linus
Conflicts:
MAINTAINERS
Diffstat (limited to 'arch/arm/plat-omap/iommu.c')
-rw-r--r-- | arch/arm/plat-omap/iommu.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/arch/arm/plat-omap/iommu.c b/arch/arm/plat-omap/iommu.c index 4a0301399013..4b6012707307 100644 --- a/arch/arm/plat-omap/iommu.c +++ b/arch/arm/plat-omap/iommu.c | |||
@@ -351,16 +351,14 @@ EXPORT_SYMBOL_GPL(flush_iotlb_all); | |||
351 | 351 | ||
352 | #if defined(CONFIG_OMAP_IOMMU_DEBUG_MODULE) | 352 | #if defined(CONFIG_OMAP_IOMMU_DEBUG_MODULE) |
353 | 353 | ||
354 | ssize_t iommu_dump_ctx(struct iommu *obj, char *buf) | 354 | ssize_t iommu_dump_ctx(struct iommu *obj, char *buf, ssize_t bytes) |
355 | { | 355 | { |
356 | ssize_t bytes; | ||
357 | |||
358 | if (!obj || !buf) | 356 | if (!obj || !buf) |
359 | return -EINVAL; | 357 | return -EINVAL; |
360 | 358 | ||
361 | clk_enable(obj->clk); | 359 | clk_enable(obj->clk); |
362 | 360 | ||
363 | bytes = arch_iommu->dump_ctx(obj, buf); | 361 | bytes = arch_iommu->dump_ctx(obj, buf, bytes); |
364 | 362 | ||
365 | clk_disable(obj->clk); | 363 | clk_disable(obj->clk); |
366 | 364 | ||
@@ -368,7 +366,7 @@ ssize_t iommu_dump_ctx(struct iommu *obj, char *buf) | |||
368 | } | 366 | } |
369 | EXPORT_SYMBOL_GPL(iommu_dump_ctx); | 367 | EXPORT_SYMBOL_GPL(iommu_dump_ctx); |
370 | 368 | ||
371 | static int __dump_tlb_entries(struct iommu *obj, struct cr_regs *crs) | 369 | static int __dump_tlb_entries(struct iommu *obj, struct cr_regs *crs, int num) |
372 | { | 370 | { |
373 | int i; | 371 | int i; |
374 | struct iotlb_lock saved, l; | 372 | struct iotlb_lock saved, l; |
@@ -379,7 +377,7 @@ static int __dump_tlb_entries(struct iommu *obj, struct cr_regs *crs) | |||
379 | iotlb_lock_get(obj, &saved); | 377 | iotlb_lock_get(obj, &saved); |
380 | memcpy(&l, &saved, sizeof(saved)); | 378 | memcpy(&l, &saved, sizeof(saved)); |
381 | 379 | ||
382 | for (i = 0; i < obj->nr_tlb_entries; i++) { | 380 | for (i = 0; i < num; i++) { |
383 | struct cr_regs tmp; | 381 | struct cr_regs tmp; |
384 | 382 | ||
385 | iotlb_lock_get(obj, &l); | 383 | iotlb_lock_get(obj, &l); |
@@ -402,18 +400,21 @@ static int __dump_tlb_entries(struct iommu *obj, struct cr_regs *crs) | |||
402 | * @obj: target iommu | 400 | * @obj: target iommu |
403 | * @buf: output buffer | 401 | * @buf: output buffer |
404 | **/ | 402 | **/ |
405 | size_t dump_tlb_entries(struct iommu *obj, char *buf) | 403 | size_t dump_tlb_entries(struct iommu *obj, char *buf, ssize_t bytes) |
406 | { | 404 | { |
407 | int i, n; | 405 | int i, num; |
408 | struct cr_regs *cr; | 406 | struct cr_regs *cr; |
409 | char *p = buf; | 407 | char *p = buf; |
410 | 408 | ||
411 | cr = kcalloc(obj->nr_tlb_entries, sizeof(*cr), GFP_KERNEL); | 409 | num = bytes / sizeof(*cr); |
410 | num = min(obj->nr_tlb_entries, num); | ||
411 | |||
412 | cr = kcalloc(num, sizeof(*cr), GFP_KERNEL); | ||
412 | if (!cr) | 413 | if (!cr) |
413 | return 0; | 414 | return 0; |
414 | 415 | ||
415 | n = __dump_tlb_entries(obj, cr); | 416 | num = __dump_tlb_entries(obj, cr, num); |
416 | for (i = 0; i < n; i++) | 417 | for (i = 0; i < num; i++) |
417 | p += iotlb_dump_cr(obj, cr + i, p); | 418 | p += iotlb_dump_cr(obj, cr + i, p); |
418 | kfree(cr); | 419 | kfree(cr); |
419 | 420 | ||