Rev 3263 | Rev 3290 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3263 | Rev 3266 | ||
---|---|---|---|
Line 46... | Line 46... | ||
46 | #undef wmb |
46 | #undef wmb |
47 | #define mb() asm volatile("mfence") |
47 | #define mb() asm volatile("mfence") |
48 | #define rmb() asm volatile ("lfence") |
48 | #define rmb() asm volatile ("lfence") |
49 | #define wmb() asm volatile ("sfence") |
49 | #define wmb() asm volatile ("sfence") |
Line -... | Line 50... | ||
- | 50 | ||
- | 51 | struct drm_i915_gem_object *get_fb_obj(); |
|
50 | 52 | ||
51 | unsigned long vm_mmap(struct file *file, unsigned long addr, |
53 | unsigned long vm_mmap(struct file *file, unsigned long addr, |
52 | unsigned long len, unsigned long prot, |
54 | unsigned long len, unsigned long prot, |
Line 53... | Line 55... | ||
53 | unsigned long flag, unsigned long offset); |
55 | unsigned long flag, unsigned long offset); |
Line 1049... | Line 1051... | ||
1049 | if (timeout != NULL) { |
1051 | if (timeout != NULL) { |
1050 | wait_time = *timeout; |
1052 | wait_time = *timeout; |
1051 | wait_forever = false; |
1053 | wait_forever = false; |
1052 | } |
1054 | } |
Line 1053... | Line 1055... | ||
1053 | 1055 | ||
Line 1054... | Line 1056... | ||
1054 | // timeout_jiffies = timespec_to_jiffies(&wait_time); |
1056 | timeout_jiffies = timespec_to_jiffies(&wait_time); |
1055 | 1057 | ||
1056 | if (WARN_ON(!ring->irq_get(ring))) |
- | |
Line 1057... | Line 1058... | ||
1057 | return -ENODEV; |
1058 | if (WARN_ON(!ring->irq_get(ring))) |
1058 | #if 0 |
1059 | return -ENODEV; |
Line 1059... | Line 1060... | ||
1059 | 1060 | ||
1060 | /* Record current time in case interrupted by signal, or wedged * */ |
1061 | /* Record current time in case interrupted by signal, or wedged * */ |
1061 | getrawmonotonic(&before); |
1062 | getrawmonotonic(&before); |
1062 | 1063 | ||
- | 1064 | #define EXIT_COND \ |
|
- | 1065 | (i915_seqno_passed(ring->get_seqno(ring, false), seqno) || \ |
|
- | 1066 | atomic_read(&dev_priv->mm.wedged)) |
|
- | 1067 | do { |
|
- | 1068 | if (interruptible) |
|
1063 | #define EXIT_COND \ |
1069 | end = wait_event_interruptible_timeout(ring->irq_queue, |
1064 | (i915_seqno_passed(ring->get_seqno(ring, false), seqno) || \ |
1070 | EXIT_COND, |
Line 1065... | Line 1071... | ||
1065 | atomic_read(&dev_priv->mm.wedged)) |
1071 | timeout_jiffies); |
1066 | do { |
1072 | else |
Line 1087... | Line 1093... | ||
1087 | case -EIO: |
1093 | case -EIO: |
1088 | case -EAGAIN: /* Wedged */ |
1094 | case -EAGAIN: /* Wedged */ |
1089 | case -ERESTARTSYS: /* Signal */ |
1095 | case -ERESTARTSYS: /* Signal */ |
1090 | return (int)end; |
1096 | return (int)end; |
1091 | case 0: /* Timeout */ |
1097 | case 0: /* Timeout */ |
1092 | // if (timeout) |
1098 | if (timeout) |
1093 | // set_normalized_timespec(timeout, 0, 0); |
1099 | set_normalized_timespec(timeout, 0, 0); |
1094 | return -ETIME; |
1100 | return -ETIME; |
1095 | default: /* Completed */ |
1101 | default: /* Completed */ |
1096 | WARN_ON(end < 0); /* We're not aware of other errors */ |
1102 | WARN_ON(end < 0); /* We're not aware of other errors */ |
1097 | return 0; |
1103 | return 0; |
1098 | } |
1104 | } |
1099 | - | ||
1100 | #endif |
- | |
1101 | - | ||
1102 | #define EXIT_COND \ |
- | |
1103 | (i915_seqno_passed(ring->get_seqno(ring, false), seqno) || \ |
- | |
1104 | atomic_read(&dev_priv->mm.wedged)) |
- | |
1105 | wait_event(ring->irq_queue, EXIT_COND); |
- | |
1106 | #undef EXIT_COND |
- | |
1107 | ring->irq_put(ring); |
- | |
1108 | - | ||
1109 | return 0; |
- | |
1110 | } |
1105 | } |
Line 1111... | Line 1106... | ||
1111 | 1106 | ||
1112 | /** |
1107 | /** |
1113 | * Waits for a sequence number to be signaled, and cleans up the |
1108 | * Waits for a sequence number to be signaled, and cleans up the |
Line 1915... | Line 1910... | ||
1915 | void |
1910 | void |
1916 | i915_gem_retire_requests_ring(struct intel_ring_buffer *ring) |
1911 | i915_gem_retire_requests_ring(struct intel_ring_buffer *ring) |
1917 | { |
1912 | { |
1918 | uint32_t seqno; |
1913 | uint32_t seqno; |
Line 1919... | Line -... | ||
1919 | - | ||
1920 | ENTER(); |
- | |
1921 | 1914 | ||
1922 | if (list_empty(&ring->request_list)) |
1915 | if (list_empty(&ring->request_list)) |
Line 1923... | Line 1916... | ||
1923 | return; |
1916 | return; |
Line 1970... | Line 1963... | ||
1970 | ring->irq_put(ring); |
1963 | ring->irq_put(ring); |
1971 | ring->trace_irq_seqno = 0; |
1964 | ring->trace_irq_seqno = 0; |
1972 | } |
1965 | } |
Line 1973... | Line 1966... | ||
1973 | 1966 | ||
1974 | WARN_ON(i915_verify_lists(ring->dev)); |
- | |
1975 | LEAVE(); |
1967 | WARN_ON(i915_verify_lists(ring->dev)); |
Line 1976... | Line 1968... | ||
1976 | } |
1968 | } |
1977 | 1969 | ||
1978 | void |
1970 | void |
Line 1993... | Line 1985... | ||
1993 | struct drm_device *dev; |
1985 | struct drm_device *dev; |
1994 | struct intel_ring_buffer *ring; |
1986 | struct intel_ring_buffer *ring; |
1995 | bool idle; |
1987 | bool idle; |
1996 | int i; |
1988 | int i; |
Line 1997... | Line -... | ||
1997 | - | ||
1998 | ENTER(); |
- | |
1999 | 1989 | ||
2000 | dev_priv = container_of(work, drm_i915_private_t, |
1990 | dev_priv = container_of(work, drm_i915_private_t, |
2001 | mm.retire_work.work); |
1991 | mm.retire_work.work); |
Line 2002... | Line 1992... | ||
2002 | dev = dev_priv->dev; |
1992 | dev = dev_priv->dev; |
Line 2024... | Line 2014... | ||
2024 | queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work, HZ); |
2014 | queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work, HZ); |
2025 | if (idle) |
2015 | if (idle) |
2026 | intel_mark_idle(dev); |
2016 | intel_mark_idle(dev); |
Line 2027... | Line 2017... | ||
2027 | 2017 | ||
2028 | mutex_unlock(&dev->struct_mutex); |
- | |
2029 | - | ||
2030 | LEAVE(); |
2018 | mutex_unlock(&dev->struct_mutex); |
Line 2031... | Line 2019... | ||
2031 | } |
2019 | } |
2032 | 2020 | ||
2033 | /** |
2021 | /** |