rpms/kernel/devel build-with-fno-dwarf2-cfi-asm.patch, NONE, 1.1.2.2 drm-edid-revision-0-should-be-valid.patch, NONE, 1.1.2.2 linux-2.6-v4l-dvb-update.patch, NONE, 1.1.2.2 patch-2.6.29-rc6-git2.bz2.sign, NONE, 1.1.2.2 .cvsignore, 1.1014.2.3, 1.1014.2.4 config-generic, 1.238.6.4, 1.238.6.5 config-powerpc-generic, 1.33.6.1, 1.33.6.2 config-x86-generic, 1.68.6.1, 1.68.6.2 config-x86_64-generic, 1.68.2.2, 1.68.2.3 drm-intel-next.patch, 1.4.6.1, 1.4.6.2 drm-modesetting-radeon.patch, 1.54.6.1, 1.54.6.2 kernel.spec, 1.1294.2.6, 1.1294.2.7 linux-2.6-debug-dma-api.patch, 1.2, 1.2.6.1 sources, 1.976.2.4, 1.976.2.5 upstream, 1.888.2.3, 1.888.2.4 xen.pvops.patch, 1.1.2.5, 1.1.2.6 xen.pvops.post.patch, 1.1.2.2, 1.1.2.3 xen.pvops.pre.patch, 1.1.2.2, 1.1.2.3 linux-2.6-ext4-ENOSPC-debug.patch, 1.1.2.3, NONE

Michael Young myoung at fedoraproject.org
Wed Feb 25 21:26:37 UTC 2009


Author: myoung

Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv5149

Modified Files:
      Tag: private-myoung-dom0-branch
	.cvsignore config-generic config-powerpc-generic 
	config-x86-generic config-x86_64-generic drm-intel-next.patch 
	drm-modesetting-radeon.patch kernel.spec 
	linux-2.6-debug-dma-api.patch sources upstream xen.pvops.patch 
	xen.pvops.post.patch xen.pvops.pre.patch 
Added Files:
      Tag: private-myoung-dom0-branch
	build-with-fno-dwarf2-cfi-asm.patch 
	drm-edid-revision-0-should-be-valid.patch 
	linux-2.6-v4l-dvb-update.patch patch-2.6.29-rc6-git2.bz2.sign 
Removed Files:
      Tag: private-myoung-dom0-branch
	linux-2.6-ext4-ENOSPC-debug.patch 
Log Message:
Another pvops patch which fixes an smp mtrr bug


build-with-fno-dwarf2-cfi-asm.patch:

--- NEW FILE build-with-fno-dwarf2-cfi-asm.patch ---
From: Kyle McMartin <kyle at redhat.com>

On ppc64 (at least) gcc-4.4 is defaulting to generating .eh_frame
sections, which are, for the kernel, fairly pointless. Additionally, on
ppc64 this generates a relocation format which the kernel module loader
does not currently support (R_PPC64_REL32.)

Alexandre Oliva verifies that -fno-dwarf2-cfi-asm prevents this
.eh_frame section from being generated.

These seem to be used for unwinding, but it doesn't look like we
currently use them anywhere. (In fact, we explicitly dump them in the
x86_64 linker script.)

If these .eh_frame sections are eventually used, adding a per-arch
CONFIG_WANT_UNWIND check would be trivial.

(This was reported against Fedora, which appears to be the only distro
doing any building against gcc-4.4 at present: RH bz#486545.)

Signed-off-by: Kyle McMartin <kyle at redhat.com>
Cc: roland at redhat.com
Cc: aoliva at redhat.com

---
diff --git a/Makefile b/Makefile
index df6ce3e..d66a512 100644
--- a/Makefile
+++ b/Makefile
@@ -566,6 +566,11 @@ KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
 # disable pointer signed / unsigned warnings in gcc 4.0
 KBUILD_CFLAGS += $(call cc-option,-Wno-pointer-sign,)
 
+# gcc-4.4 defaults to generating .eh_frame sections, but we aren't
+# interested in those currently. additionally, it causes issues on some
+# architectures.
+KBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm)
+
 # Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
 # But warn user when we do so
 warn-assign = \

drm-edid-revision-0-should-be-valid.patch:

--- NEW FILE drm-edid-revision-0-should-be-valid.patch ---
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 5a4d324..ec14dd8 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -125,7 +125,7 @@ static bool edid_is_valid(struct edid *edid)
 		DRM_ERROR("EDID has major version %d, instead of 1\n", edid->version);
 		goto bad;
 	}
-	if (edid->revision <= 0 || edid->revision > 3) {
+	if (edid->revision > 3) {
 		DRM_ERROR("EDID has minor version %d, which is not between 0-3\n", edid->revision);
 		goto bad;
 	}

linux-2.6-v4l-dvb-update.patch:

--- NEW FILE linux-2.6-v4l-dvb-update.patch ---
diff --git a/Documentation/video4linux/CARDLIST.bttv b/Documentation/video4linux/CARDLIST.bttv
index 0d93fa1..4dfe626 100644
--- a/Documentation/video4linux/CARDLIST.bttv
+++ b/Documentation/video4linux/CARDLIST.bttv
@@ -154,3 +154,4 @@
 153 -> PHYTEC VD-012 (bt878)
 154 -> PHYTEC VD-012-X1 (bt878)
 155 -> PHYTEC VD-012-X2 (bt878)
+156 -> IVCE-8784                                           [0000:f050,0001:f050,0002:f050,0003:f050]
diff --git a/Documentation/video4linux/CARDLIST.cx23885 b/Documentation/video4linux/CARDLIST.cx23885
index 35ea130..5937ff9 100644
--- a/Documentation/video4linux/CARDLIST.cx23885
+++ b/Documentation/video4linux/CARDLIST.cx23885
@@ -12,3 +12,6 @@
  11 -> DViCO FusionHDTV DVB-T Dual Express                 [18ac:db78]
  12 -> Leadtek Winfast PxDVR3200 H                         [107d:6681]
  13 -> Compro VideoMate E650F                              [185b:e800]
+ 14 -> TurboSight TBS 6920                                 [6920:8888]
+ 15 -> TeVii S470                                          [d470:9022]
+ 16 -> DVBWorld DVB-S2 2005                                [0001:2005]
diff --git a/Documentation/video4linux/CARDLIST.em28xx b/Documentation/video4linux/CARDLIST.em28xx
index 75bded8..77874bd 100644
--- a/Documentation/video4linux/CARDLIST.em28xx
+++ b/Documentation/video4linux/CARDLIST.em28xx
@@ -7,7 +7,7 @@
   6 -> Terratec Cinergy 200 USB                 (em2800)
   7 -> Leadtek Winfast USB II                   (em2800)        [0413:6023]
   8 -> Kworld USB2800                           (em2800)
-  9 -> Pinnacle Dazzle DVC 90/DVC 100           (em2820/em2840) [2304:0207,2304:021a]
+  9 -> Pinnacle Dazzle DVC 90/DVC 100/DVC 101/DVC 107 (em2820/em2840) [2304:0207,2304:021a]
  10 -> Hauppauge WinTV HVR 900                  (em2880)        [2040:6500]
  11 -> Terratec Hybrid XS                       (em2880)        [0ccd:0042]
  12 -> Kworld PVR TV 2800 RF                    (em2820/em2840)
@@ -58,3 +58,7 @@
  58 -> Compro VideoMate ForYou/Stereo           (em2820/em2840) [185b:2041]
  60 -> Hauppauge WinTV HVR 850                  (em2883)        [2040:651f]
  61 -> Pixelview PlayTV Box 4 USB 2.0           (em2820/em2840)
+ 62 -> Gadmei TVR200                            (em2820/em2840)
+ 63 -> Kaiomy TVnPC U2                          (em2860)        [eb1a:e303]
+ 64 -> Easy Cap Capture DC-60                   (em2860)
+ 65 -> IO-DATA GV-MVP/SZ                        (em2820/em2840) [04bb:0515]
diff --git a/Documentation/video4linux/cx2341x/README.hm12 b/Documentation/video4linux/cx2341x/README.hm12
index 0e213ed..b36148e 100644
--- a/Documentation/video4linux/cx2341x/README.hm12
+++ b/Documentation/video4linux/cx2341x/README.hm12
@@ -32,6 +32,10 @@ Y, U and V planes. This code assumes frames of 720x576 (PAL) pixels.
 The width of a frame is always 720 pixels, regardless of the actual specified
 width.
 
+If the height is not a multiple of 32 lines, then the captured video is
+missing macroblocks at the end and is unusable. So the height must be a
+multiple of 32.
+
 --------------------------------------------------------------------------
 
 #include <stdio.h>
diff --git a/Documentation/video4linux/gspca.txt b/Documentation/video4linux/gspca.txt
index 1c58a76..12c8ff7 100644
--- a/Documentation/video4linux/gspca.txt
+++ b/Documentation/video4linux/gspca.txt
@@ -32,6 +32,7 @@ spca561		041e:403b	Creative Webcam Vista (VF0010)
 zc3xx		041e:4051	Creative Live!Cam Notebook Pro (VF0250)
 ov519		041e:4052	Creative Live! VISTA IM
 zc3xx		041e:4053	Creative Live!Cam Video IM
+vc032x		041e:405b	Creative Live! Cam Notebook Ultra (VC0130)
 ov519		041e:405f	Creative Live! VISTA VF0330
 ov519		041e:4060	Creative Live! VISTA VF0350
 ov519		041e:4061	Creative Live! VISTA VF0400
@@ -193,6 +194,7 @@ spca500		084d:0003	D-Link DSC-350
 spca500		08ca:0103	Aiptek PocketDV
 sunplus		08ca:0104	Aiptek PocketDVII 1.3
 sunplus		08ca:0106	Aiptek Pocket DV3100+
+mr97310a	08ca:0111	Aiptek PenCam VGA+
 sunplus		08ca:2008	Aiptek Mini PenCam 2 M
 sunplus		08ca:2010	Aiptek PocketCam 3M
 sunplus		08ca:2016	Aiptek PocketCam 2 Mega
@@ -215,6 +217,7 @@ pac207		093a:2468	PAC207
 pac207		093a:2470	Genius GF112
 pac207		093a:2471	Genius VideoCam ge111
 pac207		093a:2472	Genius VideoCam ge110
+pac207		093a:2474	Genius iLook 111
 pac207		093a:2476	Genius e-Messenger 112
 pac7311		093a:2600	PAC7311 Typhoon
 pac7311		093a:2601	Philips SPC 610 NC
diff --git a/Documentation/video4linux/si470x.txt b/Documentation/video4linux/si470x.txt
index 49679e6..3a7823e 100644
--- a/Documentation/video4linux/si470x.txt
+++ b/Documentation/video4linux/si470x.txt
@@ -1,6 +1,6 @@
 Driver for USB radios for the Silicon Labs Si470x FM Radio Receivers
 
-Copyright (c) 2008 Tobias Lorenz <tobias.lorenz at gmx.net>
+Copyright (c) 2009 Tobias Lorenz <tobias.lorenz at gmx.net>
 
 
 Information from Silicon Labs
@@ -41,7 +41,7 @@ chips are known to work:
 - 10c4:818a: Silicon Labs USB FM Radio Reference Design
 - 06e1:a155: ADS/Tech FM Radio Receiver (formerly Instant FM Music) (RDX-155-EF)
 - 1b80:d700: KWorld USB FM Radio SnapMusic Mobile 700 (FM700)
-- 10c5:819a: DealExtreme USB Radio
+- 10c5:819a: Sanei Electric, Inc. FM USB Radio (sold as DealExtreme.com PCear)
 
 
 Software
@@ -52,6 +52,7 @@ Testing is usually done with most application under Debian/testing:
 - gradio - GTK FM radio tuner
 - kradio - Comfortable Radio Application for KDE
 - radio - ncurses-based radio application
+- mplayer - The Ultimate Movie Player For Linux
 
 There is also a library libv4l, which can be used. It's going to have a function
 for frequency seeking, either by using hardware functionality as in radio-si470x
@@ -69,7 +70,7 @@ Audio Listing
 USB Audio is provided by the ALSA snd_usb_audio module. It is recommended to
 also select SND_USB_AUDIO, as this is required to get sound from the radio. For
 listing you have to redirect the sound, for example using one of the following
-commands.
+commands. Please adjust the audio devices to your needs (/dev/dsp* and hw:x,x).
 
 If you just want to test audio (very poor quality):
 cat /dev/dsp1 > /dev/dsp
@@ -80,6 +81,10 @@ sox -2 --endian little -r 96000 -t oss /dev/dsp1 -t oss /dev/dsp
 If you use arts try:
 arecord -D hw:1,0 -r96000 -c2 -f S16_LE | artsdsp aplay -B -
 
+If you use mplayer try:
+mplayer -radio adevice=hw=1.0:arate=96000 \
+	-rawaudio rate=96000 \
+	radio://<frequency>/capture
 
 Module Parameters
 =================
diff --git a/Documentation/video4linux/v4l2-framework.txt b/Documentation/video4linux/v4l2-framework.txt
index ff12437..48cdf86 100644
--- a/Documentation/video4linux/v4l2-framework.txt
+++ b/Documentation/video4linux/v4l2-framework.txt
@@ -47,7 +47,9 @@ All drivers have the following structure:
 3) Creating V4L2 device nodes (/dev/videoX, /dev/vbiX, /dev/radioX and
    /dev/vtxX) and keeping track of device-node specific data.
 
-4) Filehandle-specific structs containing per-filehandle data.
+4) Filehandle-specific structs containing per-filehandle data;
+
+5) video buffer handling.
 
 This is a rough schematic of how it all relates:
 
@@ -134,7 +136,7 @@ The recommended approach is as follows:
 
 static atomic_t drv_instance = ATOMIC_INIT(0);
 
-static int __devinit drv_probe(struct pci_dev *dev,
+static int __devinit drv_probe(struct pci_dev *pdev,
 				const struct pci_device_id *pci_id)
 {
 	...
@@ -218,7 +220,7 @@ to add new ops and categories.
 
 A sub-device driver initializes the v4l2_subdev struct using:
 
-	v4l2_subdev_init(subdev, &ops);
+	v4l2_subdev_init(sd, &ops);
 
 Afterwards you need to initialize subdev->name with a unique name and set the
 module owner. This is done for you if you use the i2c helper functions.
@@ -226,7 +228,7 @@ module owner. This is done for you if you use the i2c helper functions.
 A device (bridge) driver needs to register the v4l2_subdev with the
 v4l2_device:
 
-	int err = v4l2_device_register_subdev(device, subdev);
+	int err = v4l2_device_register_subdev(v4l2_dev, sd);
 
 This can fail if the subdev module disappeared before it could be registered.
 After this function was called successfully the subdev->dev field points to
@@ -234,17 +236,17 @@ the v4l2_device.
 
 You can unregister a sub-device using:
 
-	v4l2_device_unregister_subdev(subdev);
+	v4l2_device_unregister_subdev(sd);
 
-Afterwards the subdev module can be unloaded and subdev->dev == NULL.
+Afterwards the subdev module can be unloaded and sd->dev == NULL.
 
 You can call an ops function either directly:
 
-	err = subdev->ops->core->g_chip_ident(subdev, &chip);
+	err = sd->ops->core->g_chip_ident(sd, &chip);
 
 but it is better and easier to use this macro:
 
-	err = v4l2_subdev_call(subdev, core, g_chip_ident, &chip);
+	err = v4l2_subdev_call(sd, core, g_chip_ident, &chip);
 
 The macro will to the right NULL pointer checks and returns -ENODEV if subdev
 is NULL, -ENOIOCTLCMD if either subdev->core or subdev->core->g_chip_ident is
@@ -252,12 +254,12 @@ NULL, or the actual result of the subdev->ops->core->g_chip_ident ops.
 
[...30588 lines suppressed...]
 extern IR_KEYTAB_TYPE ir_codes_pixelview_new[IR_KEYTAB_SIZE];
@@ -159,6 +160,7 @@ extern IR_KEYTAB_TYPE ir_codes_real_audio_220_32_keys[IR_KEYTAB_SIZE];
 extern IR_KEYTAB_TYPE ir_codes_msi_tvanywhere_plus[IR_KEYTAB_SIZE];
 extern IR_KEYTAB_TYPE ir_codes_ati_tv_wonder_hd_600[IR_KEYTAB_SIZE];
 extern IR_KEYTAB_TYPE ir_codes_kworld_plus_tv_analog[IR_KEYTAB_SIZE];
+extern IR_KEYTAB_TYPE ir_codes_kaiomy[IR_KEYTAB_SIZE];
 #endif
 
 /*
diff --git a/include/media/saa7146.h b/include/media/saa7146.h
index c5a6e22..fff4235 100644
--- a/include/media/saa7146.h
+++ b/include/media/saa7146.h
@@ -13,6 +13,7 @@
 #include <linux/stringify.h>
 #include <linux/mutex.h>
 #include <linux/scatterlist.h>
+#include <media/v4l2-device.h>
 
 #include <linux/vmalloc.h>	/* for vmalloc() */
 #include <linux/mm.h>		/* for vmalloc_to_page() */
@@ -110,6 +111,8 @@ struct saa7146_dev
 
 	struct list_head		item;
 
+	struct v4l2_device 		v4l2_dev;
+
 	/* different device locks */
 	spinlock_t			slock;
 	struct mutex			lock;
@@ -145,6 +148,11 @@ struct saa7146_dev
 	struct saa7146_dma		d_rps1;
 };
 
+static inline struct saa7146_dev *to_saa7146_dev(struct v4l2_device *v4l2_dev)
+{
+	return container_of(v4l2_dev, struct saa7146_dev, v4l2_dev);
+}
+
 /* from saa7146_i2c.c */
 int saa7146_i2c_adapter_prepare(struct saa7146_dev *dev, struct i2c_adapter *i2c_adapter, u32 bitrate);
 
diff --git a/include/media/saa7146_vv.h b/include/media/saa7146_vv.h
index c8d0b23..eed5fcc 100644
--- a/include/media/saa7146_vv.h
+++ b/include/media/saa7146_vv.h
@@ -150,16 +150,6 @@ struct saa7146_vv
 	unsigned int resources;	/* resource management for device */
 };
 
-#define SAA7146_EXCLUSIVE	0x1
-#define SAA7146_BEFORE		0x2
-#define SAA7146_AFTER		0x4
-
-struct saa7146_extension_ioctls
-{
-	unsigned int	cmd;
-	int		flags;
-};
-
 /* flags */
 #define SAA7146_USE_PORT_B_FOR_VBI	0x2     /* use input port b for vbi hardware bug workaround */
 
@@ -176,8 +166,10 @@ struct saa7146_ext_vv
 	int num_stds;
 	int (*std_callback)(struct saa7146_dev*, struct saa7146_standard *);
 
-	struct saa7146_extension_ioctls *ioctls;
-	long (*ioctl)(struct saa7146_fh *, unsigned int cmd, void *arg);
+	/* the extension can override this */
+	struct v4l2_ioctl_ops ops;
+	/* pointer to the saa7146 core ops */
+	const struct v4l2_ioctl_ops *core_ops;
 
 	struct v4l2_file_operations vbi_fops;
 };
