mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2025-12-24 10:10:12 +01:00
pull in Eric's fixes from drm-kmod 0.9.3
This commit is contained in:
parent
b3e4882589
commit
2e4e8d8409
5 changed files with 23 additions and 13 deletions
|
|
@ -85,10 +85,14 @@
|
|||
return EINVAL; \
|
||||
}
|
||||
|
||||
#define DRM_OS_DELAY( delay ) \
|
||||
#define DRM_OS_DELAY( udelay ) \
|
||||
do { \
|
||||
static int never; \
|
||||
tsleep(&never, PZERO|PCATCH, "drmdelay", delay ); \
|
||||
struct timeval tv1, tv2; \
|
||||
microtime(&tv1); \
|
||||
do { \
|
||||
microtime(&tv2); \
|
||||
} \
|
||||
while (((tv2.tv_sec-tv1.tv_sec)*1000000 + tv2.tv_usec - tv1.tv_usec) < udelay ); \
|
||||
} while (0)
|
||||
|
||||
#define DRM_OS_RETURN(v) return v;
|
||||
|
|
|
|||
|
|
@ -85,10 +85,14 @@
|
|||
return EINVAL; \
|
||||
}
|
||||
|
||||
#define DRM_OS_DELAY( delay ) \
|
||||
#define DRM_OS_DELAY( udelay ) \
|
||||
do { \
|
||||
static int never; \
|
||||
tsleep(&never, PZERO|PCATCH, "drmdelay", delay ); \
|
||||
struct timeval tv1, tv2; \
|
||||
microtime(&tv1); \
|
||||
do { \
|
||||
microtime(&tv2); \
|
||||
} \
|
||||
while (((tv2.tv_sec-tv1.tv_sec)*1000000 + tv2.tv_usec - tv1.tv_usec) < udelay ); \
|
||||
} while (0)
|
||||
|
||||
#define DRM_OS_RETURN(v) return v;
|
||||
|
|
|
|||
|
|
@ -686,7 +686,7 @@ static int drm_count_cards(void)
|
|||
if(device == 0xffff) device = PCI_ANY_ID;
|
||||
if(vendor == 0xffff) vendor = PCI_ANY_ID;
|
||||
while ((pdev = pci_find_device(vendor, device, pdev))) {
|
||||
num++;
|
||||
num++; /* FIXME: What about two cards of the same device id? */
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
|
@ -758,6 +758,7 @@ static int DRM(init)( device_t nbdev )
|
|||
dev->name = DRIVER_NAME;
|
||||
#endif /* __linux__ */
|
||||
#ifdef __FreeBSD__
|
||||
DRM(minor)[i]=unit;
|
||||
DRM_OS_SPININIT(dev->count_lock, "drm device");
|
||||
lockinit(&dev->dev_lock, PZERO, "drmlk", 0, 0);
|
||||
dev->device = nbdev;
|
||||
|
|
|
|||
|
|
@ -686,7 +686,7 @@ static int drm_count_cards(void)
|
|||
if(device == 0xffff) device = PCI_ANY_ID;
|
||||
if(vendor == 0xffff) vendor = PCI_ANY_ID;
|
||||
while ((pdev = pci_find_device(vendor, device, pdev))) {
|
||||
num++;
|
||||
num++; /* FIXME: What about two cards of the same device id? */
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
|
@ -758,6 +758,7 @@ static int DRM(init)( device_t nbdev )
|
|||
dev->name = DRIVER_NAME;
|
||||
#endif /* __linux__ */
|
||||
#ifdef __FreeBSD__
|
||||
DRM(minor)[i]=unit;
|
||||
DRM_OS_SPININIT(dev->count_lock, "drm device");
|
||||
lockinit(&dev->dev_lock, PZERO, "drmlk", 0, 0);
|
||||
dev->device = nbdev;
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ int DRM(waitlist_put)(drm_waitlist_t *bl, drm_buf_t *buf)
|
|||
spin_lock_irqsave(&bl->write_lock, flags);
|
||||
#endif /* __linux__ */
|
||||
#ifdef __FreeBSD__
|
||||
simple_lock(&bl->write_lock);
|
||||
DRM_OS_SPINLOCK(&bl->write_lock);
|
||||
s = spldrm();
|
||||
#endif /* __FreeBSD__ */
|
||||
*bl->wp = buf;
|
||||
|
|
@ -107,7 +107,7 @@ int DRM(waitlist_put)(drm_waitlist_t *bl, drm_buf_t *buf)
|
|||
#endif /* __linux__ */
|
||||
#ifdef __FreeBSD__
|
||||
splx(s);
|
||||
simple_unlock(&bl->write_lock);
|
||||
DRM_OS_SPINUNLOCK(&bl->write_lock);
|
||||
#endif /* __FreeBSD__ */
|
||||
|
||||
return 0;
|
||||
|
|
@ -134,17 +134,17 @@ drm_buf_t *DRM(waitlist_get)(drm_waitlist_t *bl)
|
|||
spin_unlock_irqrestore(&bl->read_lock, flags);
|
||||
#endif /* __linux__ */
|
||||
#ifdef __FreeBSD__
|
||||
simple_lock(&bl->read_lock);
|
||||
DRM_OS_SPINLOCK(&bl->read_lock);
|
||||
s = spldrm();
|
||||
buf = *bl->rp;
|
||||
if (bl->rp == bl->wp) {
|
||||
splx(s);
|
||||
simple_unlock(&bl->read_lock);
|
||||
DRM_OS_SPINUNLOCK(&bl->read_lock);
|
||||
return NULL;
|
||||
}
|
||||
if (++bl->rp >= bl->end) bl->rp = bl->bufs;
|
||||
splx(s);
|
||||
simple_unlock(&bl->read_lock);
|
||||
DRM_OS_SPINUNLOCK(&bl->read_lock);
|
||||
#endif /* __FreeBSD__ */
|
||||
|
||||
return buf;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue