| @@ -193,26 +193,29 @@ void ttm_tt_destroy(struct ttm_tt *ttm) | | | @@ -193,26 +193,29 @@ void ttm_tt_destroy(struct ttm_tt *ttm) |
193 | | | 193 | |
194 | int ttm_tt_init(struct ttm_tt *ttm, struct ttm_bo_device *bdev, | | 194 | int ttm_tt_init(struct ttm_tt *ttm, struct ttm_bo_device *bdev, |
195 | unsigned long size, uint32_t page_flags, | | 195 | unsigned long size, uint32_t page_flags, |
196 | struct page *dummy_read_page) | | 196 | struct page *dummy_read_page) |
197 | { | | 197 | { |
198 | ttm->bdev = bdev; | | 198 | ttm->bdev = bdev; |
199 | ttm->glob = bdev->glob; | | 199 | ttm->glob = bdev->glob; |
200 | ttm->num_pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT; | | 200 | ttm->num_pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT; |
201 | ttm->caching_state = tt_cached; | | 201 | ttm->caching_state = tt_cached; |
202 | ttm->page_flags = page_flags; | | 202 | ttm->page_flags = page_flags; |
203 | ttm->dummy_read_page = dummy_read_page; | | 203 | ttm->dummy_read_page = dummy_read_page; |
204 | ttm->state = tt_unpopulated; | | 204 | ttm->state = tt_unpopulated; |
205 | #ifdef __NetBSD__ | | 205 | #ifdef __NetBSD__ |
| | | 206 | WARN(size == 0, "zero-size allocation in %s, please file a NetBSD PR", |
| | | 207 | __func__); /* paranoia -- can't prove in five minutes */ |
| | | 208 | size = MAX(size, 1); |
206 | ttm->swap_storage = uao_create(roundup2(size, PAGE_SIZE), 0); | | 209 | ttm->swap_storage = uao_create(roundup2(size, PAGE_SIZE), 0); |
207 | uao_set_pgfl(ttm->swap_storage, bus_dmamem_pgfl(bdev->dmat)); | | 210 | uao_set_pgfl(ttm->swap_storage, bus_dmamem_pgfl(bdev->dmat)); |
208 | #else | | 211 | #else |
209 | ttm->swap_storage = NULL; | | 212 | ttm->swap_storage = NULL; |
210 | #endif | | 213 | #endif |
211 | TAILQ_INIT(&ttm->pglist); | | 214 | TAILQ_INIT(&ttm->pglist); |
212 | | | 215 | |
213 | ttm_tt_alloc_page_directory(ttm); | | 216 | ttm_tt_alloc_page_directory(ttm); |
214 | if (!ttm->pages) { | | 217 | if (!ttm->pages) { |
215 | ttm_tt_destroy(ttm); | | 218 | ttm_tt_destroy(ttm); |
216 | pr_err("Failed allocating page table\n"); | | 219 | pr_err("Failed allocating page table\n"); |
217 | return -ENOMEM; | | 220 | return -ENOMEM; |
218 | } | | 221 | } |
| @@ -235,26 +238,29 @@ int ttm_dma_tt_init(struct ttm_dma_tt *t | | | @@ -235,26 +238,29 @@ int ttm_dma_tt_init(struct ttm_dma_tt *t |
235 | unsigned long size, uint32_t page_flags, | | 238 | unsigned long size, uint32_t page_flags, |
236 | struct page *dummy_read_page) | | 239 | struct page *dummy_read_page) |
237 | { | | 240 | { |
238 | struct ttm_tt *ttm = &ttm_dma->ttm; | | 241 | struct ttm_tt *ttm = &ttm_dma->ttm; |
239 | | | 242 | |
240 | ttm->bdev = bdev; | | 243 | ttm->bdev = bdev; |
241 | ttm->glob = bdev->glob; | | 244 | ttm->glob = bdev->glob; |
242 | ttm->num_pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT; | | 245 | ttm->num_pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT; |
243 | ttm->caching_state = tt_cached; | | 246 | ttm->caching_state = tt_cached; |
244 | ttm->page_flags = page_flags; | | 247 | ttm->page_flags = page_flags; |
245 | ttm->dummy_read_page = dummy_read_page; | | 248 | ttm->dummy_read_page = dummy_read_page; |
246 | ttm->state = tt_unpopulated; | | 249 | ttm->state = tt_unpopulated; |
247 | #ifdef __NetBSD__ | | 250 | #ifdef __NetBSD__ |
| | | 251 | WARN(size == 0, "zero-size allocation in %s, please file a NetBSD PR", |
| | | 252 | __func__); /* paranoia -- can't prove in five minutes */ |
| | | 253 | size = MAX(size, 1); |
248 | ttm->swap_storage = uao_create(roundup2(size, PAGE_SIZE), 0); | | 254 | ttm->swap_storage = uao_create(roundup2(size, PAGE_SIZE), 0); |
249 | uao_set_pgfl(ttm->swap_storage, bus_dmamem_pgfl(bdev->dmat)); | | 255 | uao_set_pgfl(ttm->swap_storage, bus_dmamem_pgfl(bdev->dmat)); |
250 | #else | | 256 | #else |
251 | ttm->swap_storage = NULL; | | 257 | ttm->swap_storage = NULL; |
252 | #endif | | 258 | #endif |
253 | TAILQ_INIT(&ttm->pglist); | | 259 | TAILQ_INIT(&ttm->pglist); |
254 | | | 260 | |
255 | INIT_LIST_HEAD(&ttm_dma->pages_list); | | 261 | INIT_LIST_HEAD(&ttm_dma->pages_list); |
256 | ttm_dma_tt_alloc_page_directory(ttm_dma); | | 262 | ttm_dma_tt_alloc_page_directory(ttm_dma); |
257 | #ifdef __NetBSD__ | | 263 | #ifdef __NetBSD__ |
258 | { | | 264 | { |
259 | int error; | | 265 | int error; |
260 | | | 266 | |