@@ -213,6 +205,7 @@ void saa7146_set_hps_source_and_sync(struct saa7146_dev *saa, int source, int sy
 void saa7146_set_gpio(struct saa7146_dev *saa, u8 pin, u8 data);
 
 /* from saa7146_video.c */
+extern const struct v4l2_ioctl_ops saa7146_video_ioctl_ops;
 extern struct saa7146_use_ops saa7146_video_uops;
 int saa7146_start_preview(struct saa7146_fh *fh);
 int saa7146_stop_preview(struct saa7146_fh *fh);
diff --git a/include/media/v4l2-chip-ident.h b/include/media/v4l2-chip-ident.h
index 9aaf652..bbe2bb6 100644
--- a/include/media/v4l2-chip-ident.h
+++ b/include/media/v4l2-chip-ident.h
@@ -63,6 +63,9 @@ enum {
 	V4L2_IDENT_OV7720 = 251,
 	V4L2_IDENT_OV7725 = 252,
 
+	/* module saa7146: reserved range 300-309 */
+	V4L2_IDENT_SAA7146 = 300,
+
 	/* Conexant MPEG encoder/decoders: reserved range 410-420 */
 	V4L2_IDENT_CX23415 = 415,
 	V4L2_IDENT_CX23416 = 416,
@@ -74,9 +77,24 @@ enum {
 	/* module tvp5150 */
 	V4L2_IDENT_TVP5150 = 5150,
 
+	/* module saa5246a: just ident 5246 */
+	V4L2_IDENT_SAA5246A = 5246,
+
+	/* module saa5249: just ident 5249 */
+	V4L2_IDENT_SAA5249 = 5249,
+
 	/* module cs5345: just ident 5345 */
 	V4L2_IDENT_CS5345 = 5345,
 
+	/* module tea6415c: just ident 6415 */
+	V4L2_IDENT_TEA6415C = 6415,
+
+	/* module tea6420: just ident 6420 */
+	V4L2_IDENT_TEA6420 = 6420,
+
+	/* module saa6588: just ident 6588 */
+	V4L2_IDENT_SAA6588 = 6588,
+
 	/* module saa6752hs: reserved range 6750-6759 */
 	V4L2_IDENT_SAA6752HS = 6752,
 	V4L2_IDENT_SAA6752HS_AC3 = 6753,
@@ -87,6 +105,9 @@ enum {
 	/* module wm8775: just ident 8775 */
 	V4L2_IDENT_WM8775 = 8775,
 
+	/* module tda9840: just ident 9840 */
+	V4L2_IDENT_TDA9840 = 9840,
+
 	/* module tw9910: just ident 9910 */
 	V4L2_IDENT_TW9910 = 9910,
 
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h
index 95e74f1..de785da 100644
--- a/include/media/v4l2-common.h
+++ b/include/media/v4l2-common.h
@@ -107,6 +107,11 @@ int v4l2_ctrl_query_menu(struct v4l2_querymenu *qmenu,
 		struct v4l2_queryctrl *qctrl, const char **menu_items);
 #define V4L2_CTRL_MENU_IDS_END (0xffffffff)
 int v4l2_ctrl_query_menu_valid_items(struct v4l2_querymenu *qmenu, const u32 *ids);
+
+/* Note: ctrl_classes points to an array of u32 pointers. Each u32 array is a
+   0-terminated array of control IDs. Each array must be sorted low to high
+   and belong to the same control class. The array of u32 pointers must also
+   be sorted, from low class IDs to high class IDs. */
 u32 v4l2_ctrl_next(const u32 * const *ctrl_classes, u32 id);
 
 /* ------------------------------------------------------------------------- */
@@ -150,6 +155,19 @@ struct v4l2_subdev *v4l2_i2c_new_probed_subdev(struct i2c_adapter *adapter,
 void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct i2c_client *client,
 		const struct v4l2_subdev_ops *ops);
 
+enum v4l2_i2c_tuner_type {
+	ADDRS_RADIO,	/* Radio tuner addresses */
+	ADDRS_DEMOD,	/* Demod tuner addresses */
+	ADDRS_TV,	/* TV tuner addresses */
+	/* TV tuner addresses if demod is present, this excludes
+	   addresses used by the demodulator from the list of
+	   candidates. */
+	ADDRS_TV_WITH_DEMOD,
+};
+/* Return a list of I2C tuner addresses to probe. Use only if the tuner
+   addresses are unknown. */
+const unsigned short *v4l2_i2c_tuner_addrs(enum v4l2_i2c_tuner_type type);
+
 /* ------------------------------------------------------------------------- */
 
 /* Internal ioctls */
@@ -284,4 +302,7 @@ struct v4l2_crystal_freq {
    a v4l2_gpio struct if a direction is also needed. */
 #define VIDIOC_INT_S_GPIO		_IOW('d', 117, u32)
 
+/* Get input status. Same as the status field in the v4l2_input struct. */
+#define VIDIOC_INT_G_INPUT_STATUS	_IOR('d', 118, u32)
+
 #endif /* V4L2_COMMON_H_ */
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index 37b09e5..cd640c6 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -78,6 +78,9 @@ struct v4l2_subdev_core_ops {
 	int (*queryctrl)(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc);
 	int (*g_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl);
 	int (*s_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl);
+	int (*g_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
+	int (*s_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
+	int (*try_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
 	int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm);
 	long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg);
 #ifdef CONFIG_VIDEO_ADV_DEBUG
@@ -112,6 +115,8 @@ struct v4l2_subdev_video_ops {
 	int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data);
 	int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap);
 	int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std);
+	int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std);
+	int (*g_input_status)(struct v4l2_subdev *sd, u32 *status);
 	int (*s_stream)(struct v4l2_subdev *sd, int enable);
 	int (*s_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt);
 	int (*g_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt);


--- NEW FILE patch-2.6.29-rc6-git2.bz2.sign ---
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: See http://www.kernel.org/signature.html for info

iD4DBQBJpMYOyGugalF9Dw4RAoGIAJ9kCXfjZqUkcaeuZ3wHou7lZiOTUwCYj2JC
MFrpe1USXG5MmXzxZE9Y/A==
=duXA
-----END PGP SIGNATURE-----


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/.cvsignore,v
retrieving revision 1.1014.2.3
retrieving revision 1.1014.2.4
diff -u -r1.1014.2.3 -r1.1014.2.4
--- .cvsignore	23 Feb 2009 20:07:04 -0000	1.1014.2.3
+++ .cvsignore	25 Feb 2009 21:25:59 -0000	1.1014.2.4
@@ -5,3 +5,4 @@
 kernel-2.6.28
 linux-2.6.28.tar.bz2
 patch-2.6.29-rc6.bz2
+patch-2.6.29-rc6-git2.bz2


Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-generic,v
retrieving revision 1.238.6.4
retrieving revision 1.238.6.5
diff -u -r1.238.6.4 -r1.238.6.5
--- config-generic	23 Feb 2009 20:07:04 -0000	1.238.6.4
+++ config-generic	25 Feb 2009 21:25:59 -0000	1.238.6.5
@@ -79,7 +79,7 @@
 # CONFIG_PCI_DEBUG is not set
 CONFIG_PCI_STUB=y
 CONFIG_HT_IRQ=y
-# CONFIG_PCI_MSI is not set
+CONFIG_PCI_MSI=y
 CONFIG_PCI_MSI_DEFAULT_ON=y
 CONFIG_PCIEPORTBUS=y
 CONFIG_PCIEAER=y
@@ -1195,6 +1195,7 @@
 CONFIG_BNX2=m
 CONFIG_QLA3XXX=m
 CONFIG_ATL1=m
+CONFIG_ATL1C=m
 CONFIG_ATL2=m
 CONFIG_ATL1E=m
 # CONFIG_EEPRO100 is not set
@@ -2073,7 +2074,7 @@
 # CONFIG_ACQUIRE_WDT is not set
 # CONFIG_ADVANTECH_WDT is not set
 # CONFIG_EUROTECH_WDT is not set
-# CONFIG_IB700_WDT is not set
+CONFIG_IB700_WDT=m
 # CONFIG_MIXCOMWD is not set
 # CONFIG_SCx200_WDT is not set
 # CONFIG_60XX_WDT is not set
@@ -2784,6 +2785,7 @@
 CONFIG_USB_M5602=m
 CONFIG_USB_STV06XX=m
 CONFIG_USB_GSPCA=m
+CONFIG_USB_GSPCA_MR97310A=m
 CONFIG_USB_GSPCA_CONEX=m
 CONFIG_USB_GSPCA_ETOMS=m
 CONFIG_USB_GSPCA_FINEPIX=m
@@ -2970,6 +2972,7 @@
 CONFIG_USB_PHIDGETKIT=m
 CONFIG_USB_PHIDGETMOTORCONTROL=m
 CONFIG_USB_PWC=m
+CONFIG_USB_PWC_INPUT_EVDEV=y
 # CONFIG_USB_PWC_DEBUG is not set
 # CONFIG_USB_RIO500 is not set
 CONFIG_USB_QUICKCAM_MESSENGER=m


Index: config-powerpc-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-powerpc-generic,v
retrieving revision 1.33.6.1
retrieving revision 1.33.6.2
diff -u -r1.33.6.1 -r1.33.6.2
--- config-powerpc-generic	17 Feb 2009 22:10:50 -0000	1.33.6.1
+++ config-powerpc-generic	25 Feb 2009 21:25:59 -0000	1.33.6.2
@@ -300,3 +300,5 @@
 
 CONFIG_USB_FHCI_HCD=m
 # CONFIG_FHCI_DEBUG is not set
+
+# CONFIG_DRM_RADEON_KMS is not set


Index: config-x86-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-x86-generic,v
retrieving revision 1.68.6.1
retrieving revision 1.68.6.2
diff -u -r1.68.6.1 -r1.68.6.2
--- config-x86-generic	17 Feb 2009 22:10:50 -0000	1.68.6.1
+++ config-x86-generic	25 Feb 2009 21:25:59 -0000	1.68.6.2
@@ -407,7 +407,7 @@
 # CONFIG_MEMTEST is not set
 # CONFIG_MAXSMP is not set
 CONFIG_MTRR_SANITIZER=y
-CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0
+CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
 CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
 CONFIG_SYSPROF_TRACER=y
 


Index: config-x86_64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-x86_64-generic,v
retrieving revision 1.68.2.2
retrieving revision 1.68.2.3
diff -u -r1.68.2.2 -r1.68.2.3
--- config-x86_64-generic	23 Feb 2009 20:07:04 -0000	1.68.2.2
+++ config-x86_64-generic	25 Feb 2009 21:26:00 -0000	1.68.2.3
@@ -309,11 +309,11 @@
 CONFIG_DIRECT_GBPAGES=y
 
 # CONFIG_MEMTEST is not set
-# CONFIG_AMD_IOMMU is not set
+CONFIG_AMD_IOMMU=y
 CONFIG_AMD_IOMMU_STATS=y
 # CONFIG_MAXSMP is not set
 CONFIG_MTRR_SANITIZER=y
-CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0
+CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
 CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
 CONFIG_SYSPROF_TRACER=y
 # CONFIG_X86_VERBOSE_BOOTUP is not set

drm-intel-next.patch:

Index: drm-intel-next.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-intel-next.patch,v
retrieving revision 1.4.6.1
retrieving revision 1.4.6.2
diff -u -r1.4.6.1 -r1.4.6.2
--- drm-intel-next.patch	17 Feb 2009 22:10:50 -0000	1.4.6.1
+++ drm-intel-next.patch	25 Feb 2009 21:26:00 -0000	1.4.6.2
@@ -16,178 +16,98 @@
 # Patches follow
 
 
-commit 5eaf13a569f7b0e7884fc083cbf7e62ddcec6a8f
-Author: Kristian Høgsberg <krh at redhat.com>
-Date:   Fri Feb 13 18:22:53 2009 -0500
-
-    [i915] Bring PLL limits in sync with DDX values.
-    
-    Signed-off-by: Kristian Høgsberg <krh at redhat.com>
-
-commit b02c4adfa7c31b6679dcd4da5a66c125bac8aafe
-Author: Kristian Høgsberg <krh at redhat.com>
-Date:   Fri Feb 13 17:51:11 2009 -0500
-
-    [i915] Collapse identical i8xx_clock() and i9xx_clock().
-    
-    They used to be different.  Now they're identical.
-    
-    Signed-off-by: Kristian Høgsberg <krh at redhat.com>
-
-commit 3435521fd84cf373c02b8e0fb9e59a75285636a4
-Author: Kristian Høgsberg <krh at redhat.com>
-Date:   Fri Feb 13 17:44:12 2009 -0500
+commit 0da41c8be1590893927e26f54607f1522b802878
+Author: Chris Wilson <chris at chris-wilson.co.uk>
+Date:   Thu Feb 19 14:48:22 2009 +0000
 
-    [i915] Use spread spectrum when the bios tells us it's ok.
+    drm: Correct unbalanced drm_vblank_put() during mode setting.
     
-    Lifted from the DDX modesetting.
+    The first time we install a mode, the vblank will be disabled for a pipe
+    and so drm_vblank_get() in drm_vblank_pre_modeset() will fail. As we
+    unconditionally call drm_vblank_put() afterwards, the vblank reference
+    counter becomes unbalanced.
     
-    Signed-off-by: Kristian Høgsberg <krh at redhat.com>
+    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
 
-commit 5e15374a3900c941bbeb5d5cedddad07aa821184
-Author: Kristian Høgsberg <krh at redhat.com>
-Date:   Fri Feb 13 15:41:59 2009 -0500
-
-    [i915] Add missing locking around gem operations.
-    
-    Pinning and setting the domains requires taking the struct mutex.
-    
-    Signed-off-by: Kristian Høgsberg <krh at redhat.com>
-
-commit 6c7aefedd9ebaf1146581dec54f74b29486dae56
+commit fb865c44d217cc5d75b7929d70923c2ef7cf4c45
 Author: Jesse Barnes <jbarnes at virtuousgeek.org>
-Date:   Wed Feb 4 14:27:01 2009 -0800
+Date:   Mon Feb 23 16:09:34 2009 -0800
 
-    drm: set_config fixes
-    
-    On Wednesday, February 4, 2009 1:24 pm Jesse Barnes wrote:
-    > Kristian pointed out some problems with the set_config code (switching
-    > CRTCs didn't work for one) so I took a look and found a couple of problems.
-    >  I'm still working on the CRTC switch issue, looks like the pipes don't get
-    > configured right if they're swapped, but this patch fixes some other bugs:
-    > - checks possible_crtcs in the CRTC assignment loop
-    >   - restores previous fb in case of mode set failure
-    >   - checks to make sure a connector has an encoder before restoring its
-    > crtc - adds a few more debug statements for finding out why a modeset is
-    > occurring
-    >
-    > Any thoughts on this?
+    drm: disable encoders before re-routing them
     
-    Here's an updated one that will disable unused/re-routed encoders at mode set
-    time.  Should fix Kristian's bug.
+    In some cases we may receive a mode config that has a different
+    CRTC<->encoder map that the current configuration.  In that case, we
+    need to disable any re-routed encoders before setting the mode,
+    otherwise they may not pick up the new CRTC (if the output types are
+    incompatible for example).
     
-    --
-    Jesse Barnes, Intel Open Source Technology Center
+    Tested-by: Kristian Høgsberg <krh at bitplanet.net>
+    Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
 
-commit 4307cccd79e3c2b45304b28d4c629ef08d30f4a1
+commit c37e9bc6cb05f0d8aa225845941a0146296bf9bb
 Author: Kristian Høgsberg <krh at redhat.com>
-Date:   Tue Feb 3 15:07:02 2009 -0500
+Date:   Mon Feb 16 17:01:26 2009 -0500
 
-    Restore kernelfb mode for all crtcs.
-    
-    Record and restore the kernel framebuffer for all crtc on panic
-    and lastclose.
+    drm: Remove noisy DRM_ERROR() debug printout.
     
     Signed-off-by: Kristian Høgsberg <krh at redhat.com>
 
-commit 0e2f967303023f7f82a0963b7f7f3980d4c08f20
-Author: Roland Dreier <rdreier at cisco.com>
-Date:   Fri Feb 6 17:48:09 2009 -0800
-
-    drm/i915: Fix potential AB-BA deadlock in i915_gem_execbuffer()
-    
-    Lockdep warns that i915_gem_execbuffer() can trigger a page fault (which
-    takes mmap_sem) while holding dev->struct_mutex, while drm_vm_open()
-    (which is called with mmap_sem already held) takes dev->struct_mutex.
-    So this is a potential AB-BA deadlock.
-    
-    The way that i915_gem_execbuffer() triggers a page fault is by doing
-    copy_to_user() when returning new buffer offsets back to userspace;
-    however there is no reason to hold the struct_mutex when doing this
-    copy, since what is being copied is the contents of an array private to
-    i915_gem_execbuffer() anyway.  So we can fix the potential deadlock (and
-    get rid of the lockdep warning) by simply moving the copy_to_user()
-    outside of where struct_mutex is held.
-    
-    This fixes <http://bugzilla.kernel.org/show_bug.cgi?id=12491>.
-    
-    Reported-by: Jesse Brandeburg <jesse.brandeburg at intel.com>
-    Tested-by: Jesse Brandeburg <jesse.brandeburg at intel.com>
-    Signed-off-by: Roland Dreier <rolandd at cisco.com>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
-
-commit 42fe9ab5fc5e6249386153a7c562b596ed8e25ce
-Author: Chris Wilson <chris at chris-wilson.co.uk>
-Date:   Sun Feb 8 19:08:04 2009 +0000
-
-    drm/i915: refleak along pin() error path.
-    
-    A missing unreference if the user calls pin() a second time on a pinned
-    buffer.
-    
-    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
-
-commit db4cdf6345df24e43dc46306a6759060c4901d61
-Author: Chris Wilson <chris at chris-wilson.co.uk>
-Date:   Sun Feb 8 19:07:51 2009 +0000
+commit 7652afdd9e8ceaa92f34ad347be404b3903ff30f
+Author: Jesse Barnes <jbarnes at virtuousgeek.org>
+Date:   Mon Feb 23 15:36:41 2009 -0800
 
-    drm/i915: hold mutex for unreference() in i915_gem_tiling.c
+    drm: Fix ordering of bit fields in EDID structure leading huge vsync values.
     
-    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
+    Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
+    Reviewed-by: Eric Anholt <eric at anholt.net>
 
-commit f467a5c7200e156d8e253e6f2bbcf80e6b7187d9
-Author: Chris Wilson <chris at chris-wilson.co.uk>
-Date:   Fri Feb 6 16:55:20 2009 +0000
+commit 96dc838f0b8c585b71144d03cf575005c3365c50
+Author: Linus Torvalds <torvalds at linux-foundation.org>
+Date:   Mon Feb 23 08:44:33 2009 -0800
 
-    drm/i915: Cleanup trivial leak on execbuffer error path.
-    
-    Also spotted by Owain Ainsworth.
+    drm: Fix shifts of EDID vsync offset/width fields.
     
-    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
+    Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
+    Reviewed-by: Eric Anholt <eric at anholt.net>
 
-commit d46d509398b3690ababd05bea6b3bcce52c37780
-Author: Chris Wilson <chris at chris-wilson.co.uk>
-Date:   Mon Feb 9 11:31:41 2009 +0000
+commit de03d60e1366bc9270b3cbcd8261c39b7f711ce0
+Author: Jesse Barnes <jbarnes at virtuousgeek.org>
+Date:   Mon Feb 23 15:36:43 2009 -0800
 
-    drm: Free the object ref on error.
+    i915: suspend/resume interrupt state
     
-    Ensure that the object is unreferenced if we fail to allocate during
-    drm_gem_flink_ioctl().
+    In the KMS case, enter/leavevt won't fix up the interrupt handler for
+    us, so we need to do it at suspend/resume time.  Make sure we don't fail
+    the resume if the chip is hung either.
     
-    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
+    Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
 
-commit 821da41f85b1816e9f7d811a4b9733a07a3585a3
-Author: Chris Wilson <chris at chris-wilson.co.uk>
-Date:   Mon Feb 9 11:31:41 2009 +0000
+commit 37732382db80631517ee62953ef44fdcae8a8cee
+Author: Jesse Barnes <jbarnes at virtuousgeek.org>
+Date:   Mon Feb 23 15:36:42 2009 -0800
 
-    drm: Potential use-after-free on error path.
+    drm/i915: handle bogus VBT panel timing
     
-    Remove the member from the hash table before we free the structure!
+    We've seen cases in the wild where the VBT sync data is wrong, so add
+    some code to fix it up in that case, taking care to make sure that the
+    total is greater than the sync end.
     
-    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
+    Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
 
-commit cf1573b0f0e79cb0808596589578a4ca60081730
-Author: Tobias Klauser <tklauser at distanz.ch>
-Date:   Mon Feb 9 22:02:42 2009 +0100
+commit 02b4f6cbd548f793cf971440d67c7d263ef5c8a1
+Author: Jesse Barnes <jbarnes at virtuousgeek.org>
+Date:   Mon Feb 23 15:36:40 2009 -0800
 
-    drm/i915: Storage class should be before const qualifier
-    
-    The C99 specification states in section 6.11.5:
+    drm/i915: remove PLL debugging messages
     
-    The placement of a storage-class specifier other than at the beginning
-    of the declaration specifiers in a declaration is an obsolescent
-    feature.
+    These are normal; we walk through different values looking for the right
+    one, so why flood the screen with messages?
     
-    Signed-off-by: Tobias Klauser <tklauser at distanz.ch>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
+    Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
+    Reviewed-by: Eric Anholt <eric at anholt.net>
 
 diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
-index 964c5eb..40c60de 100644
+index 733028b..1c3a8c5 100644
 --- a/drivers/gpu/drm/drm_crtc_helper.c
 +++ b/drivers/gpu/drm/drm_crtc_helper.c
 @@ -452,6 +452,59 @@ static void drm_setup_crtcs(struct drm_device *dev)
@@ -250,16 +170,16 @@
  /**
   * drm_crtc_set_mode - set a mode
   * @crtc: CRTC to program
-@@ -489,6 +542,8 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
- 	if (!crtc->enabled)
- 		return true;
+@@ -547,6 +600,8 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
+ 		encoder_funcs->prepare(encoder);
+ 	}
  
 +	drm_crtc_prepare_encoders(dev);
 +
- 	if (old_fb && crtc->fb) {
- 		depth_changed = (old_fb->depth != crtc->fb->depth);
- 		bpp_changed = (old_fb->bits_per_pixel !=
-@@ -615,7 +670,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+ 	crtc_funcs->prepare(crtc);
+ 
+ 	/* Set up the DPLL and any encoders state that needs to adjust or depend
+@@ -617,7 +672,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
  	struct drm_device *dev;
  	struct drm_crtc **save_crtcs, *new_crtc;
  	struct drm_encoder **save_encoders, *new_encoder;
@@ -268,7 +188,7 @@
  	bool save_enabled;
  	bool mode_changed = false;
  	bool fb_changed = false;
-@@ -666,9 +721,10 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+@@ -668,9 +723,10 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
  	 * and then just flip_or_move it */
  	if (set->crtc->fb != set->fb) {
  		/* If we have no fb then treat it as a full mode set */
@@ -281,7 +201,7 @@
  			 set->crtc->fb->bits_per_pixel) ||
  			 set->fb->depth != set->crtc->fb->depth)
  			fb_changed = true;
-@@ -680,7 +736,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+@@ -682,7 +738,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
  		fb_changed = true;
  
  	if (set->mode && !drm_mode_equal(set->mode, &set->crtc->mode)) {
@@ -290,7 +210,7 @@
  		drm_mode_debug_printmodeline(&set->crtc->mode);
  		drm_mode_debug_printmodeline(set->mode);
  		mode_changed = true;
-@@ -706,6 +762,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+@@ -708,6 +764,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
  		}
  
  		if (new_encoder != connector->encoder) {
@@ -298,7 +218,7 @@
  			mode_changed = true;
  			connector->encoder = new_encoder;
  		}
-@@ -732,10 +789,20 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+@@ -734,10 +791,20 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
  			if (set->connectors[ro] == connector)
  				new_crtc = set->crtc;
  		}
@@ -319,531 +239,143 @@
  	}
  
  	/* mode_set_base is not a required function */
-@@ -774,9 +841,11 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+@@ -781,6 +848,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
  
  fail_set_mode:
  	set->crtc->enabled = save_enabled;
 +	set->crtc->fb = old_fb;
  	count = 0;
- 	list_for_each_entry(connector, &dev->mode_config.connector_list, head)
--		connector->encoder->crtc = save_crtcs[count++];
-+		if (connector->encoder)
-+			connector->encoder->crtc = save_crtcs[count++];
- fail_no_encoder:
- 	kfree(save_crtcs);
- 	count = 0;
-diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
-index 6915fb8..e5a8ebf 100644
---- a/drivers/gpu/drm/drm_gem.c
-+++ b/drivers/gpu/drm/drm_gem.c
-@@ -104,8 +104,8 @@ drm_gem_init(struct drm_device *dev)
- 
- 	if (drm_mm_init(&mm->offset_manager, DRM_FILE_PAGE_OFFSET_START,
- 			DRM_FILE_PAGE_OFFSET_SIZE)) {
--		drm_free(mm, sizeof(struct drm_gem_mm), DRM_MEM_MM);
- 		drm_ht_remove(&mm->offset_hash);
-+		drm_free(mm, sizeof(struct drm_gem_mm), DRM_MEM_MM);
- 		return -ENOMEM;
- 	}
- 
-@@ -295,8 +295,10 @@ drm_gem_flink_ioctl(struct drm_device *dev, void *data,
- 		return -EBADF;
- 
- again:
--	if (idr_pre_get(&dev->object_name_idr, GFP_KERNEL) == 0)
--		return -ENOMEM;
-+	if (idr_pre_get(&dev->object_name_idr, GFP_KERNEL) == 0) {
-+		ret = -ENOMEM;
-+		goto err;
-+	}
- 
- 	spin_lock(&dev->object_name_lock);
- 	if (obj->name) {
-@@ -310,12 +312,8 @@ again:
- 	if (ret == -EAGAIN)
- 		goto again;
- 
--	if (ret != 0) {
--		mutex_lock(&dev->struct_mutex);
--		drm_gem_object_unreference(obj);
--		mutex_unlock(&dev->struct_mutex);
--		return ret;
--	}
-+	if (ret != 0)
-+		goto err;
- 
- 	/*
- 	 * Leave the reference from the lookup around as the
-@@ -324,6 +322,12 @@ again:
- 	args->name = (uint64_t) obj->name;
- 
- 	return 0;
-+
-+err:
-+	mutex_lock(&dev->struct_mutex);
-+	drm_gem_object_unreference(obj);
-+	mutex_unlock(&dev->struct_mutex);
-+	return ret;
- }
- 
- /**
-diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
-index 7325363..135a08f 100644
---- a/drivers/gpu/drm/i915/i915_drv.h
-+++ b/drivers/gpu/drm/i915/i915_drv.h
-@@ -184,6 +184,8 @@ typedef struct drm_i915_private {
- 	unsigned int lvds_dither:1;
- 	unsigned int lvds_vbt:1;
- 	unsigned int int_crt_support:1;
-+	unsigned int lvds_use_ssc:1;
-+	int lvds_ssc_freq;
- 
- 	struct drm_i915_fence_reg fence_regs[16]; /* assume 965 */
- 	int fence_reg_start; /* 4 if userland hasn't ioctl'd us yet */
-diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
-index 8185766..ff0d94d 100644
---- a/drivers/gpu/drm/i915/i915_gem.c
-+++ b/drivers/gpu/drm/i915/i915_gem.c
-@@ -2480,13 +2480,15 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
- 	if (dev_priv->mm.wedged) {
- 		DRM_ERROR("Execbuf while wedged\n");
- 		mutex_unlock(&dev->struct_mutex);
--		return -EIO;
-+		ret = -EIO;
-+		goto pre_mutex_err;
- 	}
- 
- 	if (dev_priv->mm.suspended) {
- 		DRM_ERROR("Execbuf while VT-switched.\n");
- 		mutex_unlock(&dev->struct_mutex);
+ 	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ 		if (!connector->encoder)
+diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
+index 5a4d324..e902b1c 100644
+--- a/drivers/gpu/drm/drm_edid.c
++++ b/drivers/gpu/drm/drm_edid.c
+@@ -320,10 +320,10 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev,
+ 	mode->htotal = mode->hdisplay + ((pt->hblank_hi << 8) | pt->hblank_lo);
+ 
+ 	mode->vdisplay = (pt->vactive_hi << 8) | pt->vactive_lo;
+-	mode->vsync_start = mode->vdisplay + ((pt->vsync_offset_hi << 8) |
++	mode->vsync_start = mode->vdisplay + ((pt->vsync_offset_hi << 4) |
+ 					      pt->vsync_offset_lo);
+ 	mode->vsync_end = mode->vsync_start +
+-		((pt->vsync_pulse_width_hi << 8) |
++		((pt->vsync_pulse_width_hi << 4) |
+ 		 pt->vsync_pulse_width_lo);
+ 	mode->vtotal = mode->vdisplay + ((pt->vblank_hi << 8) | pt->vblank_lo);
+ 
+diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
+index 3795dbc..93e677a 100644
+--- a/drivers/gpu/drm/drm_irq.c
++++ b/drivers/gpu/drm/drm_irq.c
+@@ -435,6 +435,8 @@ EXPORT_SYMBOL(drm_vblank_get);
+  */
+ void drm_vblank_put(struct drm_device *dev, int crtc)
+ {
++	BUG_ON (atomic_read (&dev->vblank_refcount[crtc]) == 0);
++
+ 	/* Last user schedules interrupt disable */
+ 	if (atomic_dec_and_test(&dev->vblank_refcount[crtc]))
+ 		mod_timer(&dev->vblank_disable_timer, jiffies + 5*DRM_HZ);
+@@ -460,8 +462,9 @@ void drm_vblank_pre_modeset(struct drm_device *dev, int crtc)
+ 	 * so that interrupts remain enabled in the interim.
+ 	 */
+ 	if (!dev->vblank_inmodeset[crtc]) {
+-		dev->vblank_inmodeset[crtc] = 1;
+-		drm_vblank_get(dev, crtc);
++		dev->vblank_inmodeset[crtc] = 0x1;
++		if (drm_vblank_get(dev, crtc) == 0)
++			dev->vblank_inmodeset[crtc] |= 0x2;
+ 	}
+ }
+ EXPORT_SYMBOL(drm_vblank_pre_modeset);
+@@ -473,9 +476,12 @@ void drm_vblank_post_modeset(struct drm_device *dev, int crtc)
+ 	if (dev->vblank_inmodeset[crtc]) {
+ 		spin_lock_irqsave(&dev->vbl_lock, irqflags);
+ 		dev->vblank_disable_allowed = 1;
+-		dev->vblank_inmodeset[crtc] = 0;
+ 		spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
+-		drm_vblank_put(dev, crtc);
++
++		if (dev->vblank_inmodeset[crtc] & 0x2)
++			drm_vblank_put(dev, crtc);
++
++		dev->vblank_inmodeset[crtc] = 0;
+ 	}
+ }
+ EXPORT_SYMBOL(drm_vblank_post_modeset);
+diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
+index 0692622..b293ef0 100644
+--- a/drivers/gpu/drm/i915/i915_drv.c
++++ b/drivers/gpu/drm/i915/i915_drv.c
+@@ -68,9 +68,11 @@ static int i915_suspend(struct drm_device *dev, pm_message_t state)
+ 	i915_save_state(dev);
+ 
+ 	/* If KMS is active, we do the leavevt stuff here */
+-	if (drm_core_check_feature(dev, DRIVER_MODESET) && i915_gem_idle(dev)) {
+-		dev_err(&dev->pdev->dev, "GEM idle failed, aborting suspend\n");
 -		return -EBUSY;
-+		ret = -EBUSY;
-+		goto pre_mutex_err;
++	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
++		if (i915_gem_idle(dev))
++			dev_err(&dev->pdev->dev,
++				"GEM idle failed, resume may fail\n");
++		drm_irq_uninstall(dev);
  	}
  
- 	/* Look up object handles */
-@@ -2632,15 +2634,6 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
- 
- 	i915_verify_inactive(dev, __FILE__, __LINE__);
- 
--	/* Copy the new buffer offsets back to the user's exec list. */
--	ret = copy_to_user((struct drm_i915_relocation_entry __user *)
--			   (uintptr_t) args->buffers_ptr,
--			   exec_list,
--			   sizeof(*exec_list) * args->buffer_count);
--	if (ret)
--		DRM_ERROR("failed to copy %d exec entries "
--			  "back to user (%d)\n",
--			   args->buffer_count, ret);
- err:
- 	for (i = 0; i < pinned; i++)
- 		i915_gem_object_unpin(object_list[i]);
-@@ -2650,6 +2643,18 @@ err:
- 
- 	mutex_unlock(&dev->struct_mutex);
- 
-+	if (!ret) {
-+		/* Copy the new buffer offsets back to the user's exec list. */
-+		ret = copy_to_user((struct drm_i915_relocation_entry __user *)
-+				   (uintptr_t) args->buffers_ptr,
-+				   exec_list,
-+				   sizeof(*exec_list) * args->buffer_count);
-+		if (ret)
-+			DRM_ERROR("failed to copy %d exec entries "
-+				  "back to user (%d)\n",
-+				  args->buffer_count, ret);
-+	}
-+
- pre_mutex_err:
- 	drm_free(object_list, sizeof(*object_list) * args->buffer_count,
- 		 DRM_MEM_DRIVER);
-@@ -2753,6 +2758,7 @@ i915_gem_pin_ioctl(struct drm_device *dev, void *data,
- 	if (obj_priv->pin_filp != NULL && obj_priv->pin_filp != file_priv) {
- 		DRM_ERROR("Already pinned in i915_gem_pin_ioctl(): %d\n",
- 			  args->handle);
-+		drm_gem_object_unreference(obj);
+ 	intel_opregion_free(dev);
+@@ -108,6 +110,8 @@ static int i915_resume(struct drm_device *dev)
+ 		if (ret != 0)
+ 			ret = -1;
  		mutex_unlock(&dev->struct_mutex);
- 		return -EINVAL;
- 	}
-diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c
-index fa1685c..7fb4191 100644
---- a/drivers/gpu/drm/i915/i915_gem_tiling.c
-+++ b/drivers/gpu/drm/i915/i915_gem_tiling.c
-@@ -299,9 +299,8 @@ i915_gem_set_tiling(struct drm_device *dev, void *data,
- 	}
- 	obj_priv->stride = args->stride;
- 
--	mutex_unlock(&dev->struct_mutex);
--
- 	drm_gem_object_unreference(obj);
-+	mutex_unlock(&dev->struct_mutex);
- 
- 	return 0;
- }
-@@ -340,9 +339,8 @@ i915_gem_get_tiling(struct drm_device *dev, void *data,
- 		DRM_ERROR("unknown tiling mode\n");
++
++		drm_irq_install(dev);
  	}
  
--	mutex_unlock(&dev->struct_mutex);
--
- 	drm_gem_object_unreference(obj);
-+	mutex_unlock(&dev->struct_mutex);
- 
- 	return 0;
- }
+ 	return ret;
+diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
+index 25b3374..f105959 100644
+--- a/drivers/gpu/drm/i915/i915_gem.c
++++ b/drivers/gpu/drm/i915/i915_gem.c
+@@ -3545,7 +3545,6 @@ i915_gem_phys_pwrite(struct drm_device *dev, struct drm_gem_object *obj,
+ 	user_data = (char __user *) (uintptr_t) args->data_ptr;
+ 	obj_addr = obj_priv->phys_obj->handle->vaddr + args->offset;
+ 
+-	DRM_ERROR("obj_addr %p, %lld\n", obj_addr, args->size);
+ 	ret = copy_from_user(obj_addr, user_data, args->size);
+ 	if (ret)
+ 		return -EFAULT;
 diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
-index 4ca82a0..65be30d 100644
+index 65be30d..fc28e2b 100644
 --- a/drivers/gpu/drm/i915/intel_bios.c
 +++ b/drivers/gpu/drm/i915/intel_bios.c
-@@ -135,6 +135,14 @@ parse_general_features(struct drm_i915_private *dev_priv,
- 	if (general) {
- 		dev_priv->int_tv_support = general->int_tv_support;
- 		dev_priv->int_crt_support = general->int_crt_support;
-+		dev_priv->lvds_use_ssc = general->enable_ssc;
-+
-+		if (dev_priv->lvds_use_ssc) {
-+		  if (IS_I855(dev_priv->dev))
-+		    dev_priv->lvds_ssc_freq = general->ssc_freq ? 66 : 48;
-+		  else
-+		    dev_priv->lvds_ssc_freq = general->ssc_freq ? 100 : 96;
-+		}
- 	}
- }
+@@ -111,6 +111,12 @@ parse_panel_data(struct drm_i915_private *dev_priv, struct bdb_header *bdb)
+ 	panel_fixed_mode->clock = dvo_timing->clock * 10;
+ 	panel_fixed_mode->type = DRM_MODE_TYPE_PREFERRED;
+ 
++	/* Some VBTs have bogus h/vtotal values */
++	if (panel_fixed_mode->hsync_end > panel_fixed_mode->htotal)
++		panel_fixed_mode->htotal = panel_fixed_mode->hsync_end + 1;
++	if (panel_fixed_mode->vsync_end > panel_fixed_mode->vtotal)
++		panel_fixed_mode->vtotal = panel_fixed_mode->vsync_end + 1;
++
+ 	drm_mode_set_name(panel_fixed_mode);
  
+ 	dev_priv->vbt_mode = panel_fixed_mode;
 diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
-index bbdd729..2daf989 100644
+index 65b635c..a283427 100644
 --- a/drivers/gpu/drm/i915/intel_display.c
 +++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -90,12 +90,12 @@ typedef struct {
- #define I9XX_DOT_MAX		 400000
- #define I9XX_VCO_MIN		1400000
- #define I9XX_VCO_MAX		2800000
--#define I9XX_N_MIN		      3
--#define I9XX_N_MAX		      8
-+#define I9XX_N_MIN		      1
-+#define I9XX_N_MAX		      6
- #define I9XX_M_MIN		     70
- #define I9XX_M_MAX		    120
- #define I9XX_M1_MIN		     10
--#define I9XX_M1_MAX		     20
-+#define I9XX_M1_MAX		     22
- #define I9XX_M2_MIN		      5
- #define I9XX_M2_MAX		      9
- #define I9XX_P_SDVO_DAC_MIN	      5
-@@ -189,19 +189,7 @@ static const intel_limit_t *intel_limit(struct drm_crtc *crtc)
- 	return limit;
- }
- 
--/** Derive the pixel clock for the given refclk and divisors for 8xx chips. */
--
--static void i8xx_clock(int refclk, intel_clock_t *clock)
--{
--	clock->m = 5 * (clock->m1 + 2) + (clock->m2 + 2);
--	clock->p = clock->p1 * clock->p2;
--	clock->vco = refclk * clock->m / (clock->n + 2);
--	clock->dot = clock->vco / clock->p;
--}
--
--/** Derive the pixel clock for the given refclk and divisors for 9xx chips. */
--
--static void i9xx_clock(int refclk, intel_clock_t *clock)
-+static void intel_clock(int refclk, intel_clock_t *clock)
- {
- 	clock->m = 5 * (clock->m1 + 2) + (clock->m2 + 2);
- 	clock->p = clock->p1 * clock->p2;
-@@ -209,15 +197,6 @@ static void i9xx_clock(int refclk, intel_clock_t *clock)
- 	clock->dot = clock->vco / clock->p;
- }
- 
--static void intel_clock(struct drm_device *dev, int refclk,
--			intel_clock_t *clock)
--{
--	if (IS_I9XX(dev))
--		i9xx_clock (refclk, clock);
--	else
--		i8xx_clock (refclk, clock);
--}
--
- /**
-  * Returns whether any output on the specified pipe is of the specified type
-  */
-@@ -238,7 +217,7 @@ bool intel_pipe_has_type (struct drm_crtc *crtc, int type)
+@@ -217,7 +217,7 @@ bool intel_pipe_has_type (struct drm_crtc *crtc, int type)
      return false;
  }
  
--#define INTELPllInvalid(s)   { /* ErrorF (s) */; return false; }
-+#define INTELPllInvalid(s)   do { DRM_DEBUG(s); return false; } while (0)
+-#define INTELPllInvalid(s)   do { DRM_DEBUG(s); return false; } while (0)
++#define INTELPllInvalid(s)   do { /* DRM_DEBUG(s); */ return false; } while (0)
  /**
   * Returns whether the given set of divisors are valid for a given refclk with
   * the given connectors.
-@@ -318,7 +297,7 @@ static bool intel_find_best_PLL(struct drm_crtc *crtc, int target,
- 				     clock.p1 <= limit->p1.max; clock.p1++) {
- 					int this_err;
- 
--					intel_clock(dev, refclk, &clock);
-+					intel_clock(refclk, &clock);
- 
- 					if (!intel_PLL_is_valid(crtc, &clock))
- 						continue;
-@@ -390,10 +369,14 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
- 		BUG();
- 	}
- 
--	if (i915_gem_object_pin(intel_fb->obj, alignment))
-+	mutex_lock(&dev->struct_mutex);
-+	if (i915_gem_object_pin(intel_fb->obj, alignment)) {
-+		mutex_unlock(&dev->struct_mutex);
- 		return;
-+	}
- 
- 	i915_gem_object_set_to_gtt_domain(intel_fb->obj, 1);
-+	mutex_unlock(&dev->struct_mutex);
- 
- 	Start = obj_priv->gtt_offset;
- 	Offset = y * crtc->fb->pitch + x * (crtc->fb->bits_per_pixel / 8);
-@@ -437,8 +420,10 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
- 	intel_wait_for_vblank(dev);
- 
- 	if (old_fb) {
-+		mutex_lock(&dev->struct_mutex);
- 		intel_fb = to_intel_framebuffer(old_fb);
- 		i915_gem_object_unpin(intel_fb->obj);
-+		mutex_unlock(&dev->struct_mutex);
- 	}
- 
- 	if (!dev->primary->master)
-@@ -732,7 +717,7 @@ static void intel_crtc_mode_set(struct drm_crtc *crtc,
- 	int dspsize_reg = (pipe == 0) ? DSPASIZE : DSPBSIZE;
- 	int dsppos_reg = (pipe == 0) ? DSPAPOS : DSPBPOS;
- 	int pipesrc_reg = (pipe == 0) ? PIPEASRC : PIPEBSRC;
--	int refclk;
-+	int refclk, num_outputs = 0;
- 	intel_clock_t clock;
- 	u32 dpll = 0, fp = 0, dspcntr, pipeconf;
- 	bool ok, is_sdvo = false, is_dvo = false;
-@@ -768,9 +753,14 @@ static void intel_crtc_mode_set(struct drm_crtc *crtc,
- 			is_crt = true;
- 			break;
- 		}
-+
-+		num_outputs++;
- 	}
- 
--	if (IS_I9XX(dev)) {
-+	if (is_lvds && dev_priv->lvds_use_ssc && num_outputs < 2) {
-+		refclk = dev_priv->lvds_ssc_freq * 1000;
-+		DRM_DEBUG("using SSC reference clock of %d MHz\n", refclk / 1000);
-+	} else if (IS_I9XX(dev)) {
- 		refclk = 96000;
- 	} else {
- 		refclk = 48000;
-@@ -782,6 +772,9 @@ static void intel_crtc_mode_set(struct drm_crtc *crtc,
- 		return;
- 	}
- 
-+	DRM_DEBUG("setting mode on crtc %d, is_lvds: %s\n",
-+		  crtc->base.id, is_lvds ? "true" : "false");
-+
- 	fp = clock.n << 16 | clock.m1 << 8 | clock.m2;
- 
- 	dpll = DPLL_VGA_MODE_DIS;
-@@ -829,11 +822,14 @@ static void intel_crtc_mode_set(struct drm_crtc *crtc,
- 		}
- 	}
- 
--	if (is_tv) {
-+	if (is_sdvo && is_tv)
-+		dpll |= PLL_REF_INPUT_TVCLKINBC;
-+	else if (is_tv)
- 		/* XXX: just matching BIOS for now */
--/*	dpll |= PLL_REF_INPUT_TVCLKINBC; */
-+		/*	dpll |= PLL_REF_INPUT_TVCLKINBC; */
- 		dpll |= 3;
--	}
-+	else if (is_lvds && dev_priv->lvds_use_ssc && num_outputs < 2)
-+		dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN;
- 	else
- 		dpll |= PLL_REF_INPUT_DREFCLK;
- 
-@@ -1023,18 +1019,19 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
- 	}
- 
- 	/* we only need to pin inside GTT if cursor is non-phy */
-+	mutex_lock(&dev->struct_mutex);
- 	if (!dev_priv->cursor_needs_physical) {
- 		ret = i915_gem_object_pin(bo, PAGE_SIZE);
- 		if (ret) {
- 			DRM_ERROR("failed to pin cursor bo\n");
--			goto fail;
-+			goto fail_locked;
- 		}
- 		addr = obj_priv->gtt_offset;
- 	} else {
- 		ret = i915_gem_attach_phys_object(dev, bo, (pipe == 0) ? I915_GEM_PHYS_CURSOR_0 : I915_GEM_PHYS_CURSOR_1);
- 		if (ret) {
- 			DRM_ERROR("failed to attach phys object\n");
--			goto fail;
-+			goto fail_locked;
- 		}
- 		addr = obj_priv->phys_obj->handle->busaddr;
- 	}
-@@ -1054,10 +1051,9 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
- 				i915_gem_detach_phys_object(dev, intel_crtc->cursor_bo);
- 		} else
- 			i915_gem_object_unpin(intel_crtc->cursor_bo);
--		mutex_lock(&dev->struct_mutex);
- 		drm_gem_object_unreference(intel_crtc->cursor_bo);
--		mutex_unlock(&dev->struct_mutex);
- 	}
-+	mutex_unlock(&dev->struct_mutex);
- 
- 	intel_crtc->cursor_addr = addr;
- 	intel_crtc->cursor_bo = bo;
-@@ -1065,6 +1061,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
- 	return 0;
- fail:
- 	mutex_lock(&dev->struct_mutex);
-+fail_locked:
- 	drm_gem_object_unreference(bo);
- 	mutex_unlock(&dev->struct_mutex);
- 	return ret;
-@@ -1292,7 +1289,7 @@ static int intel_crtc_clock_get(struct drm_device *dev, struct drm_crtc *crtc)
- 		}
- 
- 		/* XXX: Handle the 100Mhz refclk */
--		i9xx_clock(96000, &clock);
-+		intel_clock(96000, &clock);
- 	} else {
- 		bool is_lvds = (pipe == 1) && (I915_READ(LVDS) & LVDS_PORT_EN);
- 
-@@ -1304,9 +1301,9 @@ static int intel_crtc_clock_get(struct drm_device *dev, struct drm_crtc *crtc)
- 			if ((dpll & PLL_REF_INPUT_MASK) ==
- 			    PLLB_REF_INPUT_SPREADSPECTRUMIN) {
- 				/* XXX: might not be 66MHz */
--				i8xx_clock(66000, &clock);
-+				intel_clock(66000, &clock);
- 			} else
--				i8xx_clock(48000, &clock);
-+				intel_clock(48000, &clock);
- 		} else {
- 			if (dpll & PLL_P1_DIVIDE_BY_TWO)
- 				clock.p1 = 2;
-@@ -1319,7 +1316,7 @@ static int intel_crtc_clock_get(struct drm_device *dev, struct drm_crtc *crtc)
- 			else
- 				clock.p2 = 2;
- 
--			i8xx_clock(48000, &clock);
-+			intel_clock(48000, &clock);
- 		}
- 	}
- 
-diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
-index afd1217..0fd76d4 100644
---- a/drivers/gpu/drm/i915/intel_fb.c
-+++ b/drivers/gpu/drm/i915/intel_fb.c
-@@ -412,7 +412,8 @@ int intelfb_resize(struct drm_device *dev, struct drm_crtc *crtc)
- }
- EXPORT_SYMBOL(intelfb_resize);
- 
--static struct drm_mode_set kernelfb_mode;
-+static struct drm_mode_set *kernelfb_mode[2];
-+static int kernelfb_crtc_count;
- 
- static int intelfb_panic(struct notifier_block *n, unsigned long ununsed,
- 			 void *panic_str)
-@@ -688,7 +689,8 @@ static int intelfb_multi_fb_probe_crtc(struct drm_device *dev, struct drm_crtc *
- 	       info->fix.id);
- 
- 	/* Switch back to kernel console on panic */
--	kernelfb_mode = *modeset;
-+	BUG_ON(kernelfb_crtc_count >= ARRAY_SIZE(kernelfb_mode));
-+	kernelfb_mode[kernelfb_crtc_count++] = modeset;
- 	atomic_notifier_chain_register(&panic_notifier_list, &paniced);
- 	printk(KERN_INFO "registered panic notifier\n");
- 
-@@ -701,6 +703,7 @@ static int intelfb_multi_fb_probe(struct drm_device *dev)
- 	struct drm_crtc *crtc;
- 	int ret = 0;
- 
-+	kernelfb_crtc_count = 0;
- 	list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
- 		ret = intelfb_multi_fb_probe_crtc(dev, crtc);
- 		if (ret)
-@@ -797,6 +800,7 @@ static int intelfb_single_fb_probe(struct drm_device *dev)
- 	 * For each CRTC, set up the connector list for the CRTC's mode
- 	 * set configuration.
- 	 */
-+	kernelfb_crtc_count = 0;
- 	list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
- 		struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
- 
-@@ -824,6 +828,9 @@ static int intelfb_single_fb_probe(struct drm_device *dev)
- 		modeset->num_connectors = conn_count;
- 		if (modeset->mode != modeset->crtc->desired_mode)
- 			modeset->mode = modeset->crtc->desired_mode;
-+
-+		BUG_ON(kernelfb_crtc_count >= ARRAY_SIZE(kernelfb_mode));
-+		kernelfb_mode[kernelfb_crtc_count++] = modeset;
- 	}
- 	par->crtc_count = crtc_count;
- 
-@@ -838,7 +845,6 @@ static int intelfb_single_fb_probe(struct drm_device *dev)
- 	       info->fix.id);
- 
- 	/* Switch back to kernel console on panic */
--	kernelfb_mode = *modeset;
- 	atomic_notifier_chain_register(&panic_notifier_list, &paniced);
- 	printk(KERN_INFO "registered panic notifier\n");
- 
-@@ -852,7 +858,10 @@ static int intelfb_single_fb_probe(struct drm_device *dev)
-  */
- void intelfb_restore(void)
- {
--	drm_crtc_helper_set_config(&kernelfb_mode);
-+	int i;
-+
-+	for (i = 0; i < kernelfb_crtc_count; i++)
-+		drm_crtc_helper_set_config(kernelfb_mode[i]);
- }
- 
- static void intelfb_sysrq(int dummy1, struct tty_struct *dummy3)
-@@ -918,7 +927,7 @@ int intelfb_remove(struct drm_device *dev, struct drm_framebuffer *fb)
- 	}
- 
- 	atomic_notifier_chain_unregister(&panic_notifier_list, &paniced);
--	memset(&kernelfb_mode, 0, sizeof(struct drm_mode_set));
-+	kernelfb_crtc_count = 0;
- 	return 0;
- }
- EXPORT_SYMBOL(intelfb_remove);
-diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
-index a30508b..fbe6f39 100644
---- a/drivers/gpu/drm/i915/intel_sdvo.c
-+++ b/drivers/gpu/drm/i915/intel_sdvo.c
-@@ -193,7 +193,7 @@ static bool intel_sdvo_write_byte(struct intel_output *intel_output, int addr,
- 
- #define SDVO_CMD_NAME_ENTRY(cmd) {cmd, #cmd}
- /** Mapping of command numbers to names, for debug output */
--const static struct _sdvo_cmd_name {
-+static const struct _sdvo_cmd_name {
- 	u8 cmd;
- 	char *name;
- } sdvo_cmd_names[] = {
-diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
-index fbb35dc..56485d6 100644
---- a/drivers/gpu/drm/i915/intel_tv.c
-+++ b/drivers/gpu/drm/i915/intel_tv.c
-@@ -411,7 +411,7 @@ struct tv_mode {
-  * These values account for -1s required.
-  */
- 
--const static struct tv_mode tv_modes[] = {
-+static const struct tv_mode tv_modes[] = {
- 	{
- 		.name		= "NTSC-M",
- 		.clock		= 107520,
 diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
-index 0c6f0e1..28ff3ee 100644
+index 0b0d236..c7d4b2e 100644
 --- a/include/drm/drm_crtc_helper.h
 +++ b/include/drm/drm_crtc_helper.h
 @@ -76,6 +76,7 @@ struct drm_encoder_helper_funcs {
@@ -854,3 +386,20 @@
  	/* detect for DAC style encoders */
  	enum drm_connector_status (*detect)(struct drm_encoder *encoder,
  					    struct drm_connector *connector);
+diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
+index c707c15..ff8d27a 100644
+--- a/include/drm/drm_edid.h
++++ b/include/drm/drm_edid.h
+@@ -58,10 +58,10 @@ struct detailed_pixel_timing {
+ 	u8 hsync_pulse_width_lo;
+ 	u8 vsync_pulse_width_lo:4;
+ 	u8 vsync_offset_lo:4;
+-	u8 hsync_pulse_width_hi:2;
+-	u8 hsync_offset_hi:2;
+ 	u8 vsync_pulse_width_hi:2;
+ 	u8 vsync_offset_hi:2;
++	u8 hsync_pulse_width_hi:2;
++	u8 hsync_offset_hi:2;
+ 	u8 width_mm_lo;
+ 	u8 height_mm_lo;
+ 	u8 height_mm_hi:4;

drm-modesetting-radeon.patch:

Index: drm-modesetting-radeon.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-modesetting-radeon.patch,v
retrieving revision 1.54.6.1
retrieving revision 1.54.6.2
diff -u -r1.54.6.1 -r1.54.6.2
--- drm-modesetting-radeon.patch	23 Feb 2009 20:07:04 -0000	1.54.6.1
+++ drm-modesetting-radeon.patch	25 Feb 2009 21:26:00 -0000	1.54.6.2
@@ -1,3 +1,42 @@
+commit 0f6053741411f3ab78a99470523175f20c56b256
+Author: David Miller <davem at davemloft.net>
+Date:   Thu Feb 12 02:15:39 2009 -0800
+
+    drm: radeon: Fix RADEON_*_EMITED defines.
+    
+    These are not supposed to be booleans, they are
+    supposed to be bit masks.
+    
+    Signed-off-by: David S. Miller <davem at davemloft.net>
+    Signed-off-by: Dave Airlie <airlied at linux.ie>
+    (cherry picked from commit c88605574cafb3883011c898d21309b5d93d0d09)
+
+commit d5315273951332ebc92d0a0a32412c98fc3b6bec
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Wed Feb 25 16:07:15 2009 +1000
+
+    radeon: fixup cs buffer re-use code to not block straight away
+
+commit da53c6edb0b09776687bbf37796b3db3a47192af
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Wed Feb 25 16:06:30 2009 +1000
+
+    radeon: port CS mutex over from drm.git
+    
+    Totally missed this before - really helps stability
+
+commit 5d2a309e5f10266667bc733b884198a2f51cf845
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Wed Feb 25 13:03:47 2009 +1000
+
+    radeon: fix IB dump end
+
+commit 57f22b7e9781a6d0894af48369c75b0caa6d9a8b
+Author: Thomas Hellstrom <thellstrom-at-vmware-dot-com>
+Date:   Tue Feb 24 20:26:53 2009 +1000
+
+    drm/ttm: work around some x86 pat oddities by using mixedmap instead of pfnmap
+
 commit 465937aec83364d3cf516bc8b6c2ca7f785892d9
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Sun Feb 22 08:22:14 2009 +1000
@@ -6419,7 +6458,7 @@
 +}
 +
 diff --git a/drivers/gpu/drm/drm_vm.c b/drivers/gpu/drm/drm_vm.c
-index 3ffae02..bb012ad 100644
+index 3ffae02..57699c8 100644
 --- a/drivers/gpu/drm/drm_vm.c
 +++ b/drivers/gpu/drm/drm_vm.c
 @@ -37,9 +37,15 @@
@@ -6570,7 +6609,7 @@
 +			drm_io_prot(_DRM_TTM, vma);
 +	}
 +
-+	err = vm_insert_pfn(vma, (unsigned long)vmf->virtual_address, pfn);
++	err = vm_insert_mixed(vma, (unsigned long)vmf->virtual_address, pfn);
 +	if (err) {
 +		ret = (err != -EAGAIN) ? VM_FAULT_OOM : VM_FAULT_NOPAGE;
 +		goto out_unlock;
@@ -6655,7 +6694,7 @@
 +	vma->vm_private_data = map->handle;
 +	vma->vm_file = filp;
 +	vma->vm_flags |= VM_RESERVED | VM_IO;
-+	vma->vm_flags |= VM_PFNMAP;
++	vma->vm_flags |= VM_MIXEDMAP;
 +	drm_bo_vm_open_locked(vma);
 +	return 0;
 +}
@@ -19713,10 +19752,10 @@
 +}
 diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
 new file mode 100644
-index 0000000..143269f
+index 0000000..a916634
 --- /dev/null
 +++ b/drivers/gpu/drm/radeon/radeon_cs.c
-@@ -0,0 +1,577 @@
+@@ -0,0 +1,583 @@
 +/*
 + * Copyright 2008 Jerome Glisse.
 + * All Rights Reserved.
@@ -19760,21 +19799,25 @@
 +	long size;
 +	int r, i;
 +
++	mutex_lock(&dev_priv->cs.cs_mutex);
 +	/* set command stream id to 0 which is fake id */
 +	cs_id = 0;
 +	cs->cs_id = cs_id;
 +
 +	if (dev_priv == NULL) {
 +		DRM_ERROR("called with no initialization\n");
++		mutex_unlock(&dev_priv->cs.cs_mutex);
 +		return -EINVAL;
 +	}
 +	if (!cs->num_chunks) {
++		mutex_unlock(&dev_priv->cs.cs_mutex);
 +		return 0;
 +	}
 +
 +
 +	chunk_array = drm_calloc(cs->num_chunks, sizeof(uint64_t), DRM_MEM_DRIVER);
 +	if (!chunk_array) {
++		mutex_unlock(&dev_priv->cs.cs_mutex);
 +		return -ENOMEM;
 +	}
 +
@@ -19793,7 +19836,8 @@
 +	/* copy out the chunk headers */
 +	parser.chunks = drm_calloc(parser.num_chunks, sizeof(struct drm_radeon_kernel_chunk), DRM_MEM_DRIVER);
 +	if (!parser.chunks) {
-+		return -ENOMEM;
++		r = -ENOMEM;
++		goto out;
 +	}
 +
 +	for (i = 0; i < parser.num_chunks; i++) {
@@ -19883,9 +19927,9 @@
 +	dev_priv->cs.id_emit(&parser, &cs_id);
 +
 +	cs->cs_id = cs_id;
-+		
 +out:
 +	dev_priv->cs.ib_free(&parser, r);
++	mutex_unlock(&dev_priv->cs.cs_mutex);
 +
 +	for (i = 0; i < parser.num_chunks; i++) {
 +		if (parser.chunks[i].kdata)
@@ -20281,6 +20325,7 @@
 +{
 +	drm_radeon_private_t *dev_priv = dev->dev_private;
 +
++	mutex_init(&dev_priv->cs.cs_mutex);
 +	if (dev_priv->chip_family < CHIP_RV280) {
 +		dev_priv->cs.id_emit = r100_cs_id_emit;
 +		dev_priv->cs.id_last_get = r100_cs_id_last_get;
@@ -21437,7 +21482,7 @@
  }
  
 diff --git a/drivers/gpu/drm/radeon/radeon_drv.h b/drivers/gpu/drm/radeon/radeon_drv.h
-index 490bc7c..06c9089 100644
+index 490bc7c..8373c20 100644
 --- a/drivers/gpu/drm/radeon/radeon_drv.h
 +++ b/drivers/gpu/drm/radeon/radeon_drv.h
 @@ -34,6 +34,8 @@
@@ -21535,10 +21580,15 @@
  	int fetch_size_l2ow; /* log2 Oct Words */
  
  	u32 tail;
-@@ -226,18 +264,89 @@ struct radeon_virt_surface {
- #define RADEON_FLUSH_EMITED	(1 < 0)
- #define RADEON_PURGE_EMITED	(1 < 1)
+@@ -223,21 +261,93 @@ struct radeon_virt_surface {
+ 	struct drm_file *file_priv;
+ };
  
+-#define RADEON_FLUSH_EMITED	(1 < 0)
+-#define RADEON_PURGE_EMITED	(1 < 1)
++#define RADEON_FLUSH_EMITED	(1 << 0)
++#define RADEON_PURGE_EMITED	(1 << 1)
++
 +struct radeon_mm_obj {
 +	struct drm_buffer_object *bo;
 +	struct drm_bo_kmap_obj kmap;
@@ -21565,7 +21615,7 @@
 +};
 +
 +#include "radeon_mode.h"
-+
+ 
  struct drm_radeon_master_private {
  	drm_local_map_t *sarea;
  	drm_radeon_sarea_t *sarea_priv;
@@ -21591,6 +21641,7 @@
 +
 +/* command submission struct */
 +struct drm_radeon_cs_priv {
++	struct mutex cs_mutex;
 +	uint32_t id_wcnt;
 +	uint32_t id_scnt;
 +	uint32_t id_last_wcnt;
@@ -21629,7 +21680,7 @@
  	int gart_size;
  	u32 gart_vm_start;
  	unsigned long gart_buffers_offset;
-@@ -253,8 +362,6 @@ typedef struct drm_radeon_private {
+@@ -253,8 +363,6 @@ typedef struct drm_radeon_private {
  
  	int usec_timeout;
  
@@ -21638,7 +21689,7 @@
  	struct {
  		u32 boxes;
  		int freelist_timeouts;
-@@ -290,7 +397,6 @@ typedef struct drm_radeon_private {
+@@ -290,7 +398,6 @@ typedef struct drm_radeon_private {
  	unsigned long buffers_offset;
  	unsigned long gart_textures_offset;
  
@@ -21646,7 +21697,7 @@
  	drm_local_map_t *cp_ring;
  	drm_local_map_t *ring_rptr;
  	drm_local_map_t *gart_textures;
-@@ -299,8 +405,8 @@ typedef struct drm_radeon_private {
+@@ -299,8 +406,8 @@ typedef struct drm_radeon_private {
  	struct mem_block *fb_heap;
  
  	/* SW interrupt */
@@ -21656,7 +21707,7 @@
  	int vblank_crtc;
  	uint32_t irq_enable_reg;
  	uint32_t r500_disp_irq_reg;
-@@ -308,9 +414,6 @@ typedef struct drm_radeon_private {
+@@ -308,9 +415,6 @@ typedef struct drm_radeon_private {
  	struct radeon_surface surfaces[RADEON_MAX_SURFACES];
  	struct radeon_virt_surface virt_surfaces[2 * RADEON_MAX_SURFACES];
  
@@ -21666,7 +21717,7 @@
  
  	u32 scratch_ages[5];
  
-@@ -320,7 +423,44 @@ typedef struct drm_radeon_private {
+@@ -320,7 +424,44 @@ typedef struct drm_radeon_private {
  
  	int num_gb_pipes;
  	int track_flush;
@@ -21711,7 +21762,7 @@
  } drm_radeon_private_t;
  
  typedef struct drm_radeon_buf_priv {
-@@ -335,8 +475,14 @@ typedef struct drm_radeon_kcmd_buffer {
+@@ -335,8 +476,14 @@ typedef struct drm_radeon_kcmd_buffer {
  } drm_radeon_kcmd_buffer_t;
  
  extern int radeon_no_wb;
@@ -21726,7 +21777,7 @@
  
  /* Check whether the given hardware address is inside the framebuffer or the
   * GART area.
-@@ -370,12 +516,9 @@ extern struct drm_buf *radeon_freelist_get(struct drm_device * dev);
+@@ -370,12 +517,9 @@ extern struct drm_buf *radeon_freelist_get(struct drm_device * dev);
  
  extern int radeon_wait_ring(drm_radeon_private_t * dev_priv, int n);
  
@@ -21740,7 +21791,7 @@
  extern int radeon_mem_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv);
  extern int radeon_mem_free(struct drm_device *dev, void *data, struct drm_file *file_priv);
  extern int radeon_mem_init_heap(struct drm_device *dev, void *data, struct drm_file *file_priv);
-@@ -403,13 +546,13 @@ extern int radeon_vblank_crtc_set(struct drm_device *dev, int64_t value);
+@@ -403,13 +547,13 @@ extern int radeon_vblank_crtc_set(struct drm_device *dev, int64_t value);
  extern int radeon_driver_load(struct drm_device *dev, unsigned long flags);
  extern int radeon_driver_unload(struct drm_device *dev);
  extern int radeon_driver_firstopen(struct drm_device *dev);
@@ -21758,7 +21809,7 @@
  extern long radeon_compat_ioctl(struct file *filp, unsigned int cmd,
  				unsigned long arg);
  
-@@ -423,6 +566,11 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -423,6 +567,11 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  			     struct drm_file *file_priv,
  			     drm_radeon_kcmd_buffer_t *cmdbuf);
  
@@ -21770,7 +21821,7 @@
  /* Flags for stats.boxes
   */
  #define RADEON_BOX_DMA_IDLE      0x1
-@@ -431,10 +579,14 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -431,10 +580,14 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #define RADEON_BOX_WAIT_IDLE     0x8
  #define RADEON_BOX_TEXTURE_LOAD  0x10
  
@@ -21785,7 +21836,7 @@
  #define RADEON_AGP_COMMAND		0x0f60
  #define RADEON_AGP_COMMAND_PCI_CONFIG   0x0060	/* offset in PCI config */
  #	define RADEON_AGP_ENABLE	(1<<8)
-@@ -560,16 +712,6 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -560,16 +713,6 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #define R520_MC_IND_WR_EN (1 << 24)
  #define R520_MC_IND_DATA  0x74
  
@@ -21802,7 +21853,7 @@
  #define RADEON_MPP_TB_CONFIG		0x01c0
  #define RADEON_MEM_CNTL			0x0140
  #define RADEON_MEM_SDRAM_MODE_REG	0x0158
-@@ -634,14 +776,23 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -634,14 +777,23 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #define RADEON_SCRATCH_REG3		0x15ec
  #define RADEON_SCRATCH_REG4		0x15f0
  #define RADEON_SCRATCH_REG5		0x15f4
@@ -21829,7 +21880,7 @@
  
  #define RADEON_GEN_INT_CNTL		0x0040
  #	define RADEON_CRTC_VBLANK_MASK		(1 << 0)
-@@ -660,10 +811,13 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -660,10 +812,13 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #	define RADEON_SW_INT_FIRE		(1 << 26)
  #       define R500_DISPLAY_INT_STATUS          (1 << 0)
  
@@ -21847,7 +21898,7 @@
  
  #define RADEON_ISYNC_CNTL		0x1724
  #	define RADEON_ISYNC_ANY2D_IDLE3D	(1 << 0)
-@@ -702,12 +856,17 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -702,12 +857,17 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #define RADEON_PP_TXFILTER_1		0x1c6c
  #define RADEON_PP_TXFILTER_2		0x1c84
  
@@ -21871,7 +21922,7 @@
  #define RADEON_RB3D_CNTL		0x1c3c
  #	define RADEON_ALPHA_BLEND_ENABLE	(1 << 0)
  #	define RADEON_PLANE_MASK_ENABLE		(1 << 1)
-@@ -734,11 +893,6 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -734,11 +894,6 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #	define R300_ZC_FLUSH		        (1 << 0)
  #	define R300_ZC_FREE		        (1 << 1)
  #	define R300_ZC_BUSY		        (1 << 31)
@@ -21883,7 +21934,7 @@
  #define R300_RB3D_DSTCACHE_CTLSTAT              0x4e4c
  #	define R300_RB3D_DC_FLUSH		(2 << 0)
  #	define R300_RB3D_DC_FREE		(2 << 2)
-@@ -746,15 +900,15 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -746,15 +901,15 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #define RADEON_RB3D_ZSTENCILCNTL	0x1c2c
  #	define RADEON_Z_TEST_MASK		(7 << 4)
  #	define RADEON_Z_TEST_ALWAYS		(7 << 4)
@@ -21903,7 +21954,7 @@
  #define RADEON_RBBM_SOFT_RESET		0x00f0
  #	define RADEON_SOFT_RESET_CP		(1 <<  0)
  #	define RADEON_SOFT_RESET_HI		(1 <<  1)
-@@ -931,6 +1085,7 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -931,6 +1086,7 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #	define RADEON_PRE_WRITE_LIMIT_SHIFT	23
  
  #define RADEON_CP_IB_BASE		0x0738
@@ -21911,7 +21962,7 @@
  
  #define RADEON_CP_CSQ_CNTL		0x0740
  #	define RADEON_CSQ_CNT_PRIMARY_MASK	(0xff << 0)
-@@ -941,6 +1096,8 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -941,6 +1097,8 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #	define RADEON_CSQ_PRIBM_INDBM		(4 << 28)
  #	define RADEON_CSQ_PRIPIO_INDPIO		(15 << 28)
  
@@ -21920,7 +21971,7 @@
  #define RADEON_AIC_CNTL			0x01d0
  #	define RADEON_PCIGART_TRANSLATE_EN	(1 << 0)
  #	define RS400_MSI_REARM	                (1 << 3)
-@@ -1015,27 +1172,6 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -1015,27 +1173,6 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #define RADEON_NUM_VERTICES_SHIFT		16
  
  #define RADEON_COLOR_FORMAT_CI8		2
@@ -21948,7 +21999,7 @@
  
  #define R200_PP_TXCBLEND_0                0x2f00
  #define R200_PP_TXCBLEND_1                0x2f10
-@@ -1146,16 +1282,44 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -1146,16 +1283,44 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  
  #define R200_SE_TCL_POINT_SPRITE_CNTL     0x22c4
  
@@ -21995,7 +22046,7 @@
  #define R500_D1CRTC_STATUS 0x609c
  #define R500_D2CRTC_STATUS 0x689c
  #define R500_CRTC_V_BLANK (1<<0)
-@@ -1196,19 +1360,36 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -1196,19 +1361,36 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #define RADEON_RING_HIGH_MARK		128
  
  #define RADEON_PCIGART_TABLE_SIZE      (32*1024)
@@ -22039,7 +22090,7 @@
  #define RADEON_WRITE_PCIE(addr, val)					\
  do {									\
  	RADEON_WRITE8(RADEON_PCIE_INDEX,				\
-@@ -1265,7 +1446,7 @@ do {									\
+@@ -1265,7 +1447,7 @@ do {									\
  #define RADEON_WAIT_UNTIL_2D_IDLE() do {				\
  	OUT_RING( CP_PACKET0( RADEON_WAIT_UNTIL, 0 ) );			\
  	OUT_RING( (RADEON_WAIT_2D_IDLECLEAN |				\
@@ -22048,7 +22099,7 @@
  } while (0)
  
  #define RADEON_WAIT_UNTIL_3D_IDLE() do {				\
-@@ -1374,15 +1555,16 @@ do {								\
+@@ -1374,15 +1556,16 @@ do {								\
  
  #define RADEON_VERBOSE	0
  
@@ -22068,7 +22119,7 @@
  	}								\
  	_nr = n; dev_priv->ring.space -= (n) * sizeof(u32);		\
  	ring = dev_priv->ring.start;					\
-@@ -1399,19 +1581,14 @@ do {								\
+@@ -1399,19 +1582,14 @@ do {								\
  		DRM_ERROR(						\
  			"ADVANCE_RING(): mismatch: nr: %x write: %x line: %d\n",	\
  			((dev_priv->ring.tail + _nr) & mask),		\
@@ -22091,7 +22142,7 @@
  
  #define OUT_RING( x ) do {						\
  	if ( RADEON_VERBOSE ) {						\
-@@ -1450,4 +1627,161 @@ do {								\
+@@ -1450,4 +1628,161 @@ do {								\
  	write &= mask;						\
  } while (0)
  
@@ -24406,10 +24457,10 @@
 +
 diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c
 new file mode 100644
-index 0000000..4ba7809
+index 0000000..14bd4c1
 --- /dev/null
 +++ b/drivers/gpu/drm/radeon/radeon_gem.c
-@@ -0,0 +1,1542 @@
+@@ -0,0 +1,1550 @@
 +/*
 + * Copyright 2008 Red Hat Inc.
 + *
@@ -25633,21 +25684,24 @@
 +{
 +	int i, index = -1;
 +	int ret;
++	int no_wait = 1;
 +	drm_radeon_private_t *dev_priv = parser->dev->dev_private;
 +
 +	for (i = 0; i < RADEON_NUM_IB; i++) {
++
 +		if (!(dev_priv->ib_alloc_bitmap & (1 << i))){
 +			index = i;
 +			break;
 +		}
 +	}
 +
++retry_wait:
 +	/* if all in use we need to wait */
 +	if (index == -1) {
 +		for (i = 0; i < RADEON_NUM_IB; i++) {
 +			if (dev_priv->ib_alloc_bitmap & (1 << i)) {
 +				mutex_lock(&dev_priv->ib_objs[i]->bo->mutex);
-+				ret = drm_bo_wait(dev_priv->ib_objs[i]->bo, 0, 1, 0, 0);
++				ret = drm_bo_wait(dev_priv->ib_objs[i]->bo, 0, 1, no_wait, 0);
 +				mutex_unlock(&dev_priv->ib_objs[i]->bo->mutex);
 +				if (ret)
 +					continue;
@@ -25658,7 +25712,12 @@
 +		}
 +	}
 +
-+	if (index == -1) {
++	if (index == -1 && no_wait == 1) {
++		no_wait = 0;
++		goto retry_wait;
++	}
++
++	if (index == -1 && no_wait == 0) {
 +		DRM_ERROR("Major case fail to allocate IB from freelist %llx\n", dev_priv->ib_alloc_bitmap);
 +		return -EINVAL;
 +	}
@@ -25677,7 +25736,7 @@
 +		
 +	parser->ib = dev_priv->ib_objs[index]->kmap.virtual;
 +	parser->card_offset = dev_priv->gart_vm_start + dev_priv->ib_objs[index]->bo->offset;
-+	dev_priv->ib_alloc_bitmap |= (1 << i);
++	dev_priv->ib_alloc_bitmap |= (1 << index);
 +	return 0;
 +}
 +
@@ -25954,7 +26013,7 @@
 +
 diff --git a/drivers/gpu/drm/radeon/radeon_gem_proc.c b/drivers/gpu/drm/radeon/radeon_gem_proc.c
 new file mode 100644
-index 0000000..98de860
+index 0000000..3d005a1
 --- /dev/null
 +++ b/drivers/gpu/drm/radeon/radeon_gem_proc.c
 @@ -0,0 +1,229 @@
@@ -26088,7 +26147,7 @@
 +				offset = 0;
 +			offset = (offset + 15) & ~15;
 +			start = dev_priv->ib_objs[i]->kmap.virtual + (offset * sizeof(u32));
-+			end = dev_priv->ib_objs[i]->kmap.virtual + ib_size;
++			end = dev_priv->ib_objs[i]->kmap.virtual + (ib_size * sizeof(u32));
 +			for (ptr = start; ptr < end; ptr += 4) {
 +				DRM_PROC_PRINT("%x: %08x %08x %08x %08x\n", ptr - (uint32_t *)dev_priv->ib_objs[i]->kmap.virtual,
 +					       ptr[0], ptr[1], ptr[2], ptr[3]);


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.1294.2.6
retrieving revision 1.1294.2.7
diff -u -r1.1294.2.6 -r1.1294.2.7
--- kernel.spec	23 Feb 2009 23:54:42 -0000	1.1294.2.6
+++ kernel.spec	25 Feb 2009 21:26:00 -0000	1.1294.2.7
@@ -58,7 +58,7 @@
 # The rc snapshot level
 %define rcrev 6
 # The git snapshot level
-%define gitrev 0
+%define gitrev 2
 # Set rpm version accordingly
 %define rpmversion 2.6.%{upstream_sublevel}
 %endif
@@ -102,7 +102,7 @@
 %define doc_build_fail true
 %endif
 
-%define rawhide_skip_docs 0
+%define rawhide_skip_docs 1
 %if 0%{?rawhide_skip_docs}
 %define with_doc 0
 %endif
@@ -579,6 +579,9 @@
 # build tweak for build ID magic, even for -vanilla
 Patch05: linux-2.6-makefile-after_link.patch
 
+# ppc64 goes kerspalt with .eh_frame
+Patch06: build-with-fno-dwarf2-cfi-asm.patch
+
 %if !%{nopatches}
 
 # revert upstream patches we get via other methods
@@ -623,8 +626,6 @@
 Patch570: linux-2.6-selinux-mprotect-checks.patch
 Patch580: linux-2.6-sparc-selinux-mprotect-checks.patch
 
-Patch591: linux-2.6-ext4-ENOSPC-debug.patch
-
 Patch600: linux-2.6-defaults-alsa-hda-beep-off.patch
 
 Patch670: linux-2.6-ata-quirk.patch
@@ -646,6 +647,7 @@
 Patch1815: drm-intel-next.patch
 Patch1816: drm-no-gem-on-i8xx.patch
 Patch1818: drm-i915-resume-force-mode.patch
+Patch1819: drm-edid-revision-0-should-be-valid.patch
 
 # kludge to make ich9 e1000 work
 Patch2000: linux-2.6-e1000-ich9.patch
@@ -664,6 +666,9 @@
 # silence the ACPI blacklist code
 Patch2802: linux-2.6-silence-acpi-blacklist.patch
 
+# Updates V4L/DVB to the latest development tree
+Patch 2900: linux-2.6-v4l-dvb-update.patch
+
 Patch9001: revert-fix-modules_install-via-nfs.patch
 
 Patch9997: xen.pvops.pre.patch
@@ -995,6 +1000,8 @@
 
 ApplyPatch linux-2.6-makefile-after_link.patch
 
+ApplyPatch build-with-fno-dwarf2-cfi-asm.patch
+
 #
 # misc small stuff to make things compile
 #
@@ -1056,7 +1063,6 @@
 #
 
 # ext4
-ApplyPatch linux-2.6-ext4-ENOSPC-debug.patch
 
 # xfs
 
@@ -1152,6 +1158,7 @@
 #ApplyPatch drm-intel-next.patch
 ApplyPatch drm-no-gem-on-i8xx.patch
 ApplyPatch drm-i915-resume-force-mode.patch
+ApplyPatch drm-edid-revision-0-should-be-valid.patch
 
 # linux1394 git patches
 ApplyPatch linux-2.6-firewire-git-update.patch
@@ -1166,6 +1173,9 @@
 # silence the ACPI blacklist code
 ApplyPatch linux-2.6-silence-acpi-blacklist.patch
 
+# V4L/DVB updates
+ApplyPatch linux-2.6-v4l-dvb-update.patch
+
 # revert 8b249b6856f16f09b0e5b79ce5f4d435e439b9d6
 ApplyPatch revert-fix-modules_install-via-nfs.patch
 
@@ -1751,6 +1761,45 @@
 %kernel_variant_files -k vmlinux %{with_kdump} kdump
 
 %changelog
+* Wed Feb 25 2009 Michael Young <m.a.young at durham.ac.uk>
+- update pvops patch which fixes an smp mtrr bug
+- put back CONFIG_PCI_MSI and CONFIG_AMD_IOMMU as pci_msi now disabled
+  in the xen code
+
+* Wed Feb 25 2009 Kyle McMartin <kyle at redhat.com>
+- Disable CONFIG_DRM_RADEON_KMS on powerpc, needs work to support
+  big endian.
+
+* Wed Feb 25 2009 Dave Airlie <airlied at redhat.com>
+- rebase drm-modesetting-radeon with fixes for TTM + DRI2
+
+* Tue Feb 24 2009 Kyle McMartin <kyle at redhat.com> 2.6.29-0.153.rc6.git2
+- Update to -git2 snap.
+- linux-2.6-ext4-ENOSPC-debug.patch: merged upstream (more or less)
+- drm-intel-next.patch: merged upstream
+
+* Tue Feb 24 2009 Mauro Carvalho Chehab <mchehab at redhat.com>
+- Updated drivers/media to reflect the latest patches present on linux-next.
+
+* Tue Feb 24 2009 Kyle McMartin <kyle at redhat.com>
+- drm-edid-revision-0-should-be-valid.patch: bz476735, allow edid
+  read on edid 1.0 monitors.
+
+* Tue Feb 24 2009 Kyle McMartin <kyle at redhat.com>
+- linux-2.6-debug-dma-api.patch: rebase to v3, had to hack it myself in
+  places, so if it breaks, i get to keep all million pieces.
+
+* Tue Feb 24 2009 Kristian Høgsberg <krh at redhat.com>
+- Pull in new round of intel KMS fixes.
+
+* Tue Feb 24 2009 Kyle McMartin <kyle at redhat.com> 2.6.29-0.147.rc6
+- Build the kernel (and modules via Kbuild) with -fno-dwarf2-cfi-asm.
+  Should resolve bz#486545. Thanks to aoliva@ for pointing out this way
+  to fix ppc64.
+
+* Mon Feb 23 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.29-0.146.rc6
+- Enable MTRR sanitizer by default.
+
 * Mon Feb 23 2009 Michael Young <m.a.young at durham.ac.uk>
 - update pvops patch x2
 - unset CONFIG_CC_STACKPROTECTOR (conflicts with xen_start_kernel)

linux-2.6-debug-dma-api.patch:

Index: linux-2.6-debug-dma-api.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-debug-dma-api.patch,v
retrieving revision 1.2
retrieving revision 1.2.6.1
diff -u -r1.2 -r1.2.6.1
--- linux-2.6-debug-dma-api.patch	5 Feb 2009 19:26:04 -0000	1.2
+++ linux-2.6-debug-dma-api.patch	25 Feb 2009 21:26:00 -0000	1.2.6.1
@@ -1,164 +1,5 @@
-commit 0df007e5142d29c3e2707acc23c8e9b5105288a5
-Author: Joerg Roedel <joerg.roedel at amd.com>
-Date:   Fri Jan 9 16:28:07 2009 +0100
-
-    dma-debug: Documentation update
-    
-    Impact: add documentation about DMA-API debugging to DMA-API.txt
-    
-    Signed-off-by: Joerg Roedel <joerg.roedel at amd.com>
-
-commit 554b62839f2d9cf0b9aa13c9cd70bf58e7e4e0e3
-Author: Joerg Roedel <joerg.roedel at amd.com>
-Date:   Fri Jan 9 15:13:15 2009 +0100
-
-    dma-debug: x86 architecture bindings
-    
-    Impact: make use of DMA-API debugging code in x86
-    
-    Signed-off-by: Joerg Roedel <joerg.roedel at amd.com>
-
-commit bc33a312a4588585910dcfd194db0744cf9e3dab
-Author: Joerg Roedel <joerg.roedel at amd.com>
-Date:   Fri Jan 9 15:01:12 2009 +0100
-
-    dma-debug: add checks for sync_single_sg_*
-    
-    Impact: add debug callbacks for dma_sync_sg_* functions
-    
-    Signed-off-by: Joerg Roedel <joerg.roedel at amd.com>
-
-commit 405797c50463944e7389b021d396f92aa1093053
-Author: Joerg Roedel <joerg.roedel at amd.com>
-Date:   Fri Jan 9 14:55:38 2009 +0100
-
-    dma-debug: add checks for sync_single_range_*
-    
-    Impact: add debug callbacks for dma_sync_single_range_for_* functions
-    
-    Signed-off-by: Joerg Roedel <joerg.roedel at amd.com>
-
-commit 0cedfe07d54c682cf7f13dc9550c911dbbb9f50a
-Author: Joerg Roedel <joerg.roedel at amd.com>
-Date:   Fri Jan 9 14:43:04 2009 +0100
-
-    dma-debug: add checks for sync_single_*
-    
-    Impact: add debug callbacks for dma_sync_single_for_* functions
-    
-    Signed-off-by: Joerg Roedel <joerg.roedel at amd.com>
-
-commit fc10709e4202058e4d6b2db18a2ec8015a09e0fc
-Author: Joerg Roedel <joerg.roedel at amd.com>
-Date:   Fri Jan 9 14:38:50 2009 +0100
-
-    dma-debug: add checking for [alloc|free]_coherent
-    
-    Impact: add debug callbacks for dma_[alloc|free]_coherent
-    
-    Signed-off-by: Joerg Roedel <joerg.roedel at amd.com>
-
-commit d8f3a5e2fec916f325043d1f3a714739f9d44b08
-Author: Joerg Roedel <joerg.roedel at amd.com>
-Date:   Fri Jan 9 14:19:54 2009 +0100
-
-    dma-debug: add add checking for map/unmap_sg
-    
-    Impact: add debug callbacks for dma_{un}map_sg
-    
-    Signed-off-by: Joerg Roedel <joerg.roedel at amd.com>
-
-commit 8c0dcad8c5316080c7158fb8f0bc10511721c303
-Author: Joerg Roedel <joerg.roedel at amd.com>
-Date:   Fri Jan 9 14:14:49 2009 +0100
-
-    dma-debug: add checking for map/unmap_page/single
-    
-    Impact: add debug callbacks for dma_{un}map_[page|single]
-    
-    Signed-off-by: Joerg Roedel <joerg.roedel at amd.com>
-
-commit f15c9695bfdb953b7e70e1911bbe14c30b11e939
-Author: Joerg Roedel <joerg.roedel at amd.com>
-Date:   Fri Jan 9 14:10:26 2009 +0100
-
-    dma-debug: add core checking functions
-    
-    Impact: add functions to check on dma unmap and sync
-    
-    Signed-off-by: Joerg Roedel <joerg.roedel at amd.com>
-
-commit 6602032ed8aa974b4f6ac848ae343a83f9ab37dc
-Author: Joerg Roedel <joerg.roedel at amd.com>
-Date:   Fri Jan 9 13:13:27 2009 +0100
-
-    dma-debug: add debugfs interface
-    
-    Impact: add debugfs interface for configuring DMA-API debugging
-    
-    Signed-off-by: Joerg Roedel <joerg.roedel at amd.com>
-
-commit b954fbe7bc5bef620ff053b98b0ca58abf332f89
-Author: Joerg Roedel <joerg.roedel at amd.com>
-Date:   Fri Jan 9 13:01:56 2009 +0100
-
-    dma-debug: add kernel command line parameters
-    
-    Impact: add dma_debug= and dma_debug_entries= kernel parameters
-    
-    Signed-off-by: Joerg Roedel <joerg.roedel at amd.com>
-
-commit 5ab513d8d2fa743bcd526c6fbacbc6ae7688d6d8
-Author: Joerg Roedel <joerg.roedel at amd.com>
-Date:   Fri Jan 9 12:54:42 2009 +0100
-
-    dma-debug: add initialization code
-    
-    Impact: add code to initialize dma-debug core data structures
-    
-    Signed-off-by: Joerg Roedel <joerg.roedel at amd.com>
-
-commit 8520ee58bb81accffa2edc7134c7616613338c0b
-Author: Joerg Roedel <joerg.roedel at amd.com>
-Date:   Fri Jan 9 12:42:46 2009 +0100
-
-    dma-debug: add allocator code
-    
-    Impact: add allocator code for struct dma_debug_entry
-    
-    Signed-off-by: Joerg Roedel <joerg.roedel at amd.com>
-
-commit ce944795f6096ff8798ee9660da16565afd342e6
-Author: Joerg Roedel <joerg.roedel at amd.com>
-Date:   Fri Jan 9 12:34:49 2009 +0100
-
-    dma-debug: add hash functions for dma_debug_entries
-    
-    Impact: implement necessary functions for the core hash
-    
-    Signed-off-by: Joerg Roedel <joerg.roedel at amd.com>
-
-commit 92cf5ffc45d600f36338efa42cd24034a977422b
-Author: Joerg Roedel <joerg.roedel at amd.com>
-Date:   Fri Jan 9 12:19:52 2009 +0100
-
-    dma-debug: add header file and core data structures
-    
-    Impact: add groundwork for DMA-API debugging
-    
-    Signed-off-by: Joerg Roedel <joerg.roedel at amd.com>
-
-commit b05343cc7b6993929b11f2e1ab376fcb4df177de
-Author: Joerg Roedel <joerg.roedel at amd.com>
-Date:   Fri Jan 9 12:14:24 2009 +0100
-
-    dma-debug: add Kconfig entry
-    
-    Impact: add a Kconfig entry for DMA-API debugging
-    
-    Signed-off-by: Joerg Roedel <joerg.roedel at amd.com>
 diff --git a/Documentation/DMA-API.txt b/Documentation/DMA-API.txt
-index 5244169..dca8be3 100644
+index 2a3fcc5..d9aa43d 100644
 --- a/Documentation/DMA-API.txt
 +++ b/Documentation/DMA-API.txt
 @@ -609,3 +609,109 @@ size is the size (and should be a page-sized multiple).
@@ -272,7 +113,7 @@
 +boot with 'dma_debug_entries=<your_desired_number>' to overwrite the
 +architectural default.
 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
-index 8511d35..fef67ed 100644
+index b182626..a0ba260 100644
 --- a/Documentation/kernel-parameters.txt
 +++ b/Documentation/kernel-parameters.txt
 @@ -491,6 +491,16 @@ and is between 256 and 4096 characters. It is defined in the file
@@ -303,19 +144,174 @@
 +config HAVE_DMA_API_DEBUG
 +	bool
 diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
-index 73f7fe8..9e7aa97 100644
+index 9c39095..2200d1f 100644
 --- a/arch/x86/Kconfig
 +++ b/arch/x86/Kconfig
-@@ -40,6 +40,7 @@ config X86
+@@ -40,6 +40,8 @@ config X86
  	select HAVE_GENERIC_DMA_COHERENT if X86_32
  	select HAVE_EFFICIENT_UNALIGNED_ACCESS
  	select USER_STACKTRACE_SUPPORT
 +	select HAVE_DMA_API_DEBUG
++	select DMA_API_DEBUG
  
  config ARCH_DEFCONFIG
  	string
+diff --git a/arch/x86/include/asm/dma-mapping.h b/arch/x86/include/asm/dma-mapping.h
+index 132a134..23131fe 100644
+--- a/arch/x86/include/asm/dma-mapping.h
++++ b/arch/x86/include/asm/dma-mapping.h
+@@ -7,6 +7,7 @@
+  */
+ 
+ #include <linux/scatterlist.h>
++#include <linux/dma-debug.h>
+ #include <asm/io.h>
+ #include <asm/swiotlb.h>
+ #include <asm-generic/dma-coherent.h>
+@@ -93,9 +94,14 @@ dma_map_single(struct device *hwdev, void *ptr, size_t size,
+ 	       int direction)
+ {
+ 	struct dma_mapping_ops *ops = get_dma_ops(hwdev);
++	dma_addr_t addr;
+ 
+ 	BUG_ON(!valid_dma_direction(direction));
+-	return ops->map_single(hwdev, virt_to_phys(ptr), size, direction);
++	addr = ops->map_single(hwdev, virt_to_phys(ptr), size, direction);
++	debug_dma_map_page(hwdev, virt_to_page(ptr),
++			   (unsigned long)ptr & PAGE_MASK, size, direction,
++			   addr, true);
++	return addr;
+ }
+ 
+ static inline void
+@@ -107,6 +113,7 @@ dma_unmap_single(struct device *dev, dma_addr_t addr, size_t size,
+ 	BUG_ON(!valid_dma_direction(direction));
+ 	if (ops->unmap_single)
+ 		ops->unmap_single(dev, addr, size, direction);
++	debug_dma_unmap_page(dev, addr, size, direction, true);
+ }
+ 
+ static inline int
+@@ -114,9 +121,13 @@ dma_map_sg(struct device *hwdev, struct scatterlist *sg,
+ 	   int nents, int direction)
+ {
+ 	struct dma_mapping_ops *ops = get_dma_ops(hwdev);
++	int ents;
+ 
+ 	BUG_ON(!valid_dma_direction(direction));
+-	return ops->map_sg(hwdev, sg, nents, direction);
++	ents = ops->map_sg(hwdev, sg, nents, direction);
++	debug_dma_map_sg(hwdev, sg, ents, direction);
++
++	return ents;
+ }
+ 
+ static inline void
+@@ -126,6 +137,7 @@ dma_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nents,
+ 	struct dma_mapping_ops *ops = get_dma_ops(hwdev);
+ 
+ 	BUG_ON(!valid_dma_direction(direction));
++	debug_dma_unmap_sg(hwdev, sg, nents, direction);
+ 	if (ops->unmap_sg)
+ 		ops->unmap_sg(hwdev, sg, nents, direction);
+ }
+@@ -139,6 +151,7 @@ dma_sync_single_for_cpu(struct device *hwdev, dma_addr_t dma_handle,
+ 	BUG_ON(!valid_dma_direction(direction));
+ 	if (ops->sync_single_for_cpu)
+ 		ops->sync_single_for_cpu(hwdev, dma_handle, size, direction);
++	debug_dma_sync_single_for_cpu(hwdev, dma_handle, size, direction);
+ 	flush_write_buffers();
+ }
+ 
+@@ -151,6 +164,7 @@ dma_sync_single_for_device(struct device *hwdev, dma_addr_t dma_handle,
+ 	BUG_ON(!valid_dma_direction(direction));
+ 	if (ops->sync_single_for_device)
+ 		ops->sync_single_for_device(hwdev, dma_handle, size, direction);
++	debug_dma_sync_single_for_device(hwdev, dma_handle, size, direction);
+ 	flush_write_buffers();
+ }
+ 
+@@ -164,6 +178,8 @@ dma_sync_single_range_for_cpu(struct device *hwdev, dma_addr_t dma_handle,
+ 	if (ops->sync_single_range_for_cpu)
+ 		ops->sync_single_range_for_cpu(hwdev, dma_handle, offset,
+ 					       size, direction);
++	debug_dma_sync_single_range_for_cpu(hwdev, dma_handle,
++					    offset, size, direction);
+ 	flush_write_buffers();
+ }
+ 
+@@ -178,6 +194,8 @@ dma_sync_single_range_for_device(struct device *hwdev, dma_addr_t dma_handle,
+ 	if (ops->sync_single_range_for_device)
+ 		ops->sync_single_range_for_device(hwdev, dma_handle,
+ 						  offset, size, direction);
++	debug_dma_sync_single_range_for_device(hwdev, dma_handle,
++					       offset, size, direction);
+ 	flush_write_buffers();
+ }
+ 
+@@ -190,6 +208,7 @@ dma_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg,
+ 	BUG_ON(!valid_dma_direction(direction));
+ 	if (ops->sync_sg_for_cpu)
+ 		ops->sync_sg_for_cpu(hwdev, sg, nelems, direction);
++	debug_dma_sync_sg_for_cpu(hwdev, sg, nelems, direction);
+ 	flush_write_buffers();
+ }
+ 
+@@ -202,6 +221,7 @@ dma_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg,
+ 	BUG_ON(!valid_dma_direction(direction));
+ 	if (ops->sync_sg_for_device)
+ 		ops->sync_sg_for_device(hwdev, sg, nelems, direction);
++	debug_dma_sync_sg_for_device(hwdev, sg, nelems, direction);
+ 
+ 	flush_write_buffers();
+ }
+@@ -211,16 +231,21 @@ static inline dma_addr_t dma_map_page(struct device *dev, struct page *page,
+ 				      int direction)
+ {
+ 	struct dma_mapping_ops *ops = get_dma_ops(dev);
++	dma_addr_t addr;
+ 
+ 	BUG_ON(!valid_dma_direction(direction));
+-	return ops->map_single(dev, page_to_phys(page) + offset,
++	addr = ops->map_single(dev, page_to_phys(page) + offset,
+ 			       size, direction);
++	debug_dma_map_page(dev, page, offset, size, direction, addr, false);
++	return addr;
+ }
+ 
+ static inline void dma_unmap_page(struct device *dev, dma_addr_t addr,
+ 				  size_t size, int direction)
+ {
++	BUG_ON(!valid_dma_direction(direction));
+ 	dma_unmap_single(dev, addr, size, direction);
++	debug_dma_unmap_page(dev, addr, size, direction, false);
+ }
+ 
+ static inline void
+@@ -285,8 +310,11 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
+ 	if (!ops->alloc_coherent)
+ 		return NULL;
+ 
+-	return ops->alloc_coherent(dev, size, dma_handle,
+-				   dma_alloc_coherent_gfp_flags(dev, gfp));
++	memory = ops->alloc_coherent(dev, size, dma_handle,
++				     dma_alloc_coherent_gfp_flags(dev, gfp));
++	debug_dma_alloc_coherent(dev, size, *dma_handle, memory);
++
++	return memory;
+ }
+ 
+ static inline void dma_free_coherent(struct device *dev, size_t size,
+@@ -299,6 +327,7 @@ static inline void dma_free_coherent(struct device *dev, size_t size,
+ 	if (dma_release_from_coherent(dev, get_order(size), vaddr))
+ 		return;
+ 
++	debug_dma_free_coherent(dev, size, vaddr, bus);
+ 	if (ops->free_coherent)
+ 		ops->free_coherent(dev, size, vaddr, bus);
+ }
 diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c
-index f293a8d..50d28eb 100644
+index b254285..4f03337 100644
 --- a/arch/x86/kernel/pci-dma.c
 +++ b/arch/x86/kernel/pci-dma.c
 @@ -1,4 +1,5 @@
@@ -345,10 +341,10 @@
  	intel_iommu_init();
 diff --git a/include/linux/dma-debug.h b/include/linux/dma-debug.h
 new file mode 100644
-index 0000000..8a8aae4
+index 0000000..d9f1069
 --- /dev/null
 +++ b/include/linux/dma-debug.h
-@@ -0,0 +1,160 @@
+@@ -0,0 +1,167 @@
 +/*
 + * Copyright (C) 2008 Advanced Micro Devices, Inc.
 + *
@@ -374,6 +370,7 @@
 +#include <linux/types.h>
 +
 +struct device;
++struct scatterlist;
 +
 +#ifdef CONFIG_DMA_API_DEBUG
 +
@@ -426,6 +423,8 @@
 +					 struct scatterlist *sg,
 +					 int nelems, int direction);
 +
++extern void debug_dma_dump_mappings(struct device *dev);
++
 +#else /* CONFIG_DMA_API_DEBUG */
 +
 +static inline void dma_debug_init(u32 num_entries)
@@ -506,14 +505,18 @@
 +{
 +}
 +
++static inline void debug_dma_dump_mappings(struct device *dev)
++{
++}
++
 +#endif /* CONFIG_DMA_API_DEBUG */
 +
 +#endif /* __DMA_DEBUG_H */
 diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
-index 4c9ae60..92120f7 100644
+index 29044f5..a2edc9b 100644
 --- a/lib/Kconfig.debug
 +++ b/lib/Kconfig.debug
-@@ -906,6 +906,17 @@ config DYNAMIC_PRINTK_DEBUG
+@@ -902,6 +902,17 @@ config DYNAMIC_PRINTK_DEBUG
  	  debugging for all modules. This mode can be turned off via the above
  	  disable command.
  
@@ -546,10 +549,10 @@
  
 diff --git a/lib/dma-debug.c b/lib/dma-debug.c
 new file mode 100644
-index 0000000..469e5b9
+index 0000000..9c1a498
 --- /dev/null
 +++ b/lib/dma-debug.c
-@@ -0,0 +1,753 @@
+@@ -0,0 +1,818 @@
 +/*
 + * Copyright (C) 2008 Advanced Micro Devices, Inc.
 + *
@@ -576,6 +579,7 @@
 +#include <linux/debugfs.h>
 +#include <linux/device.h>
 +#include <linux/types.h>
++#include <linux/sched.h>
 +#include <linux/list.h>
 +#include <linux/slab.h>
 +
@@ -603,7 +607,7 @@
 +struct hash_bucket {
 +	struct list_head list;
 +	spinlock_t lock;
-+} __cacheline_aligned_in_smp;
++} ____cacheline_aligned_in_smp;
 +
 +/* Hash list to save the allocated dma addresses */
 +static struct hash_bucket dma_entry_hash[HASH_SIZE];
@@ -743,6 +747,36 @@
 +}
 +
 +/*
++ * Dump mapping entries for debugging purposes
++ */
++void debug_dma_dump_mappings(struct device *dev)
++{
++	int idx;
++
++	for (idx = 0; idx < HASH_SIZE; idx++) {
++		struct hash_bucket *bucket = &dma_entry_hash[idx];
++		struct dma_debug_entry *entry;
++		unsigned long flags;
++
++		spin_lock_irqsave(&bucket->lock, flags);
++
++		list_for_each_entry(entry, &bucket->list, list) {
++			if (!dev || dev == entry->dev) {
++				dev_info(entry->dev,
++					 "%s idx %d P=%Lx D=%Lx L=%Lx %s\n",
++					 type2name[entry->type], idx,
++					 (unsigned long long)entry->paddr,
++					 entry->dev_addr, entry->size,
++					 dir2name[entry->direction]);
++			}
++		}
++
++			spin_unlock_irqrestore(&bucket->lock, flags);
++	}
++}
++EXPORT_SYMBOL(debug_dma_dump_mappings);
++
++/*
 + * Wrapper function for adding an entry to the hash.
 + * This function takes care of locking itself.
 + */
@@ -1005,7 +1039,7 @@
 +			   "[device address=0x%016llx] [size=%llu bytes] "
 +			   "[cpu alloc address=%p] [cpu free address=%p]",
 +			   ref->dev_addr, ref->size,
-+			   entry->paddr, ref->paddr);
++			   (void *)entry->paddr, (void *)ref->paddr);
 +	}
 +
 +	/*
@@ -1029,6 +1063,13 @@
 +	put_hash_bucket(bucket, &flags);
 +}
 +
++static void check_for_stack(struct device *dev, void *addr)
++{
++	if (object_is_on_stack(addr))
++		err_printk(dev, "DMA-API: device driver maps memory from stack"
++				" [addr=%p]\n", addr);
++}
++
 +static void check_sync(struct device *dev, dma_addr_t addr,
 +		       u64 size, u64 offset, int direction, bool to_cpu)
 +{
@@ -1073,6 +1114,29 @@
 +				dir2name[direction]);
 +	}
 +
++	if (entry->direction == DMA_BIDIRECTIONAL)
++		goto out;
++
++	if (to_cpu && !(entry->direction == DMA_FROM_DEVICE) &&
++		      !(direction == DMA_TO_DEVICE))
++		err_printk(dev, "DMA-API: device driver syncs "
++				"device read-only DMA memory for cpu "
++				"[device address=0x%016llx] [size=%llu bytes] "
++				"[mapped with %s] [synced with %s]\n",
++				addr, entry->size,
++				dir2name[entry->direction],
++				dir2name[direction]);
++
++	if (!to_cpu && !(entry->direction == DMA_TO_DEVICE) &&
++		       !(direction == DMA_FROM_DEVICE))
++		err_printk(dev, "DMA-API: device driver syncs "
++				"device write-only DMA memory to device "
++				"[device address=0x%016llx] [size=%llu bytes] "
++				"[mapped with %s] [synced with %s]\n",
++				addr, entry->size,
++				dir2name[entry->direction],
++				dir2name[direction]);
++
 +out:
 +	put_hash_bucket(bucket, &flags);
 +
@@ -1101,8 +1165,10 @@
 +	entry->size      = size;
 +	entry->direction = direction;
 +
-+	if (map_single)
++	if (map_single) {
 +		entry->type = dma_debug_single;
++		check_for_stack(dev, page_address(page) + offset);
++	}
 +
 +	add_dma_entry(entry);
 +}
@@ -1151,6 +1217,8 @@
 +		entry->dev_addr  = s->dma_address;
 +		entry->direction = direction;
 +
++		check_for_stack(dev, sg_virt(s));
++
 +		add_dma_entry(entry);
 +	}
 +}
@@ -1303,161 +1371,3 @@
 +}
 +EXPORT_SYMBOL(debug_dma_sync_sg_for_device);
 +
-diff --git a/arch/x86/include/asm/dma-mapping.h b/arch/x86/include/asm/dma-mapping.h
-index 5a34780..6a5e070 100644
---- a/arch/x86/include/asm/dma-mapping.h
-+++ b/arch/x86/include/asm/dma-mapping.h
-@@ -7,6 +7,7 @@
-  */
- 
- #include <linux/scatterlist.h>
-+#include <linux/dma-debug.h>
- #include <asm/io.h>
- #include <asm/swiotlb.h>
- #include <asm-generic/dma-coherent.h>
-@@ -93,9 +94,14 @@ dma_map_single(struct device *hwdev, voi
- 	       int direction)
- {
- 	struct dma_mapping_ops *ops = get_dma_ops(hwdev);
-+	dma_addr_t addr;
- 
- 	BUG_ON(!valid_dma_direction(direction));
--	return ops->map_single(hwdev, virt_to_phys(ptr), size, direction);
-+	addr = ops->map_single(hwdev, virt_to_phys(ptr), size, direction);
-+	debug_dma_map_page(hwdev, virt_to_page(ptr),
-+			  (unsigned long)ptr & ~PAGE_MASK, size,
-+			  direction, addr, true);
-+	return addr;
- }
- 
- static inline void
-@@ -107,6 +113,7 @@ dma_unmap_single(struct device *dev, dma
- 	BUG_ON(!valid_dma_direction(direction));
- 	if (ops->unmap_single)
- 		ops->unmap_single(dev, addr, size, direction);
-+	debug_dma_unmap_page(dev, addr, size, direction, true);
- }
- 
- static inline int
-@@ -114,9 +121,12 @@ dma_map_sg(struct device *hwdev, struct 
- 	   int nents, int direction)
- {
- 	struct dma_mapping_ops *ops = get_dma_ops(hwdev);
-+	int ents;
- 
- 	BUG_ON(!valid_dma_direction(direction));
--	return ops->map_sg(hwdev, sg, nents, direction);
-+	ents = ops->map_sg(hwdev, sg, nents, direction);
-+	debug_dma_map_sg(hwdev, sg, ents, direction);
-+	return ents;
- }
- 
- static inline void
-@@ -126,6 +136,7 @@ dma_unmap_sg(struct device *hwdev, struc
- 	struct dma_mapping_ops *ops = get_dma_ops(hwdev);
- 
- 	BUG_ON(!valid_dma_direction(direction));
-+	debug_dma_unmap_sg(hwdev, sg, nents, direction);
- 	if (ops->unmap_sg)
- 		ops->unmap_sg(hwdev, sg, nents, direction);
- }
-@@ -139,6 +150,7 @@ dma_sync_single_for_cpu(struct device *h
- 	BUG_ON(!valid_dma_direction(direction));
- 	if (ops->sync_single_for_cpu)
- 		ops->sync_single_for_cpu(hwdev, dma_handle, size, direction);
-+	debug_dma_sync_single_for_cpu(hwdev, dma_handle, size, direction);
- 	flush_write_buffers();
- }
- 
-@@ -151,6 +163,7 @@ dma_sync_single_for_device(struct device
- 	BUG_ON(!valid_dma_direction(direction));
- 	if (ops->sync_single_for_device)
- 		ops->sync_single_for_device(hwdev, dma_handle, size, direction);
-+	debug_dma_sync_single_for_device(hwdev, dma_handle, size, direction);
- 	flush_write_buffers();
- }
- 
-@@ -164,6 +177,8 @@ dma_sync_single_range_for_cpu(struct dev
- 	if (ops->sync_single_range_for_cpu)
- 		ops->sync_single_range_for_cpu(hwdev, dma_handle, offset,
- 					       size, direction);
-+	debug_dma_sync_single_range_for_cpu(hwdev, dma_handle,
-+					    offset, size, direction);
- 	flush_write_buffers();
- }
- 
-@@ -178,6 +193,8 @@ dma_sync_single_range_for_device(struct 
- 	if (ops->sync_single_range_for_device)
- 		ops->sync_single_range_for_device(hwdev, dma_handle,
- 						  offset, size, direction);
-+	debug_dma_sync_single_range_for_device(hwdev, dma_handle,
-+					       offset, size, direction);
- 	flush_write_buffers();
- }
- 
-@@ -190,6 +207,7 @@ dma_sync_sg_for_cpu(struct device *hwdev
- 	BUG_ON(!valid_dma_direction(direction));
- 	if (ops->sync_sg_for_cpu)
- 		ops->sync_sg_for_cpu(hwdev, sg, nelems, direction);
-+	debug_dma_sync_sg_for_cpu(hwdev, sg, nelems, direction);
- 	flush_write_buffers();
- }
- 
-@@ -202,6 +220,7 @@ dma_sync_sg_for_device(struct device *hw
- 	BUG_ON(!valid_dma_direction(direction));
- 	if (ops->sync_sg_for_device)
- 		ops->sync_sg_for_device(hwdev, sg, nelems, direction);
-+	debug_dma_sync_sg_for_device(hwdev, sg, nelems, direction);
- 
- 	flush_write_buffers();
- }
-@@ -211,16 +230,25 @@ static inline dma_addr_t dma_map_page(st
- 				      int direction)
- {
- 	struct dma_mapping_ops *ops = get_dma_ops(dev);
-+	dma_addr_t addr;
- 
- 	BUG_ON(!valid_dma_direction(direction));
--	return ops->map_single(dev, page_to_phys(page) + offset,
-+	addr = ops->map_single(dev, page_to_phys(page) + offset,
- 			       size, direction);
-+	debug_dma_map_page(dev, page, offset, size, direction, addr, false);
-+
-+	return addr;
- }
- 
- static inline void dma_unmap_page(struct device *dev, dma_addr_t addr,
- 				  size_t size, int direction)
- {
--	dma_unmap_single(dev, addr, size, direction);
-+	struct dma_mapping_ops *ops = get_dma_ops(dev);
-+
-+	BUG_ON(!valid_dma_direction(direction));
-+	if (ops->unmap_single)
-+		ops->unmap_single(dev, addr, size, direction);
-+	debug_dma_unmap_page(dev, addr, size, direction, true);
- }
- 
- static inline void
-@@ -285,8 +312,11 @@ dma_alloc_coherent(struct device *dev, s
- 	if (!ops->alloc_coherent)
- 		return NULL;
- 
--	return ops->alloc_coherent(dev, size, dma_handle,
--				   dma_alloc_coherent_gfp_flags(dev, gfp));
-+	memory = ops->alloc_coherent(dev, size, dma_handle,
-+				     dma_alloc_coherent_gfp_flags(dev, gfp));
-+	debug_dma_alloc_coherent(dev, size, *dma_handle, memory);
-+
-+	return memory;
- }
- 
- static inline void dma_free_coherent(struct device *dev, size_t size,
-@@ -299,6 +329,7 @@ static inline void dma_free_coherent(str
- 	if (dma_release_from_coherent(dev, get_order(size), vaddr))
- 		return;
- 
-+	debug_dma_free_coherent(dev, size, vaddr, bus);
- 	if (ops->free_coherent)
- 		ops->free_coherent(dev, size, vaddr, bus);
- }


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/sources,v
retrieving revision 1.976.2.4
retrieving revision 1.976.2.5
diff -u -r1.976.2.4 -r1.976.2.5
--- sources	23 Feb 2009 20:07:05 -0000	1.976.2.4
+++ sources	25 Feb 2009 21:26:01 -0000	1.976.2.5
@@ -1,2 +1,3 @@
 d351e44709c9810b85e29b877f50968a  linux-2.6.28.tar.bz2
 26f67d99666834cc579094619821d3c8  patch-2.6.29-rc6.bz2
+d693f91cabf1acbd4dd6b737bf72351e  patch-2.6.29-rc6-git2.bz2


Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/upstream,v
retrieving revision 1.888.2.3
retrieving revision 1.888.2.4
diff -u -r1.888.2.3 -r1.888.2.4
--- upstream	23 Feb 2009 20:07:05 -0000	1.888.2.3
+++ upstream	25 Feb 2009 21:26:01 -0000	1.888.2.4
@@ -1,2 +1,3 @@
 linux-2.6.28.tar.bz2
 patch-2.6.29-rc6.bz2
+patch-2.6.29-rc6-git2.bz2

xen.pvops.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.1.2.5 -r 1.1.2.6 xen.pvops.patch
Index: xen.pvops.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/Attic/xen.pvops.patch,v
retrieving revision 1.1.2.5
retrieving revision 1.1.2.6
diff -u -r1.1.2.5 -r1.1.2.6
--- xen.pvops.patch	23 Feb 2009 23:31:47 -0000	1.1.2.5
+++ xen.pvops.patch	25 Feb 2009 21:26:01 -0000	1.1.2.6
@@ -1601,7 +1601,7 @@
 +More details can be found in the source code, in the
 +kernel/tracing/*.c files.
 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
-index 319785b..4a77008 100644
+index 319785b..5e7b9e4 100644
 --- a/Documentation/kernel-parameters.txt
 +++ b/Documentation/kernel-parameters.txt
 @@ -49,6 +49,7 @@ parameter is applicable:
@@ -1612,7 +1612,21 @@
  	LIBATA  Libata driver is enabled
  	LP	Printer support is enabled.
  	LOOP	Loopback device support is enabled.
-@@ -1045,6 +1046,15 @@ and is between 256 and 4096 characters. It is defined in the file
+@@ -492,10 +493,12 @@ and is between 256 and 4096 characters. It is defined in the file
+ 			Default: 64
+ 
+ 	hpet=		[X86-32,HPET] option to control HPET usage
+-			Format: { enable (default) | disable | force }
++			Format: { enable (default) | disable | force |
++				verbose }
+ 			disable: disable HPET and use PIT instead
+ 			force: allow force enabled of undocumented chips (ICH4,
+ 			VIA, nVidia)
++			verbose: show contents of HPET registers during setup
+ 
+ 	com20020=	[HW,NET] ARCnet - COM20020 chipset
+ 			Format:
+@@ -1045,6 +1048,15 @@ and is between 256 and 4096 characters. It is defined in the file
  			use the HighMem zone if it exists, and the Normal
  			zone if it does not.
  
@@ -7129,7 +7143,7 @@
  		seq_printf(p, " %14s", irq_desc[i].chip->typename);
  		seq_printf(p, "  %s", action->name);
 diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
-index 9c39095..8dd9a78 100644
+index 9c39095..4bc6cf9 100644
 --- a/arch/x86/Kconfig
 +++ b/arch/x86/Kconfig
 @@ -5,7 +5,7 @@ mainmenu "Linux Kernel Configuration for x86"
@@ -7239,7 +7253,7 @@
  	  This enables support for sparse irqs. This is useful for distro
  	  kernels that want to define a high CONFIG_NR_CPUS value but still
  	  want to have low kernel memory footprint on smaller machines.
-@@ -265,137 +267,155 @@ config NUMA_MIGRATE_IRQ_DESC
+@@ -265,114 +267,140 @@ config NUMA_MIGRATE_IRQ_DESC
  	bool "Move irq desc when changing irq smp_affinity"
  	depends on SPARSE_IRQ && NUMA
  	default n
@@ -7275,6 +7289,7 @@
 -	bool "PC-compatible"
 -	help
 -	  Choose this option if your computer is a standard PC or compatible.
++if X86_32
 +config X86_EXTENDED_PLATFORM
 +	bool "Support for extended (non-PC) x86 platforms"
 +	default y
@@ -7283,12 +7298,36 @@
 +	  standard PC platforms. (which covers the vast majority of
 +	  systems out there.)
 +
-+	  If you enable this option then you'll be able to select a number
-+	  of non-PC x86 platforms.
++	  If you enable this option then you'll be able to select support
++	  for the following (non-PC) 32 bit x86 platforms:
++		AMD Elan
++		NUMAQ (IBM/Sequent)
++		RDC R-321x SoC
++		SGI 320/540 (Visual Workstation)
++		Summit/EXA (IBM x440)
++		Unisys ES7000 IA32 series
 +
 +	  If you have one of these systems, or if you want to build a
 +	  generic distribution kernel, say Y here - otherwise say N.
++endif
++
++if X86_64
++config X86_EXTENDED_PLATFORM
++	bool "Support for extended (non-PC) x86 platforms"
++	default y
++	---help---
++	  If you disable this option then the kernel will only support
++	  standard PC platforms. (which covers the vast majority of
++	  systems out there.)
 +
++	  If you enable this option then you'll be able to select support
++	  for the following (non-PC) 64 bit x86 platforms:
++		ScaleMP vSMP
++		SGI Ultraviolet
++
++	  If you have one of these systems, or if you want to build a
++	  generic distribution kernel, say Y here - otherwise say N.
++endif
 +# This is an alphabetically sorted list of 64 bit extended platforms
 +# Please maintain the alphabetic order if and when there are additions
 +
@@ -7380,38 +7419,20 @@
  	  of Flat Logical.  You will need a new lynxer.elf file to flash your
  	  firmware with - send email to <Martin.Bligh at us.ibm.com>.
  
-+config X86_VISWS
-+	bool "SGI 320/540 (Visual Workstation)"
-+	depends on X86_32 && PCI && X86_MPPARSE && PCI_GODIRECT
-+	depends on X86_32_NON_STANDARD
-+	---help---
-+	  The SGI Visual Workstation series is an IA32-based workstation
-+	  based on SGI systems chips with some legacy PC hardware attached.
-+
-+	  Say Y here to create a kernel to run on the SGI 320 or 540.
-+
-+	  A kernel compiled for the Visual Workstation will run on general
-+	  PCs as well. See <file:Documentation/sgi-visws.txt> for details.
-+
- config X86_SUMMIT
- 	bool "Summit/EXA (IBM x440)"
+-config X86_SUMMIT
+-	bool "Summit/EXA (IBM x440)"
 -	depends on X86_32 && SMP
 -	help
-+	depends on X86_32_NON_STANDARD
-+	---help---
- 	  This option is needed for IBM systems that use the Summit/EXA chipset.
- 	  In particular, it is needed for the x440.
- 
- config X86_ES7000
+-	  This option is needed for IBM systems that use the Summit/EXA chipset.
+-	  In particular, it is needed for the x440.
+-
+-config X86_ES7000
 -	bool "Support for Unisys ES7000 IA32 series"
 -	depends on X86_32 && SMP
 -	help
-+	bool "Unisys ES7000 IA32 series"
-+	depends on X86_32_NON_STANDARD && X86_BIGSMP
-+	---help---
- 	  Support for Unisys ES7000 systems.  Say 'Y' here if this kernel is
- 	  supposed to run on an IA32-based Unisys ES7000 system.
- 
+-	  Support for Unisys ES7000 systems.  Say 'Y' here if this kernel is
+-	  supposed to run on an IA32-based Unisys ES7000 system.
+-
 -config X86_BIGSMP
 -	bool "Support for big SMP systems with more than 8 CPUs"
 -	depends on X86_32 && SMP
@@ -7432,25 +7453,19 @@
 -
 -endchoice
 -
--config X86_VISWS
--	bool "SGI 320/540 (Visual Workstation)"
+ config X86_VISWS
+ 	bool "SGI 320/540 (Visual Workstation)"
 -	depends on X86_32 && PCI && !X86_VOYAGER && X86_MPPARSE && PCI_GODIRECT
 -	help
--	  The SGI Visual Workstation series is an IA32-based workstation
--	  based on SGI systems chips with some legacy PC hardware attached.
--
--	  Say Y here to create a kernel to run on the SGI 320 or 540.
-+config X86_VOYAGER
-+	bool "Voyager (NCR)"
-+	depends on SMP && !PCI && BROKEN
++	depends on X86_32 && PCI && X86_MPPARSE && PCI_GODIRECT
 +	depends on X86_32_NON_STANDARD
 +	---help---
-+	  Voyager is an MCA-based 32-way capable SMP architecture proprietary
-+	  to NCR Corp.  Machine classes 345x/35xx/4100/51xx are Voyager-based.
+ 	  The SGI Visual Workstation series is an IA32-based workstation
+ 	  based on SGI systems chips with some legacy PC hardware attached.
  
--	  A kernel compiled for the Visual Workstation will run on general
--	  PCs as well. See <file:Documentation/sgi-visws.txt> for details.
-+	  *** WARNING ***
+@@ -381,21 +409,25 @@ config X86_VISWS
+ 	  A kernel compiled for the Visual Workstation will run on general
+ 	  PCs as well. See <file:Documentation/sgi-visws.txt> for details.
  
 -config X86_RDC321X
 -	bool "RDC R-321x SoC"
@@ -7461,8 +7476,19 @@
 -	  This option is needed for RDC R-321x system-on-chip, also known
 -	  as R-8610-(G).
 -	  If you don't have one of these chips, you should say N here.
-+	  If you do not specifically know you have a Voyager based machine,
-+	  say N here, otherwise the kernel you build will not be bootable.
++config X86_SUMMIT
++	bool "Summit/EXA (IBM x440)"
++	depends on X86_32_NON_STANDARD
++	---help---
++	  This option is needed for IBM systems that use the Summit/EXA chipset.
++	  In particular, it is needed for the x440.
++
[...10978 lines suppressed...]
  static int __init setup_slub_min_order(char *str)
-@@ -2537,7 +2582,7 @@ panic:
+@@ -2537,7 +2594,7 @@ panic:
  }
  
  #ifdef CONFIG_ZONE_DMA
@@ -102509,7 +108095,7 @@
  
  static void sysfs_add_func(struct work_struct *w)
  {
-@@ -2583,7 +2628,8 @@ static noinline struct kmem_cache *dma_kmalloc_cache(int index, gfp_t flags)
+@@ -2583,7 +2640,8 @@ static noinline struct kmem_cache *dma_kmalloc_cache(int index, gfp_t flags)
  
  	if (!s || !text || !kmem_cache_open(s, flags, text,
  			realsize, ARCH_KMALLOC_MINALIGN,
@@ -102519,7 +108105,7 @@
  		kfree(s);
  		kfree(text);
  		goto unlock_out;
-@@ -2657,8 +2703,9 @@ static struct kmem_cache *get_slab(size_t size, gfp_t flags)
+@@ -2657,8 +2715,9 @@ static struct kmem_cache *get_slab(size_t size, gfp_t flags)
  void *__kmalloc(size_t size, gfp_t flags)
  {
  	struct kmem_cache *s;
@@ -102530,7 +108116,7 @@
  		return kmalloc_large(size, flags);
  
  	s = get_slab(size, flags);
-@@ -2666,7 +2713,12 @@ void *__kmalloc(size_t size, gfp_t flags)
+@@ -2666,15 +2725,21 @@ void *__kmalloc(size_t size, gfp_t flags)
  	if (unlikely(ZERO_OR_NULL_PTR(s)))
  		return s;
  
@@ -102544,7 +108130,18 @@
  }
  EXPORT_SYMBOL(__kmalloc);
  
-@@ -2685,16 +2737,30 @@ static void *kmalloc_large_node(size_t size, gfp_t flags, int node)
+ static void *kmalloc_large_node(size_t size, gfp_t flags, int node)
+ {
+-	struct page *page = alloc_pages_node(node, flags | __GFP_COMP,
+-						get_order(size));
++	struct page *page;
+ 
++	flags |= __GFP_COMP | __GFP_NOTRACK;
++	page = alloc_pages_node(node, flags, get_order(size));
+ 	if (page)
+ 		return page_address(page);
+ 	else
+@@ -2685,16 +2750,30 @@ static void *kmalloc_large_node(size_t size, gfp_t flags, int node)
  void *__kmalloc_node(size_t size, gfp_t flags, int node)
  {
  	struct kmem_cache *s;
@@ -102578,7 +108175,7 @@
  }
  EXPORT_SYMBOL(__kmalloc_node);
  #endif
-@@ -2753,6 +2819,8 @@ void kfree(const void *x)
+@@ -2753,6 +2832,8 @@ void kfree(const void *x)
  		return;
  	}
  	slab_free(page->slab, page, object, _RET_IP_);
@@ -102587,7 +108184,7 @@
  }
  EXPORT_SYMBOL(kfree);
  
-@@ -2986,7 +3054,7 @@ void __init kmem_cache_init(void)
+@@ -2986,7 +3067,7 @@ void __init kmem_cache_init(void)
  		caches++;
  	}
  
@@ -102596,7 +108193,7 @@
  		create_kmalloc_cache(&kmalloc_caches[i],
  			"kmalloc", 1 << i, GFP_KERNEL);
  		caches++;
-@@ -3023,7 +3091,7 @@ void __init kmem_cache_init(void)
+@@ -3023,7 +3104,7 @@ void __init kmem_cache_init(void)
  	slab_state = UP;
  
  	/* Provide the correct kmalloc names now that the caches are up */
@@ -102605,7 +108202,7 @@
  		kmalloc_caches[i]. name =
  			kasprintf(GFP_KERNEL, "kmalloc-%d", 1 << i);
  
-@@ -3222,8 +3290,9 @@ static struct notifier_block __cpuinitdata slab_notifier = {
+@@ -3222,8 +3303,9 @@ static struct notifier_block __cpuinitdata slab_notifier = {
  void *__kmalloc_track_caller(size_t size, gfp_t gfpflags, unsigned long caller)
  {
  	struct kmem_cache *s;
@@ -102616,7 +108213,7 @@
  		return kmalloc_large(size, gfpflags);
  
  	s = get_slab(size, gfpflags);
-@@ -3231,15 +3300,22 @@ void *__kmalloc_track_caller(size_t size, gfp_t gfpflags, unsigned long caller)
+@@ -3231,15 +3313,22 @@ void *__kmalloc_track_caller(size_t size, gfp_t gfpflags, unsigned long caller)
  	if (unlikely(ZERO_OR_NULL_PTR(s)))
  		return s;
  
@@ -102641,7 +108238,7 @@
  		return kmalloc_large_node(size, gfpflags, node);
  
  	s = get_slab(size, gfpflags);
-@@ -3247,7 +3323,13 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
+@@ -3247,7 +3336,13 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
  	if (unlikely(ZERO_OR_NULL_PTR(s)))
  		return s;
  
@@ -102656,7 +108253,7 @@
  }
  
  #ifdef CONFIG_SLUB_DEBUG
-@@ -4302,6 +4384,8 @@ static char *create_unique_id(struct kmem_cache *s)
+@@ -4302,6 +4397,8 @@ static char *create_unique_id(struct kmem_cache *s)
  		*p++ = 'a';
  	if (s->flags & SLAB_DEBUG_FREE)
  		*p++ = 'F';
@@ -102705,10 +108302,36 @@
  	help
  	  If you say Y here, you will get experimental support for
 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
-index da74b84..18a1580 100644
+index c6a6b16..e83e994 100644
 --- a/net/core/skbuff.c
 +++ b/net/core/skbuff.c
-@@ -248,7 +248,7 @@ nodata:
+@@ -39,6 +39,7 @@
+ #include <linux/module.h>
+ #include <linux/types.h>
+ #include <linux/kernel.h>
++#include <linux/kmemcheck.h>
+ #include <linux/mm.h>
+ #include <linux/interrupt.h>
+ #include <linux/in.h>
+@@ -197,6 +198,8 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask,
+ 	skb->data = data;
+ 	skb_reset_tail_pointer(skb);
+ 	skb->end = skb->tail + size;
++	kmemcheck_annotate_bitfield(skb->flags1);
++	kmemcheck_annotate_bitfield(skb->flags2);
+ 	/* make sure we initialize shinfo sequentially */
+ 	shinfo = skb_shinfo(skb);
+ 	atomic_set(&shinfo->dataref, 1);
+@@ -211,6 +214,8 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask,
+ 		struct sk_buff *child = skb + 1;
+ 		atomic_t *fclone_ref = (atomic_t *) (child + 1);
+ 
++		kmemcheck_annotate_bitfield(child->flags1);
++		kmemcheck_annotate_bitfield(child->flags2);
+ 		skb->fclone = SKB_FCLONE_ORIG;
+ 		atomic_set(fclone_ref, 1);
+ 
+@@ -240,7 +245,7 @@ nodata:
  struct sk_buff *__netdev_alloc_skb(struct net_device *dev,
  		unsigned int length, gfp_t gfp_mask)
  {
@@ -102717,6 +108340,16 @@
  	struct sk_buff *skb;
  
  	skb = __alloc_skb(length + NET_SKB_PAD, gfp_mask, 0, node);
+@@ -600,6 +605,9 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
+ 		n = kmem_cache_alloc(skbuff_head_cache, gfp_mask);
+ 		if (!n)
+ 			return NULL;
++
++		kmemcheck_annotate_bitfield(n->flags1);
++		kmemcheck_annotate_bitfield(n->flags2);
+ 		n->fclone = SKB_FCLONE_UNAVAILABLE;
+ 	}
+ 
 diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
 index 309997e..d519a6a 100644
 --- a/net/ipv4/devinet.c
@@ -102744,6 +108377,27 @@
  
  		DEVINET_SYSCTL_FLUSHING_ENTRY(NOXFRM, "disable_xfrm"),
  		DEVINET_SYSCTL_FLUSHING_ENTRY(NOPOLICY, "disable_policy"),
+diff --git a/net/ipv4/inet_timewait_sock.c b/net/ipv4/inet_timewait_sock.c
+index 8554d0e..3369237 100644
+--- a/net/ipv4/inet_timewait_sock.c
++++ b/net/ipv4/inet_timewait_sock.c
+@@ -9,6 +9,7 @@
+  */
+ 
+ #include <linux/kernel.h>
++#include <linux/kmemcheck.h>
+ #include <net/inet_hashtables.h>
+ #include <net/inet_timewait_sock.h>
+ #include <net/ip.h>
+@@ -117,6 +118,8 @@ struct inet_timewait_sock *inet_twsk_alloc(const struct sock *sk, const int stat
+ 	if (tw != NULL) {
+ 		const struct inet_sock *inet = inet_sk(sk);
+ 
++		kmemcheck_annotate_bitfield(tw->flags);
++
+ 		/* Give us an identity. */
+ 		tw->tw_daddr	    = inet->daddr;
+ 		tw->tw_rcv_saddr    = inet->rcv_saddr;
 diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
 index e01061f..f7ad2fd 100644
 --- a/net/netfilter/ipvs/ip_vs_ctl.c

xen.pvops.post.patch:

Index: xen.pvops.post.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/Attic/xen.pvops.post.patch,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- xen.pvops.post.patch	19 Feb 2009 20:28:15 -0000	1.1.2.2
+++ xen.pvops.post.patch	25 Feb 2009 21:26:02 -0000	1.1.2.3
@@ -22,6 +22,19 @@
  			/*
  			 * die_nmi will return ONLY if NOTIFY_STOP happens..
  			 */
+--- a/drivers/pci/pci.h	2009-02-25 20:16:13.000000000 +0000
++++ b/drivers/pci/pci.h	2009-02-25 20:40:21.000000000 +0000
+@@ -111,8 +111,10 @@
+ extern unsigned int pci_pm_d3_delay;
+ 
+ #ifdef CONFIG_PCI_MSI
++void pci_yes_msi(void);
+ extern void pci_msi_init_pci_dev(struct pci_dev *dev);
+ #else
++static inline void pci_yes_msi(void) { }
+ static inline void pci_msi_init_pci_dev(struct pci_dev *dev) { }
+ #endif
+ 
 --- a/localversion-tip	2009-02-17 19:49:34.000000000 +0000
 +++ /dev/null	2009-02-17 18:08:14.005240123 +0000
 @@ -1 +0,0 @@

xen.pvops.pre.patch:

Index: xen.pvops.pre.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/Attic/xen.pvops.pre.patch,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- xen.pvops.pre.patch	19 Feb 2009 20:28:15 -0000	1.1.2.2
+++ xen.pvops.pre.patch	25 Feb 2009 21:26:02 -0000	1.1.2.3
@@ -24,3 +24,17 @@
  			/*
  			 * die_nmi will return ONLY if NOTIFY_STOP happens..
  			 */
+--- a/drivers/pci/pci.h	2009-02-25 20:40:21.000000000 +0000
++++ b/drivers/pci/pci.h	2009-02-25 20:16:13.000000000 +0000
+@@ -111,11 +111,9 @@
+ 
+ #ifdef CONFIG_PCI_MSI
+ void pci_no_msi(void);
+-void pci_yes_msi(void);
+ extern void pci_msi_init_pci_dev(struct pci_dev *dev);
+ #else
+ static inline void pci_no_msi(void) { }
+-static inline void pci_yes_msi(void) { }
+ static inline void pci_msi_init_pci_dev(struct pci_dev *dev) { }
+ #endif
+ 


--- linux-2.6-ext4-ENOSPC-debug.patch DELETED ---




More information about the scm-commits mailing list