diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-08-24 12:25:44 +0200 | 
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-08-24 12:25:54 +0200 | 
| commit | 5f9ece02401116b29eb04396b99ea092acb75dd8 (patch) | |
| tree | e10386e2dc63c275646b4eb0bed857da7bf86c6a /lib/dma-debug.c | |
| parent | 9f51e24ee8b5a1595b6a5ac0c2be278a16488e75 (diff) | |
| parent | 422bef879e84104fee6dc68ded0e371dbeb5f88e (diff) | |
| download | olio-linux-3.10-5f9ece02401116b29eb04396b99ea092acb75dd8.tar.xz olio-linux-3.10-5f9ece02401116b29eb04396b99ea092acb75dd8.zip  | |
Merge commit 'v2.6.31-rc7' into x86/cleanups
Merge reason: we were on -rc1 before - go up to -rc7
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'lib/dma-debug.c')
| -rw-r--r-- | lib/dma-debug.c | 26 | 
1 files changed, 13 insertions, 13 deletions
diff --git a/lib/dma-debug.c b/lib/dma-debug.c index 3b93129a968..65b0d99b6d0 100644 --- a/lib/dma-debug.c +++ b/lib/dma-debug.c @@ -716,7 +716,7 @@ void dma_debug_init(u32 num_entries)  	for (i = 0; i < HASH_SIZE; ++i) {  		INIT_LIST_HEAD(&dma_entry_hash[i].list); -		dma_entry_hash[i].lock = SPIN_LOCK_UNLOCKED; +		spin_lock_init(&dma_entry_hash[i].lock);  	}  	if (dma_debug_fs_init() != 0) { @@ -856,22 +856,21 @@ static void check_for_stack(struct device *dev, void *addr)  				"stack [addr=%p]\n", addr);  } -static inline bool overlap(void *addr, u64 size, void *start, void *end) +static inline bool overlap(void *addr, unsigned long len, void *start, void *end)  { -	void *addr2 = (char *)addr + size; +	unsigned long a1 = (unsigned long)addr; +	unsigned long b1 = a1 + len; +	unsigned long a2 = (unsigned long)start; +	unsigned long b2 = (unsigned long)end; -	return ((addr >= start && addr < end) || -		(addr2 >= start && addr2 < end) || -		((addr < start) && (addr2 >= end))); +	return !(b1 <= a2 || a1 >= b2);  } -static void check_for_illegal_area(struct device *dev, void *addr, u64 size) +static void check_for_illegal_area(struct device *dev, void *addr, unsigned long len)  { -	if (overlap(addr, size, _text, _etext) || -	    overlap(addr, size, __start_rodata, __end_rodata)) -		err_printk(dev, NULL, "DMA-API: device driver maps " -				"memory from kernel text or rodata " -				"[addr=%p] [size=%llu]\n", addr, size); +	if (overlap(addr, len, _text, _etext) || +	    overlap(addr, len, __start_rodata, __end_rodata)) +		err_printk(dev, NULL, "DMA-API: device driver maps memory from kernel text or rodata [addr=%p] [len=%lu]\n", addr, len);  }  static void check_sync(struct device *dev, @@ -969,7 +968,8 @@ void debug_dma_map_page(struct device *dev, struct page *page, size_t offset,  		entry->type = dma_debug_single;  	if (!PageHighMem(page)) { -		void *addr = ((char *)page_address(page)) + offset; +		void *addr = page_address(page) + offset; +  		check_for_stack(dev, addr);  		check_for_illegal_area(dev, addr, size);  	}  |