diff options
Diffstat (limited to 'drivers/net/mlx4')
-rw-r--r-- | drivers/net/mlx4/alloc.c | 37 | ||||
-rw-r--r-- | drivers/net/mlx4/fw.c | 3 |
2 files changed, 6 insertions, 34 deletions
diff --git a/drivers/net/mlx4/alloc.c b/drivers/net/mlx4/alloc.c index ad95d5f7b630..8c8515619b8e 100644 --- a/drivers/net/mlx4/alloc.c +++ b/drivers/net/mlx4/alloc.c | |||
@@ -72,35 +72,6 @@ void mlx4_bitmap_free(struct mlx4_bitmap *bitmap, u32 obj) | |||
72 | mlx4_bitmap_free_range(bitmap, obj, 1); | 72 | mlx4_bitmap_free_range(bitmap, obj, 1); |
73 | } | 73 | } |
74 | 74 | ||
75 | static unsigned long find_aligned_range(unsigned long *bitmap, | ||
76 | u32 start, u32 nbits, | ||
77 | int len, int align) | ||
78 | { | ||
79 | unsigned long end, i; | ||
80 | |||
81 | again: | ||
82 | start = ALIGN(start, align); | ||
83 | |||
84 | while ((start < nbits) && test_bit(start, bitmap)) | ||
85 | start += align; | ||
86 | |||
87 | if (start >= nbits) | ||
88 | return -1; | ||
89 | |||
90 | end = start+len; | ||
91 | if (end > nbits) | ||
92 | return -1; | ||
93 | |||
94 | for (i = start + 1; i < end; i++) { | ||
95 | if (test_bit(i, bitmap)) { | ||
96 | start = i + 1; | ||
97 | goto again; | ||
98 | } | ||
99 | } | ||
100 | |||
101 | return start; | ||
102 | } | ||
103 | |||
104 | u32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align) | 75 | u32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align) |
105 | { | 76 | { |
106 | u32 obj, i; | 77 | u32 obj, i; |
@@ -110,13 +81,13 @@ u32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align) | |||
110 | 81 | ||
111 | spin_lock(&bitmap->lock); | 82 | spin_lock(&bitmap->lock); |
112 | 83 | ||
113 | obj = find_aligned_range(bitmap->table, bitmap->last, | 84 | obj = bitmap_find_next_zero_area(bitmap->table, bitmap->max, |
114 | bitmap->max, cnt, align); | 85 | bitmap->last, cnt, align - 1); |
115 | if (obj >= bitmap->max) { | 86 | if (obj >= bitmap->max) { |
116 | bitmap->top = (bitmap->top + bitmap->max + bitmap->reserved_top) | 87 | bitmap->top = (bitmap->top + bitmap->max + bitmap->reserved_top) |
117 | & bitmap->mask; | 88 | & bitmap->mask; |
118 | obj = find_aligned_range(bitmap->table, 0, bitmap->max, | 89 | obj = bitmap_find_next_zero_area(bitmap->table, bitmap->max, |
119 | cnt, align); | 90 | 0, cnt, align - 1); |
120 | } | 91 | } |
121 | 92 | ||
122 | if (obj < bitmap->max) { | 93 | if (obj < bitmap->max) { |
diff --git a/drivers/net/mlx4/fw.c b/drivers/net/mlx4/fw.c index 3c16602172fc..04f42ae1eda0 100644 --- a/drivers/net/mlx4/fw.c +++ b/drivers/net/mlx4/fw.c | |||
@@ -90,6 +90,7 @@ static void dump_dev_cap_flags(struct mlx4_dev *dev, u32 flags) | |||
90 | [ 9] = "Q_Key violation counter", | 90 | [ 9] = "Q_Key violation counter", |
91 | [10] = "VMM", | 91 | [10] = "VMM", |
92 | [12] = "DPDP", | 92 | [12] = "DPDP", |
93 | [15] = "Big LSO headers", | ||
93 | [16] = "MW support", | 94 | [16] = "MW support", |
94 | [17] = "APM support", | 95 | [17] = "APM support", |
95 | [18] = "Atomic ops support", | 96 | [18] = "Atomic ops support", |
@@ -235,7 +236,7 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) | |||
235 | MLX4_GET(field, outbox, QUERY_DEV_CAP_MAX_MPT_OFFSET); | 236 | MLX4_GET(field, outbox, QUERY_DEV_CAP_MAX_MPT_OFFSET); |
236 | dev_cap->max_mpts = 1 << (field & 0x3f); | 237 | dev_cap->max_mpts = 1 << (field & 0x3f); |
237 | MLX4_GET(field, outbox, QUERY_DEV_CAP_RSVD_EQ_OFFSET); | 238 | MLX4_GET(field, outbox, QUERY_DEV_CAP_RSVD_EQ_OFFSET); |
238 | dev_cap->reserved_eqs = 1 << (field & 0xf); | 239 | dev_cap->reserved_eqs = field & 0xf; |
239 | MLX4_GET(field, outbox, QUERY_DEV_CAP_MAX_EQ_OFFSET); | 240 | MLX4_GET(field, outbox, QUERY_DEV_CAP_MAX_EQ_OFFSET); |
240 | dev_cap->max_eqs = 1 << (field & 0xf); | 241 | dev_cap->max_eqs = 1 << (field & 0xf); |
241 | MLX4_GET(field, outbox, QUERY_DEV_CAP_RSVD_MTT_OFFSET); | 242 | MLX4_GET(field, outbox, QUERY_DEV_CAP_RSVD_MTT_OFFSET); |