2010-09-01 08:54:21 +00:00
|
|
|
From 6a1a82df91fa0eb1cc76069a9efe5714d087eccd Mon Sep 17 00:00:00 2001
|
|
|
|
From: Daniel Mack <daniel@caiaq.de>
|
|
|
|
Date: Thu, 3 Jun 2010 13:55:02 +0200
|
|
|
|
Subject: USB: ftdi_sio: fix DTR/RTS line modes
|
|
|
|
|
|
|
|
From: Daniel Mack <daniel@caiaq.de>
|
|
|
|
|
|
|
|
commit 6a1a82df91fa0eb1cc76069a9efe5714d087eccd upstream.
|
|
|
|
|
|
|
|
Call set_mctrl() and clear_mctrl() according to the flow control mode
|
|
|
|
selected. This makes serial communication for FT232 connected devices
|
|
|
|
work when CRTSCTS is not set.
|
|
|
|
|
|
|
|
This fixes a regression introduced by 4175f3e31 ("tty_port: If we are
|
|
|
|
opened non blocking we still need to raise the carrier"). This patch
|
|
|
|
calls the low-level driver's dtr_rts() function which consequently sets
|
|
|
|
TIOCM_DTR | TIOCM_RTS. A later call to set_termios() without CRTSCTS in
|
|
|
|
cflags, however, does not reset these bits, and so data is not actually
|
|
|
|
sent out on the serial wire.
|
|
|
|
|
|
|
|
Signed-off-by: Daniel Mack <daniel@caiaq.de>
|
|
|
|
Cc: Johan Hovold <jhovold@gmail.com>
|
|
|
|
Cc: Alan Cox <alan@linux.intel.com>
|
|
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
|
|
|
|
---
|
|
|
|
drivers/usb/serial/ftdi_sio.c | 4 ++++
|
|
|
|
1 file changed, 4 insertions(+)
|
|
|
|
|
|
|
|
--- a/drivers/usb/serial/ftdi_sio.c
|
|
|
|
+++ b/drivers/usb/serial/ftdi_sio.c
|
|
|
|
@@ -2289,6 +2289,8 @@ static void ftdi_set_termios(struct tty_
|
|
|
|
"urb failed to set to rts/cts flow control\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
+ /* raise DTR/RTS */
|
|
|
|
+ set_mctrl(port, TIOCM_DTR | TIOCM_RTS);
|
|
|
|
} else {
|
|
|
|
/*
|
|
|
|
* Xon/Xoff code
|
|
|
|
@@ -2336,6 +2338,8 @@ static void ftdi_set_termios(struct tty_
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
+ /* lower DTR/RTS */
|
|
|
|
+ clear_mctrl(port, TIOCM_DTR | TIOCM_RTS);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
2010-08-24 19:36:21 +00:00
|
|
|
From 3d61510f4ecacfe47c75c0eb51c0659dfa77fb1b Mon Sep 17 00:00:00 2001
|
|
|
|
From: Alan Stern <stern@rowland.harvard.edu>
|
|
|
|
Date: Fri, 2 Apr 2010 13:21:58 -0400
|
|
|
|
Subject: HID: usbhid: enable remote wakeup for keyboards
|
|
|
|
|
|
|
|
From: Alan Stern <stern@rowland.harvard.edu>
|
|
|
|
|
|
|
|
commit 3d61510f4ecacfe47c75c0eb51c0659dfa77fb1b upstream.
|
|
|
|
|
|
|
|
This patch (as1365) enables remote wakeup by default for USB keyboard
|
|
|
|
devices. Keyboards in general are supposed to be wakeup devices, but
|
|
|
|
the correct place to enable it depends on the device's bus; no single
|
|
|
|
approach will work for all keyboard devices. In particular, this
|
|
|
|
covers only USB keyboards (and then only those supporting the boot
|
|
|
|
protocol).
|
|
|
|
|
|
|
|
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
|
|
|
|
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
|
|
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
|
|
|
|
---
|
|
|
|
drivers/hid/usbhid/hid-core.c | 7 +++++--
|
|
|
|
drivers/hid/usbhid/usbkbd.c | 1 +
|
|
|
|
2 files changed, 6 insertions(+), 2 deletions(-)
|
|
|
|
|
|
|
|
--- a/drivers/hid/usbhid/hid-core.c
|
|
|
|
+++ b/drivers/hid/usbhid/hid-core.c
|
|
|
|
@@ -1019,12 +1019,15 @@ static int usbhid_start(struct hid_devic
|
|
|
|
/* Some keyboards don't work until their LEDs have been set.
|
|
|
|
* Since BIOSes do set the LEDs, it must be safe for any device
|
|
|
|
* that supports the keyboard boot protocol.
|
|
|
|
+ * In addition, enable remote wakeup by default for all keyboard
|
|
|
|
+ * devices supporting the boot protocol.
|
|
|
|
*/
|
|
|
|
if (interface->desc.bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT &&
|
|
|
|
interface->desc.bInterfaceProtocol ==
|
|
|
|
- USB_INTERFACE_PROTOCOL_KEYBOARD)
|
|
|
|
+ USB_INTERFACE_PROTOCOL_KEYBOARD) {
|
|
|
|
usbhid_set_leds(hid);
|
|
|
|
-
|
|
|
|
+ device_set_wakeup_enable(&dev->dev, 1);
|
|
|
|
+ }
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
fail:
|
|
|
|
--- a/drivers/hid/usbhid/usbkbd.c
|
|
|
|
+++ b/drivers/hid/usbhid/usbkbd.c
|
|
|
|
@@ -313,6 +313,7 @@ static int usb_kbd_probe(struct usb_inte
|
|
|
|
goto fail2;
|
|
|
|
|
|
|
|
usb_set_intfdata(iface, kbd);
|
|
|
|
+ device_set_wakeup_enable(&dev->dev, 1);
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
fail2:
|
2010-08-02 06:50:42 +00:00
|
|
|
From 468f0b44ce4b002ca7d9260f802a341854752c02 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Chris Wilson <chris@chris-wilson.co.uk>
|
|
|
|
Date: Thu, 27 May 2010 13:18:13 +0100
|
|
|
|
Subject: drm/i915: Hold the spinlock whilst resetting unpin_work along error path
|
|
|
|
MIME-Version: 1.0
|
|
|
|
Content-Type: text/plain; charset=UTF-8
|
|
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
|
|
|
|
From: Chris Wilson <chris@chris-wilson.co.uk>
|
|
|
|
|
|
|
|
commit 468f0b44ce4b002ca7d9260f802a341854752c02 upstream.
|
|
|
|
|
|
|
|
Delay taking the mutex until we need to and ensure that we hold the
|
|
|
|
spinlock when resetting unpin_work on the error path. Also defer the
|
|
|
|
debugging print messages until after we have released the spinlock.
|
|
|
|
|
|
|
|
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
|
|
|
|
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
|
|
|
|
Cc: Kristian Høgsberg <krh@bitplanet.net>
|
|
|
|
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
|
|
|
|
Signed-off-by: Eric Anholt <eric@anholt.net>
|
|
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/i915/intel_display.c | 20 ++++++++++++--------
|
|
|
|
1 file changed, 12 insertions(+), 8 deletions(-)
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/i915/intel_display.c
|
|
|
|
+++ b/drivers/gpu/drm/i915/intel_display.c
|
|
|
|
@@ -4239,8 +4239,6 @@ static int intel_crtc_page_flip(struct d
|
|
|
|
if (work == NULL)
|
|
|
|
return -ENOMEM;
|
|
|
|
|
|
|
|
- mutex_lock(&dev->struct_mutex);
|
|
|
|
-
|
|
|
|
work->event = event;
|
|
|
|
work->dev = crtc->dev;
|
|
|
|
intel_fb = to_intel_framebuffer(crtc->fb);
|
|
|
|
@@ -4250,10 +4248,10 @@ static int intel_crtc_page_flip(struct d
|
|
|
|
/* We borrow the event spin lock for protecting unpin_work */
|
|
|
|
spin_lock_irqsave(&dev->event_lock, flags);
|
|
|
|
if (intel_crtc->unpin_work) {
|
|
|
|
- DRM_DEBUG_DRIVER("flip queue: crtc already busy\n");
|
|
|
|
spin_unlock_irqrestore(&dev->event_lock, flags);
|
|
|
|
kfree(work);
|
|
|
|
- mutex_unlock(&dev->struct_mutex);
|
|
|
|
+
|
|
|
|
+ DRM_DEBUG_DRIVER("flip queue: crtc already busy\n");
|
|
|
|
return -EBUSY;
|
|
|
|
}
|
|
|
|
intel_crtc->unpin_work = work;
|
|
|
|
@@ -4262,13 +4260,19 @@ static int intel_crtc_page_flip(struct d
|
|
|
|
intel_fb = to_intel_framebuffer(fb);
|
|
|
|
obj = intel_fb->obj;
|
|
|
|
|
|
|
|
+ mutex_lock(&dev->struct_mutex);
|
|
|
|
ret = intel_pin_and_fence_fb_obj(dev, obj);
|
|
|
|
if (ret != 0) {
|
|
|
|
- DRM_DEBUG_DRIVER("flip queue: %p pin & fence failed\n",
|
|
|
|
- to_intel_bo(obj));
|
|
|
|
- kfree(work);
|
|
|
|
- intel_crtc->unpin_work = NULL;
|
|
|
|
mutex_unlock(&dev->struct_mutex);
|
|
|
|
+
|
|
|
|
+ spin_lock_irqsave(&dev->event_lock, flags);
|
|
|
|
+ intel_crtc->unpin_work = NULL;
|
|
|
|
+ spin_unlock_irqrestore(&dev->event_lock, flags);
|
|
|
|
+
|
|
|
|
+ kfree(work);
|
|
|
|
+
|
|
|
|
+ DRM_DEBUG_DRIVER("flip queue: %p pin & fence failed\n",
|
|
|
|
+ to_intel_bo(obj));
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
From f953c9353f5fe6e98fa7f32f51060a74d845b5f8 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Daniel J Blueman <daniel.blueman@gmail.com>
|
|
|
|
Date: Mon, 17 May 2010 14:23:52 +0100
|
|
|
|
Subject: i915: fix lock imbalance on error path...
|
|
|
|
|
|
|
|
From: Daniel J Blueman <daniel.blueman@gmail.com>
|
|
|
|
|
|
|
|
commit f953c9353f5fe6e98fa7f32f51060a74d845b5f8 upstream.
|
|
|
|
|
|
|
|
While investigating Intel i5 Arrandale GPU lockups with -rc4, I
|
|
|
|
noticed a lock imbalance.
|
|
|
|
|
|
|
|
Signed-off-by: Daniel J Blueman <daniel.blueman@gmail.com>
|
|
|
|
Signed-off-by: Eric Anholt <eric@anholt.net>
|
|
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/i915/i915_drv.c | 1 +
|
|
|
|
1 file changed, 1 insertion(+)
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/i915/i915_drv.c
|
|
|
|
+++ b/drivers/gpu/drm/i915/i915_drv.c
|
|
|
|
@@ -341,6 +341,7 @@ int i965_reset(struct drm_device *dev, u
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
DRM_ERROR("Error occurred. Don't know how to reset this chip.\n");
|
|
|
|
+ mutex_unlock(&dev->struct_mutex);
|
|
|
|
return -ENODEV;
|
|
|
|
}
|
|
|
|
|
|
|
|
From 6fd024893911dcb51b4a0aa71971db5ba38f7071 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Ben Hutchings <ben@decadent.org.uk>
|
|
|
|
Date: Wed, 24 Mar 2010 03:36:31 +0000
|
|
|
|
Subject: amd64-agp: Probe unknown AGP devices the right way
|
|
|
|
|
|
|
|
From: Ben Hutchings <ben@decadent.org.uk>
|
|
|
|
|
|
|
|
commit 6fd024893911dcb51b4a0aa71971db5ba38f7071 upstream.
|
|
|
|
|
|
|
|
The current initialisation code probes 'unsupported' AGP devices
|
|
|
|
simply by calling its own probe function. It does not lock these
|
|
|
|
devices or even check whether another driver is already bound to
|
|
|
|
them.
|
|
|
|
|
|
|
|
We must use the device core to manage this. So if the specific
|
|
|
|
device id table didn't match anything and agp_try_unsupported=1,
|
|
|
|
switch the device id table and call driver_attach() again.
|
|
|
|
|
|
|
|
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|
|
|
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
|
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
|
|
|
|
---
|
|
|
|
drivers/char/agp/amd64-agp.c | 27 +++++++++++++++------------
|
|
|
|
1 file changed, 15 insertions(+), 12 deletions(-)
|
|
|
|
|
|
|
|
--- a/drivers/char/agp/amd64-agp.c
|
|
|
|
+++ b/drivers/char/agp/amd64-agp.c
|
|
|
|
@@ -499,6 +499,10 @@ static int __devinit agp_amd64_probe(str
|
|
|
|
u8 cap_ptr;
|
|
|
|
int err;
|
|
|
|
|
|
|
|
+ /* The Highlander principle */
|
|
|
|
+ if (agp_bridges_found)
|
|
|
|
+ return -ENODEV;
|
|
|
|
+
|
|
|
|
cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);
|
|
|
|
if (!cap_ptr)
|
|
|
|
return -ENODEV;
|
|
|
|
@@ -562,6 +566,8 @@ static void __devexit agp_amd64_remove(s
|
|
|
|
amd64_aperture_sizes[bridge->aperture_size_idx].size);
|
|
|
|
agp_remove_bridge(bridge);
|
|
|
|
agp_put_bridge(bridge);
|
|
|
|
+
|
|
|
|
+ agp_bridges_found--;
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef CONFIG_PM
|
|
|
|
@@ -709,6 +715,11 @@ static struct pci_device_id agp_amd64_pc
|
|
|
|
|
|
|
|
MODULE_DEVICE_TABLE(pci, agp_amd64_pci_table);
|
|
|
|
|
|
|
|
+static DEFINE_PCI_DEVICE_TABLE(agp_amd64_pci_promisc_table) = {
|
|
|
|
+ { PCI_DEVICE_CLASS(0, 0) },
|
|
|
|
+ { }
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
static struct pci_driver agp_amd64_pci_driver = {
|
|
|
|
.name = "agpgart-amd64",
|
|
|
|
.id_table = agp_amd64_pci_table,
|
|
|
|
@@ -734,7 +745,6 @@ int __init agp_amd64_init(void)
|
|
|
|
return err;
|
|
|
|
|
|
|
|
if (agp_bridges_found == 0) {
|
|
|
|
- struct pci_dev *dev;
|
|
|
|
if (!agp_try_unsupported && !agp_try_unsupported_boot) {
|
|
|
|
printk(KERN_INFO PFX "No supported AGP bridge found.\n");
|
|
|
|
#ifdef MODULE
|
|
|
|
@@ -750,17 +760,10 @@ int __init agp_amd64_init(void)
|
|
|
|
return -ENODEV;
|
|
|
|
|
|
|
|
/* Look for any AGP bridge */
|
|
|
|
- dev = NULL;
|
|
|
|
- err = -ENODEV;
|
|
|
|
- for_each_pci_dev(dev) {
|
|
|
|
- if (!pci_find_capability(dev, PCI_CAP_ID_AGP))
|
|
|
|
- continue;
|
|
|
|
- /* Only one bridge supported right now */
|
|
|
|
- if (agp_amd64_probe(dev, NULL) == 0) {
|
|
|
|
- err = 0;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
+ agp_amd64_pci_driver.id_table = agp_amd64_pci_promisc_table;
|
|
|
|
+ err = driver_attach(&agp_amd64_pci_driver.driver);
|
|
|
|
+ if (err == 0 && agp_bridges_found == 0)
|
|
|
|
+ err = -ENODEV;
|
|
|
|
}
|
|
|
|
return err;
|
|
|
|
}
|
2010-07-30 00:19:53 +00:00
|
|
|
From c05556421742eb47f80301767653a4bcb19de9de Mon Sep 17 00:00:00 2001
|
|
|
|
From: Ian Munsie <imunsie@au.ibm.com>
|
|
|
|
Date: Tue, 13 Apr 2010 18:37:33 +1000
|
|
|
|
Subject: perf: Fix endianness argument compatibility with OPT_BOOLEAN() and introduce OPT_INCR()
|
|
|
|
|
|
|
|
From: Ian Munsie <imunsie@au.ibm.com>
|
|
|
|
|
|
|
|
commit c05556421742eb47f80301767653a4bcb19de9de upstream.
|
|
|
|
|
|
|
|
Parsing an option from the command line with OPT_BOOLEAN on a
|
|
|
|
bool data type would not work on a big-endian machine due to the
|
|
|
|
manner in which the boolean was being cast into an int and
|
|
|
|
incremented. For example, running 'perf probe --list' on a
|
|
|
|
PowerPC machine would fail to properly set the list_events bool
|
|
|
|
and would therefore print out the usage information and
|
|
|
|
terminate.
|
|
|
|
|
|
|
|
This patch makes OPT_BOOLEAN work as expected with a bool
|
|
|
|
datatype. For cases where the original OPT_BOOLEAN was
|
|
|
|
intentionally being used to increment an int each time it was
|
|
|
|
passed in on the command line, this patch introduces OPT_INCR
|
|
|
|
with the old behaviour of OPT_BOOLEAN (the verbose variable is
|
|
|
|
currently the only such example of this).
|
|
|
|
|
|
|
|
I have reviewed every use of OPT_BOOLEAN to verify that a true
|
|
|
|
C99 bool was passed. Where integers were used, I verified that
|
|
|
|
they were only being used for boolean logic and changed them to
|
|
|
|
bools to ensure that they would not be mistakenly used as ints.
|
|
|
|
The major exception was the verbose variable which now uses
|
|
|
|
OPT_INCR instead of OPT_BOOLEAN.
|
|
|
|
|
|
|
|
Signed-off-by: Ian Munsie <imunsie@au.ibm.com>
|
|
|
|
Acked-by: David S. Miller <davem@davemloft.net>
|
|
|
|
Cc: <stable@kernel.org>
|
|
|
|
Cc: Git development list <git@vger.kernel.org>
|
|
|
|
Cc: Ian Munsie <imunsie@au1.ibm.com>
|
|
|
|
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
|
|
|
Cc: Paul Mackerras <paulus@samba.org>
|
|
|
|
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
|
|
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
|
|
|
|
Cc: Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
|
|
|
|
Cc: Rusty Russell <rusty@rustcorp.com.au>
|
|
|
|
Cc: Frederic Weisbecker <fweisbec@gmail.com>
|
|
|
|
Cc: Eric B Munson <ebmunson@us.ibm.com>
|
|
|
|
Cc: Valdis.Kletnieks@vt.edu
|
|
|
|
Cc: WANG Cong <amwang@redhat.com>
|
|
|
|
Cc: Thiago Farina <tfransosi@gmail.com>
|
|
|
|
Cc: Masami Hiramatsu <mhiramat@redhat.com>
|
|
|
|
Cc: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
|
|
|
|
Cc: Jaswinder Singh Rajput <jaswinderrajput@gmail.com>
|
|
|
|
Cc: Arjan van de Ven <arjan@linux.intel.com>
|
|
|
|
Cc: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
|
|
|
|
Cc: Mike Galbraith <efault@gmx.de>
|
|
|
|
Cc: Tom Zanussi <tzanussi@gmail.com>
|
|
|
|
Cc: Anton Blanchard <anton@samba.org>
|
|
|
|
Cc: John Kacur <jkacur@redhat.com>
|
|
|
|
Cc: Li Zefan <lizf@cn.fujitsu.com>
|
|
|
|
Cc: Steven Rostedt <rostedt@goodmis.org>
|
|
|
|
LKML-Reference: <1271147857-11604-1-git-send-email-imunsie@au.ibm.com>
|
|
|
|
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
|
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
|
|
|
|
---
|
|
|
|
tools/perf/bench/mem-memcpy.c | 2 +-
|
|
|
|
tools/perf/bench/sched-messaging.c | 4 ++--
|
|
|
|
tools/perf/builtin-annotate.c | 8 ++++----
|
|
|
|
tools/perf/builtin-buildid-cache.c | 2 +-
|
|
|
|
tools/perf/builtin-buildid-list.c | 4 ++--
|
|
|
|
tools/perf/builtin-diff.c | 4 ++--
|
|
|
|
tools/perf/builtin-help.c | 2 +-
|
|
|
|
tools/perf/builtin-lock.c | 2 +-
|
|
|
|
tools/perf/builtin-probe.c | 2 +-
|
|
|
|
tools/perf/builtin-record.c | 24 ++++++++++++------------
|
|
|
|
tools/perf/builtin-report.c | 6 +++---
|
|
|
|
tools/perf/builtin-sched.c | 6 +++---
|
|
|
|
tools/perf/builtin-stat.c | 10 +++++-----
|
|
|
|
tools/perf/builtin-timechart.c | 2 +-
|
|
|
|
tools/perf/builtin-top.c | 14 +++++++-------
|
|
|
|
tools/perf/builtin-trace.c | 2 +-
|
|
|
|
tools/perf/util/debug.c | 2 +-
|
|
|
|
tools/perf/util/debug.h | 3 ++-
|
|
|
|
tools/perf/util/parse-options.c | 6 ++++++
|
|
|
|
tools/perf/util/parse-options.h | 4 +++-
|
|
|
|
tools/perf/util/trace-event-parse.c | 2 +-
|
|
|
|
tools/perf/util/trace-event.h | 3 ++-
|
|
|
|
22 files changed, 62 insertions(+), 52 deletions(-)
|
|
|
|
|
|
|
|
--- a/tools/perf/bench/mem-memcpy.c
|
|
|
|
+++ b/tools/perf/bench/mem-memcpy.c
|
|
|
|
@@ -24,7 +24,7 @@
|
|
|
|
|
|
|
|
static const char *length_str = "1MB";
|
|
|
|
static const char *routine = "default";
|
|
|
|
-static int use_clock = 0;
|
|
|
|
+static bool use_clock = false;
|
|
|
|
static int clock_fd;
|
|
|
|
|
|
|
|
static const struct option options[] = {
|
|
|
|
--- a/tools/perf/bench/sched-messaging.c
|
|
|
|
+++ b/tools/perf/bench/sched-messaging.c
|
|
|
|
@@ -31,9 +31,9 @@
|
|
|
|
|
|
|
|
#define DATASIZE 100
|
|
|
|
|
|
|
|
-static int use_pipes = 0;
|
|
|
|
+static bool use_pipes = false;
|
|
|
|
static unsigned int loops = 100;
|
|
|
|
-static unsigned int thread_mode = 0;
|
|
|
|
+static bool thread_mode = false;
|
|
|
|
static unsigned int num_groups = 10;
|
|
|
|
|
|
|
|
struct sender_context {
|
|
|
|
--- a/tools/perf/builtin-annotate.c
|
|
|
|
+++ b/tools/perf/builtin-annotate.c
|
|
|
|
@@ -29,11 +29,11 @@
|
|
|
|
|
|
|
|
static char const *input_name = "perf.data";
|
|
|
|
|
|
|
|
-static int force;
|
|
|
|
+static bool force;
|
|
|
|
|
|
|
|
-static int full_paths;
|
|
|
|
+static bool full_paths;
|
|
|
|
|
|
|
|
-static int print_line;
|
|
|
|
+static bool print_line;
|
|
|
|
|
|
|
|
struct sym_hist {
|
|
|
|
u64 sum;
|
|
|
|
@@ -584,7 +584,7 @@ static const struct option options[] = {
|
|
|
|
OPT_STRING('s', "symbol", &sym_hist_filter, "symbol",
|
|
|
|
"symbol to annotate"),
|
|
|
|
OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
|
|
|
|
- OPT_BOOLEAN('v', "verbose", &verbose,
|
|
|
|
+ OPT_INCR('v', "verbose", &verbose,
|
|
|
|
"be more verbose (show symbol address, etc)"),
|
|
|
|
OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace,
|
|
|
|
"dump raw trace in ASCII"),
|
|
|
|
--- a/tools/perf/builtin-buildid-cache.c
|
|
|
|
+++ b/tools/perf/builtin-buildid-cache.c
|
|
|
|
@@ -27,7 +27,7 @@ static const struct option buildid_cache
|
|
|
|
"file list", "file(s) to add"),
|
|
|
|
OPT_STRING('r', "remove", &remove_name_list_str, "file list",
|
|
|
|
"file(s) to remove"),
|
|
|
|
- OPT_BOOLEAN('v', "verbose", &verbose, "be more verbose"),
|
|
|
|
+ OPT_INCR('v', "verbose", &verbose, "be more verbose"),
|
|
|
|
OPT_END()
|
|
|
|
};
|
|
|
|
|
|
|
|
--- a/tools/perf/builtin-buildid-list.c
|
|
|
|
+++ b/tools/perf/builtin-buildid-list.c
|
|
|
|
@@ -16,7 +16,7 @@
|
|
|
|
#include "util/symbol.h"
|
|
|
|
|
|
|
|
static char const *input_name = "perf.data";
|
|
|
|
-static int force;
|
|
|
|
+static bool force;
|
|
|
|
static bool with_hits;
|
|
|
|
|
|
|
|
static const char * const buildid_list_usage[] = {
|
|
|
|
@@ -29,7 +29,7 @@ static const struct option options[] = {
|
|
|
|
OPT_STRING('i', "input", &input_name, "file",
|
|
|
|
"input file name"),
|
|
|
|
OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
|
|
|
|
- OPT_BOOLEAN('v', "verbose", &verbose,
|
|
|
|
+ OPT_INCR('v', "verbose", &verbose,
|
|
|
|
"be more verbose"),
|
|
|
|
OPT_END()
|
|
|
|
};
|
|
|
|
--- a/tools/perf/builtin-diff.c
|
|
|
|
+++ b/tools/perf/builtin-diff.c
|
|
|
|
@@ -19,7 +19,7 @@
|
|
|
|
static char const *input_old = "perf.data.old",
|
|
|
|
*input_new = "perf.data";
|
|
|
|
static char diff__default_sort_order[] = "dso,symbol";
|
|
|
|
-static int force;
|
|
|
|
+static bool force;
|
|
|
|
static bool show_displacement;
|
|
|
|
|
|
|
|
static int perf_session__add_hist_entry(struct perf_session *self,
|
|
|
|
@@ -188,7 +188,7 @@ static const char * const diff_usage[] =
|
|
|
|
};
|
|
|
|
|
|
|
|
static const struct option options[] = {
|
|
|
|
- OPT_BOOLEAN('v', "verbose", &verbose,
|
|
|
|
+ OPT_INCR('v', "verbose", &verbose,
|
|
|
|
"be more verbose (show symbol address, etc)"),
|
|
|
|
OPT_BOOLEAN('m', "displacement", &show_displacement,
|
|
|
|
"Show position displacement relative to baseline"),
|
|
|
|
--- a/tools/perf/builtin-help.c
|
|
|
|
+++ b/tools/perf/builtin-help.c
|
|
|
|
@@ -29,7 +29,7 @@ enum help_format {
|
|
|
|
HELP_FORMAT_WEB,
|
|
|
|
};
|
|
|
|
|
|
|
|
-static int show_all = 0;
|
|
|
|
+static bool show_all = false;
|
|
|
|
static enum help_format help_format = HELP_FORMAT_MAN;
|
|
|
|
static struct option builtin_help_options[] = {
|
|
|
|
OPT_BOOLEAN('a', "all", &show_all, "print all available commands"),
|
|
|
|
--- a/tools/perf/builtin-lock.c
|
|
|
|
+++ b/tools/perf/builtin-lock.c
|
|
|
|
@@ -744,7 +744,7 @@ static const char * const lock_usage[] =
|
|
|
|
|
|
|
|
static const struct option lock_options[] = {
|
|
|
|
OPT_STRING('i', "input", &input_name, "file", "input file name"),
|
|
|
|
- OPT_BOOLEAN('v', "verbose", &verbose, "be more verbose (show symbol address, etc)"),
|
|
|
|
+ OPT_INCR('v', "verbose", &verbose, "be more verbose (show symbol address, etc)"),
|
|
|
|
OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, "dump raw trace in ASCII"),
|
|
|
|
OPT_END()
|
|
|
|
};
|
|
|
|
--- a/tools/perf/builtin-probe.c
|
|
|
|
+++ b/tools/perf/builtin-probe.c
|
|
|
|
@@ -162,7 +162,7 @@ static const char * const probe_usage[]
|
|
|
|
};
|
|
|
|
|
|
|
|
static const struct option options[] = {
|
|
|
|
- OPT_BOOLEAN('v', "verbose", &verbose,
|
|
|
|
+ OPT_INCR('v', "verbose", &verbose,
|
|
|
|
"be more verbose (show parsed arguments, etc)"),
|
|
|
|
#ifndef NO_DWARF_SUPPORT
|
|
|
|
OPT_STRING('k', "vmlinux", &symbol_conf.vmlinux_name,
|
|
|
|
--- a/tools/perf/builtin-record.c
|
|
|
|
+++ b/tools/perf/builtin-record.c
|
|
|
|
@@ -39,19 +39,19 @@ static int output;
|
|
|
|
static const char *output_name = "perf.data";
|
|
|
|
static int group = 0;
|
|
|
|
static unsigned int realtime_prio = 0;
|
|
|
|
-static int raw_samples = 0;
|
|
|
|
-static int system_wide = 0;
|
|
|
|
+static bool raw_samples = false;
|
|
|
|
+static bool system_wide = false;
|
|
|
|
static int profile_cpu = -1;
|
|
|
|
static pid_t target_pid = -1;
|
|
|
|
static pid_t child_pid = -1;
|
|
|
|
-static int inherit = 1;
|
|
|
|
-static int force = 0;
|
|
|
|
-static int append_file = 0;
|
|
|
|
-static int call_graph = 0;
|
|
|
|
-static int inherit_stat = 0;
|
|
|
|
-static int no_samples = 0;
|
|
|
|
-static int sample_address = 0;
|
|
|
|
-static int multiplex = 0;
|
|
|
|
+static bool inherit = true;
|
|
|
|
+static bool force = false;
|
|
|
|
+static bool append_file = false;
|
|
|
|
+static bool call_graph = false;
|
|
|
|
+static bool inherit_stat = false;
|
|
|
|
+static bool no_samples = false;
|
|
|
|
+static bool sample_address = false;
|
|
|
|
+static bool multiplex = false;
|
|
|
|
static int multiplex_fd = -1;
|
|
|
|
|
|
|
|
static long samples = 0;
|
|
|
|
@@ -451,7 +451,7 @@ static int __cmd_record(int argc, const
|
|
|
|
rename(output_name, oldname);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
- append_file = 0;
|
|
|
|
+ append_file = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
flags = O_CREAT|O_RDWR;
|
|
|
|
@@ -676,7 +676,7 @@ static const struct option options[] = {
|
|
|
|
"number of mmap data pages"),
|
|
|
|
OPT_BOOLEAN('g', "call-graph", &call_graph,
|
|
|
|
"do call-graph (stack chain/backtrace) recording"),
|
|
|
|
- OPT_BOOLEAN('v', "verbose", &verbose,
|
|
|
|
+ OPT_INCR('v', "verbose", &verbose,
|
|
|
|
"be more verbose (show counter open errors, etc)"),
|
|
|
|
OPT_BOOLEAN('s', "stat", &inherit_stat,
|
|
|
|
"per thread counts"),
|
|
|
|
--- a/tools/perf/builtin-report.c
|
|
|
|
+++ b/tools/perf/builtin-report.c
|
|
|
|
@@ -33,11 +33,11 @@
|
|
|
|
|
|
|
|
static char const *input_name = "perf.data";
|
|
|
|
|
|
|
|
-static int force;
|
|
|
|
+static bool force;
|
|
|
|
static bool hide_unresolved;
|
|
|
|
static bool dont_use_callchains;
|
|
|
|
|
|
|
|
-static int show_threads;
|
|
|
|
+static bool show_threads;
|
|
|
|
static struct perf_read_values show_threads_values;
|
|
|
|
|
|
|
|
static char default_pretty_printing_style[] = "normal";
|
|
|
|
@@ -400,7 +400,7 @@ static const char * const report_usage[]
|
|
|
|
static const struct option options[] = {
|
|
|
|
OPT_STRING('i', "input", &input_name, "file",
|
|
|
|
"input file name"),
|
|
|
|
- OPT_BOOLEAN('v', "verbose", &verbose,
|
|
|
|
+ OPT_INCR('v', "verbose", &verbose,
|
|
|
|
"be more verbose (show symbol address, etc)"),
|
|
|
|
OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace,
|
|
|
|
"dump raw trace in ASCII"),
|
|
|
|
--- a/tools/perf/builtin-sched.c
|
|
|
|
+++ b/tools/perf/builtin-sched.c
|
|
|
|
@@ -1790,7 +1790,7 @@ static const char * const sched_usage[]
|
|
|
|
static const struct option sched_options[] = {
|
|
|
|
OPT_STRING('i', "input", &input_name, "file",
|
|
|
|
"input file name"),
|
|
|
|
- OPT_BOOLEAN('v', "verbose", &verbose,
|
|
|
|
+ OPT_INCR('v', "verbose", &verbose,
|
|
|
|
"be more verbose (show symbol address, etc)"),
|
|
|
|
OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace,
|
|
|
|
"dump raw trace in ASCII"),
|
|
|
|
@@ -1805,7 +1805,7 @@ static const char * const latency_usage[
|
|
|
|
static const struct option latency_options[] = {
|
|
|
|
OPT_STRING('s', "sort", &sort_order, "key[,key2...]",
|
|
|
|
"sort by key(s): runtime, switch, avg, max"),
|
|
|
|
- OPT_BOOLEAN('v', "verbose", &verbose,
|
|
|
|
+ OPT_INCR('v', "verbose", &verbose,
|
|
|
|
"be more verbose (show symbol address, etc)"),
|
|
|
|
OPT_INTEGER('C', "CPU", &profile_cpu,
|
|
|
|
"CPU to profile on"),
|
|
|
|
@@ -1822,7 +1822,7 @@ static const char * const replay_usage[]
|
|
|
|
static const struct option replay_options[] = {
|
|
|
|
OPT_INTEGER('r', "repeat", &replay_repeat,
|
|
|
|
"repeat the workload replay N times (-1: infinite)"),
|
|
|
|
- OPT_BOOLEAN('v', "verbose", &verbose,
|
|
|
|
+ OPT_INCR('v', "verbose", &verbose,
|
|
|
|
"be more verbose (show symbol address, etc)"),
|
|
|
|
OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace,
|
|
|
|
"dump raw trace in ASCII"),
|
|
|
|
--- a/tools/perf/builtin-stat.c
|
|
|
|
+++ b/tools/perf/builtin-stat.c
|
|
|
|
@@ -66,16 +66,16 @@ static struct perf_event_attr default_at
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
-static int system_wide = 0;
|
|
|
|
+static bool system_wide = false;
|
|
|
|
static unsigned int nr_cpus = 0;
|
|
|
|
static int run_idx = 0;
|
|
|
|
|
|
|
|
static int run_count = 1;
|
|
|
|
-static int inherit = 1;
|
|
|
|
-static int scale = 1;
|
|
|
|
+static bool inherit = true;
|
|
|
|
+static bool scale = true;
|
|
|
|
static pid_t target_pid = -1;
|
|
|
|
static pid_t child_pid = -1;
|
|
|
|
-static int null_run = 0;
|
|
|
|
+static bool null_run = false;
|
|
|
|
|
|
|
|
static int fd[MAX_NR_CPUS][MAX_COUNTERS];
|
|
|
|
|
|
|
|
@@ -494,7 +494,7 @@ static const struct option options[] = {
|
|
|
|
"system-wide collection from all CPUs"),
|
|
|
|
OPT_BOOLEAN('c', "scale", &scale,
|
|
|
|
"scale/normalize counters"),
|
|
|
|
- OPT_BOOLEAN('v', "verbose", &verbose,
|
|
|
|
+ OPT_INCR('v', "verbose", &verbose,
|
|
|
|
"be more verbose (show counter open errors, etc)"),
|
|
|
|
OPT_INTEGER('r', "repeat", &run_count,
|
|
|
|
"repeat command and print average + stddev (max: 100)"),
|
|
|
|
--- a/tools/perf/builtin-timechart.c
|
|
|
|
+++ b/tools/perf/builtin-timechart.c
|
|
|
|
@@ -43,7 +43,7 @@ static u64 turbo_frequency;
|
|
|
|
|
|
|
|
static u64 first_time, last_time;
|
|
|
|
|
|
|
|
-static int power_only;
|
|
|
|
+static bool power_only;
|
|
|
|
|
|
|
|
|
|
|
|
struct per_pid;
|
|
|
|
--- a/tools/perf/builtin-top.c
|
|
|
|
+++ b/tools/perf/builtin-top.c
|
|
|
|
@@ -57,7 +57,7 @@
|
|
|
|
|
|
|
|
static int fd[MAX_NR_CPUS][MAX_COUNTERS];
|
|
|
|
|
|
|
|
-static int system_wide = 0;
|
|
|
|
+static bool system_wide = false;
|
|
|
|
|
|
|
|
static int default_interval = 0;
|
|
|
|
|
|
|
|
@@ -65,18 +65,18 @@ static int count_filter = 5;
|
|
|
|
static int print_entries;
|
|
|
|
|
|
|
|
static int target_pid = -1;
|
|
|
|
-static int inherit = 0;
|
|
|
|
+static bool inherit = false;
|
|
|
|
static int profile_cpu = -1;
|
|
|
|
static int nr_cpus = 0;
|
|
|
|
static unsigned int realtime_prio = 0;
|
|
|
|
-static int group = 0;
|
|
|
|
+static bool group = false;
|
|
|
|
static unsigned int page_size;
|
|
|
|
static unsigned int mmap_pages = 16;
|
|
|
|
static int freq = 1000; /* 1 KHz */
|
|
|
|
|
|
|
|
static int delay_secs = 2;
|
|
|
|
-static int zero = 0;
|
|
|
|
-static int dump_symtab = 0;
|
|
|
|
+static bool zero = false;
|
|
|
|
+static bool dump_symtab = false;
|
|
|
|
|
|
|
|
static bool hide_kernel_symbols = false;
|
|
|
|
static bool hide_user_symbols = false;
|
|
|
|
@@ -839,7 +839,7 @@ static void handle_keypress(int c)
|
|
|
|
display_weighted = ~display_weighted;
|
|
|
|
break;
|
|
|
|
case 'z':
|
|
|
|
- zero = ~zero;
|
|
|
|
+ zero = !zero;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
@@ -1296,7 +1296,7 @@ static const struct option options[] = {
|
|
|
|
"display this many functions"),
|
|
|
|
OPT_BOOLEAN('U', "hide_user_symbols", &hide_user_symbols,
|
|
|
|
"hide user symbols"),
|
|
|
|
- OPT_BOOLEAN('v', "verbose", &verbose,
|
|
|
|
+ OPT_INCR('v', "verbose", &verbose,
|
|
|
|
"be more verbose (show counter open errors, etc)"),
|
|
|
|
OPT_END()
|
|
|
|
};
|
|
|
|
--- a/tools/perf/builtin-trace.c
|
|
|
|
+++ b/tools/perf/builtin-trace.c
|
|
|
|
@@ -505,7 +505,7 @@ static const char * const trace_usage[]
|
|
|
|
static const struct option options[] = {
|
|
|
|
OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace,
|
|
|
|
"dump raw trace in ASCII"),
|
|
|
|
- OPT_BOOLEAN('v', "verbose", &verbose,
|
|
|
|
+ OPT_INCR('v', "verbose", &verbose,
|
|
|
|
"be more verbose (show symbol address, etc)"),
|
|
|
|
OPT_BOOLEAN('L', "Latency", &latency_format,
|
|
|
|
"show latency attributes (irqs/preemption disabled, etc)"),
|
|
|
|
--- a/tools/perf/util/debug.c
|
|
|
|
+++ b/tools/perf/util/debug.c
|
|
|
|
@@ -12,7 +12,7 @@
|
|
|
|
#include "util.h"
|
|
|
|
|
|
|
|
int verbose = 0;
|
|
|
|
-int dump_trace = 0;
|
|
|
|
+bool dump_trace = false;
|
|
|
|
|
|
|
|
int eprintf(int level, const char *fmt, ...)
|
|
|
|
{
|
|
|
|
--- a/tools/perf/util/debug.h
|
|
|
|
+++ b/tools/perf/util/debug.h
|
|
|
|
@@ -2,10 +2,11 @@
|
|
|
|
#ifndef __PERF_DEBUG_H
|
|
|
|
#define __PERF_DEBUG_H
|
|
|
|
|
|
|
|
+#include <stdbool.h>
|
|
|
|
#include "event.h"
|
|
|
|
|
|
|
|
extern int verbose;
|
|
|
|
-extern int dump_trace;
|
|
|
|
+extern bool dump_trace;
|
|
|
|
|
|
|
|
int eprintf(int level,
|
|
|
|
const char *fmt, ...) __attribute__((format(printf, 2, 3)));
|
|
|
|
--- a/tools/perf/util/parse-options.c
|
|
|
|
+++ b/tools/perf/util/parse-options.c
|
|
|
|
@@ -49,6 +49,7 @@ static int get_value(struct parse_opt_ct
|
|
|
|
break;
|
|
|
|
/* FALLTHROUGH */
|
|
|
|
case OPTION_BOOLEAN:
|
|
|
|
+ case OPTION_INCR:
|
|
|
|
case OPTION_BIT:
|
|
|
|
case OPTION_SET_INT:
|
|
|
|
case OPTION_SET_PTR:
|
|
|
|
@@ -73,6 +74,10 @@ static int get_value(struct parse_opt_ct
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
case OPTION_BOOLEAN:
|
|
|
|
+ *(bool *)opt->value = unset ? false : true;
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
|
|
+ case OPTION_INCR:
|
|
|
|
*(int *)opt->value = unset ? 0 : *(int *)opt->value + 1;
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
@@ -478,6 +483,7 @@ int usage_with_options_internal(const ch
|
|
|
|
case OPTION_GROUP:
|
|
|
|
case OPTION_BIT:
|
|
|
|
case OPTION_BOOLEAN:
|
|
|
|
+ case OPTION_INCR:
|
|
|
|
case OPTION_SET_INT:
|
|
|
|
case OPTION_SET_PTR:
|
|
|
|
case OPTION_LONG:
|
|
|
|
--- a/tools/perf/util/parse-options.h
|
|
|
|
+++ b/tools/perf/util/parse-options.h
|
|
|
|
@@ -8,7 +8,8 @@ enum parse_opt_type {
|
|
|
|
OPTION_GROUP,
|
|
|
|
/* options with no arguments */
|
|
|
|
OPTION_BIT,
|
|
|
|
- OPTION_BOOLEAN, /* _INCR would have been a better name */
|
|
|
|
+ OPTION_BOOLEAN,
|
|
|
|
+ OPTION_INCR,
|
|
|
|
OPTION_SET_INT,
|
|
|
|
OPTION_SET_PTR,
|
|
|
|
/* options with arguments (usually) */
|
|
|
|
@@ -95,6 +96,7 @@ struct option {
|
|
|
|
#define OPT_GROUP(h) { .type = OPTION_GROUP, .help = (h) }
|
|
|
|
#define OPT_BIT(s, l, v, h, b) { .type = OPTION_BIT, .short_name = (s), .long_name = (l), .value = (v), .help = (h), .defval = (b) }
|
|
|
|
#define OPT_BOOLEAN(s, l, v, h) { .type = OPTION_BOOLEAN, .short_name = (s), .long_name = (l), .value = (v), .help = (h) }
|
|
|
|
+#define OPT_INCR(s, l, v, h) { .type = OPTION_INCR, .short_name = (s), .long_name = (l), .value = (v), .help = (h) }
|
|
|
|
#define OPT_SET_INT(s, l, v, h, i) { .type = OPTION_SET_INT, .short_name = (s), .long_name = (l), .value = (v), .help = (h), .defval = (i) }
|
|
|
|
#define OPT_SET_PTR(s, l, v, h, p) { .type = OPTION_SET_PTR, .short_name = (s), .long_name = (l), .value = (v), .help = (h), .defval = (p) }
|
|
|
|
#define OPT_INTEGER(s, l, v, h) { .type = OPTION_INTEGER, .short_name = (s), .long_name = (l), .value = (v), .help = (h) }
|
|
|
|
--- a/tools/perf/util/trace-event-parse.c
|
|
|
|
+++ b/tools/perf/util/trace-event-parse.c
|
|
|
|
@@ -40,7 +40,7 @@ int header_page_size_size;
|
|
|
|
int header_page_data_offset;
|
|
|
|
int header_page_data_size;
|
|
|
|
|
|
|
|
-int latency_format;
|
|
|
|
+bool latency_format;
|
|
|
|
|
|
|
|
static char *input_buf;
|
|
|
|
static unsigned long long input_buf_ptr;
|
|
|
|
--- a/tools/perf/util/trace-event.h
|
|
|
|
+++ b/tools/perf/util/trace-event.h
|
|
|
|
@@ -1,6 +1,7 @@
|
|
|
|
#ifndef __PERF_TRACE_EVENTS_H
|
|
|
|
#define __PERF_TRACE_EVENTS_H
|
|
|
|
|
|
|
|
+#include <stdbool.h>
|
|
|
|
#include "parse-events.h"
|
|
|
|
|
|
|
|
#define __unused __attribute__((unused))
|
|
|
|
@@ -241,7 +242,7 @@ extern int header_page_size_size;
|
|
|
|
extern int header_page_data_offset;
|
|
|
|
extern int header_page_data_size;
|
|
|
|
|
|
|
|
-extern int latency_format;
|
|
|
|
+extern bool latency_format;
|
|
|
|
|
|
|
|
int parse_header_page(char *buf, unsigned long size);
|
|
|
|
int trace_parse_common_type(void *data);
|
|
|
|
From 6e0032f0ae4440e75256bee11b163552cae21962 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Karsten Wiese <fzuuzf@googlemail.com>
|
|
|
|
Date: Sat, 27 Mar 2010 22:48:33 +0100
|
|
|
|
Subject: drm/i915: Don't touch PORT_HOTPLUG_EN in intel_dp_detect()
|
|
|
|
|
|
|
|
From: Karsten Wiese <fzuuzf@googlemail.com>
|
|
|
|
|
|
|
|
commit 6e0032f0ae4440e75256bee11b163552cae21962 upstream.
|
|
|
|
|
|
|
|
PORT_HOTPLUG_EN has allready been setup in i915_driver_irq_postinstall(),
|
|
|
|
when intel_dp_detect() runs.
|
|
|
|
|
|
|
|
Delete the DP[BCD]_HOTPLUG_INT_EN defines, they are not referenced anymore.
|
|
|
|
|
|
|
|
I found this while searching for a fix for
|
|
|
|
https://bugzilla.redhat.com/show_bug.cgi?id=528312
|
|
|
|
|
|
|
|
Signed-off-by: Karsten Wiese <fzu@wemgehoertderstaat.de>
|
|
|
|
Signed-off-by: Eric Anholt <eric@anholt.net>
|
|
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/i915/intel_dp.c | 10 ----------
|
|
|
|
1 file changed, 10 deletions(-)
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/i915/intel_dp.c
|
|
|
|
+++ b/drivers/gpu/drm/i915/intel_dp.c
|
|
|
|
@@ -1180,16 +1180,6 @@ intel_dp_detect(struct drm_connector *co
|
|
|
|
if (HAS_PCH_SPLIT(dev))
|
|
|
|
return ironlake_dp_detect(connector);
|
|
|
|
|
|
|
|
- temp = I915_READ(PORT_HOTPLUG_EN);
|
|
|
|
-
|
|
|
|
- I915_WRITE(PORT_HOTPLUG_EN,
|
|
|
|
- temp |
|
|
|
|
- DPB_HOTPLUG_INT_EN |
|
|
|
|
- DPC_HOTPLUG_INT_EN |
|
|
|
|
- DPD_HOTPLUG_INT_EN);
|
|
|
|
-
|
|
|
|
- POSTING_READ(PORT_HOTPLUG_EN);
|
|
|
|
-
|
|
|
|
switch (dp_priv->output_reg) {
|
|
|
|
case DP_B:
|
|
|
|
bit = DPB_HOTPLUG_INT_STATUS;
|
|
|
|
From 9908ff736adf261e749b4887486a32ffa209304c Mon Sep 17 00:00:00 2001
|
|
|
|
From: Chris Wilson <chris@chris-wilson.co.uk>
|
|
|
|
Date: Sat, 15 May 2010 09:57:03 +0100
|
|
|
|
Subject: drm/i915: Kill dangerous pending-flip debugging
|
|
|
|
|
|
|
|
From: Chris Wilson <chris@chris-wilson.co.uk>
|
|
|
|
|
|
|
|
commit 9908ff736adf261e749b4887486a32ffa209304c upstream.
|
|
|
|
|
|
|
|
We can, by virtue of a vblank interrupt firing in the middle of setting
|
|
|
|
up the unpin work (i.e. after we set the unpin_work field and before we
|
|
|
|
write to the ringbuffer) enter intel_finish_page_flip() prior to
|
|
|
|
receiving the pending flip notification. Therefore we can expect to hit
|
|
|
|
intel_finish_page_flip() under normal circumstances without a pending flip
|
|
|
|
and even without installing the pending_flip_obj. This is exacerbated by
|
|
|
|
aperture thrashing whilst binding the framebuffer
|
|
|
|
|
|
|
|
References:
|
|
|
|
|
|
|
|
Bug 28079 - "glresize" causes kernel panic in intel_finish_page_flip.
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=28079
|
|
|
|
|
|
|
|
Reported-by: Nick Bowler <nbowler@draconx.ca>
|
|
|
|
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
|
|
|
|
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
|
|
|
|
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
|
|
|
|
Signed-off-by: Eric Anholt <eric@anholt.net>
|
|
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/i915/intel_display.c | 6 ------
|
|
|
|
1 file changed, 6 deletions(-)
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/i915/intel_display.c
|
|
|
|
+++ b/drivers/gpu/drm/i915/intel_display.c
|
|
|
|
@@ -4155,12 +4155,6 @@ void intel_finish_page_flip(struct drm_d
|
|
|
|
spin_lock_irqsave(&dev->event_lock, flags);
|
|
|
|
work = intel_crtc->unpin_work;
|
|
|
|
if (work == NULL || !work->pending) {
|
|
|
|
- if (work && !work->pending) {
|
|
|
|
- obj_priv = to_intel_bo(work->pending_flip_obj);
|
|
|
|
- DRM_DEBUG_DRIVER("flip finish: %p (%d) not pending?\n",
|
|
|
|
- obj_priv,
|
|
|
|
- atomic_read(&obj_priv->pending_flip));
|
|
|
|
- }
|
|
|
|
spin_unlock_irqrestore(&dev->event_lock, flags);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
From ac0c6b5ad3b3b513e1057806d4b7627fcc0ecc27 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Chris Wilson <chris@chris-wilson.co.uk>
|
|
|
|
Date: Thu, 27 May 2010 13:18:18 +0100
|
|
|
|
Subject: drm/i915: Rebind bo if currently bound with incorrect alignment.
|
|
|
|
|
|
|
|
From: Chris Wilson <chris@chris-wilson.co.uk>
|
|
|
|
|
|
|
|
commit ac0c6b5ad3b3b513e1057806d4b7627fcc0ecc27 upstream.
|
|
|
|
|
|
|
|
Whilst pinning the buffer, check that that its current alignment
|
|
|
|
matches the requested alignment. If it does not, rebind.
|
|
|
|
|
|
|
|
This should clear up any final render errors whilst resuming,
|
|
|
|
for reference:
|
|
|
|
|
|
|
|
Bug 27070 - [i915] Page table errors with empty ringbuffer
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=27070
|
|
|
|
|
|
|
|
Bug 15502 - render error detected, EIR: 0x00000010
|
|
|
|
https://bugzilla.kernel.org/show_bug.cgi?id=15502
|
|
|
|
|
|
|
|
Bug 13844 - i915 error: "render error detected"
|
|
|
|
https://bugzilla.kernel.org/show_bug.cgi?id=13844
|
|
|
|
|
|
|
|
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
|
|
|
|
Signed-off-by: Eric Anholt <eric@anholt.net>
|
|
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/i915/i915_gem.c | 11 +++++++++++
|
|
|
|
1 file changed, 11 insertions(+)
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/i915/i915_gem.c
|
|
|
|
+++ b/drivers/gpu/drm/i915/i915_gem.c
|
|
|
|
@@ -4239,6 +4239,17 @@ i915_gem_object_pin(struct drm_gem_objec
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
i915_verify_inactive(dev, __FILE__, __LINE__);
|
|
|
|
+
|
|
|
|
+ if (obj_priv->gtt_space != NULL) {
|
|
|
|
+ if (alignment == 0)
|
|
|
|
+ alignment = i915_gem_get_gtt_alignment(obj);
|
|
|
|
+ if (obj_priv->gtt_offset & (alignment - 1)) {
|
|
|
|
+ ret = i915_gem_object_unbind(obj);
|
|
|
|
+ if (ret)
|
|
|
|
+ return ret;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
if (obj_priv->gtt_space == NULL) {
|
|
|
|
ret = i915_gem_object_bind_to_gtt(obj, alignment);
|
|
|
|
if (ret)
|
|
|
|
From cf22f20ade30f8c03955324aaf27b1049e182600 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Dave Airlie <airlied@redhat.com>
|
|
|
|
Date: Sat, 29 May 2010 06:50:37 +1000
|
|
|
|
Subject: drm/radeon: fix the r100/r200 ums block 0 page fix
|
|
|
|
|
|
|
|
From: Dave Airlie <airlied@redhat.com>
|
|
|
|
|
|
|
|
commit cf22f20ade30f8c03955324aaf27b1049e182600 upstream.
|
|
|
|
|
|
|
|
airlied -> brown paper bag.
|
|
|
|
|
|
|
|
I blame Hi-5 or the Wiggles for lowering my IQ, move the fix inside some
|
|
|
|
brackets instead of breaking everything in site.
|
|
|
|
|
|
|
|
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
|
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/radeon/radeon_state.c | 5 +++--
|
|
|
|
1 file changed, 3 insertions(+), 2 deletions(-)
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/radeon/radeon_state.c
|
|
|
|
+++ b/drivers/gpu/drm/radeon/radeon_state.c
|
|
|
|
@@ -900,9 +900,10 @@ static void radeon_cp_dispatch_clear(str
|
|
|
|
flags |= RADEON_FRONT;
|
|
|
|
}
|
|
|
|
if (flags & (RADEON_DEPTH|RADEON_STENCIL)) {
|
|
|
|
- if (!dev_priv->have_z_offset)
|
|
|
|
+ if (!dev_priv->have_z_offset) {
|
|
|
|
printk_once(KERN_ERR "radeon: illegal depth clear request. Buggy mesa detected - please update.\n");
|
|
|
|
- flags &= ~(RADEON_DEPTH | RADEON_STENCIL);
|
|
|
|
+ flags &= ~(RADEON_DEPTH | RADEON_STENCIL);
|
|
|
|
+ }
|
|
|
|
}
|
|
|
|
|
|
|
|
if (flags & (RADEON_FRONT | RADEON_BACK)) {
|
|
|
|
From 10b06122afcc78468bd1d009633cb71e528acdc5 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Jerome Glisse <jglisse@redhat.com>
|
|
|
|
Date: Fri, 21 May 2010 18:48:54 +0200
|
|
|
|
Subject: drm/radeon/kms: release AGP bridge at suspend
|
|
|
|
|
|
|
|
From: Jerome Glisse <jglisse@redhat.com>
|
|
|
|
|
|
|
|
commit 10b06122afcc78468bd1d009633cb71e528acdc5 upstream.
|
|
|
|
|
|
|
|
I think it's good to release the AGP bridge at suspend
|
|
|
|
and reacquire it at resume. Also fix :
|
|
|
|
https://bugzilla.kernel.org/show_bug.cgi?id=15969
|
|
|
|
|
|
|
|
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
|
|
|
|
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
|
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/radeon/radeon.h | 1 +
|
|
|
|
drivers/gpu/drm/radeon/radeon_agp.c | 5 +++++
|
|
|
|
drivers/gpu/drm/radeon/radeon_device.c | 2 ++
|
|
|
|
3 files changed, 8 insertions(+)
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/radeon/radeon.h
|
|
|
|
+++ b/drivers/gpu/drm/radeon/radeon.h
|
|
|
|
@@ -566,6 +566,7 @@ typedef int (*radeon_packet3_check_t)(st
|
|
|
|
*/
|
|
|
|
int radeon_agp_init(struct radeon_device *rdev);
|
|
|
|
void radeon_agp_resume(struct radeon_device *rdev);
|
|
|
|
+void radeon_agp_suspend(struct radeon_device *rdev);
|
|
|
|
void radeon_agp_fini(struct radeon_device *rdev);
|
|
|
|
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/radeon/radeon_agp.c
|
|
|
|
+++ b/drivers/gpu/drm/radeon/radeon_agp.c
|
|
|
|
@@ -270,3 +270,8 @@ void radeon_agp_fini(struct radeon_devic
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
+
|
|
|
|
+void radeon_agp_suspend(struct radeon_device *rdev)
|
|
|
|
+{
|
|
|
|
+ radeon_agp_fini(rdev);
|
|
|
|
+}
|
|
|
|
--- a/drivers/gpu/drm/radeon/radeon_device.c
|
|
|
|
+++ b/drivers/gpu/drm/radeon/radeon_device.c
|
|
|
|
@@ -748,6 +748,8 @@ int radeon_suspend_kms(struct drm_device
|
|
|
|
/* evict remaining vram memory */
|
|
|
|
radeon_bo_evict_vram(rdev);
|
|
|
|
|
|
|
|
+ radeon_agp_suspend(rdev);
|
|
|
|
+
|
|
|
|
pci_save_state(dev->pdev);
|
|
|
|
if (state.event == PM_EVENT_SUSPEND) {
|
|
|
|
/* Shut down the device */
|
|
|
|
From 1ff26a3604d0292988d4cade0e49ba9918dbfd46 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Alex Deucher <alexdeucher@gmail.com>
|
|
|
|
Date: Tue, 18 May 2010 00:23:15 -0400
|
|
|
|
Subject: drm/radeon/kms/atom: fix typo in LVDS panel info parsing
|
|
|
|
|
|
|
|
From: Alex Deucher <alexdeucher@gmail.com>
|
|
|
|
|
|
|
|
commit 1ff26a3604d0292988d4cade0e49ba9918dbfd46 upstream.
|
|
|
|
|
|
|
|
Fixes LVDS issues on some laptops; notably laptops with
|
|
|
|
2048x1536 panels.
|
|
|
|
|
|
|
|
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
|
|
|
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
|
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/radeon/radeon_atombios.c | 2 +-
|
|
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/radeon/radeon_atombios.c
|
|
|
|
+++ b/drivers/gpu/drm/radeon/radeon_atombios.c
|
|
|
|
@@ -1173,7 +1173,7 @@ struct radeon_encoder_atom_dig *radeon_a
|
|
|
|
lvds->native_mode.vtotal = lvds->native_mode.vdisplay +
|
|
|
|
le16_to_cpu(lvds_info->info.sLCDTiming.usVBlanking_Time);
|
|
|
|
lvds->native_mode.vsync_start = lvds->native_mode.vdisplay +
|
|
|
|
- le16_to_cpu(lvds_info->info.sLCDTiming.usVSyncWidth);
|
|
|
|
+ le16_to_cpu(lvds_info->info.sLCDTiming.usVSyncOffset);
|
|
|
|
lvds->native_mode.vsync_end = lvds->native_mode.vsync_start +
|
|
|
|
le16_to_cpu(lvds_info->info.sLCDTiming.usVSyncWidth);
|
|
|
|
lvds->panel_pwr_delay =
|
|
|
|
From 2bfcc0fc698d550689ef020c73b2d977b73e728c Mon Sep 17 00:00:00 2001
|
|
|
|
From: Alex Deucher <alexdeucher@gmail.com>
|
|
|
|
Date: Tue, 18 May 2010 19:26:46 -0400
|
|
|
|
Subject: drm/radeon/kms: reset ddc_bus in object header parsing
|
|
|
|
|
|
|
|
From: Alex Deucher <alexdeucher@gmail.com>
|
|
|
|
|
|
|
|
commit 2bfcc0fc698d550689ef020c73b2d977b73e728c upstream.
|
|
|
|
|
|
|
|
Some LVDS connectors don't have a ddc bus, so reset the
|
|
|
|
ddc bus to invalid before parsing the next connector
|
|
|
|
to avoid using stale ddc bus data. Should fix
|
|
|
|
fdo bug 28164.
|
|
|
|
|
|
|
|
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
|
|
|
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
|
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/radeon/radeon_atombios.c | 5 ++---
|
|
|
|
1 file changed, 2 insertions(+), 3 deletions(-)
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/radeon/radeon_atombios.c
|
|
|
|
+++ b/drivers/gpu/drm/radeon/radeon_atombios.c
|
|
|
|
@@ -530,6 +530,8 @@ bool radeon_get_atom_connector_info_from
|
|
|
|
}
|
|
|
|
|
|
|
|
/* look up gpio for ddc, hpd */
|
|
|
|
+ ddc_bus.valid = false;
|
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
|
if ((le16_to_cpu(path->usDeviceTag) &
|
|
|
|
(ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT)) == 0) {
|
|
|
|
for (j = 0; j < con_obj->ucNumberOfObjects; j++) {
|
|
|
|
@@ -585,9 +587,6 @@ bool radeon_get_atom_connector_info_from
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
- } else {
|
|
|
|
- hpd.hpd = RADEON_HPD_NONE;
|
|
|
|
- ddc_bus.valid = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* needed for aux chan transactions */
|
|
|
|
From 61dd98fad58f945ed720ba132681acb58fcee015 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Adam Jackson <ajax@redhat.com>
|
|
|
|
Date: Thu, 13 May 2010 14:55:28 -0400
|
|
|
|
Subject: drm/edid: Fix 1024x768@85Hz
|
|
|
|
|
|
|
|
From: Adam Jackson <ajax@redhat.com>
|
|
|
|
|
|
|
|
commit 61dd98fad58f945ed720ba132681acb58fcee015 upstream.
|
|
|
|
|
|
|
|
Having hsync both start and end on pixel 1072 ain't gonna work very
|
|
|
|
well. Matches the X server's list.
|
|
|
|
|
|
|
|
Signed-off-by: Adam Jackson <ajax@redhat.com>
|
|
|
|
Tested-By: Michael Tokarev <mjt@tls.msk.ru>
|
|
|
|
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
|
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/drm_edid.c | 2 +-
|
|
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/drm_edid.c
|
|
|
|
+++ b/drivers/gpu/drm/drm_edid.c
|
|
|
|
@@ -335,7 +335,7 @@ static struct drm_display_mode drm_dmt_m
|
|
|
|
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
|
|
|
|
/* 1024x768@85Hz */
|
|
|
|
{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 94500, 1024, 1072,
|
|
|
|
- 1072, 1376, 0, 768, 769, 772, 808, 0,
|
|
|
|
+ 1168, 1376, 0, 768, 769, 772, 808, 0,
|
|
|
|
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
|
|
|
|
/* 1152x864@75Hz */
|
|
|
|
{ DRM_MODE("1152x864", DRM_MODE_TYPE_DRIVER, 108000, 1152, 1216,
|
|
|
|
From 45737447ed160faaba036c0709226bf9057f7b72 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Alex Deucher <alexdeucher@gmail.com>
|
|
|
|
Date: Thu, 20 May 2010 11:26:11 -0400
|
|
|
|
Subject: drm/radeon/kms: don't default display priority to high on rs4xx
|
|
|
|
|
|
|
|
From: Alex Deucher <alexdeucher@gmail.com>
|
|
|
|
|
|
|
|
commit 45737447ed160faaba036c0709226bf9057f7b72 upstream.
|
|
|
|
|
|
|
|
Seems to cause issues with the sound hardware. Fixes kernel
|
|
|
|
bug 15982:
|
|
|
|
https://bugzilla.kernel.org/show_bug.cgi?id=15982
|
|
|
|
|
|
|
|
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
|
|
|
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
|
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/radeon/radeon_display.c | 5 ++++-
|
|
|
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/radeon/radeon_display.c
|
|
|
|
+++ b/drivers/gpu/drm/radeon/radeon_display.c
|
|
|
|
@@ -978,8 +978,11 @@ void radeon_update_display_priority(stru
|
|
|
|
/* set display priority to high for r3xx, rv515 chips
|
|
|
|
* this avoids flickering due to underflow to the
|
|
|
|
* display controllers during heavy acceleration.
|
|
|
|
+ * Don't force high on rs4xx igp chips as it seems to
|
|
|
|
+ * affect the sound card. See kernel bug 15982.
|
|
|
|
*/
|
|
|
|
- if (ASIC_IS_R300(rdev) || (rdev->family == CHIP_RV515))
|
|
|
|
+ if ((ASIC_IS_R300(rdev) || (rdev->family == CHIP_RV515)) &&
|
|
|
|
+ !(rdev->flags & RADEON_IS_IGP))
|
|
|
|
rdev->disp_priority = 2;
|
|
|
|
else
|
|
|
|
rdev->disp_priority = 0;
|
|
|
|
From 654fc6073f68efa3b6c466825749e73e7fbb92cd Mon Sep 17 00:00:00 2001
|
|
|
|
From: Chris Wilson <chris@chris-wilson.co.uk>
|
|
|
|
Date: Thu, 27 May 2010 13:18:21 +0100
|
|
|
|
Subject: drm/i915: Reject bind_to_gtt() early if object > aperture
|
|
|
|
|
|
|
|
From: Chris Wilson <chris@chris-wilson.co.uk>
|
|
|
|
|
|
|
|
commit 654fc6073f68efa3b6c466825749e73e7fbb92cd upstream.
|
|
|
|
|
|
|
|
If the object is bigger than the entire aperture, reject it early
|
|
|
|
before evicting everything in a vain attempt to find space.
|
|
|
|
|
|
|
|
v2: Use E2BIG as suggested by Owain G. Ainsworth.
|
|
|
|
|
|
|
|
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
|
|
|
|
Signed-off-by: Eric Anholt <eric@anholt.net>
|
|
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/i915/i915_gem.c | 8 ++++++++
|
|
|
|
1 file changed, 8 insertions(+)
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/i915/i915_gem.c
|
|
|
|
+++ b/drivers/gpu/drm/i915/i915_gem.c
|
|
|
|
@@ -2688,6 +2688,14 @@ i915_gem_object_bind_to_gtt(struct drm_g
|
|
|
|
return -EINVAL;
|
|
|
|
}
|
|
|
|
|
|
|
|
+ /* If the object is bigger than the entire aperture, reject it early
|
|
|
|
+ * before evicting everything in a vain attempt to find space.
|
|
|
|
+ */
|
|
|
|
+ if (obj->size > dev->gtt_total) {
|
|
|
|
+ DRM_ERROR("Attempting to bind an object larger than the aperture\n");
|
|
|
|
+ return -E2BIG;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
search_free:
|
|
|
|
free_space = drm_mm_search_free(&dev_priv->mm.gtt_space,
|
|
|
|
obj->size, alignment, 0);
|