diff options
author | Pekka Paalanen <pq@iki.fi> | 2008-11-02 13:48:32 +0200 |
---|---|---|
committer | Pekka Paalanen <pq@iki.fi> | 2008-11-02 13:55:23 +0200 |
commit | 87e90c73620b88005fcca5fd40aaaad0b08932e1 (patch) | |
tree | 127e9a37699ba8d67ca299d7ed0facab49dc3a5d /linux-core | |
parent | 00847dabe0fa5ccf796658f486e8f6f7a77e043b (diff) |
nouveau: compat fix for set_page_locked().
The set_page_locked() function has changed its name again.
2.6.28 offers __set_page_locked() instead, which uses non-atomic
__set_bit() to do the work. In this case, offer our own
set_page_locked() using the atomic set_bit(), because I do not know
if atomic access is really necessary. Atomic behaviour is the one
previously expected.
Signed-off-by: Pekka Paalanen <pq@iki.fi>
Diffstat (limited to 'linux-core')
-rw-r--r-- | linux-core/drm_compat.h | 13 | ||||
-rw-r--r-- | linux-core/nouveau_sgdma.c | 4 |
2 files changed, 13 insertions, 4 deletions
diff --git a/linux-core/drm_compat.h b/linux-core/drm_compat.h index e09be479..bc4d2e58 100644 --- a/linux-core/drm_compat.h +++ b/linux-core/drm_compat.h @@ -392,4 +392,17 @@ extern struct page *drm_vm_sg_nopage(struct vm_area_struct *vma, #endif #endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)) +#define set_page_locked SetPageLocked +#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27)) +/* + * The kernel provides __set_page_locked, which uses the non-atomic + * __set_bit function. Let's use the atomic set_bit just in case. + */ +static inline void set_page_locked(struct page *page) +{ + set_bit(PG_locked, &page->flags); +} +#endif + #endif diff --git a/linux-core/nouveau_sgdma.c b/linux-core/nouveau_sgdma.c index 739e0252..1163baf9 100644 --- a/linux-core/nouveau_sgdma.c +++ b/linux-core/nouveau_sgdma.c @@ -227,11 +227,7 @@ nouveau_sgdma_init(struct drm_device *dev) dev_priv->gart_info.sg_dummy_page = alloc_page(GFP_KERNEL|__GFP_DMA32); -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) set_page_locked(dev_priv->gart_info.sg_dummy_page); -#else - SetPageLocked(dev_priv->gart_info.sg_dummy_page); -#endif dev_priv->gart_info.sg_dummy_bus = pci_map_page(dev->pdev, dev_priv->gart_info.sg_dummy_page, 0, PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); |