if (adap->nr == -1) /* -1 means dynamically assign bus id */
                return i2c_add_adapter(adap);
-       if (adap->nr & ~MAX_IDR_MASK)
-               return -EINVAL;
 
        mutex_lock(&core_lock);
        id = idr_alloc(&i2c_adapter_idr, adap, adap->nr, adap->nr + 1,
 
 
        id = idr_alloc(&cm.local_id_table, cm_id_priv, next_id, 0, GFP_NOWAIT);
        if (id >= 0)
-               next_id = ((unsigned) id + 1) & MAX_IDR_MASK;
+               next_id = max(id + 1, 0);
 
        spin_unlock_irqrestore(&cm.lock, flags);
        idr_preload_end();
 
 
        ret = idr_alloc(&sriov->pv_id_table, ent, next_id, 0, GFP_NOWAIT);
        if (ret >= 0) {
-               next_id = ((unsigned)ret + 1) & MAX_IDR_MASK;
+               next_id = max(ret + 1, 0);
                ent->pv_cm_id = (u32)ret;
                sl_id_map_add(ibdev, ent);
                list_add_tail(&ent->list, &sriov->cm_list);
 
        else if (error)
                return -EAGAIN;
 
-       if ((dev & MAX_IDR_MASK) == (1 << MINORBITS)) {
+       if (dev == (1 << MINORBITS)) {
                spin_lock(&unnamed_dev_lock);
                ida_remove(&unnamed_dev_ida, dev);
                if (unnamed_dev_start > dev)
 
 #define IDR_SIZE (1 << IDR_BITS)
 #define IDR_MASK ((1 << IDR_BITS)-1)
 
-#define MAX_IDR_SHIFT (sizeof(int)*8 - 1)
-#define MAX_IDR_BIT (1U << MAX_IDR_SHIFT)
-#define MAX_IDR_MASK (MAX_IDR_BIT - 1)
-
-/* Leave the possibility of an incomplete final layer */
-#define MAX_IDR_LEVEL ((MAX_IDR_SHIFT + IDR_BITS - 1) / IDR_BITS)
-
-/* Number of id_layer structs to leave in free list */
-#define MAX_IDR_FREE (MAX_IDR_LEVEL * 2)
-
 struct idr_layer {
        unsigned long           bitmap; /* A zero bit means "space here" */
        struct idr_layer __rcu  *ary[1<<IDR_BITS];
 
 #include <linux/percpu.h>
 #include <linux/hardirq.h>
 
+#define MAX_IDR_SHIFT          (sizeof(int) * 8 - 1)
+#define MAX_IDR_BIT            (1U << MAX_IDR_SHIFT)
+
+/* Leave the possibility of an incomplete final layer */
+#define MAX_IDR_LEVEL ((MAX_IDR_SHIFT + IDR_BITS - 1) / IDR_BITS)
+
+/* Number of id_layer structs to leave in free list */
+#define MAX_IDR_FREE (MAX_IDR_LEVEL * 2)
+
 static struct kmem_cache *idr_layer_cache;
 static DEFINE_PER_CPU(struct idr_layer *, idr_preload_head);
 static DEFINE_PER_CPU(int, idr_preload_cnt);
        struct idr_layer *p;
        struct idr_layer *to_free;
 
-       /* Mask off upper bits we don't use for the search. */
-       id &= MAX_IDR_MASK;
+       if (WARN_ON_ONCE(id < 0))
+               return;
 
        sub_remove(idp, (idp->layers - 1) * IDR_BITS, id);
        if (idp->top && idp->top->count == 1 && (idp->layers > 1) &&
        int n;
        struct idr_layer *p;
 
+       if (WARN_ON_ONCE(id < 0))
+               return NULL;
+
        p = rcu_dereference_raw(idp->top);
        if (!p)
                return NULL;
        n = (p->layer+1) * IDR_BITS;
 
-       /* Mask off upper bits we don't use for the search. */
-       id &= MAX_IDR_MASK;
-
        if (id > idr_max(p->layer + 1))
                return NULL;
        BUG_ON(n == 0);
        int n;
        struct idr_layer *p, *old_p;
 
+       if (WARN_ON_ONCE(id < 0))
+               return ERR_PTR(-EINVAL);
+
        p = idp->top;
        if (!p)
                return ERR_PTR(-EINVAL);
 
        n = (p->layer+1) * IDR_BITS;
 
-       id &= MAX_IDR_MASK;
-
        if (id >= (1 << n))
                return ERR_PTR(-EINVAL);