From 126673d62afad6da84e833daa644a352d88a5e37 Mon Sep 17 00:00:00 2001 From: Thomas Hellstrom Date: Tue, 11 Jul 2006 14:37:37 +0000 Subject: Keep hashed user tokens, with the following changes: 32-bit physical device addresses are mapped directly to user-tokens. No duplicate maps are allowed, and the addresses are assumed to be outside of the range 0x10000000 through 0x30000000. The user-token is identical to the 32-bit physical start-address of the map. 64-bit physical device addressed are mapped to user-tokens in the range 0x10000000 to 0x30000000 with page-size increments. The user_token should not be interpreted as an address. Other map types, like upcoming TTM maps are mapped to user-tokens in the range 0x10000000 to 0x30000000 with page-size increments. The user_token should not be interpreted as an address. This keeps compatibility with buggy drivers, while still implementing a hashed map lookup. The SiS and via device driver major bumps are reverted. --- linux-core/drm_hashtab.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'linux-core/drm_hashtab.c') diff --git a/linux-core/drm_hashtab.c b/linux-core/drm_hashtab.c index 3be781df..d8c4549e 100644 --- a/linux-core/drm_hashtab.c +++ b/linux-core/drm_hashtab.c @@ -128,19 +128,21 @@ drm_ht_insert_item(drm_open_hash_t *ht, drm_hash_item_t *item) int drm_ht_just_insert_please(drm_open_hash_t *ht, drm_hash_item_t *item, - unsigned long seed, int bits) + unsigned long seed, int bits, int shift, + unsigned long add) { int ret; unsigned long mask = (1 << bits) - 1; - unsigned long first; + unsigned long first, unshifted_key; - item->key = hash_long(seed, bits); - first = item->key; + unshifted_key = hash_long(seed, bits); + first = unshifted_key; do{ + item->key = (unshifted_key << shift) + add; ret = drm_ht_insert_item(ht, item); if (ret) - item->key = (item->key + 1) & mask; - } while(ret && (item->key != first)); + unshifted_key = (unshifted_key + 1) & mask; + } while(ret && (unshifted_key != first)); if (ret) { DRM_ERROR("Available key bit space exhausted\n"); -- cgit v1.2.3