Factor out a helper to find the number of slots for a given size.
Showing the changes to kernel (1 of 1 file). Show all
Unified · Split
| @@ -194,6 +194,11 @@ static inline unsigned long io_tlb_offset(unsigned long val) · 193 unmodified lines | ||
| 194 | 194 | return val & (IO_TLB_SEGSIZE - 1); |
| 195 | 195 | } |
| 196 | 196 | |
| 197 | +static inline unsigned long nr_slots(u64 val) | |
| 198 | +{ | |
| 199 | + return DIV_ROUND_UP(val, IO_TLB_SIZE); | |
| 200 | +} | |
| 201 | + | |
| 197 | 202 | /* |
| 198 | 203 | * Early SWIOTLB allocation may be too early to allow an architecture to |
| 199 | 204 | * perform the desired operations. This function allows the architecture to |
| @@ -493,20 +498,20 @@ phys_addr_t swiotlb_tbl_map_single(struct device *hwdev, phys_addr_t orig_addr, · 293 unmodified lines | ||
| 493 | 498 | |
| 494 | 499 | tbl_dma_addr &= mask; |
| 495 | 500 | |
| 496 | − offset_slots = ALIGN(tbl_dma_addr, IO_TLB_SIZE) >> IO_TLB_SHIFT; | |
| 501 | + offset_slots = nr_slots(tbl_dma_addr); | |
| 497 | 502 | |
| 498 | 503 | /* |
| 499 | 504 | * Carefully handle integer overflow which can occur when mask == ~0UL. |
| 500 | 505 | */ |
| 501 | 506 | max_slots = mask + 1 |
| 502 | − ? ALIGN(mask + 1, IO_TLB_SIZE) >> IO_TLB_SHIFT | |
| 507 | + ? nr_slots(mask + 1) | |
| 503 | 508 | : 1UL << (BITS_PER_LONG - IO_TLB_SHIFT); |
| 504 | 509 | |
| 505 | 510 | /* |
| 506 | 511 | * For mappings greater than or equal to a page, we limit the stride |
| 507 | 512 | * (and hence alignment) to a page size. |
| 508 | 513 | */ |
| 509 | − nslots = ALIGN(alloc_size, IO_TLB_SIZE) >> IO_TLB_SHIFT; | |
| 514 | + nslots = nr_slots(alloc_size); | |
| 510 | 515 | if (alloc_size >= PAGE_SIZE) |
| 511 | 516 | stride = (1 << (PAGE_SHIFT - IO_TLB_SHIFT)); |
| 512 | 517 | else |
| @@ -602,7 +607,7 @@ void swiotlb_tbl_unmap_single(struct device *hwdev, phys_addr_t tlb_addr, · 89 unmodified lines | ||
| 602 | 607 | enum dma_data_direction dir, unsigned long attrs) |
| 603 | 608 | { |
| 604 | 609 | unsigned long flags; |
| 605 | − int i, count, nslots = ALIGN(alloc_size, IO_TLB_SIZE) >> IO_TLB_SHIFT; | |
| 610 | + int i, count, nslots = nr_slots(alloc_size); | |
| 606 | 611 | int index = (tlb_addr - io_tlb_start) >> IO_TLB_SHIFT; |
| 607 | 612 | phys_addr_t orig_addr = io_tlb_orig_addr[index]; |
| 608 | 613 | |