Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 2004 → Rev 2005

/drivers/video/drm/radeon/radeon_fence.c
101,14 → 101,13
bool wake = false;
unsigned long cjiffies;
 
#if 0
seq = radeon_fence_read(rdev);
if (seq != rdev->fence_drv.last_seq) {
rdev->fence_drv.last_seq = seq;
rdev->fence_drv.last_jiffies = jiffies;
// rdev->fence_drv.last_timeout = RADEON_FENCE_JIFFIES_TIMEOUT;
rdev->fence_drv.last_jiffies = GetTimerTicks();
rdev->fence_drv.last_timeout = RADEON_FENCE_JIFFIES_TIMEOUT;
} else {
cjiffies = jiffies;
cjiffies = GetTimerTicks();
if (time_after(cjiffies, rdev->fence_drv.last_jiffies)) {
cjiffies -= rdev->fence_drv.last_jiffies;
if (time_after(rdev->fence_drv.last_timeout, cjiffies)) {
138,6 → 137,8
}
/* all fence previous to this one are considered as signaled */
if (n) {
kevent_t event;
event.code = -1;
i = n;
do {
n = i->prev;
144,27 → 145,16
list_move_tail(i, &rdev->fence_drv.signaled);
fence = list_entry(i, struct radeon_fence, list);
fence->signaled = true;
// dbgprintf("fence %x done\n", fence);
RaiseEvent(fence->evnt, 0, &event);
i = n;
} while (i != &rdev->fence_drv.emited);
wake = true;
}
#endif
return wake;
}
 
static void radeon_fence_destroy(struct kref *kref)
{
unsigned long irq_flags;
struct radeon_fence *fence;
 
fence = container_of(kref, struct radeon_fence, kref);
write_lock_irqsave(&fence->rdev->fence_drv.lock, irq_flags);
list_del(&fence->list);
fence->emited = false;
write_unlock_irqrestore(&fence->rdev->fence_drv.lock, irq_flags);
kfree(fence);
}
 
int radeon_fence_create(struct radeon_device *rdev, struct radeon_fence **fence)
{
unsigned long irq_flags;
173,6 → 163,8
if ((*fence) == NULL) {
return -ENOMEM;
}
 
(*fence)->evnt = CreateEvent(NULL, MANUAL_DESTROY);
// kref_init(&((*fence)->kref));
(*fence)->rdev = rdev;
(*fence)->emited = false;
231,8 → 223,6
if (radeon_fence_signaled(fence)) {
return 0;
}
 
#if 0
timeout = rdev->fence_drv.last_timeout;
retry:
/* save current sequence used to check for GPU lockup */
240,8 → 230,11
// trace_radeon_fence_wait_begin(rdev->ddev, seq);
if (intr) {
radeon_irq_kms_sw_irq_get(rdev);
r = wait_event_interruptible_timeout(rdev->fence_drv.queue,
radeon_fence_signaled(fence), timeout);
// r = wait_event_interruptible_timeout(rdev->fence_drv.queue,
// radeon_fence_signaled(fence), timeout);
 
WaitEvent(fence->evnt);
 
radeon_irq_kms_sw_irq_put(rdev);
if (unlikely(r < 0)) {
return r;
248,8 → 241,11
}
} else {
radeon_irq_kms_sw_irq_get(rdev);
r = wait_event_timeout(rdev->fence_drv.queue,
radeon_fence_signaled(fence), timeout);
// r = wait_event_timeout(rdev->fence_drv.queue,
// radeon_fence_signaled(fence), timeout);
 
WaitEvent(fence->evnt);
 
radeon_irq_kms_sw_irq_put(rdev);
}
// trace_radeon_fence_wait_end(rdev->ddev, seq);
272,20 → 268,21
* as signaled for now
*/
rdev->gpu_lockup = true;
r = radeon_gpu_reset(rdev);
if (r)
return r;
radeon_fence_write(rdev, fence->seq);
rdev->gpu_lockup = false;
// r = radeon_gpu_reset(rdev);
// if (r)
// return r;
return true;
 
// radeon_fence_write(rdev, fence->seq);
// rdev->gpu_lockup = false;
}
// timeout = RADEON_FENCE_JIFFIES_TIMEOUT;
timeout = RADEON_FENCE_JIFFIES_TIMEOUT;
write_lock_irqsave(&rdev->fence_drv.lock, irq_flags);
// rdev->fence_drv.last_timeout = RADEON_FENCE_JIFFIES_TIMEOUT;
// rdev->fence_drv.last_jiffies = jiffies;
rdev->fence_drv.last_timeout = RADEON_FENCE_JIFFIES_TIMEOUT;
rdev->fence_drv.last_jiffies = GetTimerTicks();
write_unlock_irqrestore(&rdev->fence_drv.lock, irq_flags);
goto retry;
}
#endif
return 0;
}
 
346,12 → 343,20
 
void radeon_fence_unref(struct radeon_fence **fence)
{
unsigned long irq_flags;
struct radeon_fence *tmp = *fence;
 
*fence = NULL;
 
if(tmp)
{
write_lock_irqsave(&tmp->rdev->fence_drv.lock, irq_flags);
list_del(&tmp->list);
tmp->emited = false;
write_unlock_irqrestore(&tmp->rdev->fence_drv.lock, irq_flags);
};
}
 
#if 0
void radeon_fence_process(struct radeon_device *rdev)
{
unsigned long irq_flags;
360,13 → 365,8
write_lock_irqsave(&rdev->fence_drv.lock, irq_flags);
wake = radeon_fence_poll_locked(rdev);
write_unlock_irqrestore(&rdev->fence_drv.lock, irq_flags);
if (wake) {
wake_up_all(&rdev->fence_drv.queue);
}
}
 
#endif
 
int radeon_fence_driver_init(struct radeon_device *rdev)
{
unsigned long irq_flags;