.. | .. |
---|
153 | 153 | |
---|
154 | 154 | static int xdp_umem_reg(struct xdp_umem *umem, struct xdp_umem_reg *mr) |
---|
155 | 155 | { |
---|
156 | | - u32 npgs_rem, chunk_size = mr->chunk_size, headroom = mr->headroom; |
---|
157 | 156 | bool unaligned_chunks = mr->flags & XDP_UMEM_UNALIGNED_CHUNK_FLAG; |
---|
158 | | - u64 npgs, addr = mr->addr, size = mr->len; |
---|
159 | | - unsigned int chunks, chunks_rem; |
---|
| 157 | + u32 chunk_size = mr->chunk_size, headroom = mr->headroom; |
---|
| 158 | + u64 addr = mr->addr, size = mr->len; |
---|
| 159 | + u32 chunks_rem, npgs_rem; |
---|
| 160 | + u64 chunks, npgs; |
---|
160 | 161 | int err; |
---|
161 | 162 | |
---|
162 | 163 | if (chunk_size < XDP_UMEM_MIN_CHUNK_SIZE || chunk_size > PAGE_SIZE) { |
---|
.. | .. |
---|
191 | 192 | if (npgs > U32_MAX) |
---|
192 | 193 | return -EINVAL; |
---|
193 | 194 | |
---|
194 | | - chunks = (unsigned int)div_u64_rem(size, chunk_size, &chunks_rem); |
---|
195 | | - if (chunks == 0) |
---|
| 195 | + chunks = div_u64_rem(size, chunk_size, &chunks_rem); |
---|
| 196 | + if (!chunks || chunks > U32_MAX) |
---|
196 | 197 | return -EINVAL; |
---|
197 | 198 | |
---|
198 | 199 | if (!unaligned_chunks && chunks_rem) |
---|
.. | .. |
---|
205 | 206 | umem->headroom = headroom; |
---|
206 | 207 | umem->chunk_size = chunk_size; |
---|
207 | 208 | umem->chunks = chunks; |
---|
208 | | - umem->npgs = (u32)npgs; |
---|
| 209 | + umem->npgs = npgs; |
---|
209 | 210 | umem->pgs = NULL; |
---|
210 | 211 | umem->user = NULL; |
---|
211 | 212 | umem->flags = mr->flags; |
---|