rpms/kernel/devel drm-connection-cache.patch, NONE, 1.2.2.2 linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch, NONE, 1.1.2.2 linux-2.6.31.tar.bz2.sign, NONE, 1.1.2.2 .cvsignore, 1.1014.2.29, 1.1014.2.30 config-generic, 1.238.6.38, 1.238.6.39 config-s390x, 1.11.6.4, 1.11.6.5 drm-next.patch, 1.6.6.9, 1.6.6.10 drm-nouveau.patch, 1.8.6.16, 1.8.6.17 drm-page-flip.patch, 1.2.6.4, 1.2.6.5 drm-vga-arb.patch, 1.5.2.3, 1.5.2.4 kernel.spec, 1.1294.2.64, 1.1294.2.65 linux-2.6-nfsd4-proots.patch, 1.1.2.2, 1.1.2.3 sources, 1.976.2.30, 1.976.2.31 upstream, 1.888.2.29, 1.888.2.30 xen.pvops.patch, 1.1.2.40, 1.1.2.41 drm-ddc-caching-bug.patch, 1.1.2.2, NONE drm-god-shut-up-about-edid-already.patch, 1.1.2.2, NONE drm-r600-kms.patch, 1.1.2.4, NONE drm-rv710-ucode-fix.patch, 1.1.2.2, NONE linux-2.6.30.tar.bz2.sign, 1.1.2.2, NONE patch-2.6.31-rc8-git2.bz2.sign, 1.1.2.2, NONE patch-2.6.31-rc8.bz2.sign, 1.1.2.2, NONE
myoung
myoung at fedoraproject.org
Thu Sep 10 14:00:54 UTC 2009
Author: myoung
Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv23154
Modified Files:
Tag: private-myoung-dom0-branch
.cvsignore config-generic config-s390x drm-next.patch
drm-nouveau.patch drm-page-flip.patch drm-vga-arb.patch
kernel.spec linux-2.6-nfsd4-proots.patch sources upstream
xen.pvops.patch
Added Files:
Tag: private-myoung-dom0-branch
drm-connection-cache.patch
linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch
linux-2.6.31.tar.bz2.sign
Removed Files:
Tag: private-myoung-dom0-branch
drm-ddc-caching-bug.patch
drm-god-shut-up-about-edid-already.patch drm-r600-kms.patch
drm-rv710-ucode-fix.patch linux-2.6.30.tar.bz2.sign
patch-2.6.31-rc8-git2.bz2.sign patch-2.6.31-rc8.bz2.sign
Log Message:
Update pvops and get to 2.6.31
drm-connection-cache.patch:
linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c | 12 ++++++++++++
linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c | 9 ++++++++-
linux-2.6.30.noarch/include/drm/drm_crtc.h | 1 +
linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c | 3 ++-
4 files changed, 23 insertions(+), 2 deletions(-)
--- NEW FILE drm-connection-cache.patch ---
diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c.jx linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c
--- linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c.jx 2009-09-09 08:57:39.000000000 -0400
+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c 2009-09-09 09:35:24.000000000 -0400
@@ -92,6 +92,18 @@ int drm_helper_probe_single_connector_mo
connector->status = connector->funcs->detect(connector);
+ /* fast path if the driver tracks disconnection */
+ if (connector->status == connector_status_cached) {
+ DRM_DEBUG_KMS("%s still connected\n",
+ drm_get_connector_name(connector));
+ list_for_each_entry_safe(mode, t, &connector->modes, head) {
+ count++;
+ mode->status = MODE_OK;
+ }
+ connector->status = connector_status_connected;
+ return count;
+ }
+
if (connector->status == connector_status_disconnected) {
DRM_DEBUG_KMS("%s is disconnected\n",
drm_get_connector_name(connector));
diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c.jx linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c
--- linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c.jx 2009-09-09 08:57:39.000000000 -0400
+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c 2009-09-09 09:56:18.000000000 -0400
@@ -593,7 +593,14 @@ static void intel_lvds_mode_set(struct d
*/
static enum drm_connector_status intel_lvds_detect(struct drm_connector *connector)
{
- return connector_status_connected;
+ static int done;
+
+ if (!done) {
+ done = 1;
+ return connector_status_connected;
+ } else {
+ return connector_status_cached;
+ }
}
/**
diff -up linux-2.6.30.noarch/include/drm/drm_crtc.h.jx linux-2.6.30.noarch/include/drm/drm_crtc.h
--- linux-2.6.30.noarch/include/drm/drm_crtc.h.jx 2009-09-09 08:57:39.000000000 -0400
+++ linux-2.6.30.noarch/include/drm/drm_crtc.h 2009-09-09 09:35:24.000000000 -0400
@@ -172,6 +172,7 @@ enum drm_connector_status {
connector_status_connected = 1,
connector_status_disconnected = 2,
connector_status_unknown = 3,
+ connector_status_cached = 4,
};
enum subpixel_order {
diff -up linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c.jx linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c
--- linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c.jx 2009-09-09 10:10:44.000000000 -0400
+++ linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c 2009-09-09 11:23:14.000000000 -0400
@@ -185,7 +185,8 @@ EXPORT_SYMBOL(drm_get_connector_name);
char *drm_get_connector_status_name(enum drm_connector_status status)
{
- if (status == connector_status_connected)
+ if (status == connector_status_connected ||
+ status == connector_status_cached)
return "connected";
else if (status == connector_status_disconnected)
return "disconnected";
linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch:
virtio_blk.c | 1 -
1 file changed, 1 deletion(-)
--- NEW FILE linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch ---
Subject: [for-2.6.31] virtio_blk: revert QUEUE_FLAG_VIRT addition
Date: Fri, 04 Sep 2009 20:44:42 -0000
From: Christoph Hellwig <hch at lst.de>
It seems like the addition of QUEUE_FLAG_VIRT caueses major performance
regressions for Fedora users:
https://bugzilla.redhat.com/show_bug.cgi?id=509383
https://bugzilla.redhat.com/show_bug.cgi?id=505695
while I can't reproduce those extreme regressions myself I think the flag
is wrong.
Rationale:
QUEUE_FLAG_VIRT expands to QUEUE_FLAG_NONROT which casus the queue
unplugged immediately. This is not a good behaviour for at least
qemu and kvm where we do have significant overhead for every
I/O operations. Even with all the latested speeups (native AIO,
MSI support, zero copy) we can only get native speed for up to 128kb
I/O requests we already are down to 66% of native performance for 4kb
requests even on my laptop running the Intel X25-M SSD for which the
QUEUE_FLAG_NONROT was designed.
If we ever get virtio-blk overhead low enough that this flag makes
sense it should only be set based on a feature flag set by the host.
Signed-off-by: Christoph Hellwig <hch at lst.de>
Acked-by: Jeff Moyer <jmoyer at redhat.com>
---
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Index: linux-2.6/drivers/block/virtio_blk.c
===================================================================
--- linux-2.6.orig/drivers/block/virtio_blk.c 2009-09-04 17:33:48.802523987 -0300
+++ linux-2.6/drivers/block/virtio_blk.c 2009-09-04 17:33:56.186522158 -0300
@@ -314,7 +314,6 @@ static int __devinit virtblk_probe(struc
}
vblk->disk->queue->queuedata = vblk;
- queue_flag_set_unlocked(QUEUE_FLAG_VIRT, vblk->disk->queue);
if (index < 26) {
sprintf(vblk->disk->disk_name, "vd%c", 'a' + index % 26);
--- NEW FILE linux-2.6.31.tar.bz2.sign ---
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: See http://www.kernel.org/signature.html for info
iD8DBQBKqC7vyGugalF9Dw4RAldvAJwMreaHtICM+aRVeTOvxGkRdNNndACbBWCz
bLUy6e5yBTf6QYYnvkzVr5M=
=/QSU
-----END PGP SIGNATURE-----
Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/.cvsignore,v
retrieving revision 1.1014.2.29
retrieving revision 1.1014.2.30
diff -u -p -r1.1014.2.29 -r1.1014.2.30
--- .cvsignore 3 Sep 2009 20:02:36 -0000 1.1014.2.29
+++ .cvsignore 10 Sep 2009 14:00:22 -0000 1.1014.2.30
@@ -3,7 +3,5 @@ clog
GNUmakefile
kernel-2.6.*.config
temp-*
-kernel-2.6.30
-linux-2.6.30.tar.bz2
-patch-2.6.31-rc8.bz2
-patch-2.6.31-rc8-git2.bz2
+kernel-2.6.31
+linux-2.6.31.tar.bz2
Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-generic,v
retrieving revision 1.238.6.38
retrieving revision 1.238.6.39
diff -u -p -r1.238.6.38 -r1.238.6.39
--- config-generic 5 Sep 2009 19:02:23 -0000 1.238.6.38
+++ config-generic 10 Sep 2009 14:00:23 -0000 1.238.6.39
@@ -2691,8 +2691,9 @@ CONFIG_SND_USB_US122L=m
#
# PCMCIA devices
#
-# CONFIG_SND_PCMCIA is not set
-# CONFIG_SND_VXPOCKET is not set
+CONFIG_SND_PCMCIA=y
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_PDAUDIOCF=m
#
# Open Sound System
@@ -3668,7 +3669,6 @@ CONFIG_SND_SBAWE=m
CONFIG_SND_OPL3SA2=m
# CONFIG_SND_SGALAXY is not set
# CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_PDAUDIOCF is not set
CONFIG_SND_DARLA20=m
CONFIG_SND_GINA20=m
CONFIG_SND_LAYLA20=m
Index: config-s390x
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-s390x,v
retrieving revision 1.11.6.4
retrieving revision 1.11.6.5
diff -u -p -r1.11.6.4 -r1.11.6.5
--- config-s390x 5 Aug 2009 23:00:09 -0000 1.11.6.4
+++ config-s390x 10 Sep 2009 14:00:23 -0000 1.11.6.5
@@ -1,7 +1,9 @@
CONFIG_64BIT=y
# CONFIG_MARCH_G5 is not set
-CONFIG_MARCH_Z900=y
+# CONFIG_MARCH_Z900 is not set
+CONFIG_MARCH_Z9_109=y
# CONFIG_MARCH_Z990 is not set
+
CONFIG_NR_CPUS=64
CONFIG_COMPAT=y
drm-next.patch:
b/drivers/gpu/drm/Kconfig | 18
b/drivers/gpu/drm/Makefile | 8
b/drivers/gpu/drm/drm_cache.c | 46
b/drivers/gpu/drm/drm_crtc.c | 77
b/drivers/gpu/drm/drm_crtc_helper.c | 220
b/drivers/gpu/drm/drm_drv.c | 4
b/drivers/gpu/drm/drm_edid.c | 504
b/drivers/gpu/drm/drm_encoder_slave.c | 116
b/drivers/gpu/drm/drm_fb_helper.c | 701
b/drivers/gpu/drm/drm_gem.c | 11
b/drivers/gpu/drm/drm_mm.c | 21
b/drivers/gpu/drm/drm_modes.c | 435
b/drivers/gpu/drm/drm_proc.c | 17
b/drivers/gpu/drm/drm_sysfs.c | 28
b/drivers/gpu/drm/i915/Makefile | 2
b/drivers/gpu/drm/i915/i915_debugfs.c | 445
b/drivers/gpu/drm/i915/i915_dma.c | 100
b/drivers/gpu/drm/i915/i915_drv.c | 9
b/drivers/gpu/drm/i915/i915_drv.h | 62
b/drivers/gpu/drm/i915/i915_gem.c | 14
b/drivers/gpu/drm/i915/i915_gem_tiling.c | 80
b/drivers/gpu/drm/i915/i915_irq.c | 21
b/drivers/gpu/drm/i915/i915_reg.h | 143
b/drivers/gpu/drm/i915/i915_suspend.c | 4
b/drivers/gpu/drm/i915/intel_bios.c | 8
b/drivers/gpu/drm/i915/intel_crt.c | 28
b/drivers/gpu/drm/i915/intel_display.c | 607
b/drivers/gpu/drm/i915/intel_drv.h | 7
b/drivers/gpu/drm/i915/intel_fb.c | 737
b/drivers/gpu/drm/i915/intel_i2c.c | 8
b/drivers/gpu/drm/i915/intel_lvds.c | 22
b/drivers/gpu/drm/i915/intel_sdvo.c | 331
b/drivers/gpu/drm/i915/intel_tv.c | 30
b/drivers/gpu/drm/mga/mga_dma.c | 4
b/drivers/gpu/drm/mga/mga_drv.h | 1
b/drivers/gpu/drm/mga/mga_warp.c | 180
b/drivers/gpu/drm/r128/r128_cce.c | 116
b/drivers/gpu/drm/r128/r128_drv.h | 8
b/drivers/gpu/drm/r128/r128_state.c | 36
b/drivers/gpu/drm/radeon/Kconfig | 1
b/drivers/gpu/drm/radeon/Makefile | 43
b/drivers/gpu/drm/radeon/atombios.h | 11
b/drivers/gpu/drm/radeon/atombios_crtc.c | 100
b/drivers/gpu/drm/radeon/avivod.h | 60
b/drivers/gpu/drm/radeon/mkregtable.c | 720
b/drivers/gpu/drm/radeon/r100.c | 1047
b/drivers/gpu/drm/radeon/r100_track.h | 124
b/drivers/gpu/drm/radeon/r100d.h | 76
b/drivers/gpu/drm/radeon/r200.c | 456
b/drivers/gpu/drm/radeon/r300.c | 411
b/drivers/gpu/drm/radeon/r300d.h | 76
b/drivers/gpu/drm/radeon/r600.c | 1714 +
b/drivers/gpu/drm/radeon/r600_blit.c | 855
b/drivers/gpu/drm/radeon/r600_blit_kms.c | 777
b/drivers/gpu/drm/radeon/r600_blit_shaders.c | 1072 +
b/drivers/gpu/drm/radeon/r600_blit_shaders.h | 14
b/drivers/gpu/drm/radeon/r600_cp.c | 541
b/drivers/gpu/drm/radeon/r600_cs.c | 658
b/drivers/gpu/drm/radeon/r600d.h | 661
b/drivers/gpu/drm/radeon/radeon.h | 126
b/drivers/gpu/drm/radeon/radeon_asic.h | 159
b/drivers/gpu/drm/radeon/radeon_atombios.c | 79
b/drivers/gpu/drm/radeon/radeon_clocks.c | 10
b/drivers/gpu/drm/radeon/radeon_connectors.c | 215
b/drivers/gpu/drm/radeon/radeon_cp.c | 128
b/drivers/gpu/drm/radeon/radeon_device.c | 340
b/drivers/gpu/drm/radeon/radeon_display.c | 18
b/drivers/gpu/drm/radeon/radeon_drv.c | 21
b/drivers/gpu/drm/radeon/radeon_drv.h | 146
b/drivers/gpu/drm/radeon/radeon_encoders.c | 125
b/drivers/gpu/drm/radeon/radeon_fb.c | 670
b/drivers/gpu/drm/radeon/radeon_fence.c | 49
b/drivers/gpu/drm/radeon/radeon_irq_kms.c | 1
b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c | 44
b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c | 339
b/drivers/gpu/drm/radeon/radeon_legacy_tv.c | 904
b/drivers/gpu/drm/radeon/radeon_mode.h | 52
b/drivers/gpu/drm/radeon/radeon_object.h | 1
b/drivers/gpu/drm/radeon/radeon_reg.h | 79
b/drivers/gpu/drm/radeon/radeon_ring.c | 119
b/drivers/gpu/drm/radeon/radeon_share.h | 77
b/drivers/gpu/drm/radeon/radeon_state.c | 18
b/drivers/gpu/drm/radeon/radeon_ttm.c | 96
b/drivers/gpu/drm/radeon/reg_srcs/r100 | 105
b/drivers/gpu/drm/radeon/reg_srcs/r200 | 184
b/drivers/gpu/drm/radeon/reg_srcs/r300 | 729
b/drivers/gpu/drm/radeon/reg_srcs/rn50 | 30
b/drivers/gpu/drm/radeon/reg_srcs/rs600 | 729
b/drivers/gpu/drm/radeon/reg_srcs/rv515 | 486
b/drivers/gpu/drm/radeon/rs400.c | 2
b/drivers/gpu/drm/radeon/rs600.c | 60
b/drivers/gpu/drm/radeon/rs690.c | 1
b/drivers/gpu/drm/radeon/rv515.c | 518
b/drivers/gpu/drm/radeon/rv515d.h | 220
b/drivers/gpu/drm/radeon/rv770.c | 987
b/drivers/gpu/drm/radeon/rv770d.h | 341
b/drivers/gpu/drm/ttm/ttm_bo.c | 295
b/drivers/gpu/drm/ttm/ttm_bo_util.c | 4
b/drivers/gpu/drm/ttm/ttm_global.c | 4
b/drivers/gpu/drm/ttm/ttm_memory.c | 508
b/drivers/gpu/drm/ttm/ttm_module.c | 58
b/drivers/gpu/drm/ttm/ttm_tt.c | 104
b/firmware/Makefile | 16
b/firmware/WHENCE | 121
b/firmware/matrox/g200_warp.H16 | 28
b/firmware/matrox/g400_warp.H16 | 44
b/firmware/r128/r128_cce.bin.ihex | 129
b/firmware/radeon/R100_cp.bin.ihex | 130
b/firmware/radeon/R200_cp.bin.ihex | 130
b/firmware/radeon/R300_cp.bin.ihex | 130
b/firmware/radeon/R420_cp.bin.ihex | 130
b/firmware/radeon/R520_cp.bin.ihex | 130
b/firmware/radeon/R600_me.bin.ihex | 1345 +
b/firmware/radeon/R600_pfp.bin.ihex | 145
b/firmware/radeon/RS600_cp.bin.ihex | 130
b/firmware/radeon/RS690_cp.bin.ihex | 130
b/firmware/radeon/RS780_me.bin.ihex | 1345 +
b/firmware/radeon/RS780_pfp.bin.ihex | 145
b/firmware/radeon/RV610_me.bin.ihex | 1345 +
b/firmware/radeon/RV610_pfp.bin.ihex | 145
b/firmware/radeon/RV620_me.bin.ihex | 1345 +
b/firmware/radeon/RV620_pfp.bin.ihex | 145
b/firmware/radeon/RV630_me.bin.ihex | 1345 +
b/firmware/radeon/RV630_pfp.bin.ihex | 145
b/firmware/radeon/RV635_me.bin.ihex | 1345 +
b/firmware/radeon/RV635_pfp.bin.ihex | 145
b/firmware/radeon/RV670_me.bin.ihex | 1345 +
b/firmware/radeon/RV670_pfp.bin.ihex | 145
b/firmware/radeon/RV710_me.bin.ihex | 341
b/firmware/radeon/RV710_pfp.bin.ihex | 213
b/firmware/radeon/RV730_me.bin.ihex | 341
b/firmware/radeon/RV730_pfp.bin.ihex | 213
b/firmware/radeon/RV770_me.bin.ihex | 341
b/firmware/radeon/RV770_pfp.bin.ihex | 213
b/include/drm/drmP.h | 54
b/include/drm/drm_cache.h | 38
b/include/drm/drm_crtc.h | 16
b/include/drm/drm_crtc_helper.h | 3
b/include/drm/drm_encoder_slave.h | 162
b/include/drm/drm_fb_helper.h | 82
b/include/drm/drm_mm.h | 7
b/include/drm/drm_mode.h | 11
b/include/drm/drm_sysfs.h | 12
b/include/drm/ttm/ttm_bo_api.h | 13
b/include/drm/ttm/ttm_bo_driver.h | 94
b/include/drm/ttm/ttm_memory.h | 43
b/include/drm/ttm/ttm_module.h | 2
drivers/gpu/drm/i915/i915_gem_debugfs.c | 396
drivers/gpu/drm/mga/mga_ucode.h |11645 ----------
drivers/gpu/drm/radeon/r300.h | 36
drivers/gpu/drm/radeon/r600_microcode.h |23297 ----------------------
drivers/gpu/drm/radeon/radeon_microcode.h | 1844 -
drivers/gpu/drm/radeon/rs780.c | 102
drivers/gpu/drm/radeon/rv515r.h | 170
154 files changed, 33674 insertions(+), 41500 deletions(-)
View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.6.6.9 -r 1.6.6.10 drm-next.patchIndex: drm-next.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-next.patch,v
retrieving revision 1.6.6.9
retrieving revision 1.6.6.10
diff -u -p -r1.6.6.9 -r1.6.6.10
--- drm-next.patch 26 Aug 2009 19:58:46 -0000 1.6.6.9
+++ drm-next.patch 10 Sep 2009 14:00:23 -0000 1.6.6.10
@@ -1,393 +1,154 @@
-commit 50f153036c9d9e4ae1768d5ca9c2ad4184f7a0b7
-Author: Dave Airlie <airlied at redhat.com>
-Date: Fri Aug 21 13:21:01 2009 +1000
-
- drm/radeon/kms: generate the safe register tables.
-
- Previously we just made these offline and included them,
- but no reason we can't generate them at build time.
-
- TODO: add rs690 + r100/r200 when done.
- should we do rs480/rs690 no tcl version?
-
- Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 759e4f83f418f4001e724042b4c0e408d615d9ec
-Author: Thomas Hellstrom <thellstrom at vmware.com>
-Date: Thu Aug 20 10:29:09 2009 +0200
-
- drm/ttm: Fixes for "Memory accounting rework."
-
- ttm:
- Fix error paths when kobject_add returns an error.
-
- Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
- Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 7f5f4db2d50ea1af8f160686d2e97bbfa5102b4f
-Author: Thomas Hellstrom <thellstrom at vmware.com>
-Date: Thu Aug 20 10:29:08 2009 +0200
-
- drm/ttm: Fixes for "Make parts of a struct ttm_bo_device global"
-
- ttm:
- Remove a stray debug printout.
- Remove a re-init of the lru spinlock at device init.
-
- radeon:
- Fix the size of the bo_global allocation.
-
- Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
- Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 51c8b4071d84d46cc100baa5931ad06b2a823c95
-Merge: a987fca... 6c30c53...
-Author: Dave Airlie <airlied at redhat.com>
-Date: Thu Aug 20 13:38:04 2009 +1000
-
- Merge Linus master to drm-next
-
- linux-next conflict reported needed resolution.
-
- Conflicts:
- drivers/gpu/drm/drm_crtc.c
- drivers/gpu/drm/drm_edid.c
- drivers/gpu/drm/i915/intel_sdvo.c
- drivers/gpu/drm/radeon/radeon_ttm.c
- drivers/gpu/drm/ttm/ttm_bo.c
-
-commit a987fcaa805fcb24ba885c2e29fd4fdb6816f08f
-Author: Thomas Hellstrom <thellstrom at vmware.com>
-Date: Tue Aug 18 16:51:56 2009 +0200
-
- ttm: Make parts of a struct ttm_bo_device global.
-
- Common resources, like memory accounting and swap lists should be
- global and not per device. Introduce a struct ttm_bo_global to
- accomodate this, and register it with sysfs. Add a small sysfs interface
- to return the number of active buffer objects.
-
- Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
- Signed-off-by: Dave Airlie <airlied at linux.ie>
-
-commit 5fd9cbad3a4ae82c83c55b9c621d156c326724ef
-Author: Thomas Hellstrom <thellstrom at vmware.com>
-Date: Mon Aug 17 16:28:39 2009 +0200
-
- drm/ttm: Memory accounting rework.
-
- Use inclusive zones to simplify accounting and its sysfs representation.
- Use DMA32 accounting where applicable.
-
- Add a sysfs interface to make the heuristically determined limits
- readable and configurable.
-
- Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
- Signed-off-by: Dave Airlie <airlied at linux.ie>
-
-commit e9840be8c23601285a70520b4898818f28ce8c2b
-Author: Thomas Hellstrom <thellstrom at vmware.com>
-Date: Tue Aug 18 10:27:57 2009 +0200
-
- drm/ttm: Add a virtual ttm sysfs device.
-
- The device directory will be the base directory of the
- sysfs representation of other ttm subsystems.
-
- Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
- Signed-off-by: Dave Airlie <airlied at linux.ie>
-
-commit 327c225bd548bf7871f116a0baa5ebdac884e452
-Author: Thomas Hellstrom <thellstrom at vmware.com>
-Date: Mon Aug 17 16:28:37 2009 +0200
-
- drm: Enable drm drivers to add drm sysfs devices.
-
- Export utility functions for drivers to add specialized devices in the
- sysfs drm class subdirectory.
-
- Initially this will be needed form TTM to add a virtual device that
- handles power management.
-
- Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
- Signed-off-by: Dave Airlie <airlied at linux.ie>
-
-commit a0724fcf829e5afb66159ef68cb16a805ea11b42
-Author: Pekka Paalanen <pq at iki.fi>
-Date: Mon Aug 17 01:18:38 2009 +0300
-
- drm/ttm: optimize bo_kmap_type values
-
- A micro-optimization on the function ttm_kmap_obj_virtual().
-
- By defining the values of enum ttm_bo_kmap_obj::bo_kmap_type to have a
- bit indicating iomem, size of the function ttm_kmap_obj_virtual() will be
- reduced by 16 bytes on x86_64 (gcc 4.1.2).
-
- ttm_kmap_obj_virtual() may be heavily used, when buffer objects are
- accessed via wrappers, that work for both kinds of memory addresses:
- iomem cookies and kernel virtual.
-
- Signed-off-by: Pekka Paalanen <pq at iki.fi>
- Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 949ef70e2d1a5c12178875f513df34fc85d91a38
-Author: Pekka Paalanen <pq at iki.fi>
-Date: Mon Aug 17 19:49:19 2009 +0300
-
- drm/kms: no need to return void value (encoder)
-
- Cc: Francisco Jerez <currojerez at riseup.net>
- Signed-off-by: Pekka Paalanen <pq at iki.fi>
- Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 53bd83899f5ba6b0da8f5ef976129273854a72d4
-Author: Jesse Barnes <jbarnes at virtuousgeek.org>
-Date: Wed Jul 1 10:04:40 2009 -0700
-
- drm: clarify scaling property names
-
- Now that we're using the scaling property in the Intel driver I noticed
- that the names were a bit confusing. I've corrected them according to
- our discussion on IRC and the mailing list, though I've left out
- potential new additions for a new scaling property with an integer (or
- two) for the scaling factor. None of the drivers implement that today,
- but if someone wants to do it, I think it could be done with the
- addition of a single new type and a new property to describe the
- scaling factor in the X and Y directions.
-
- Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
- Acked-by: Alex Deucher <alexdeucher at gmail.com>
- Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 776f3360de6ed246e973577828f725681120fd7a
-Author: Dave Airlie <airlied at linux.ie>
-Date: Wed Aug 19 15:56:37 2009 +1000
-
- drm: fixup includes in encoder slave header files.
-
- Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 453a7d46dca88704ed88b364c445ff55680a8557
-Author: Jesse Barnes <jbarnes at virtuousgeek.org>
-Date: Wed Aug 19 15:51:55 2009 +1000
-
- drm: remove root requirement from DRM_IOCTL_SET_VERSION (+ DRM_IOCTL_AUTH_MAGIC)
-
- Just a DRM_MASTER flag is sufficient here, though maybe this call is
- totally deprecated anyway (xf86-video-intel still calls it though).
-
- (airlied: drop ioctl auth_magic as discussed on mailing list also)
-
- Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
- Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit cfcf4738cd6b5d7bed1473acad76d6430cf1fb0a
-Author: Dave Airlie <airlied at redhat.com>
-Date: Thu Aug 13 13:31:54 2009 +1000
-
- drm: fixup include file in drm_encoder_slave
-
- Signed-off-by: Dave Airlie <airlied at redhat.com>
[...78321 lines suppressed...]
++ * of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
++ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
++ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
++ * USE OR OTHER DEALINGS IN THE SOFTWARE.
++ *
++ *
++ **************************************************************************/
++/*
++ * Authors:
++ * Dave Airlie <airlied at redhat.com>
++ */
++
++#ifndef _DRM_CACHE_H_
++#define _DRM_CACHE_H_
++
++void drm_clflush_pages(struct page *pages[], unsigned long num_pages);
++
++#endif
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
-index 7300fb8..db92a83 100644
+index 7300fb8..ae1e9e1 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
-@@ -572,6 +572,12 @@ struct drm_mode_config {
+@@ -259,6 +259,8 @@ struct drm_framebuffer {
+ void *fbdev;
+ u32 pseudo_palette[17];
+ struct list_head filp_head;
++ /* if you are using the helper */
++ void *helper_private;
+ };
+
+ struct drm_property_blob {
+@@ -572,6 +574,12 @@ struct drm_mode_config {
struct drm_property *tv_right_margin_property;
struct drm_property *tv_top_margin_property;
struct drm_property *tv_bottom_margin_property;
@@ -5844,7 +80615,7 @@ index 7300fb8..db92a83 100644
/* Optional properties */
struct drm_property *scaling_mode_property;
-@@ -736,4 +742,10 @@ extern int drm_mode_gamma_get_ioctl(struct drm_device *dev,
+@@ -736,4 +744,12 @@ extern int drm_mode_gamma_get_ioctl(struct drm_device *dev,
extern int drm_mode_gamma_set_ioctl(struct drm_device *dev,
void *data, struct drm_file *file_priv);
extern bool drm_detect_hdmi_monitor(struct edid *edid);
@@ -5854,7 +80625,30 @@ index 7300fb8..db92a83 100644
+extern struct drm_display_mode *drm_gtf_mode(struct drm_device *dev,
+ int hdisplay, int vdisplay, int vrefresh,
+ bool interlaced, int margins);
++extern int drm_add_modes_noedid(struct drm_connector *connector,
++ int hdisplay, int vdisplay);
#endif /* __DRM_CRTC_H__ */
+diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
+index 6769ff6..4c8daca 100644
+--- a/include/drm/drm_crtc_helper.h
++++ b/include/drm/drm_crtc_helper.h
+@@ -79,6 +79,8 @@ struct drm_encoder_helper_funcs {
+ /* detect for DAC style encoders */
+ enum drm_connector_status (*detect)(struct drm_encoder *encoder,
+ struct drm_connector *connector);
++ /* disable encoder when not in use - more explicit than dpms off */
++ void (*disable)(struct drm_encoder *encoder);
+ };
+
+ struct drm_connector_helper_funcs {
+@@ -98,6 +100,7 @@ extern bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
+ int x, int y,
+ struct drm_framebuffer *old_fb);
+ extern bool drm_helper_crtc_in_use(struct drm_crtc *crtc);
++extern bool drm_helper_encoder_in_use(struct drm_encoder *encoder);
+
+ extern void drm_helper_connector_dpms(struct drm_connector *connector, int mode);
+
diff --git a/include/drm/drm_encoder_slave.h b/include/drm/drm_encoder_slave.h
new file mode 100644
index 0000000..2f65633
@@ -6023,6 +80817,117 @@ index 0000000..2f65633
+void drm_i2c_encoder_destroy(struct drm_encoder *encoder);
+
+#endif
+diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
+new file mode 100644
+index 0000000..88fffbd
+--- /dev/null
++++ b/include/drm/drm_fb_helper.h
+@@ -0,0 +1,82 @@
++/*
++ * Copyright (c) 2006-2009 Red Hat Inc.
++ * Copyright (c) 2006-2008 Intel Corporation
++ * Copyright (c) 2007 Dave Airlie <airlied at linux.ie>
++ *
++ * DRM framebuffer helper functions
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that copyright
++ * notice and this permission notice appear in supporting documentation, and
++ * that the name of the copyright holders not be used in advertising or
++ * publicity pertaining to distribution of the software without specific,
++ * written prior permission. The copyright holders make no representations
++ * about the suitability of this software for any purpose. It is provided "as
++ * is" without express or implied warranty.
++ *
++ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
++ * OF THIS SOFTWARE.
++ *
++ * Authors:
++ * Dave Airlie <airlied at linux.ie>
++ * Jesse Barnes <jesse.barnes at intel.com>
++ */
++#ifndef DRM_FB_HELPER_H
++#define DRM_FB_HELPER_H
++
++struct drm_fb_helper_crtc {
++ uint32_t crtc_id;
++ struct drm_mode_set mode_set;
++};
++
++struct drm_fb_helper_funcs {
++ void (*gamma_set)(struct drm_crtc *crtc, u16 red, u16 green,
++ u16 blue, int regno);
++};
++
++struct drm_fb_helper {
++ struct drm_framebuffer *fb;
++ struct drm_device *dev;
++ struct drm_display_mode *mode;
++ int crtc_count;
++ struct drm_fb_helper_crtc *crtc_info;
++ struct drm_fb_helper_funcs *funcs;
++ int conn_limit;
++ struct list_head kernel_fb_list;
++};
++
++int drm_fb_helper_single_fb_probe(struct drm_device *dev,
++ int (*fb_create)(struct drm_device *dev,
++ uint32_t fb_width,
++ uint32_t fb_height,
++ uint32_t surface_width,
++ uint32_t surface_height,
++ struct drm_framebuffer **fb_ptr));
++int drm_fb_helper_init_crtc_count(struct drm_fb_helper *helper, int crtc_count,
++ int max_conn);
++void drm_fb_helper_free(struct drm_fb_helper *helper);
++int drm_fb_helper_blank(int blank, struct fb_info *info);
++int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
++ struct fb_info *info);
++int drm_fb_helper_set_par(struct fb_info *info);
++int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
++ struct fb_info *info);
++int drm_fb_helper_setcolreg(unsigned regno,
++ unsigned red,
++ unsigned green,
++ unsigned blue,
++ unsigned transp,
++ struct fb_info *info);
++
++void drm_fb_helper_restore(void);
++void drm_fb_helper_fill_var(struct fb_info *info, struct drm_framebuffer *fb,
++ uint32_t fb_width, uint32_t fb_height);
++void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch);
++
++#endif
+diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h
+index f833207..62329f9 100644
+--- a/include/drm/drm_mm.h
++++ b/include/drm/drm_mm.h
+@@ -37,6 +37,9 @@
+ * Generic range manager structs
+ */
+ #include <linux/list.h>
++#ifdef CONFIG_DEBUG_FS
++#include <linux/seq_file.h>
++#endif
+
+ struct drm_mm_node {
+ struct list_head fl_entry;
+@@ -96,4 +99,8 @@ static inline struct drm_mm *drm_get_mm(struct drm_mm_node *block)
+ return block->mm;
+ }
+
++#ifdef CONFIG_DEBUG_FS
++int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm);
++#endif
++
+ #endif
diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h
index ae304cc..1f90841 100644
--- a/include/drm/drm_mode.h
drm-nouveau.patch:
drivers/gpu/drm/Kconfig | 45
drivers/gpu/drm/Makefile | 2
drivers/gpu/drm/drm_bufs.c | 28
drivers/gpu/drm/i2c/Makefile | 4
drivers/gpu/drm/i2c/ch7006_drv.c | 532
drivers/gpu/drm/i2c/ch7006_mode.c | 473
drivers/gpu/drm/i2c/ch7006_priv.h | 340
drivers/gpu/drm/nouveau/Makefile | 27
drivers/gpu/drm/nouveau/nouveau_backlight.c | 155
drivers/gpu/drm/nouveau/nouveau_bios.c | 5209 ++++++
drivers/gpu/drm/nouveau/nouveau_bios.h | 235
drivers/gpu/drm/nouveau/nouveau_bo.c | 622
drivers/gpu/drm/nouveau/nouveau_calc.c | 626
drivers/gpu/drm/nouveau/nouveau_channel.c | 520
drivers/gpu/drm/nouveau/nouveau_connector.c | 747
drivers/gpu/drm/nouveau/nouveau_connector.h | 55
drivers/gpu/drm/nouveau/nouveau_crtc.h | 95
drivers/gpu/drm/nouveau/nouveau_display.c | 115
drivers/gpu/drm/nouveau/nouveau_dma.c | 206
drivers/gpu/drm/nouveau/nouveau_dma.h | 148
drivers/gpu/drm/nouveau/nouveau_drv.c | 433
drivers/gpu/drm/nouveau/nouveau_drv.h | 1202 +
drivers/gpu/drm/nouveau/nouveau_encoder.h | 66
drivers/gpu/drm/nouveau/nouveau_fb.h | 47
drivers/gpu/drm/nouveau/nouveau_fbcon.c | 355
drivers/gpu/drm/nouveau/nouveau_fbcon.h | 48
drivers/gpu/drm/nouveau/nouveau_fence.c | 261
drivers/gpu/drm/nouveau/nouveau_gem.c | 954 +
drivers/gpu/drm/nouveau/nouveau_hw.c | 1077 +
drivers/gpu/drm/nouveau/nouveau_hw.h | 446
drivers/gpu/drm/nouveau/nouveau_i2c.c | 256
drivers/gpu/drm/nouveau/nouveau_i2c.h | 45
drivers/gpu/drm/nouveau/nouveau_ioc32.c | 72
drivers/gpu/drm/nouveau/nouveau_irq.c | 675
drivers/gpu/drm/nouveau/nouveau_mem.c | 565
drivers/gpu/drm/nouveau/nouveau_notifier.c | 194
drivers/gpu/drm/nouveau/nouveau_object.c | 1279 +
drivers/gpu/drm/nouveau/nouveau_reg.h | 834 +
drivers/gpu/drm/nouveau/nouveau_sgdma.c | 317
drivers/gpu/drm/nouveau/nouveau_state.c | 829 +
drivers/gpu/drm/nouveau/nouveau_swmthd.h | 33
drivers/gpu/drm/nouveau/nouveau_ttm.c | 131
drivers/gpu/drm/nouveau/nv04_crtc.c | 1014 +
drivers/gpu/drm/nouveau/nv04_cursor.c | 70
drivers/gpu/drm/nouveau/nv04_dac.c | 525
drivers/gpu/drm/nouveau/nv04_dfp.c | 621
drivers/gpu/drm/nouveau/nv04_display.c | 293
drivers/gpu/drm/nouveau/nv04_fb.c | 21
drivers/gpu/drm/nouveau/nv04_fbcon.c | 292
drivers/gpu/drm/nouveau/nv04_fifo.c | 295
drivers/gpu/drm/nouveau/nv04_graph.c | 583
drivers/gpu/drm/nouveau/nv04_instmem.c | 207
drivers/gpu/drm/nouveau/nv04_mc.c | 20
drivers/gpu/drm/nouveau/nv04_timer.c | 51
drivers/gpu/drm/nouveau/nv04_tv.c | 304
drivers/gpu/drm/nouveau/nv10_fb.c | 24
drivers/gpu/drm/nouveau/nv10_fifo.c | 177
drivers/gpu/drm/nouveau/nv10_graph.c | 945 +
drivers/gpu/drm/nouveau/nv17_tv.c | 660
drivers/gpu/drm/nouveau/nv17_tv.h | 156
drivers/gpu/drm/nouveau/nv17_tv_modes.c | 582
drivers/gpu/drm/nouveau/nv20_graph.c | 784
drivers/gpu/drm/nouveau/nv40_fb.c | 62
drivers/gpu/drm/nouveau/nv40_fifo.c | 223
drivers/gpu/drm/nouveau/nv40_graph.c | 2203 ++
drivers/gpu/drm/nouveau/nv40_mc.c | 38
drivers/gpu/drm/nouveau/nv50_crtc.c | 799 +
drivers/gpu/drm/nouveau/nv50_cursor.c | 151
drivers/gpu/drm/nouveau/nv50_dac.c | 296
drivers/gpu/drm/nouveau/nv50_display.c | 905 +
drivers/gpu/drm/nouveau/nv50_display.h | 46
drivers/gpu/drm/nouveau/nv50_evo.h | 113
drivers/gpu/drm/nouveau/nv50_fbcon.c | 256
drivers/gpu/drm/nouveau/nv50_fifo.c | 475
drivers/gpu/drm/nouveau/nv50_graph.c | 439
drivers/gpu/drm/nouveau/nv50_grctx.h |22284 ++++++++++++++++++++++++++++
drivers/gpu/drm/nouveau/nv50_instmem.c | 499
drivers/gpu/drm/nouveau/nv50_mc.c | 40
drivers/gpu/drm/nouveau/nv50_sor.c | 250
drivers/gpu/drm/nouveau/nvreg.h | 535
drivers/gpu/drm/ttm/ttm_bo.c | 4
include/drm/Kbuild | 1
include/drm/drmP.h | 2
include/drm/i2c/ch7006.h | 86
include/drm/nouveau_drm.h | 216
85 files changed, 57829 insertions(+), 21 deletions(-)
View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.8.6.16 -r 1.8.6.17 drm-nouveau.patchIndex: drm-nouveau.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-nouveau.patch,v
retrieving revision 1.8.6.16
retrieving revision 1.8.6.17
diff -u -p -r1.8.6.16 -r1.8.6.17
--- drm-nouveau.patch 26 Aug 2009 19:58:47 -0000 1.8.6.16
+++ drm-nouveau.patch 10 Sep 2009 14:00:26 -0000 1.8.6.17
@@ -1,8 +1,8 @@
diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
-index 39b393d..49b21cc 100644
+index e4d971c..7fe8a4c 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
-@@ -143,3 +143,47 @@ config DRM_SAVAGE
+@@ -153,3 +153,48 @@ config DRM_SAVAGE
help
Choose this option if you have a Savage3D/4/SuperSavage/Pro/Twister
chipset. If M is selected the module will be called savage.
@@ -10,6 +10,7 @@ index 39b393d..49b21cc 100644
+config DRM_NOUVEAU
+ tristate "Nouveau (nVidia) cards"
+ depends on DRM
++ select DRM_KMS_HELPER
+ select DRM_TTM
+ select FB_CFB_FILLRECT
+ select FB_CFB_COPYAREA
@@ -51,10 +52,10 @@ index 39b393d..49b21cc 100644
+
+endmenu
diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
-index 5f0aec4..f0ef455 100644
+index 3c8827a..d22e64b 100644
--- a/drivers/gpu/drm/Makefile
+++ b/drivers/gpu/drm/Makefile
-@@ -27,3 +27,5 @@ obj-$(CONFIG_DRM_I915) += i915/
+@@ -31,3 +31,5 @@ obj-$(CONFIG_DRM_I915) += i915/
obj-$(CONFIG_DRM_SIS) += sis/
obj-$(CONFIG_DRM_SAVAGE)+= savage/
obj-$(CONFIG_DRM_VIA) +=via/
@@ -130,10 +131,10 @@ index 0000000..6d2abaf
+obj-$(CONFIG_DRM_I2C_CH7006) += ch7006.o
diff --git a/drivers/gpu/drm/i2c/ch7006_drv.c b/drivers/gpu/drm/i2c/ch7006_drv.c
new file mode 100644
-index 0000000..47421ba
+index 0000000..0a3f7a0
--- /dev/null
+++ b/drivers/gpu/drm/i2c/ch7006_drv.c
-@@ -0,0 +1,529 @@
+@@ -0,0 +1,532 @@
+/*
+ * Copyright (C) 2009 Francisco Jerez.
+ * All Rights Reserved.
@@ -600,13 +601,11 @@ index 0000000..47421ba
+ ch7006_tv_norm);
+ }
+
-+ if (ch7006_scale) {
-+ if (ch7006_scale >= 0 && ch7006_scale <= 2)
-+ priv->scale = ch7006_scale;
-+ else
-+ ch7006_err(client, "Invalid scale setting \"%d\".\n",
-+ ch7006_scale);
-+ }
++ if (ch7006_scale >= 0 && ch7006_scale <= 2)
++ priv->scale = ch7006_scale;
++ else
++ ch7006_err(client, "Invalid scale setting \"%d\".\n",
++ ch7006_scale);
+
+ return 0;
+}
@@ -651,11 +650,16 @@ index 0000000..47421ba
+
+char *ch7006_tv_norm = NULL;
+module_param_named(tv_norm, ch7006_tv_norm, charp, 0600);
-+MODULE_PARM_DESC(tv_norm, "Default TV norm.");
++MODULE_PARM_DESC(tv_norm, "Default TV norm.\n"
++ "\t\tSupported: PAL, PAL-M, PAL-N, PAL-Nc, PAL-60, NTSC-M, NTSC-J.\n"
++ "\t\tDefault: PAL");
+
-+int ch7006_scale = 0;
++int ch7006_scale = 1;
+module_param_named(scale, ch7006_scale, int, 0600);
-+MODULE_PARM_DESC(scale, "Default scale.");
++MODULE_PARM_DESC(scale, "Default scale.\n"
++ "\t\tSupported: 0 -> Select video modes with a higher blanking ratio.\n"
++ "\t\t\t1 -> Select default video modes.\n"
++ "\t\t\t2 -> Select video modes with a lower blanking ratio.");
+
+MODULE_AUTHOR("Francisco Jerez <currojerez at riseup.net>");
+MODULE_DESCRIPTION("Chrontel ch7006 TV encoder driver");
@@ -1684,10 +1688,10 @@ index 0000000..20564f8
+}
diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.c b/drivers/gpu/drm/nouveau/nouveau_bios.c
new file mode 100644
-index 0000000..1500eed
+index 0000000..b37ad94
--- /dev/null
+++ b/drivers/gpu/drm/nouveau/nouveau_bios.c
-@@ -0,0 +1,5190 @@
+@@ -0,0 +1,5209 @@
+/*
+ * Copyright 2005-2006 Erik Waling
+ * Copyright 2006 Stephane Marchesin
@@ -5001,7 +5005,7 @@ index 0000000..1500eed
+
+int
+nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,
-+ int pxclk)
++ uint32_t sub, int pxclk)
+{
+ /* The display script table is located by the BIT 'U' table.
+ *
@@ -5031,7 +5035,7 @@ index 0000000..1500eed
+ uint8_t *table = &bios->data[bios->display.script_table_ptr];
+ uint8_t *entry, *otable = NULL;
+ uint16_t script;
-+ int i, sub;
++ int i;
+
+ if (!bios->display.script_table_ptr) {
+ NV_ERROR(dev, "No pointer to output script table\n");
@@ -5102,39 +5106,19 @@ index 0000000..1500eed
+ return 1;
+ }
+
-+ /* Anyone have an idea to know which to use for certain? */
-+ switch (dcbent->type) {
-+ case OUTPUT_LVDS:
-+ if (nouveau_uscript_lvds >= 0)
-+ sub = nouveau_uscript_lvds;
-+ else {
-+ /* 0x0000 0x0100 0x0200 0x0300 */
-+ if (pxclk > bios->fp.duallink_transition_clk)
-+ sub = 0x0100;
-+ else
-+ sub = 0x0000;
++ if (pxclk < -2 || pxclk > 0) {
++ /* Try to find matching script table entry */
++ for (i = 0; i < otable[5]; i++) {
++ if (ROM16(otable[table[4] + i*6]) == sub)
++ break;
+ }
-+ break;
-+ case OUTPUT_TMDS:
-+ if (nouveau_uscript_tmds >= 0)
-+ sub = nouveau_uscript_tmds;
-+ else
-+ sub = 0x0001; /* 0x0001 0x0002 0x0105 */
-+ break;
-+ default:
-+ sub = 0x00ff; /* 0x00ff */
-+ break;
-+ }
+
-+ for (i = 0; i < otable[5]; i++) {
-+ if (ROM16(otable[table[4] + i*6]) == sub)
-+ break;
-+ }
-+
-+ if (i == otable[5]) {
-+ NV_ERROR(dev, "Table 0x%04x not found for %d/%d, using first\n",
-+ sub, dcbent->type, dcbent->or);
-+ i = 0;
++ if (i == otable[5]) {
++ NV_ERROR(dev, "Table 0x%04x not found for %d/%d, "
++ "using first\n",
++ sub, dcbent->type, dcbent->or);
++ i = 0;
++ }
+ }
+
+ bios->display.head = ffs(dcbent->or) - 1;
@@ -6263,10 +6247,8 @@ index 0000000..1500eed
+ entry->type = conn & 0xf;
+ entry->i2c_index = (conn >> 4) & 0xf;
+ entry->heads = (conn >> 8) & 0xf;
-+ if (bdcb->version >= 0x30)
++ if (bdcb->version >= 0x40)
+ entry->connector = (conn >> 12) & 0xf;
-+ else
-+ entry->connector = entry->i2c_index; /* sorta */
+ entry->bus = (conn >> 16) & 0xf;
+ entry->location = (conn >> 20) & 0x3;
+ entry->or = (conn >> 24) & 0xf;
@@ -6613,7 +6595,45 @@ index 0000000..1500eed
+ return (dcb->entries ? 0 : -ENXIO);
+}
+
-+static void fixup_legacy_i2c(struct nvbios *bios)
++static void
++fixup_legacy_connector(struct nvbios *bios)
++{
++ struct bios_parsed_dcb *bdcb = &bios->bdcb;
++ struct parsed_dcb *dcb = &bdcb->dcb;
++ int high = 0, i;
++
++ /* DCB 3.0 also has the table in most cases, but there are some cards
++ * where the table is filled with stub entries, and the DCB entriy
[...2860 lines suppressed...]
++ if (pxclk >= 165000)
++ script |= 0x0100;
++
++ if (nouveau_uscript_tmds >= 0) {
++ NV_INFO(dev, "override script 0x%04x with 0x%04x"
++ "for output TMDS-%d\n", script,
++ nouveau_uscript_tmds, or);
++ script = nouveau_uscript_tmds;
++ }
++ break;
++ case OUTPUT_ANALOG:
++ script = 0xff;
++ break;
++ default:
++ NV_ERROR(dev, "modeset on unsupported output type!\n");
++ break;
++ }
++
++ return script;
++}
++
+static void
+nv50_display_vblank_crtc_handler(struct drm_device *dev, int crtc)
+{
@@ -33162,7 +32889,7 @@ index 0000000..7ddb760
+
+ nv_wr32(dev, 0x619494, nv_rd32(dev, 0x619494) & ~8);
+
-+ nouveau_bios_run_display_table(dev, dcbent, -1);
++ nouveau_bios_run_display_table(dev, dcbent, 0, -1);
+
+ack:
+ nv_wr32(dev, NV50_PDISPLAY_INTR_1, NV50_PDISPLAY_INTR_1_CLK_UNK10);
@@ -33172,10 +32899,8 @@ index 0000000..7ddb760
+static void
+nv50_display_unk20_handler(struct drm_device *dev)
+{
-+ struct drm_nouveau_private *dev_priv = dev->dev_private;
-+ struct nvbios *bios = &dev_priv->VBIOS;
+ struct dcb_entry *dcbent;
-+ uint32_t tmp, pclk;
++ uint32_t tmp, pclk, script;
+ int head, or, ret;
+
+ ret = nv50_display_irq_head(dev, &head, &dcbent);
@@ -33183,30 +32908,24 @@ index 0000000..7ddb760
+ goto ack;
+ or = ffs(dcbent->or) - 1;
+ pclk = nv_rd32(dev, NV50_PDISPLAY_CRTC_P(head, CLOCK)) & 0x3fffff;
++ script = nv50_display_script_select(dev, dcbent, pclk);
+
+ NV_DEBUG(dev, "head %d pxclk: %dKHz\n", head, pclk);
+
-+ nouveau_bios_run_display_table(dev, dcbent, -2);
++ nouveau_bios_run_display_table(dev, dcbent, 0, -2);
+
+ nv50_crtc_set_clock(dev, head, pclk);
+
-+ nouveau_bios_run_display_table(dev, dcbent, pclk);
++ nouveau_bios_run_display_table(dev, dcbent, script, pclk);
+
+ tmp = nv_rd32(dev, NV50_PDISPLAY_CRTC_CLK_CTRL2(head));
+ tmp &= ~0x000000f;
+ nv_wr32(dev, NV50_PDISPLAY_CRTC_CLK_CTRL2(head), tmp);
+
+ if (dcbent->type != OUTPUT_ANALOG) {
-+ int tclk;
-+
-+ if (dcbent->type == OUTPUT_LVDS)
-+ tclk = bios->fp.duallink_transition_clk;
-+ else
-+ tclk = 165000;
-+
+ tmp = nv_rd32(dev, NV50_PDISPLAY_SOR_CLK_CTRL2(or));
+ tmp &= ~0x00000f0f;
-+ if (pclk > tclk)
++ if (script & 0x0100)
+ tmp |= 0x00000101;
+ nv_wr32(dev, NV50_PDISPLAY_SOR_CLK_CTRL2(or), tmp);
+ } else {
@@ -33222,14 +32941,15 @@ index 0000000..7ddb760
+nv50_display_unk40_handler(struct drm_device *dev)
+{
+ struct dcb_entry *dcbent;
-+ int head, pclk, ret;
++ int head, pclk, script, ret;
+
+ ret = nv50_display_irq_head(dev, &head, &dcbent);
+ if (ret)
+ goto ack;
+ pclk = nv_rd32(dev, NV50_PDISPLAY_CRTC_P(head, CLOCK)) & 0x3fffff;
++ script = nv50_display_script_select(dev, dcbent, pclk);
+
-+ nouveau_bios_run_display_table(dev, dcbent, -pclk);
++ nouveau_bios_run_display_table(dev, dcbent, script, -pclk);
+
+ack:
+ nv_wr32(dev, NV50_PDISPLAY_INTR_1, NV50_PDISPLAY_INTR_1_CLK_UNK40);
@@ -34246,10 +33966,10 @@ index 0000000..3d12e12
+
diff --git a/drivers/gpu/drm/nouveau/nv50_graph.c b/drivers/gpu/drm/nouveau/nv50_graph.c
new file mode 100644
-index 0000000..72db3cf
+index 0000000..108f672
--- /dev/null
+++ b/drivers/gpu/drm/nouveau/nv50_graph.c
-@@ -0,0 +1,437 @@
+@@ -0,0 +1,439 @@
+/*
+ * Copyright (C) 2007 Ben Skeggs.
+ * All Rights Reserved.
@@ -34434,8 +34154,10 @@ index 0000000..72db3cf
+ struct nouveau_gpuobj *ramin = chan->ramin->gpuobj;
+ struct nouveau_gpuobj *ctx;
+ uint32_t *ctxvals = NULL;
-+ int grctx_size = 0x70000, hdr;
-+ int ret, pos;
++ uint32_t grctx_size = 0x70000;
++ int hdr;
++ int ret;
++ int pos;
+
+ NV_DEBUG(dev, "ch%d\n", chan->id);
+
@@ -57530,10 +57252,10 @@ index 0000000..e0a9c3f
+}
diff --git a/drivers/gpu/drm/nouveau/nv50_sor.c b/drivers/gpu/drm/nouveau/nv50_sor.c
new file mode 100644
-index 0000000..9ae8ec3
+index 0000000..45b0ff7
--- /dev/null
+++ b/drivers/gpu/drm/nouveau/nv50_sor.c
-@@ -0,0 +1,253 @@
+@@ -0,0 +1,250 @@
+/*
+ * Copyright (C) 2008 Maarten Maathuis.
+ * All Rights Reserved.
@@ -57592,17 +57314,11 @@ index 0000000..9ae8ec3
+static void nv50_sor_dpms(struct drm_encoder *drm_encoder, int mode)
+{
+ struct drm_device *dev = drm_encoder->dev;
-+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ struct nouveau_encoder *encoder = nouveau_encoder(drm_encoder);
+ uint32_t val;
+ int or = encoder->or;
+
-+ NV_DEBUG(dev, "or %d\n", encoder->or);
-+
-+ if (dev_priv->in_modeset) {
-+ nv50_sor_disconnect(encoder);
-+ return;
-+ }
++ NV_DEBUG(dev, "or %d mode %d\n", or, mode);
+
+ /* wait for it to be done */
+ if (!nv_wait(NV50_PDISPLAY_SOR_DPMS_CTRL(or),
@@ -57646,9 +57362,13 @@ index 0000000..9ae8ec3
+ struct nouveau_encoder *encoder = nouveau_encoder(drm_encoder);
+ struct nouveau_connector *connector;
+
++ NV_DEBUG(drm_encoder->dev, "or %d\n", encoder->or);
++
+ connector = nouveau_encoder_connector_get(encoder);
-+ if (!connector)
++ if (!connector) {
++ NV_ERROR(drm_encoder->dev, "Encoder has no connector\n");
+ return false;
++ }
+
+ if (connector->scaling_mode != DRM_MODE_SCALE_NONE &&
+ connector->native_mode) {
@@ -57682,10 +57402,7 @@ index 0000000..9ae8ec3
+
+ NV_DEBUG(dev, "or %d\n", encoder->or);
+
-+ ret = dev_priv->in_modeset;
-+ dev_priv->in_modeset = false;
+ nv50_sor_dpms(drm_encoder, DRM_MODE_DPMS_ON);
-+ dev_priv->in_modeset = ret;
+
+ if (to_drm_encoder(encoder)->encoder_type != DRM_MODE_ENCODER_LVDS) {
+ mode_ctl |= NV50_EVO_SOR_MODE_CTRL_TMDS;
@@ -57779,6 +57496,8 @@ index 0000000..9ae8ec3
+ encoder->dcb = entry;
+ encoder->or = ffs(entry->or) - 1;
+
++ encoder->disconnect = nv50_sor_disconnect;
++
+ drm_encoder_init(dev, to_drm_encoder(encoder), &nv50_sor_encoder_funcs, type);
+ drm_encoder_helper_add(to_drm_encoder(encoder), &nv50_sor_helper_funcs);
+
@@ -58373,7 +58092,7 @@ index b940fdf..cfa6af4 100644
unifdef-y += via_drm.h
+unifdef-y += nouveau_drm.h
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
-index e0f1c1f..84e2fa6 100644
+index eeefb63..1345c39 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1240,6 +1240,8 @@ extern void drm_idlelock_release(struct drm_lock_data *lock_data);
drm-page-flip.patch:
b/drivers/gpu/drm/drm_crtc.c | 169 +++++++++++++++-
b/drivers/gpu/drm/drm_crtc_helper.c | 12 +
b/drivers/gpu/drm/drm_drv.c | 1
b/drivers/gpu/drm/drm_fops.c | 68 ++++++
b/drivers/gpu/drm/drm_irq.c | 43 ++++
b/drivers/gpu/drm/drm_stub.c | 1
b/drivers/gpu/drm/i915/i915_drv.c | 1
b/drivers/gpu/drm/i915/intel_display.c | 26 +-
b/drivers/gpu/drm/radeon/radeon_display.c | 3
b/include/drm/drm.h | 25 ++
b/include/drm/drmP.h | 32 +++
b/include/drm/drm_crtc.h | 27 ++
b/include/drm/drm_crtc_helper.h | 4
b/include/drm/drm_mode.h | 16 +
linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c | 2
linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c | 2
16 files changed, 416 insertions(+), 16 deletions(-)
Index: drm-page-flip.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-page-flip.patch,v
retrieving revision 1.2.6.4
retrieving revision 1.2.6.5
diff -u -p -r1.2.6.4 -r1.2.6.5
--- drm-page-flip.patch 26 Aug 2009 19:58:48 -0000 1.2.6.4
+++ drm-page-flip.patch 10 Sep 2009 14:00:29 -0000 1.2.6.5
@@ -1,6 +1,7 @@
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc.c.pf linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc.c
---- linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc.c.pf 2009-08-25 09:52:20.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc.c 2009-08-25 09:52:41.000000000 +1000
+diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
+index ba728ad..4b7e748 100644
+--- a/drivers/gpu/drm/drm_crtc.c
++++ b/drivers/gpu/drm/drm_crtc.c
@@ -34,6 +34,8 @@
#include "drmP.h"
#include "drm_crtc.h"
@@ -10,7 +11,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
struct drm_prop_enum_list {
int type;
char *name;
-@@ -329,6 +331,34 @@ void drm_framebuffer_cleanup(struct drm_
+@@ -330,6 +332,34 @@ void drm_framebuffer_cleanup(struct drm_framebuffer *fb)
EXPORT_SYMBOL(drm_framebuffer_cleanup);
/**
@@ -45,7 +46,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
* drm_crtc_init - Initialise a new CRTC object
* @dev: DRM device
* @crtc: CRTC object to init
-@@ -339,17 +369,19 @@ EXPORT_SYMBOL(drm_framebuffer_cleanup);
+@@ -340,17 +370,19 @@ EXPORT_SYMBOL(drm_framebuffer_cleanup);
*
* Inits a new object created as base part of an driver crtc object.
*/
@@ -66,7 +67,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
mutex_unlock(&dev->mode_config.mutex);
}
EXPORT_SYMBOL(drm_crtc_init);
-@@ -368,6 +400,9 @@ void drm_crtc_cleanup(struct drm_crtc *c
+@@ -369,6 +401,9 @@ void drm_crtc_cleanup(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
@@ -76,7 +77,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
if (crtc->gamma_store) {
kfree(crtc->gamma_store);
crtc->gamma_store = NULL;
-@@ -375,6 +410,7 @@ void drm_crtc_cleanup(struct drm_crtc *c
+@@ -376,6 +411,7 @@ void drm_crtc_cleanup(struct drm_crtc *crtc)
drm_mode_object_put(dev, &crtc->base);
list_del(&crtc->head);
@@ -84,7 +85,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
dev->mode_config.num_crtc--;
}
EXPORT_SYMBOL(drm_crtc_cleanup);
-@@ -2478,3 +2514,134 @@ out:
+@@ -2479,3 +2515,134 @@ out:
mutex_unlock(&dev->mode_config.mutex);
return ret;
}
@@ -219,10 +220,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
+
+ return ret;
+}
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c.pf linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c
---- linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c.pf 2009-08-25 09:52:20.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c 2009-08-25 09:52:41.000000000 +1000
-@@ -874,8 +874,10 @@ int drm_crtc_helper_set_config(struct dr
+diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
+index ff447f1..fec66f9 100644
+--- a/drivers/gpu/drm/drm_crtc_helper.c
++++ b/drivers/gpu/drm/drm_crtc_helper.c
+@@ -872,8 +872,10 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
old_fb = set->crtc->fb;
if (set->crtc->fb != set->fb)
set->crtc->fb = set->fb;
@@ -231,9 +233,9 @@ diff -up linux-2.6.30.noarch/drivers/gpu
set->x, set->y, old_fb);
+ mutex_unlock(&dev->struct_mutex);
if (ret != 0)
- goto fail_set_mode;
+ goto fail;
}
-@@ -1101,3 +1103,13 @@ int drm_helper_resume_force_mode(struct
+@@ -1095,3 +1097,13 @@ int drm_helper_resume_force_mode(struct drm_device *dev)
return 0;
}
EXPORT_SYMBOL(drm_helper_resume_force_mode);
@@ -247,10 +249,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
+ return crtc_funcs->mode_set_base(crtc, x, y, old_fb);
+}
+EXPORT_SYMBOL(drm_crtc_helper_set_base);
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_drv.c.pf linux-2.6.30.noarch/drivers/gpu/drm/drm_drv.c
---- linux-2.6.30.noarch/drivers/gpu/drm/drm_drv.c.pf 2009-08-25 09:52:20.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_drv.c 2009-08-25 09:52:41.000000000 +1000
-@@ -145,6 +145,7 @@ static struct drm_ioctl_desc drm_ioctls[
+diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
+index a75ca63..672f473 100644
+--- a/drivers/gpu/drm/drm_drv.c
++++ b/drivers/gpu/drm/drm_drv.c
+@@ -145,6 +145,7 @@ static struct drm_ioctl_desc drm_ioctls[] = {
DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb, DRM_MASTER|DRM_CONTROL_ALLOW),
DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB, drm_mode_addfb, DRM_MASTER|DRM_CONTROL_ALLOW),
DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb, DRM_MASTER|DRM_CONTROL_ALLOW),
@@ -258,10 +261,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
};
#define DRM_CORE_IOCTL_COUNT ARRAY_SIZE( drm_ioctls )
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_fops.c.pf linux-2.6.30.noarch/drivers/gpu/drm/drm_fops.c
---- linux-2.6.30.noarch/drivers/gpu/drm/drm_fops.c.pf 2009-08-25 09:35:48.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_fops.c 2009-08-25 09:52:41.000000000 +1000
-@@ -257,6 +257,8 @@ static int drm_open_helper(struct inode
+diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
+index 251bc0e..dcd9c66 100644
+--- a/drivers/gpu/drm/drm_fops.c
++++ b/drivers/gpu/drm/drm_fops.c
+@@ -257,6 +257,8 @@ static int drm_open_helper(struct inode *inode, struct file *filp,
INIT_LIST_HEAD(&priv->lhead);
INIT_LIST_HEAD(&priv->fbs);
@@ -270,7 +274,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
if (dev->driver->driver_features & DRIVER_GEM)
drm_gem_open(dev, priv);
-@@ -429,6 +431,9 @@ int drm_release(struct inode *inode, str
+@@ -429,6 +431,9 @@ int drm_release(struct inode *inode, struct file *filp)
{
struct drm_file *file_priv = filp->private_data;
struct drm_device *dev = file_priv->minor->dev;
@@ -280,7 +284,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
int retcode = 0;
lock_kernel();
-@@ -451,6 +456,19 @@ int drm_release(struct inode *inode, str
+@@ -451,6 +456,19 @@ int drm_release(struct inode *inode, struct file *filp)
if (file_priv->minor->master)
drm_master_release(dev, filp);
@@ -300,7 +304,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
if (dev->driver->driver_features & DRIVER_GEM)
drm_gem_release(dev, file_priv);
-@@ -544,9 +562,55 @@ int drm_release(struct inode *inode, str
+@@ -544,9 +562,55 @@ int drm_release(struct inode *inode, struct file *filp)
}
EXPORT_SYMBOL(drm_release);
@@ -358,9 +362,10 @@ diff -up linux-2.6.30.noarch/drivers/gpu
+ return mask;
}
EXPORT_SYMBOL(drm_poll);
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_irq.c.pf linux-2.6.30.noarch/drivers/gpu/drm/drm_irq.c
---- linux-2.6.30.noarch/drivers/gpu/drm/drm_irq.c.pf 2009-08-25 09:35:48.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_irq.c 2009-08-25 09:52:41.000000000 +1000
+diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
+index f85aaf2..102d19d 100644
+--- a/drivers/gpu/drm/drm_irq.c
++++ b/drivers/gpu/drm/drm_irq.c
@@ -34,6 +34,7 @@
*/
@@ -369,7 +374,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
#include <linux/interrupt.h> /* For task queue support */
-@@ -71,6 +72,44 @@ int drm_irq_by_busid(struct drm_device *
+@@ -71,6 +72,44 @@ int drm_irq_by_busid(struct drm_device *dev, void *data,
return 0;
}
@@ -414,16 +419,16 @@ diff -up linux-2.6.30.noarch/drivers/gpu
static void vblank_disable_fn(unsigned long arg)
{
struct drm_device *dev = (struct drm_device *)arg;
-@@ -161,6 +200,8 @@ int drm_vblank_init(struct drm_device *d
+@@ -161,6 +200,8 @@ int drm_vblank_init(struct drm_device *dev, int num_crtcs)
atomic_set(&dev->vblank_refcount[i], 0);
}
-+ INIT_LIST_HEAD(&dev->flip_list);
+ INIT_WORK(&dev->flip_work, drm_flip_work_func);
++
dev->vblank_disable_allowed = 0;
return 0;
-@@ -626,5 +667,7 @@ void drm_handle_vblank(struct drm_device
+@@ -626,5 +667,7 @@ void drm_handle_vblank(struct drm_device *dev, int crtc)
{
atomic_inc(&dev->_vblank_count[crtc]);
DRM_WAKEUP(&dev->vbl_queue[crtc]);
@@ -431,10 +436,23 @@ diff -up linux-2.6.30.noarch/drivers/gpu
}
EXPORT_SYMBOL(drm_handle_vblank);
+
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.c.pf linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.c
---- linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.c.pf 2009-08-25 09:35:48.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.c 2009-08-25 09:52:41.000000000 +1000
-@@ -203,6 +203,7 @@ static struct drm_driver driver = {
+diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
+index 55bb8a8..65c8662 100644
+--- a/drivers/gpu/drm/drm_stub.c
++++ b/drivers/gpu/drm/drm_stub.c
+@@ -220,6 +220,7 @@ static int drm_fill_in_dev(struct drm_device * dev, struct pci_dev *pdev,
+ INIT_LIST_HEAD(&dev->ctxlist);
+ INIT_LIST_HEAD(&dev->vmalist);
+ INIT_LIST_HEAD(&dev->maplist);
++ INIT_LIST_HEAD(&dev->flip_list);
+
+ spin_lock_init(&dev->count_lock);
+ spin_lock_init(&dev->drw_lock);
+diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
+index dbe568c..b81305e 100644
+--- a/drivers/gpu/drm/i915/i915_drv.c
++++ b/drivers/gpu/drm/i915/i915_drv.c
+@@ -206,6 +206,7 @@ static struct drm_driver driver = {
.mmap = drm_gem_mmap,
.poll = drm_poll,
.fasync = drm_fasync,
@@ -442,10 +460,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
#ifdef CONFIG_COMPAT
.compat_ioctl = i915_compat_ioctl,
#endif
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c.pf linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c
---- linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c.pf 2009-08-25 09:35:48.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c 2009-08-25 09:52:41.000000000 +1000
-@@ -917,6 +917,8 @@ intel_pipe_set_base(struct drm_crtc *crt
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 155719f..0d6e677 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -973,6 +973,8 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
u32 dspcntr, alignment;
int ret;
@@ -454,7 +473,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
/* no fb bound */
if (!crtc->fb) {
DRM_DEBUG("No FB bound\n");
-@@ -952,17 +954,14 @@ intel_pipe_set_base(struct drm_crtc *crt
+@@ -1008,17 +1010,14 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
BUG();
}
@@ -472,7 +491,15 @@ diff -up linux-2.6.30.noarch/drivers/gpu
return ret;
}
-@@ -998,7 +997,6 @@ intel_pipe_set_base(struct drm_crtc *crt
+@@ -1029,7 +1028,6 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
+ ret = i915_gem_object_get_fence_reg(obj);
+ if (ret != 0) {
+ i915_gem_object_unpin(obj);
+- mutex_unlock(&dev->struct_mutex);
+ return ret;
+ }
+ }
+@@ -1054,7 +1052,6 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
default:
DRM_ERROR("Unknown color depth\n");
i915_gem_object_unpin(obj);
@@ -480,7 +507,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
return -EINVAL;
}
if (IS_I965G(dev)) {
-@@ -1026,13 +1024,11 @@ intel_pipe_set_base(struct drm_crtc *crt
+@@ -1086,17 +1083,14 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
I915_READ(dspbase);
}
@@ -488,14 +515,18 @@ diff -up linux-2.6.30.noarch/drivers/gpu
-
if (old_fb) {
intel_fb = to_intel_framebuffer(old_fb);
+ obj_priv = intel_fb->obj->driver_private;
+ intel_wait_for_vblank(dev);
i915_gem_object_unpin(intel_fb->obj);
}
-- mutex_unlock(&dev->struct_mutex);
+ intel_increase_pllclock(crtc, true);
+- mutex_unlock(&dev->struct_mutex);
+-
if (!dev->primary->master)
return 0;
-@@ -2605,7 +2601,9 @@ static int intel_crtc_mode_set(struct dr
+
+@@ -2732,7 +2726,9 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
I915_WRITE(dspcntr_reg, dspcntr);
/* Flush the plane changes */
@@ -505,7 +536,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
intel_update_watermarks(dev);
-@@ -3081,6 +3079,7 @@ static const struct drm_crtc_funcs intel
+@@ -3521,6 +3517,7 @@ static const struct drm_crtc_funcs intel_crtc_funcs = {
.gamma_set = intel_crtc_gamma_set,
.set_config = drm_crtc_helper_set_config,
.destroy = intel_crtc_destroy,
@@ -513,7 +544,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
};
-@@ -3093,7 +3092,7 @@ static void intel_crtc_init(struct drm_d
+@@ -3533,7 +3530,7 @@ static void intel_crtc_init(struct drm_device *dev, int pipe)
if (intel_crtc == NULL)
return;
@@ -522,7 +553,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
drm_mode_crtc_set_gamma_size(&intel_crtc->base, 256);
intel_crtc->pipe = pipe;
-@@ -3327,9 +3326,18 @@ static int intel_user_framebuffer_create
+@@ -3717,9 +3714,18 @@ static int intel_user_framebuffer_create_handle(struct drm_framebuffer *fb,
return drm_gem_handle_create(file_priv, object, handle);
}
@@ -541,34 +572,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
};
int intel_framebuffer_create(struct drm_device *dev,
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c.pf linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c
---- linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c.pf 2009-08-25 09:52:20.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c 2009-08-25 09:52:41.000000000 +1000
-@@ -1122,7 +1122,7 @@ nv04_crtc_create(struct drm_device *dev,
- nv_crtc->mode_set.connectors = (struct drm_connector **)(nv_crtc + 1);
- nv_crtc->mode_set.num_connectors = 0;
-
-- drm_crtc_init(dev, &nv_crtc->base, &nv04_crtc_funcs);
-+ drm_crtc_init(dev, &nv_crtc->base, crtc_num, &nv04_crtc_funcs);
- drm_crtc_helper_add(&nv_crtc->base, &nv04_crtc_helper_funcs);
- drm_mode_crtc_set_gamma_size(&nv_crtc->base, 256);
-
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c.pf linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c
---- linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c.pf 2009-08-25 09:52:20.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c 2009-08-25 09:52:41.000000000 +1000
-@@ -810,7 +810,7 @@ nv50_crtc_create(struct drm_device *dev,
- crtc->mode_set.connectors = (struct drm_connector **)(crtc + 1);
- crtc->mode_set.num_connectors = 0;
-
-- drm_crtc_init(dev, &crtc->base, &nv50_crtc_funcs);
-+ drm_crtc_init(dev, &crtc->base, index, &nv50_crtc_funcs);
- drm_crtc_helper_add(&crtc->base, &nv50_crtc_helper_funcs);
- drm_mode_crtc_set_gamma_size(&crtc->base, 256);
-
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_display.c.pf linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_display.c
---- linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_display.c.pf 2009-08-25 09:35:49.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_display.c 2009-08-25 09:52:41.000000000 +1000
-@@ -171,6 +171,7 @@ static const struct drm_crtc_funcs radeo
+diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
+index f5739e2..0ec45bc 100644
+--- a/drivers/gpu/drm/radeon/radeon_display.c
++++ b/drivers/gpu/drm/radeon/radeon_display.c
+@@ -168,6 +168,7 @@ static const struct drm_crtc_funcs radeon_crtc_funcs = {
.gamma_set = radeon_crtc_gamma_set,
.set_config = drm_crtc_helper_set_config,
.destroy = radeon_crtc_destroy,
@@ -576,7 +584,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
};
static void radeon_crtc_init(struct drm_device *dev, int index)
-@@ -183,7 +184,7 @@ static void radeon_crtc_init(struct drm_
+@@ -180,7 +181,7 @@ static void radeon_crtc_init(struct drm_device *dev, int index)
if (radeon_crtc == NULL)
return;
@@ -585,21 +593,131 @@ diff -up linux-2.6.30.noarch/drivers/gpu
drm_mode_crtc_set_gamma_size(&radeon_crtc->base, 256);
radeon_crtc->crtc_id = index;
-diff -up linux-2.6.30.noarch/include/drm/drm_crtc_helper.h.pf linux-2.6.30.noarch/include/drm/drm_crtc_helper.h
---- linux-2.6.30.noarch/include/drm/drm_crtc_helper.h.pf 2009-06-10 13:05:27.000000000 +1000
-+++ linux-2.6.30.noarch/include/drm/drm_crtc_helper.h 2009-08-25 09:52:41.000000000 +1000
-@@ -123,4 +123,8 @@ static inline void drm_connector_helper_
- }
+diff --git a/include/drm/drm.h b/include/drm/drm.h
+index 7cb50bd..1920323 100644
+--- a/include/drm/drm.h
++++ b/include/drm/drm.h
+@@ -686,6 +686,7 @@ struct drm_gem_open {
+ #define DRM_IOCTL_MODE_GETFB DRM_IOWR(0xAD, struct drm_mode_fb_cmd)
+ #define DRM_IOCTL_MODE_ADDFB DRM_IOWR(0xAE, struct drm_mode_fb_cmd)
+ #define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, unsigned int)
++#define DRM_IOCTL_MODE_PAGE_FLIP DRM_IOW( 0xB0, struct drm_mode_page_flip)
- extern int drm_helper_resume_force_mode(struct drm_device *dev);
+ /**
+ * Device specific ioctls should only be in their respective headers
+@@ -698,6 +699,30 @@ struct drm_gem_open {
+ #define DRM_COMMAND_BASE 0x40
+ #define DRM_COMMAND_END 0xA0
+
++/**
++ * Header for events written back to userspace on the drm fd. The
++ * type defines the type of event, the length specifies the total
++ * length of the event (including the header), and user_data is
++ * typically a 64 bit value passed with the ioctl that triggered the
++ * event. A read on the drm fd will always only return complete
++ * events, that is, if for example the read buffer is 100 bytes, and
++ * there are two 64 byte events pending, only one will be returned.
++ */
++struct drm_event {
++ __u32 type;
++ __u32 length;
++};
+
-+extern int drm_crtc_helper_set_base(struct drm_crtc *crtc, int x, int y,
-+ struct drm_framebuffer *old_fb);
++#define DRM_EVENT_MODE_PAGE_FLIP 0x01
+
- #endif
-diff -up linux-2.6.30.noarch/include/drm/drm_crtc.h.pf linux-2.6.30.noarch/include/drm/drm_crtc.h
---- linux-2.6.30.noarch/include/drm/drm_crtc.h.pf 2009-08-25 09:52:20.000000000 +1000
-+++ linux-2.6.30.noarch/include/drm/drm_crtc.h 2009-08-25 09:52:41.000000000 +1000
++struct drm_event_page_flip {
++ struct drm_event base;
++ __u64 user_data;
++ __u32 tv_sec;
++ __u32 tv_usec;
++ __u32 frame;
++};
++
+ /* typedef area */
+ #ifndef __KERNEL__
+ typedef struct drm_clip_rect drm_clip_rect_t;
+diff --git a/include/drm/drmP.h b/include/drm/drmP.h
+index eeefb63..5431888 100644
+--- a/include/drm/drmP.h
++++ b/include/drm/drmP.h
+@@ -426,6 +426,14 @@ struct drm_buf_entry {
+ struct drm_freelist freelist;
+ };
+
++/* Event queued up for userspace to read */
++struct drm_pending_event {
++ struct drm_event *event;
++ struct list_head link;
++ struct drm_file *file_priv;
++ void (*destroy) (struct drm_pending_event *event);
++};
++
+ /** File private data */
+ struct drm_file {
+ int authenticated;
+@@ -449,6 +457,9 @@ struct drm_file {
+ struct drm_master *master; /* master this node is currently associated with
+ N.B. not always minor->master */
+ struct list_head fbs;
++
++ wait_queue_head_t event_wait;
++ struct list_head event_list;
+ };
+
+ /** Wait queue */
+@@ -897,6 +908,16 @@ struct drm_minor {
+ struct drm_mode_group mode_group;
+ };
+
++struct drm_pending_flip {
++ struct drm_pending_event pending_event;
++ struct drm_framebuffer *old_fb;
++ struct drm_crtc *crtc;
++ u32 frame;
++ int pipe;
++ struct list_head link;
++ struct drm_event_page_flip event;
++};
++
+ /**
+ * DRM device structure. This structure represent a complete card that
+ * may contain multiple heads.
+@@ -996,6 +1017,13 @@ struct drm_device {
+
+ u32 max_vblank_count; /**< size of vblank counter register */
+
++ struct work_struct flip_work;
++
++ /**
++ * List of objects waiting on flip completion
++ */
++ struct list_head flip_list;
++
+ /*@} */
+ cycles_t ctx_start;
+ cycles_t lck_start;
+@@ -1132,6 +1160,8 @@ extern int drm_lastclose(struct drm_device *dev);
+ extern int drm_open(struct inode *inode, struct file *filp);
+ extern int drm_stub_open(struct inode *inode, struct file *filp);
+ extern int drm_fasync(int fd, struct file *filp, int on);
++extern ssize_t drm_read(struct file *filp, char __user *buffer,
++ size_t count, loff_t *offset);
+ extern int drm_release(struct inode *inode, struct file *filp);
+
+ /* Mapping support (drm_vm.h) */
+@@ -1298,6 +1328,8 @@ extern void drm_vblank_pre_modeset(struct drm_device *dev, int crtc);
+ extern void drm_vblank_post_modeset(struct drm_device *dev, int crtc);
+ extern int drm_modeset_ctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
++extern void drm_finish_pending_flip(struct drm_device *dev,
++ struct drm_pending_flip *f, u32 frame);
+
+ /* AGP/GART support (drm_agpsupport.h) */
+ extern struct drm_agp_head *drm_agp_init(struct drm_device *dev);
+diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
+index ae1e9e1..525f770 100644
+--- a/include/drm/drm_crtc.h
++++ b/include/drm/drm_crtc.h
@@ -238,6 +238,12 @@ struct drm_display_info {
};
@@ -613,7 +731,7 @@ diff -up linux-2.6.30.noarch/include/drm
void (*destroy)(struct drm_framebuffer *framebuffer);
int (*create_handle)(struct drm_framebuffer *fb,
struct drm_file *file_priv,
-@@ -288,6 +294,7 @@ struct drm_property {
+@@ -290,6 +296,7 @@ struct drm_property {
struct drm_crtc;
struct drm_connector;
struct drm_encoder;
@@ -621,7 +739,7 @@ diff -up linux-2.6.30.noarch/include/drm
/**
* drm_crtc_funcs - control CRTCs for a given device
-@@ -331,17 +338,29 @@ struct drm_crtc_funcs {
+@@ -333,17 +340,29 @@ struct drm_crtc_funcs {
void (*destroy)(struct drm_crtc *crtc);
int (*set_config)(struct drm_mode_set *set);
@@ -651,7 +769,7 @@ diff -up linux-2.6.30.noarch/include/drm
*
* Each CRTC may have one or more connectors associated with it. This structure
* allows the CRTC to be controlled.
-@@ -359,6 +378,7 @@ struct drm_crtc {
+@@ -361,6 +380,7 @@ struct drm_crtc {
struct drm_display_mode mode;
@@ -659,7 +777,7 @@ diff -up linux-2.6.30.noarch/include/drm
int x, y;
struct drm_display_mode *desired_mode;
int desired_x, desired_y;
-@@ -368,6 +388,10 @@ struct drm_crtc {
+@@ -370,6 +390,10 @@ struct drm_crtc {
uint32_t gamma_size;
uint16_t *gamma_store;
@@ -670,7 +788,7 @@ diff -up linux-2.6.30.noarch/include/drm
/* if you are using the helper */
void *helper_private;
};
-@@ -595,6 +619,7 @@ struct drm_mode_config {
+@@ -597,6 +621,7 @@ struct drm_mode_config {
extern void drm_crtc_init(struct drm_device *dev,
struct drm_crtc *crtc,
@@ -678,7 +796,7 @@ diff -up linux-2.6.30.noarch/include/drm
const struct drm_crtc_funcs *funcs);
extern void drm_crtc_cleanup(struct drm_crtc *crtc);
-@@ -742,6 +767,8 @@ extern int drm_mode_gamma_get_ioctl(stru
+@@ -744,6 +769,8 @@ extern int drm_mode_gamma_get_ioctl(struct drm_device *dev,
extern int drm_mode_gamma_set_ioctl(struct drm_device *dev,
void *data, struct drm_file *file_priv);
extern bool drm_detect_hdmi_monitor(struct edid *edid);
@@ -687,51 +805,23 @@ diff -up linux-2.6.30.noarch/include/drm
extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev,
int hdisplay, int vdisplay, int vrefresh,
bool reduced, bool interlaced);
-diff -up linux-2.6.30.noarch/include/drm/drm.h.pf linux-2.6.30.noarch/include/drm/drm.h
---- linux-2.6.30.noarch/include/drm/drm.h.pf 2009-06-10 13:05:27.000000000 +1000
-+++ linux-2.6.30.noarch/include/drm/drm.h 2009-08-25 09:52:41.000000000 +1000
-@@ -686,6 +686,7 @@ struct drm_gem_open {
- #define DRM_IOCTL_MODE_GETFB DRM_IOWR(0xAD, struct drm_mode_fb_cmd)
- #define DRM_IOCTL_MODE_ADDFB DRM_IOWR(0xAE, struct drm_mode_fb_cmd)
- #define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, unsigned int)
-+#define DRM_IOCTL_MODE_PAGE_FLIP DRM_IOW( 0xB0, struct drm_mode_page_flip)
-
- /**
- * Device specific ioctls should only be in their respective headers
-@@ -698,6 +699,30 @@ struct drm_gem_open {
- #define DRM_COMMAND_BASE 0x40
- #define DRM_COMMAND_END 0xA0
+diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
+index 4c8daca..b5bd0b8 100644
+--- a/include/drm/drm_crtc_helper.h
++++ b/include/drm/drm_crtc_helper.h
+@@ -126,4 +126,8 @@ static inline void drm_connector_helper_add(struct drm_connector *connector,
+ }
-+/**
-+ * Header for events written back to userspace on the drm fd. The
-+ * type defines the type of event, the length specifies the total
-+ * length of the event (including the header), and user_data is
-+ * typically a 64 bit value passed with the ioctl that triggered the
-+ * event. A read on the drm fd will always only return complete
-+ * events, that is, if for example the read buffer is 100 bytes, and
-+ * there are two 64 byte events pending, only one will be returned.
-+ */
-+struct drm_event {
-+ __u32 type;
-+ __u32 length;
-+};
-+
-+#define DRM_EVENT_MODE_PAGE_FLIP 0x01
+ extern int drm_helper_resume_force_mode(struct drm_device *dev);
+
-+struct drm_event_page_flip {
-+ struct drm_event base;
-+ __u64 user_data;
-+ __u32 tv_sec;
-+ __u32 tv_usec;
-+ __u32 frame;
-+};
++extern int drm_crtc_helper_set_base(struct drm_crtc *crtc, int x, int y,
++ struct drm_framebuffer *old_fb);
+
- /* typedef area */
- #ifndef __KERNEL__
- typedef struct drm_clip_rect drm_clip_rect_t;
-diff -up linux-2.6.30.noarch/include/drm/drm_mode.h.pf linux-2.6.30.noarch/include/drm/drm_mode.h
---- linux-2.6.30.noarch/include/drm/drm_mode.h.pf 2009-08-25 09:52:20.000000000 +1000
-+++ linux-2.6.30.noarch/include/drm/drm_mode.h 2009-08-25 09:52:41.000000000 +1000
+ #endif
+diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h
+index 1f90841..6f08a77 100644
+--- a/include/drm/drm_mode.h
++++ b/include/drm/drm_mode.h
@@ -268,4 +268,20 @@ struct drm_mode_crtc_lut {
__u64 blue;
};
@@ -753,80 +843,27 @@ diff -up linux-2.6.30.noarch/include/drm
+};
+
#endif
-diff -up linux-2.6.30.noarch/include/drm/drmP.h.pf linux-2.6.30.noarch/include/drm/drmP.h
---- linux-2.6.30.noarch/include/drm/drmP.h.pf 2009-08-25 09:52:20.000000000 +1000
-+++ linux-2.6.30.noarch/include/drm/drmP.h 2009-08-25 09:52:41.000000000 +1000
-@@ -426,6 +426,14 @@ struct drm_buf_entry {
- struct drm_freelist freelist;
- };
+diff -up linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c.da linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c
+--- linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c.da 2009-09-08 16:07:49.000000000 +1000
++++ linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c 2009-09-08 16:08:09.000000000 +1000
+@@ -993,7 +993,7 @@ nv04_crtc_create(struct drm_device *dev,
+ nv_crtc->index = crtc_num;
+ nv_crtc->last_dpms = NV_DPMS_CLEARED;
-+/* Event queued up for userspace to read */
-+struct drm_pending_event {
-+ struct drm_event *event;
-+ struct list_head link;
-+ struct drm_file *file_priv;
-+ void (*destroy) (struct drm_pending_event *event);
-+};
-+
- /** File private data */
- struct drm_file {
- int authenticated;
-@@ -449,6 +457,9 @@ struct drm_file {
- struct drm_master *master; /* master this node is currently associated with
- N.B. not always minor->master */
- struct list_head fbs;
-+
-+ wait_queue_head_t event_wait;
-+ struct list_head event_list;
- };
-
- /** Wait queue */
-@@ -897,6 +908,16 @@ struct drm_minor {
- struct drm_mode_group mode_group;
- };
-
-+struct drm_pending_flip {
-+ struct drm_pending_event pending_event;
-+ struct drm_framebuffer *old_fb;
-+ struct drm_crtc *crtc;
-+ u32 frame;
-+ int pipe;
-+ struct list_head link;
-+ struct drm_event_page_flip event;
-+};
-+
- /**
- * DRM device structure. This structure represent a complete card that
- * may contain multiple heads.
-@@ -996,6 +1017,13 @@ struct drm_device {
-
- u32 max_vblank_count; /**< size of vblank counter register */
+- drm_crtc_init(dev, &nv_crtc->base, &nv04_crtc_funcs);
++ drm_crtc_init(dev, &nv_crtc->base, crtc_num, &nv04_crtc_funcs);
+ drm_crtc_helper_add(&nv_crtc->base, &nv04_crtc_helper_funcs);
+ drm_mode_crtc_set_gamma_size(&nv_crtc->base, 256);
-+ struct work_struct flip_work;
-+
-+ /**
-+ * List of objects waiting on flip completion
-+ */
-+ struct list_head flip_list;
-+
- /*@} */
- cycles_t ctx_start;
- cycles_t lck_start;
-@@ -1132,6 +1160,8 @@ extern int drm_lastclose(struct drm_devi
- extern int drm_open(struct inode *inode, struct file *filp);
- extern int drm_stub_open(struct inode *inode, struct file *filp);
- extern int drm_fasync(int fd, struct file *filp, int on);
-+extern ssize_t drm_read(struct file *filp, char __user *buffer,
-+ size_t count, loff_t *offset);
- extern int drm_release(struct inode *inode, struct file *filp);
+diff -up linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c.da linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c
+--- linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c.da 2009-09-08 16:07:49.000000000 +1000
++++ linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c 2009-09-08 16:08:09.000000000 +1000
+@@ -777,7 +777,7 @@ nv50_crtc_create(struct drm_device *dev,
+ crtc->set_dither = nv50_crtc_set_dither;
+ crtc->set_scale = nv50_crtc_set_scale;
- /* Mapping support (drm_vm.h) */
-@@ -1300,6 +1330,8 @@ extern void drm_vblank_pre_modeset(struc
- extern void drm_vblank_post_modeset(struct drm_device *dev, int crtc);
- extern int drm_modeset_ctl(struct drm_device *dev, void *data,
- struct drm_file *file_priv);
-+extern void drm_finish_pending_flip(struct drm_device *dev,
-+ struct drm_pending_flip *f, u32 frame);
+- drm_crtc_init(dev, &crtc->base, &nv50_crtc_funcs);
++ drm_crtc_init(dev, &crtc->base, index, &nv50_crtc_funcs);
+ drm_crtc_helper_add(&crtc->base, &nv50_crtc_helper_funcs);
+ drm_mode_crtc_set_gamma_size(&crtc->base, 256);
- /* AGP/GART support (drm_agpsupport.h) */
- extern struct drm_agp_head *drm_agp_init(struct drm_device *dev);
drm-vga-arb.patch:
drivers/gpu/drm/drm_irq.c | 27 +++++++++++++++++++++++++++
drivers/gpu/drm/i915/i915_dma.c | 20 ++++++++++++++++++++
drivers/gpu/drm/i915/i915_drv.h | 1 +
drivers/gpu/drm/i915/i915_reg.h | 1 +
drivers/gpu/drm/i915/intel_display.c | 17 +++++++++++++++++
drivers/gpu/drm/i915/intel_drv.h | 1 +
drivers/gpu/drm/radeon/r100.c | 14 ++++++++++++++
drivers/gpu/drm/radeon/r600.c | 14 ++++++++++++++
drivers/gpu/drm/radeon/r600d.h | 1 +
drivers/gpu/drm/radeon/radeon.h | 2 ++
drivers/gpu/drm/radeon/radeon_asic.h | 12 ++++++++++++
drivers/gpu/drm/radeon/radeon_device.c | 19 +++++++++++++++++++
include/drm/drmP.h | 4 +++-
13 files changed, 132 insertions(+), 1 deletion(-)
Index: drm-vga-arb.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-vga-arb.patch,v
retrieving revision 1.5.2.3
retrieving revision 1.5.2.4
diff -u -p -r1.5.2.3 -r1.5.2.4
--- drm-vga-arb.patch 26 Aug 2009 19:58:48 -0000 1.5.2.3
+++ drm-vga-arb.patch 10 Sep 2009 14:00:29 -0000 1.5.2.4
@@ -1,7 +1,29 @@
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_irq.c.da linux-2.6.30.noarch/drivers/gpu/drm/drm_irq.c
---- linux-2.6.30.noarch/drivers/gpu/drm/drm_irq.c.da 2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_irq.c 2009-08-25 09:57:03.000000000 +1000
-@@ -38,6 +38,7 @@
+From ba0d10c754ca30de35063a5e14c92bb7328a9f32 Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied at redhat.com>
+Date: Tue, 8 Sep 2009 13:54:31 +1000
+Subject: [PATCH] drm-vga-arb.patch
+
+---
+ drivers/gpu/drm/drm_irq.c | 27 +++++++++++++++++++++++++++
+ drivers/gpu/drm/i915/i915_dma.c | 20 ++++++++++++++++++++
+ drivers/gpu/drm/i915/i915_drv.h | 1 +
+ drivers/gpu/drm/i915/i915_reg.h | 1 +
+ drivers/gpu/drm/i915/intel_display.c | 17 +++++++++++++++++
+ drivers/gpu/drm/i915/intel_drv.h | 1 +
+ drivers/gpu/drm/radeon/r100.c | 14 ++++++++++++++
+ drivers/gpu/drm/radeon/r600.c | 14 ++++++++++++++
+ drivers/gpu/drm/radeon/r600d.h | 1 +
+ drivers/gpu/drm/radeon/radeon.h | 2 ++
+ drivers/gpu/drm/radeon/radeon_asic.h | 12 ++++++++++++
+ drivers/gpu/drm/radeon/radeon_device.c | 19 +++++++++++++++++++
+ include/drm/drmP.h | 3 +++
+ 13 files changed, 132 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
+index f85aaf2..0a6f0b3 100644
+--- a/drivers/gpu/drm/drm_irq.c
++++ b/drivers/gpu/drm/drm_irq.c
+@@ -37,6 +37,7 @@
#include <linux/interrupt.h> /* For task queue support */
@@ -9,7 +31,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
/**
* Get interrupt from bus id.
*
-@@ -212,6 +213,26 @@ err:
+@@ -171,6 +172,26 @@ err:
}
EXPORT_SYMBOL(drm_vblank_init);
@@ -36,7 +58,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
/**
* Install IRQ handler.
*
-@@ -272,6 +293,9 @@ int drm_irq_install(struct drm_device *d
+@@ -231,6 +252,9 @@ int drm_irq_install(struct drm_device *dev)
return ret;
}
@@ -46,7 +68,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
/* After installing handler */
ret = dev->driver->irq_postinstall(dev);
if (ret < 0) {
-@@ -320,6 +344,9 @@ int drm_irq_uninstall(struct drm_device
+@@ -279,6 +303,9 @@ int drm_irq_uninstall(struct drm_device * dev)
DRM_DEBUG("irq=%d\n", dev->pdev->irq);
@@ -56,10 +78,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
dev->driver->irq_uninstall(dev);
free_irq(dev->pdev->irq, dev);
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_dma.c.da linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_dma.c
---- linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_dma.c.da 2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_dma.c 2009-08-25 09:57:03.000000000 +1000
-@@ -32,6 +32,7 @@
+diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
+index 9909505..5a49a18 100644
+--- a/drivers/gpu/drm/i915/i915_dma.c
++++ b/drivers/gpu/drm/i915/i915_dma.c
+@@ -33,6 +33,7 @@
#include "intel_drv.h"
#include "i915_drm.h"
#include "i915_drv.h"
@@ -67,7 +90,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
/* Really want an OS-independent resettable timer. Would like to have
* this loop run for (eg) 3 sec, but have the timer reset every time
-@@ -979,6 +980,19 @@ static int i915_probe_agp(struct drm_dev
+@@ -1012,6 +1013,19 @@ static int i915_probe_agp(struct drm_device *dev, uint32_t *aperture_size,
return 0;
}
@@ -87,7 +110,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
static int i915_load_modeset_init(struct drm_device *dev,
unsigned long prealloc_size,
unsigned long agp_size)
-@@ -1024,6 +1038,11 @@ static int i915_load_modeset_init(struct
+@@ -1057,6 +1071,11 @@ static int i915_load_modeset_init(struct drm_device *dev,
if (ret)
DRM_INFO("failed to find VBIOS tables\n");
@@ -99,7 +122,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
ret = drm_irq_install(dev);
if (ret)
goto destroy_ringbuffer;
-@@ -1284,6 +1303,7 @@ int i915_driver_unload(struct drm_device
+@@ -1324,6 +1343,7 @@ int i915_driver_unload(struct drm_device *dev)
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
drm_irq_uninstall(dev);
@@ -107,10 +130,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
}
if (dev->pdev->msi_enabled)
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.h.da linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.h
---- linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.h.da 2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.h 2009-08-25 09:57:03.000000000 +1000
-@@ -761,6 +761,7 @@ static inline void opregion_enable_asle(
+diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
+index 77ed060..a0632f8 100644
+--- a/drivers/gpu/drm/i915/i915_drv.h
++++ b/drivers/gpu/drm/i915/i915_drv.h
+@@ -766,6 +766,7 @@ static inline void opregion_enable_asle(struct drm_device *dev) { return; }
/* modesetting */
extern void intel_modeset_init(struct drm_device *dev);
extern void intel_modeset_cleanup(struct drm_device *dev);
@@ -118,9 +142,10 @@ diff -up linux-2.6.30.noarch/drivers/gpu
/**
* Lock test for when it's just for synchronization of ring access.
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_reg.h.da linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_reg.h
---- linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_reg.h.da 2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_reg.h 2009-08-25 09:57:03.000000000 +1000
+diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
+index e38cd21..3f79635 100644
+--- a/drivers/gpu/drm/i915/i915_reg.h
++++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -30,6 +30,7 @@
* fb aperture size and the amount of pre-reserved memory.
*/
@@ -129,10 +154,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
#define INTEL_GMCH_ENABLED 0x4
#define INTEL_GMCH_MEM_MASK 0x1
#define INTEL_GMCH_MEM_64M 0x1
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c.da linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c
---- linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c.da 2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c 2009-08-25 09:57:03.000000000 +1000
-@@ -3871,3 +3871,26 @@ struct drm_encoder *intel_best_encoder(s
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 155719f..0227b16 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -3917,3 +3917,20 @@ struct drm_encoder *intel_best_encoder(struct drm_connector *connector)
return &intel_output->enc;
}
@@ -142,36 +168,32 @@ diff -up linux-2.6.30.noarch/drivers/gpu
+ */
+int intel_modeset_vga_set_state(struct drm_device *dev, bool state)
+{
-+ struct pci_dev *bridge_dev;
++ struct drm_i915_private *dev_priv = dev->dev_private;
+ u16 gmch_ctrl;
+
-+ bridge_dev = pci_get_bus_and_slot(0, PCI_DEVFN(0, 0));
-+ if (!bridge_dev) {
-+ DRM_ERROR("Can't disable VGA, no bridge\n");
-+ return -1;
-+ }
-+
-+ pci_read_config_word(bridge_dev, INTEL_GMCH_CTRL, &gmch_ctrl);
++ pci_read_config_word(dev_priv->bridge_dev, INTEL_GMCH_CTRL, &gmch_ctrl);
+ if (state)
+ gmch_ctrl &= ~INTEL_GMCH_VGA_DISABLE;
+ else
+ gmch_ctrl |= INTEL_GMCH_VGA_DISABLE;
-+ pci_write_config_word(bridge_dev, INTEL_GMCH_CTRL, gmch_ctrl);
++ pci_write_config_word(dev_priv->bridge_dev, INTEL_GMCH_CTRL, gmch_ctrl);
+ return 0;
+}
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_drv.h.da linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_drv.h
---- linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_drv.h.da 2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_drv.h 2009-08-25 09:57:03.000000000 +1000
-@@ -161,4 +161,5 @@ extern int intel_framebuffer_create(stru
+diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
+index b9e47f1..3a0004f 100644
+--- a/drivers/gpu/drm/i915/intel_drv.h
++++ b/drivers/gpu/drm/i915/intel_drv.h
+@@ -178,4 +178,5 @@ extern int intel_framebuffer_create(struct drm_device *dev,
struct drm_mode_fb_cmd *mode_cmd,
struct drm_framebuffer **fb,
struct drm_gem_object *obj);
+
#endif /* __INTEL_DRV_H__ */
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/radeon/r100.c.da linux-2.6.30.noarch/drivers/gpu/drm/radeon/r100.c
---- linux-2.6.30.noarch/drivers/gpu/drm/radeon/r100.c.da 2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/radeon/r100.c 2009-08-25 09:57:03.000000000 +1000
-@@ -1574,6 +1574,20 @@ void r100_vram_init_sizes(struct radeon_
+diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
+index 5708c07..386ddbc 100644
+--- a/drivers/gpu/drm/radeon/r100.c
++++ b/drivers/gpu/drm/radeon/r100.c
+@@ -1916,6 +1916,20 @@ void r100_vram_init_sizes(struct radeon_device *rdev)
rdev->mc.real_vram_size = rdev->mc.aper_size;
}
@@ -192,10 +214,68 @@ diff -up linux-2.6.30.noarch/drivers/gpu
void r100_vram_info(struct radeon_device *rdev)
{
r100_vram_get_type(rdev);
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_asic.h.da linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_asic.h
---- linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_asic.h.da 2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_asic.h 2009-08-25 09:57:03.000000000 +1000
-@@ -46,6 +46,7 @@ uint32_t r100_mm_rreg(struct radeon_devi
+diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
+index d8fcef4..3417dff 100644
+--- a/drivers/gpu/drm/radeon/r600.c
++++ b/drivers/gpu/drm/radeon/r600.c
+@@ -1444,6 +1444,20 @@ bool r600_card_posted(struct radeon_device *rdev)
+ return false;
+ }
+
++void r600_vga_set_state(struct radeon_device *rdev, bool state)
++{
++ uint32_t temp;
++
++ temp = RREG32(CONFIG_CNTL);
++ if (state == false) {
++ temp &= ~(1<<0);
++ temp |= (1<<1);
++ } else {
++ temp &= ~(1<<1);
++ }
++ WREG32(CONFIG_CNTL, temp);
++}
++
+ int r600_resume(struct radeon_device *rdev)
+ {
+ int r;
+diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h
+index 723295f..4a9028a 100644
+--- a/drivers/gpu/drm/radeon/r600d.h
++++ b/drivers/gpu/drm/radeon/r600d.h
+@@ -78,6 +78,7 @@
+ #define CB_COLOR0_MASK 0x28100
+
+ #define CONFIG_MEMSIZE 0x5428
++#define CONFIG_CNTL 0x5424
+ #define CP_STAT 0x8680
+ #define CP_COHER_BASE 0x85F8
+ #define CP_DEBUG 0xC1FC
+diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
+index 3299733..98a0c7f 100644
+--- a/drivers/gpu/drm/radeon/radeon.h
++++ b/drivers/gpu/drm/radeon/radeon.h
+@@ -592,6 +592,7 @@ struct radeon_asic {
+ int (*suspend)(struct radeon_device *rdev);
+ void (*errata)(struct radeon_device *rdev);
+ void (*vram_info)(struct radeon_device *rdev);
++ void (*vga_set_state)(struct radeon_device *rdev, bool state);
+ int (*gpu_reset)(struct radeon_device *rdev);
+ int (*mc_init)(struct radeon_device *rdev);
+ void (*mc_fini)(struct radeon_device *rdev);
+@@ -901,6 +902,7 @@ static inline void radeon_ring_write(struct radeon_device *rdev, uint32_t v)
+ #define radeon_cs_parse(p) rdev->asic->cs_parse((p))
+ #define radeon_errata(rdev) (rdev)->asic->errata((rdev))
+ #define radeon_vram_info(rdev) (rdev)->asic->vram_info((rdev))
++#define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state))
+ #define radeon_gpu_reset(rdev) (rdev)->asic->gpu_reset((rdev))
+ #define radeon_mc_init(rdev) (rdev)->asic->mc_init((rdev))
+ #define radeon_mc_fini(rdev) (rdev)->asic->mc_fini((rdev))
+diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h
+index e87bb91..fd18cd6 100644
+--- a/drivers/gpu/drm/radeon/radeon_asic.h
++++ b/drivers/gpu/drm/radeon/radeon_asic.h
+@@ -47,6 +47,7 @@ uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg);
void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
void r100_errata(struct radeon_device *rdev);
void r100_vram_info(struct radeon_device *rdev);
@@ -203,7 +283,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
int r100_gpu_reset(struct radeon_device *rdev);
int r100_mc_init(struct radeon_device *rdev);
void r100_mc_fini(struct radeon_device *rdev);
-@@ -85,6 +86,7 @@ static struct radeon_asic r100_asic = {
+@@ -87,6 +88,7 @@ static struct radeon_asic r100_asic = {
.init = &r100_init,
.errata = &r100_errata,
.vram_info = &r100_vram_info,
@@ -211,7 +291,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
.gpu_reset = &r100_gpu_reset,
.mc_init = &r100_mc_init,
.mc_fini = &r100_mc_fini,
-@@ -149,6 +151,7 @@ static struct radeon_asic r300_asic = {
+@@ -152,6 +154,7 @@ static struct radeon_asic r300_asic = {
.init = &r300_init,
.errata = &r300_errata,
.vram_info = &r300_vram_info,
@@ -219,7 +299,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
.gpu_reset = &r300_gpu_reset,
.mc_init = &r300_mc_init,
.mc_fini = &r300_mc_fini,
-@@ -193,6 +196,7 @@ static struct radeon_asic r420_asic = {
+@@ -197,6 +200,7 @@ static struct radeon_asic r420_asic = {
.init = &r300_init,
.errata = &r420_errata,
.vram_info = &r420_vram_info,
@@ -227,7 +307,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
.gpu_reset = &r300_gpu_reset,
.mc_init = &r420_mc_init,
.mc_fini = &r420_mc_fini,
-@@ -244,6 +248,7 @@ static struct radeon_asic rs400_asic = {
+@@ -249,6 +253,7 @@ static struct radeon_asic rs400_asic = {
.init = &r300_init,
.errata = &rs400_errata,
.vram_info = &rs400_vram_info,
@@ -235,23 +315,23 @@ diff -up linux-2.6.30.noarch/drivers/gpu
.gpu_reset = &r300_gpu_reset,
.mc_init = &rs400_mc_init,
.mc_fini = &rs400_mc_fini,
-@@ -299,6 +304,7 @@ static struct radeon_asic rs600_asic = {
- .init = &r300_init,
+@@ -306,6 +311,7 @@ static struct radeon_asic rs600_asic = {
+ .init = &rs600_init,
.errata = &rs600_errata,
.vram_info = &rs600_vram_info,
+ .vga_set_state = &r100_vga_set_state,
.gpu_reset = &r300_gpu_reset,
.mc_init = &rs600_mc_init,
.mc_fini = &rs600_mc_fini,
-@@ -346,6 +352,7 @@ static struct radeon_asic rs690_asic = {
- .init = &rs690_init,
+@@ -353,6 +359,7 @@ static struct radeon_asic rs690_asic = {
+ .init = &rs600_init,
.errata = &rs690_errata,
.vram_info = &rs690_vram_info,
+ .vga_set_state = &r100_vga_set_state,
.gpu_reset = &r300_gpu_reset,
.mc_init = &rs690_mc_init,
.mc_fini = &rs690_mc_fini,
-@@ -399,6 +406,7 @@ static struct radeon_asic rv515_asic = {
+@@ -407,6 +414,7 @@ static struct radeon_asic rv515_asic = {
.init = &rv515_init,
.errata = &rv515_errata,
.vram_info = &rv515_vram_info,
@@ -259,7 +339,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
.gpu_reset = &rv515_gpu_reset,
.mc_init = &rv515_mc_init,
.mc_fini = &rv515_mc_fini,
-@@ -445,6 +453,7 @@ static struct radeon_asic r520_asic = {
+@@ -454,6 +462,7 @@ static struct radeon_asic r520_asic = {
.init = &rv515_init,
.errata = &r520_errata,
.vram_info = &r520_vram_info,
@@ -267,9 +347,34 @@ diff -up linux-2.6.30.noarch/drivers/gpu
.gpu_reset = &rv515_gpu_reset,
.mc_init = &r520_mc_init,
.mc_fini = &r520_mc_fini,
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_device.c.da linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_device.c
---- linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_device.c.da 2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_device.c 2009-08-25 09:57:03.000000000 +1000
+@@ -495,6 +504,7 @@ int r600_init(struct radeon_device *rdev);
+ void r600_fini(struct radeon_device *rdev);
+ int r600_suspend(struct radeon_device *rdev);
+ int r600_resume(struct radeon_device *rdev);
++void r600_vga_set_state(struct radeon_device *rdev, bool state);
+ int r600_wb_init(struct radeon_device *rdev);
+ void r600_wb_fini(struct radeon_device *rdev);
+ void r600_cp_commit(struct radeon_device *rdev);
+@@ -531,6 +541,7 @@ static struct radeon_asic r600_asic = {
+ .resume = &r600_resume,
+ .cp_commit = &r600_cp_commit,
+ .vram_info = NULL,
++ .vga_set_state = &r600_vga_set_state,
+ .gpu_reset = &r600_gpu_reset,
+ .mc_init = NULL,
+ .mc_fini = NULL,
+@@ -581,6 +592,7 @@ static struct radeon_asic rv770_asic = {
+ .cp_commit = &r600_cp_commit,
+ .vram_info = NULL,
+ .gpu_reset = &rv770_gpu_reset,
++ .vga_set_state = &r600_vga_set_state,
+ .mc_init = NULL,
+ .mc_fini = NULL,
+ .wb_init = &r600_wb_init,
+diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
+index f2469c5..764d2f8 100644
+--- a/drivers/gpu/drm/radeon/radeon_device.c
++++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -29,6 +29,7 @@
#include <drm/drmP.h>
#include <drm/drm_crtc_helper.h>
@@ -278,7 +383,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
#include "radeon_reg.h"
#include "radeon.h"
#include "radeon_asic.h"
-@@ -468,7 +469,18 @@ void radeon_combios_fini(struct radeon_d
+@@ -468,7 +469,18 @@ void radeon_combios_fini(struct radeon_device *rdev)
int radeon_modeset_init(struct radeon_device *rdev);
void radeon_modeset_fini(struct radeon_device *rdev);
@@ -297,7 +402,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
/*
* Radeon device.
*/
-@@ -559,6 +571,12 @@ int radeon_device_init(struct radeon_dev
+@@ -559,6 +571,12 @@ int radeon_device_init(struct radeon_device *rdev,
/* Initialize surface registers */
radeon_surface_init(rdev);
@@ -310,7 +415,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
/* TODO: disable VGA need to use VGA request */
/* BIOS*/
if (!radeon_get_bios(rdev)) {
-@@ -693,6 +711,7 @@ void radeon_device_fini(struct radeon_de
+@@ -693,6 +711,7 @@ void radeon_device_fini(struct radeon_device *rdev)
radeon_agp_fini(rdev);
#endif
radeon_irq_kms_fini(rdev);
@@ -318,29 +423,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
radeon_fence_driver_fini(rdev);
radeon_clocks_fini(rdev);
radeon_object_fini(rdev);
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon.h.da linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon.h
---- linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon.h.da 2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon.h 2009-08-25 09:57:03.000000000 +1000
-@@ -580,6 +580,7 @@ struct radeon_asic {
- int (*suspend)(struct radeon_device *rdev);
- void (*errata)(struct radeon_device *rdev);
- void (*vram_info)(struct radeon_device *rdev);
-+ void (*vga_set_state)(struct radeon_device *rdev, bool state);
- int (*gpu_reset)(struct radeon_device *rdev);
- int (*mc_init)(struct radeon_device *rdev);
- void (*mc_fini)(struct radeon_device *rdev);
-@@ -917,6 +918,7 @@ static inline void radeon_ring_write(str
- #define radeon_cs_parse(p) rdev->asic->cs_parse((p))
- #define radeon_errata(rdev) (rdev)->asic->errata((rdev))
- #define radeon_vram_info(rdev) (rdev)->asic->vram_info((rdev))
-+#define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state))
- #define radeon_gpu_reset(rdev) (rdev)->asic->gpu_reset((rdev))
- #define radeon_mc_init(rdev) (rdev)->asic->mc_init((rdev))
- #define radeon_mc_fini(rdev) (rdev)->asic->mc_fini((rdev))
-diff -up linux-2.6.30.noarch/include/drm/drmP.h.da linux-2.6.30.noarch/include/drm/drmP.h
---- linux-2.6.30.noarch/include/drm/drmP.h.da 2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/include/drm/drmP.h 2009-08-25 09:57:03.000000000 +1000
-@@ -821,6 +821,9 @@ struct drm_driver {
+diff --git a/include/drm/drmP.h b/include/drm/drmP.h
+index eeefb63..c8e64bb 100644
+--- a/include/drm/drmP.h
++++ b/include/drm/drmP.h
+@@ -810,6 +810,9 @@ struct drm_driver {
int (*gem_init_object) (struct drm_gem_object *obj);
void (*gem_free_object) (struct drm_gem_object *obj);
@@ -350,3 +437,6 @@ diff -up linux-2.6.30.noarch/include/drm
/* Driver private ops for this object */
struct vm_operations_struct *gem_vm_ops;
+--
+1.6.0.6
+
Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.1294.2.64
retrieving revision 1.1294.2.65
diff -u -p -r1.1294.2.64 -r1.1294.2.65
--- kernel.spec 5 Sep 2009 19:02:24 -0000 1.1294.2.64
+++ kernel.spec 10 Sep 2009 14:00:29 -0000 1.1294.2.65
@@ -6,7 +6,7 @@ Summary: The Linux kernel
# For a stable, released kernel, released_kernel should be 1. For rawhide
# and/or a kernel built from an rc or git snapshot, released_kernel should
# be 0.
-%global released_kernel 0
+%global released_kernel 1
# Versions of various parts
@@ -35,7 +35,7 @@ Summary: The Linux kernel
# base_sublevel is the kernel version we're starting with and patching
# on top of -- for example, 2.6.22-rc7-git1 starts with a 2.6.21 base,
# which yields a base_sublevel of 21.
-%define base_sublevel 30
+%define base_sublevel 31
## If this is a released kernel ##
%if 0%{?released_kernel}
@@ -60,7 +60,7 @@ Summary: The Linux kernel
# The next upstream release sublevel (base_sublevel+1)
%define upstream_sublevel %(echo $((%{base_sublevel} + 1)))
# The rc snapshot level
-%define rcrev 8
+%define rcrev 9
# The git snapshot level
%define gitrev 2
# Set rpm version accordingly
@@ -101,7 +101,7 @@ Summary: The Linux kernel
%define with_bootwrapper %{?_without_bootwrapper: 0} %{?!_without_bootwrapper: 1}
# Want to build a the vsdo directories installed
%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1}
-# dracut initrd-generic
+# Use dracut instead of mkinitrd for initrd image generation
%define with_dracut %{?_without_dracut: 0} %{?!_without_dracut: 1}
%define with_dracut 0
@@ -433,7 +433,12 @@ Summary: The Linux kernel
# Packages that need to be installed before the kernel is, because the %post
# scripts use them.
#
-%define kernel_prereq fileutils, module-init-tools, initscripts >= 8.11.1-1, mkinitrd >= 6.0.61-1, kernel-firmware >= %{rpmversion}-%{pkg_release}
+%define kernel_prereq fileutils, module-init-tools, initscripts >= 8.11.1-1, kernel-firmware >= %{rpmversion}-%{pkg_release}
+%if %{with_dracut}
+%define initrd_prereq dracut-kernel >= 001-7
+%else
+%define initrd_prereq mkinitrd >= 6.0.61-1
+%endif
#
# This macro does requires, provides, conflicts, obsoletes for a kernel package.
@@ -449,6 +454,7 @@ Provides: kernel-drm-nouveau = 15\
Provides: kernel-modeset = 1\
Provides: kernel-uname-r = %{KVERREL}%{?1:.%{1}}\
Requires(pre): %{kernel_prereq}\
+Requires(pre): %{initrd_prereq}\
Requires(post): /sbin/new-kernel-pkg\
Requires(preun): /sbin/new-kernel-pkg\
Conflicts: %{kernel_dot_org_conflicts}\
@@ -499,14 +505,6 @@ BuildRequires: sparse >= 0.4.1
%if %{with_perftool}
BuildRequires: elfutils-libelf-devel zlib-devel binutils-devel
%endif
-%if %{with_dracut}
-BuildRequires: dracut-kernel >= 0.7
-BuildRequires: dracut-generic >= 0.7
-%endif
-# For dracut image generation, cannot go in dracut package as its arch specific
-%ifnarch s390 s390x
-BuildRequires: kbd
-%endif
BuildConflicts: rhbuildsys(DiskFree) < 500Mb
%define fancy_debuginfo 0
@@ -688,6 +686,7 @@ Patch1575: linux-2.6-kvm-vmx-check-cpl-b
Patch1576: linux-2.6-use-__pa_symbol-to-calculate-address-of-C-symbol.patch
Patch1577: linux-2.6-kvm-pvmmu-do-not-batch-pte-updates-from-interrupt-context.patch
Patch1578: linux-2.6-xen-stack-protector-fix.patch
+Patch1579: linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch
# nouveau + drm fixes
Patch1812: drm-next.patch
@@ -699,10 +698,6 @@ Patch1821: drm-page-flip.patch
# intel drm is all merged upstream
Patch1824: drm-intel-next.patch
Patch1825: drm-intel-pm.patch
-Patch1826: drm-r600-kms.patch
-Patch1827: drm-rv710-ucode-fix.patch
-Patch1828: drm-god-shut-up-about-edid-already.patch
-Patch1829: drm-ddc-caching-bug.patch
# vga arb
Patch1900: linux-2.6-vga-arb.patch
@@ -1172,7 +1167,7 @@ ApplyPatch linux-2.6-dell-laptop-rfkill-
#
# Quiesce USB host controllers before setting up the IOMMU
ApplyPatch linux-2.6-die-closed-source-bios-muppets-die.patch
-# Some performance fixes, unify hardware/software passthrough support, and
+# Some performance fixes, unify hardware/software passthrough support, and
# most importantly: notice when the BIOS points us to a region that returns
# all 0xFF, and claims that there's an IOMMU there.
ApplyPatch linux-2.6-intel-iommu-updates.patch
@@ -1325,6 +1320,7 @@ ApplyPatch linux-2.6-kvm-vmx-check-cpl-b
ApplyPatch linux-2.6-use-__pa_symbol-to-calculate-address-of-C-symbol.patch
ApplyPatch linux-2.6-kvm-pvmmu-do-not-batch-pte-updates-from-interrupt-context.patch
#ApplyPatch linux-2.6-xen-stack-protector-fix.patch
+ApplyPatch linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch
# Fix block I/O errors in KVM
ApplyPatch linux-2.6-block-silently-error-unsupported-empty-barriers-too.patch
@@ -1333,10 +1329,6 @@ ApplyPatch linux-2.6-e1000-ich9.patch
# Nouveau DRM + drm fixes
ApplyPatch drm-next.patch
-ApplyPatch drm-r600-kms.patch
-ApplyPatch drm-rv710-ucode-fix.patch
-ApplyPatch drm-god-shut-up-about-edid-already.patch
-ApplyPatch drm-ddc-caching-bug.patch
ApplyPatch drm-nouveau.patch
# pm broken on my thinkpad t60p - airlied
@@ -1345,7 +1337,8 @@ ApplyPatch drm-i915-resume-force-mode.pa
ApplyPatch drm-intel-big-hammer.patch
ApplyPatch drm-page-flip.patch
ApplyOptionalPatch drm-intel-next.patch
-ApplyPatch drm-intel-pm.patch
+#this appears to be upstream - mjg59?
+#ApplyPatch drm-intel-pm.patch
# VGA arb + drm
ApplyPatch linux-2.6-vga-arb.patch
@@ -1460,6 +1453,11 @@ BuildKernel() {
# make sure EXTRAVERSION says what we want it to say
perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = %{?stablerev}-%{release}.%{_target_cpu}${Flavour:+.${Flavour}}/" Makefile
+ cat >> Makefile <<\EOF
+# XXX temp workaround for https://bugzilla.redhat.com/show_bug.cgi?id=521991
+KBUILD_CFLAGS += -fno-var-tracking-assignments
+EOF
+
# if pre-rc1 devel kernel, must fix up SUBLEVEL for our versioning scheme
%if !0%{?rcrev}
%if 0%{?gitrev}
@@ -1497,7 +1495,11 @@ BuildKernel() {
mkdir -p $RPM_BUILD_ROOT/%{image_install_path}
install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer
install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer
+%if %{with_dracut}
+ touch $RPM_BUILD_ROOT/boot/dracut-$KernelVer.img
+%else
touch $RPM_BUILD_ROOT/boot/initrd-$KernelVer.img
+%endif
if [ -f arch/$Arch/boot/zImage.stub ]; then
cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || :
fi
@@ -1794,26 +1796,6 @@ rm -f $RPM_BUILD_ROOT/usr/include/asm*/i
make DESTDIR=$RPM_BUILD_ROOT bootwrapper_install WRAPPER_OBJDIR=%{_libdir}/kernel-wrapper WRAPPER_DTSDIR=%{_libdir}/kernel-wrapper/dts
%endif
-%if %{with_dracut}
-%if !%{with_firmware}
-# dracut needs the firmware files
- %{build_firmware}
-%endif
- for i in $RPM_BUILD_ROOT/lib/modules/*; do
- [ -d $i ] || continue
- KernelVer=${i##$RPM_BUILD_ROOT/lib/modules/}
- depmod -b $RPM_BUILD_ROOT $KernelVer
- dracut --strip \
- --fwdir $RPM_BUILD_ROOT/lib/firmware:/lib/firmware \
- -k $i $RPM_BUILD_ROOT/boot/initrd-generic-${KernelVer}.img $KernelVer
- rm -fr $i/modules.dep
- done
-%if !%{with_firmware}
-# remove the firmware files, if ! with_firmware
- rm -fr $RPM_BUILD_ROOT/lib/firmware
-%endif
-%endif
-
###
### clean
@@ -1870,7 +1852,7 @@ if [ `uname -i` == "x86_64" -o `uname -i
fi}\
%{expand:\
%if %{with_dracut}\
-/sbin/new-kernel-pkg --package kernel%{?-v:-%{-v*}} --depmod --add-dracut-args --initrdfile=/boot/initrd-generic-%{KVERREL}%{?-v:.%{-v*}}.img --install %{KVERREL}%{?-v:.%{-v*}} || exit $?\
+/sbin/new-kernel-pkg --package kernel%{?-v:-%{-v*}} --mkinitrd --dracut --depmod --install %{KVERREL}%{?-v:.%{-v*}} || exit $?\
%else\
/sbin/new-kernel-pkg --package kernel%{?-v:-%{-v*}} --mkinitrd --depmod --install %{KVERREL}%{?-v:.%{-v*}} || exit $?\
%endif}\
@@ -1993,9 +1975,10 @@ fi
/etc/ld.so.conf.d/kernel-%{KVERREL}%{?2:.%{2}}.conf\
%endif\
/lib/modules/%{KVERREL}%{?2:.%{2}}/modules.*\
-%ghost /boot/initrd-%{KVERREL}%{?2:.%{2}}.img\
%if %{with_dracut}\
-/boot/initrd-generic-%{KVERREL}%{?2:.%{2}}.img\
+%ghost /boot/dracut-%{KVERREL}%{?2:.%{2}}.img\
+%else\
+%ghost /boot/initrd-%{KVERREL}%{?2:.%{2}}.img\
%endif\
%{expand:%%files %{?2:%{2}-}devel}\
%defattr(-,root,root)\
@@ -2036,6 +2019,82 @@ fi
# and build.
%changelog
+* Thu Sep 10 2009 Michael Young <m.a.young at durham.ac.uk>
+- update pvops and get to 2.6.31
+
+* Thu Sep 10 2009 Ben Skeggs <bskeggs at redhat.com>
+- drm-nouveau.patch: add some scaler-only modes for LVDS, GEM/TTM fixes
+
+* Wed Sep 09 2009 Dennis Gilmore <dennis at ausil.us> 2.6.31-2
+- touch the dracut initrd file when using %%{with_dracut}
+
+* Wed Sep 09 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31-1
+- Linux 2.6.31
+
+* Wed Sep 09 2009 Chuck Ebbert <cebbert at redhat.com>
+- Enable VXpocket and PDaudioCF PCMCIA sound drivers.
+
+* Wed Sep 09 2009 Hans de Goede <hdegoede at redhat.com>
+- Move to %%post generation of dracut initrd, because of GPL issues surrounding
+ shipping a prebuild initrd
+- Require grubby >= 7.0.4-1, for %%post generation
+
+* Wed Sep 9 2009 Steve Dickson <steved at redhat.com>
+- Updated the NFS4 pseudo root code to the latest release.
+
+* Wed Sep 09 2009 Justin M. Forbes <jforbes at redhat.com>
+- Revert virtio_blk to rotational mode. (#509383)
+
+* Wed Sep 09 2009 Dave Airlie <airlied at redhat.com> 2.6.31-0.219.rc9.git
+- uggh lost nouveau bits in page flip
+
+* Wed Sep 09 2009 Dave Airlie <airlied at redhat.com> 2.6.31-0.218.rc9.git2
+- fix r600 oops with page flip patch (#520766)
+
+* Wed Sep 09 2009 Ben Skeggs <bskeggs at redhat.com>
+- drm-nouveau.patch: fix display resume on pre-G8x chips
+
+* Wed Sep 09 2009 Ben Skeggs <bskeggs at redhat.com>
+- drm-nouveau.patch: add getparam to know using tile_flags is ok for scanout
+
+* Wed Sep 09 2009 Chuck Ebbert <cebbert at redhat.com>
+- 2.6.31-rc9-git2
+
+* Wed Sep 9 2009 Roland McGrath <roland at redhat.com> 2.6.31-0.214.rc9.git1
+- compile with -fno-var-tracking-assignments, work around gcc bug #521991
+
+* Wed Sep 09 2009 Dave Airlie <airlied at redhat.com> 2.6.31-0.213.rc9.git1
+- fix two bugs in r600 kms, fencing + mobile lvds
+
+* Tue Sep 08 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31-0.212.rc9.git1
+- drm-nouveau.patch: fix ppc build
+
+* Tue Sep 08 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31-0.211.rc9.git1
+- drm-nouveau.patch: more misc fixes
+
+* Tue Sep 08 2009 Dave Airlie <airlied at redhat.com> 2.6.31-0.210.rc9.git1
+- drm-page-flip.patch: rebase again
+
+* Tue Sep 08 2009 Dave Airlie <airlied at redhat.com> 2.6.31-0.209.rc9.git1
+- drm-next.patch: fix r600 signal interruption return value
+
+* Tue Sep 08 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31-0.208.rc9.git1
+- drm-nouveau.patch: latest upstream + rebase onto drm-next
+
+* Tue Sep 08 2009 Dave Airlie <airlied at redhat.com> 2.6.31-0.207.rc9.git1
+- drm-vga-arb.patch: update to avoid lockdep + add r600 support
+
+* Tue Sep 08 2009 Dave Airlie <airlied at redhat.com> 2.6.31-0.206.rc9.git1
+- drm: rebase to drm-next - r600 accel + kms should start working now
+
+* Mon Sep 07 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31-0.205.rc9.git1
+- 2.6.31-rc9-git1
+- Temporarily hack the drm-next patch so it still applies; the result
+ should still be safe to build.
+
+* Sat Sep 05 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31-0.204.rc9
+- 2.6.31-rc9
+
* Sat Sep 04 2009 Michael Young <m.a.young at durham.ac.uk>
- update pvops which includes swiotlb updates and a network fix
- try a drm build fix
@@ -3293,4 +3352,3 @@ fi
# rpm-change-log-uses-utc: t
# End:
###
-
linux-2.6-nfsd4-proots.patch:
fs/nfsd/export.c | 12 +++++-
fs/nfsd/nfs4xdr.c | 83 ++++++++++++++++++++++++++++++++++++--------
fs/nfsd/nfsfh.c | 32 ++++++++++++++++
fs/nfsd/vfs.c | 75 ++++++++++++++++++++++++++++++++++++++-
include/linux/nfsd/export.h | 3 +
include/linux/nfsd/nfsd.h | 2 +
6 files changed, 188 insertions(+), 19 deletions(-)
Index: linux-2.6-nfsd4-proots.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-nfsd4-proots.patch,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -p -r1.1.2.2 -r1.1.2.3
--- linux-2.6-nfsd4-proots.patch 9 Jul 2009 22:53:01 -0000 1.1.2.2
+++ linux-2.6-nfsd4-proots.patch 10 Sep 2009 14:00:29 -0000 1.1.2.3
@@ -1,6 +1,6 @@
diff -up linux-2.6.30.noarch/fs/nfsd/export.c.save linux-2.6.30.noarch/fs/nfsd/export.c
---- linux-2.6.30.noarch/fs/nfsd/export.c.save 2009-07-02 11:34:38.000000000 -0400
-+++ linux-2.6.30.noarch/fs/nfsd/export.c 2009-07-02 11:35:44.000000000 -0400
+--- linux-2.6.30.noarch/fs/nfsd/export.c.save 2009-09-09 15:11:54.702436000 -0400
++++ linux-2.6.30.noarch/fs/nfsd/export.c 2009-09-09 15:12:44.520167000 -0400
@@ -104,6 +104,7 @@ static int expkey_parse(struct cache_det
if (mesg[mlen-1] != '\n')
return -EINVAL;
@@ -64,9 +64,9 @@ diff -up linux-2.6.30.noarch/fs/nfsd/exp
return 0;
}
diff -up linux-2.6.30.noarch/fs/nfsd/nfs4xdr.c.save linux-2.6.30.noarch/fs/nfsd/nfs4xdr.c
---- linux-2.6.30.noarch/fs/nfsd/nfs4xdr.c.save 2009-07-02 11:34:38.000000000 -0400
-+++ linux-2.6.30.noarch/fs/nfsd/nfs4xdr.c 2009-07-02 11:35:31.000000000 -0400
-@@ -2176,28 +2176,62 @@ static inline int attributes_need_mount(
+--- linux-2.6.30.noarch/fs/nfsd/nfs4xdr.c.save 2009-09-09 15:11:54.707433000 -0400
++++ linux-2.6.30.noarch/fs/nfsd/nfs4xdr.c 2009-09-09 15:12:36.408695000 -0400
+@@ -2176,28 +2176,61 @@ static inline int attributes_need_mount(
return 0;
}
@@ -136,49 +136,11 @@ diff -up linux-2.6.30.noarch/fs/nfsd/nfs
+ struct svc_export *exp = cd->rd_fhp->fh_export;
+ __be32 nfserr;
+ int ignore_crossmnt = 0;
-+ int err, v4root = (exp->ex_flags & NFSEXP_V4ROOT);
+
exp_get(exp);
/*
* In the case of a mountpoint, the client may be asking for
-@@ -2208,18 +2242,29 @@ nfsd4_encode_dirent_fattr(struct nfsd4_r
- */
- if (d_mountpoint(dentry) && !attributes_need_mount(cd->rd_bmval))
- ignore_crossmnt = 1;
-- else if (d_mountpoint(dentry)) {
-- int err;
--
-+ else if (d_mountpoint(dentry) || v4root) {
-+ /*
-+ * Make sure the dentry is viewable on the psuedo export
-+ */
-+ v4root = (dentry->d_inode && v4root);
-+ if (v4root) {
-+ err = nfsd_export_lookup(cd->rd_rqstp, dentry, exp);
-+ if (err) {
-+ nfserr = nfserrno(err);
-+ goto out_put;
-+ }
-+ }
- /*
- * Why the heck aren't we just using nfsd_lookup??
- * Different "."/".." handling? Something else?
- * At least, add a comment here to explain....
- */
-- err = nfsd_cross_mnt(cd->rd_rqstp, &dentry, &exp);
-- if (err) {
-- nfserr = nfserrno(err);
-- goto out_put;
-+ if (d_mountpoint(dentry) || v4root) {
-+ err = nfsd_cross_mnt(cd->rd_rqstp, &dentry, &exp);
-+ if (err) {
-+ nfserr = nfserrno(err);
-+ goto out_put;
-+ }
- }
- nfserr = check_nfsd_access(exp, cd->rd_rqstp);
- if (nfserr)
-@@ -2258,6 +2303,7 @@ nfsd4_encode_dirent(void *ccdv, const ch
+@@ -2258,6 +2291,7 @@ nfsd4_encode_dirent(void *ccdv, const ch
struct readdir_cd *ccd = ccdv;
struct nfsd4_readdir *cd = container_of(ccd, struct nfsd4_readdir, common);
int buflen;
@@ -186,7 +148,7 @@ diff -up linux-2.6.30.noarch/fs/nfsd/nfs
__be32 *p = cd->buffer;
__be32 *cookiep;
__be32 nfserr = nfserr_toosmall;
-@@ -2268,19 +2314,40 @@ nfsd4_encode_dirent(void *ccdv, const ch
+@@ -2268,19 +2302,40 @@ nfsd4_encode_dirent(void *ccdv, const ch
return 0;
}
@@ -230,17 +192,15 @@ diff -up linux-2.6.30.noarch/fs/nfsd/nfs
case nfs_ok:
p += buflen;
diff -up linux-2.6.30.noarch/fs/nfsd/nfsfh.c.save linux-2.6.30.noarch/fs/nfsd/nfsfh.c
---- linux-2.6.30.noarch/fs/nfsd/nfsfh.c.save 2009-07-02 11:34:38.000000000 -0400
-+++ linux-2.6.30.noarch/fs/nfsd/nfsfh.c 2009-07-02 11:35:48.000000000 -0400
-@@ -109,6 +109,34 @@ static __be32 nfsd_setuser_and_check_por
+--- linux-2.6.30.noarch/fs/nfsd/nfsfh.c.save 2009-09-09 15:11:54.711427000 -0400
++++ linux-2.6.30.noarch/fs/nfsd/nfsfh.c 2009-09-09 15:12:48.357903000 -0400
+@@ -109,6 +109,30 @@ static __be32 nfsd_setuser_and_check_por
return nfserrno(nfsd_setuser(rqstp, exp));
}
+static inline __be32 check_pseudo_root(struct svc_rqst *rqstp,
+ struct dentry *dentry, struct svc_export *exp)
+{
-+ int error;
-+
+ /*
+ * Only interested in pseudo roots
+ */
@@ -252,14 +212,12 @@ diff -up linux-2.6.30.noarch/fs/nfsd/nfs
+ */
+ if (unlikely(!S_ISDIR(dentry->d_inode->i_mode)))
+ return nfserr_stale;
++
+ /*
-+ * Check non-root directories to make sure
-+ * they are truly exported
++ * Make sure the export is the parent of the dentry
+ */
-+ if (unlikely(dentry->d_name.len > 1)) {
-+ error = nfsd_export_lookup(rqstp, dentry, exp);
-+ return nfserrno(error);
-+ }
++ if (unlikely(dentry->d_parent != exp->ex_path.dentry))
++ return nfserr_stale;
+
+ return nfs_ok;
+}
@@ -267,7 +225,7 @@ diff -up linux-2.6.30.noarch/fs/nfsd/nfs
/*
* Use the given filehandle to look up the corresponding export and
* dentry. On success, the results are used to set fh_export and
-@@ -315,6 +343,14 @@ fh_verify(struct svc_rqst *rqstp, struct
+@@ -315,6 +339,14 @@ fh_verify(struct svc_rqst *rqstp, struct
error = nfsd_setuser_and_check_port(rqstp, exp);
if (error)
goto out;
@@ -283,8 +241,8 @@ diff -up linux-2.6.30.noarch/fs/nfsd/nfs
error = nfsd_mode_check(rqstp, dentry->d_inode->i_mode, type);
diff -up linux-2.6.30.noarch/fs/nfsd/vfs.c.save linux-2.6.30.noarch/fs/nfsd/vfs.c
---- linux-2.6.30.noarch/fs/nfsd/vfs.c.save 2009-07-02 11:34:38.000000000 -0400
-+++ linux-2.6.30.noarch/fs/nfsd/vfs.c 2009-07-02 11:35:39.000000000 -0400
+--- linux-2.6.30.noarch/fs/nfsd/vfs.c.save 2009-09-09 15:11:54.715423000 -0400
++++ linux-2.6.30.noarch/fs/nfsd/vfs.c 2009-09-09 15:12:39.978431000 -0400
@@ -89,6 +89,12 @@ struct raparm_hbucket {
#define RAPARM_HASH_MASK (RAPARM_HASH_SIZE-1)
static struct raparm_hbucket raparm_hash[RAPARM_HASH_SIZE];
@@ -314,7 +272,7 @@ diff -up linux-2.6.30.noarch/fs/nfsd/vfs
+/*
+ * Lookup the export the dentry is on. To be
-+ * viewable on an pseudo export, the dentry
++ * viewable on a pseudo export, the dentry
+ * has to be an exported directory.
+ */
+int
@@ -331,8 +289,8 @@ diff -up linux-2.6.30.noarch/fs/nfsd/vfs
+ /*
+ * Make sure the export is the parent of the dentry
+ */
-+ if (dentry->d_parent != exp->ex_path.dentry)
-+ return 0;
++ if (unlikely(dentry->d_parent != exp->ex_path.dentry))
++ return -ENOENT;
+
+ /*
+ * Only directories are seen on psuedo exports
@@ -405,8 +363,8 @@ diff -up linux-2.6.30.noarch/fs/nfsd/vfs
dput(dentry);
goto out_nfserr;
diff -up linux-2.6.30.noarch/include/linux/nfsd/export.h.save linux-2.6.30.noarch/include/linux/nfsd/export.h
---- linux-2.6.30.noarch/include/linux/nfsd/export.h.save 2009-07-02 11:34:38.000000000 -0400
-+++ linux-2.6.30.noarch/include/linux/nfsd/export.h 2009-07-02 11:35:22.000000000 -0400
+--- linux-2.6.30.noarch/include/linux/nfsd/export.h.save 2009-09-09 15:11:54.719419000 -0400
++++ linux-2.6.30.noarch/include/linux/nfsd/export.h 2009-09-09 15:12:29.064157000 -0400
@@ -39,7 +39,8 @@
#define NFSEXP_FSID 0x2000
#define NFSEXP_CROSSMOUNT 0x4000
@@ -418,8 +376,8 @@ diff -up linux-2.6.30.noarch/include/lin
/* The flags that may vary depending on security flavor: */
#define NFSEXP_SECINFO_FLAGS (NFSEXP_READONLY | NFSEXP_ROOTSQUASH \
diff -up linux-2.6.30.noarch/include/linux/nfsd/nfsd.h.save linux-2.6.30.noarch/include/linux/nfsd/nfsd.h
---- linux-2.6.30.noarch/include/linux/nfsd/nfsd.h.save 2009-07-02 11:34:38.000000000 -0400
-+++ linux-2.6.30.noarch/include/linux/nfsd/nfsd.h 2009-07-02 11:35:27.000000000 -0400
+--- linux-2.6.30.noarch/include/linux/nfsd/nfsd.h.save 2009-09-09 15:11:54.723415000 -0400
++++ linux-2.6.30.noarch/include/linux/nfsd/nfsd.h 2009-09-09 15:12:33.025896000 -0400
@@ -76,6 +76,8 @@ int nfsd_racache_init(int);
void nfsd_racache_shutdown(void);
int nfsd_cross_mnt(struct svc_rqst *rqstp, struct dentry **dpp,
Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/sources,v
retrieving revision 1.976.2.30
retrieving revision 1.976.2.31
diff -u -p -r1.976.2.30 -r1.976.2.31
--- sources 3 Sep 2009 20:02:38 -0000 1.976.2.30
+++ sources 10 Sep 2009 14:00:31 -0000 1.976.2.31
@@ -1,3 +1 @@
-7a80058a6382e5108cdb5554d1609615 linux-2.6.30.tar.bz2
-d7dce63ebb912ddcd7ac7ed580db03e4 patch-2.6.31-rc8.bz2
-81cac9f7aa9cfa526ce4cfedb4e0f739 patch-2.6.31-rc8-git2.bz2
+84c077a37684e4cbfa67b18154390d8a linux-2.6.31.tar.bz2
Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/upstream,v
retrieving revision 1.888.2.29
retrieving revision 1.888.2.30
diff -u -p -r1.888.2.29 -r1.888.2.30
--- upstream 3 Sep 2009 20:02:38 -0000 1.888.2.29
+++ upstream 10 Sep 2009 14:00:31 -0000 1.888.2.30
@@ -1,3 +1 @@
-linux-2.6.30.tar.bz2
-patch-2.6.31-rc8.bz2
-patch-2.6.31-rc8-git2.bz2
+linux-2.6.31.tar.bz2
xen.pvops.patch:
arch/x86/Kconfig | 4
arch/x86/Makefile | 2
arch/x86/include/asm/agp.h | 15
arch/x86/include/asm/e820.h | 2
arch/x86/include/asm/i387.h | 1
arch/x86/include/asm/io.h | 15
arch/x86/include/asm/io_apic.h | 7
arch/x86/include/asm/microcode.h | 9
arch/x86/include/asm/paravirt.h | 718 ------------
arch/x86/include/asm/paravirt_types.h | 722 +++++++++++++
arch/x86/include/asm/pci.h | 8
arch/x86/include/asm/pci_x86.h | 2
arch/x86/include/asm/pgtable.h | 3
arch/x86/include/asm/processor.h | 4
arch/x86/include/asm/tlbflush.h | 6
arch/x86/include/asm/xen/hypercall.h | 44
arch/x86/include/asm/xen/interface.h | 8
arch/x86/include/asm/xen/interface_32.h | 5
arch/x86/include/asm/xen/interface_64.h | 13
arch/x86/include/asm/xen/iommu.h | 12
arch/x86/include/asm/xen/page.h | 16
arch/x86/include/asm/xen/pci.h | 37
arch/x86/include/asm/xen/swiotlb.h | 12
arch/x86/kernel/Makefile | 1
arch/x86/kernel/acpi/boot.c | 18
arch/x86/kernel/acpi/processor.c | 4
arch/x86/kernel/acpi/sleep.c | 2
arch/x86/kernel/apic/io_apic.c | 49
arch/x86/kernel/cpu/mtrr/Makefile | 1
arch/x86/kernel/cpu/mtrr/amd.c | 6
arch/x86/kernel/cpu/mtrr/centaur.c | 6
arch/x86/kernel/cpu/mtrr/cyrix.c | 6
arch/x86/kernel/cpu/mtrr/generic.c | 10
arch/x86/kernel/cpu/mtrr/main.c | 19
arch/x86/kernel/cpu/mtrr/mtrr.h | 11
arch/x86/kernel/cpu/mtrr/xen.c | 104 +
arch/x86/kernel/e820.c | 30
arch/x86/kernel/ioport.c | 29
arch/x86/kernel/microcode_core.c | 5
arch/x86/kernel/microcode_xen.c | 200 +++
arch/x86/kernel/paravirt.c | 1
arch/x86/kernel/pci-dma.c | 8
arch/x86/kernel/pci-swiotlb.c | 25
arch/x86/kernel/process.c | 27
arch/x86/kernel/process_32.c | 27
arch/x86/kernel/process_64.c | 33
arch/x86/kernel/setup.c | 4
arch/x86/kernel/traps.c | 33
arch/x86/mm/Makefile | 4
arch/x86/mm/init_32.c | 42
arch/x86/mm/pat.c | 2
arch/x86/mm/pgtable.c | 10
arch/x86/mm/tlb.c | 35
arch/x86/pci/Makefile | 1
arch/x86/pci/common.c | 18
arch/x86/pci/i386.c | 3
arch/x86/pci/init.c | 6
arch/x86/pci/xen.c | 51
arch/x86/xen/Kconfig | 33
arch/x86/xen/Makefile | 5
arch/x86/xen/apic.c | 57 +
arch/x86/xen/enlighten.c | 202 +++
arch/x86/xen/mmu.c | 455 ++++++++
arch/x86/xen/pci-swiotlb.c | 988 +++++++++++++++++
arch/x86/xen/pci.c | 111 ++
arch/x86/xen/setup.c | 50
arch/x86/xen/smp.c | 3
arch/x86/xen/spinlock.c | 28
arch/x86/xen/time.c | 2
arch/x86/xen/vga.c | 67 +
arch/x86/xen/xen-ops.h | 19
block/blk-core.c | 2
drivers/acpi/acpica/hwsleep.c | 17
drivers/acpi/processor_core.c | 29
drivers/acpi/processor_idle.c | 23
drivers/acpi/processor_perflib.c | 10
drivers/acpi/sleep.c | 19
drivers/block/Kconfig | 1
drivers/char/agp/intel-agp.c | 17
drivers/char/hvc_xen.c | 99 +
drivers/net/Kconfig | 1
drivers/pci/Makefile | 2
drivers/pci/xen-iommu.c | 271 ++++
drivers/xen/Kconfig | 41
drivers/xen/Makefile | 23
drivers/xen/acpi.c | 23
drivers/xen/acpi_processor.c | 451 ++++++++
drivers/xen/balloon.c | 161 ++
drivers/xen/biomerge.c | 14
drivers/xen/blkback/Makefile | 3
drivers/xen/blkback/blkback.c | 657 +++++++++++
drivers/xen/blkback/common.h | 137 ++
drivers/xen/blkback/interface.c | 182 +++
drivers/xen/blkback/vbd.c | 118 ++
drivers/xen/blkback/xenbus.c | 542 +++++++++
drivers/xen/events.c | 422 +++++++
drivers/xen/evtchn.c | 1
drivers/xen/features.c | 2
drivers/xen/grant-table.c | 103 +
drivers/xen/mce.c | 213 +++
drivers/xen/netback/Makefile | 3
drivers/xen/netback/common.h | 221 ++++
drivers/xen/netback/interface.c | 401 +++++++
drivers/xen/netback/netback.c | 1602 +++++++++++++++++++++++++++++
drivers/xen/netback/xenbus.c | 454 ++++++++
drivers/xen/pci.c | 124 ++
drivers/xen/xenbus/Makefile | 5
drivers/xen/xenbus/xenbus_comms.c | 1
drivers/xen/xenbus/xenbus_probe.c | 380 +-----
drivers/xen/xenbus/xenbus_probe.h | 29
drivers/xen/xenbus/xenbus_probe_backend.c | 298 +++++
drivers/xen/xenbus/xenbus_probe_frontend.c | 292 +++++
drivers/xen/xenfs/Makefile | 3
drivers/xen/xenfs/privcmd.c | 403 +++++++
drivers/xen/xenfs/super.c | 98 +
drivers/xen/xenfs/xenfs.h | 3
drivers/xen/xenfs/xenstored.c | 67 +
include/acpi/processor.h | 2
include/asm-generic/pci.h | 2
include/linux/interrupt.h | 1
include/linux/page-flags.h | 18
include/xen/Kbuild | 1
include/xen/acpi.h | 84 +
include/xen/balloon.h | 8
include/xen/blkif.h | 122 ++
include/xen/events.h | 27
include/xen/grant_table.h | 43
include/xen/interface/grant_table.h | 22
include/xen/interface/memory.h | 92 +
include/xen/interface/physdev.h | 51
include/xen/interface/platform.h | 336 ++++++
include/xen/interface/xen-mca.h | 429 +++++++
include/xen/interface/xen.h | 44
include/xen/privcmd.h | 80 +
include/xen/swiotlb.h | 102 +
include/xen/xen-ops.h | 11
include/xen/xenbus.h | 2
kernel/irq/manage.c | 3
lib/swiotlb.c | 5
mm/page_alloc.c | 14
140 files changed, 12634 insertions(+), 1349 deletions(-)
Index: xen.pvops.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/Attic/xen.pvops.patch,v
retrieving revision 1.1.2.40
retrieving revision 1.1.2.41
diff -u -p -r1.1.2.40 -r1.1.2.41
--- xen.pvops.patch 5 Sep 2009 19:00:23 -0000 1.1.2.40
+++ xen.pvops.patch 10 Sep 2009 14:00:31 -0000 1.1.2.41
@@ -5886,6 +5886,83 @@ index 429834e..58078da 100644
per_cpu(cpu_state, cpu) = CPU_UP_PREPARE;
/* make sure interrupts start blocked */
+diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
+index 5601506..36a5141 100644
+--- a/arch/x86/xen/spinlock.c
++++ b/arch/x86/xen/spinlock.c
+@@ -187,7 +187,6 @@ static noinline int xen_spin_lock_slow(struct raw_spinlock *lock, bool irq_enabl
+ struct xen_spinlock *prev;
+ int irq = __get_cpu_var(lock_kicker_irq);
+ int ret;
+- unsigned long flags;
+ u64 start;
+
+ /* If kicker interrupts not initialized yet, just spin */
+@@ -199,16 +198,12 @@ static noinline int xen_spin_lock_slow(struct raw_spinlock *lock, bool irq_enabl
+ /* announce we're spinning */
+ prev = spinning_lock(xl);
+
+- flags = __raw_local_save_flags();
+- if (irq_enable) {
+- ADD_STATS(taken_slow_irqenable, 1);
+- raw_local_irq_enable();
+- }
+-
+ ADD_STATS(taken_slow, 1);
+ ADD_STATS(taken_slow_nested, prev != NULL);
+
+ do {
++ unsigned long flags;
++
+ /* clear pending */
+ xen_clear_irq_pending(irq);
+
+@@ -228,6 +223,12 @@ static noinline int xen_spin_lock_slow(struct raw_spinlock *lock, bool irq_enabl
+ goto out;
+ }
+
++ flags = __raw_local_save_flags();
++ if (irq_enable) {
++ ADD_STATS(taken_slow_irqenable, 1);
++ raw_local_irq_enable();
++ }
++
+ /*
+ * Block until irq becomes pending. If we're
+ * interrupted at this point (after the trylock but
+@@ -238,13 +239,15 @@ static noinline int xen_spin_lock_slow(struct raw_spinlock *lock, bool irq_enabl
+ * pending.
+ */
+ xen_poll_irq(irq);
++
++ raw_local_irq_restore(flags);
++
+ ADD_STATS(taken_slow_spurious, !xen_test_irq_pending(irq));
+ } while (!xen_test_irq_pending(irq)); /* check for spurious wakeups */
+
+ kstat_incr_irqs_this_cpu(irq, irq_to_desc(irq));
+
+ out:
+- raw_local_irq_restore(flags);
+ unspinning_lock(xl, prev);
+ spin_time_accum_blocked(start);
+
+@@ -323,8 +326,13 @@ static void xen_spin_unlock(struct raw_spinlock *lock)
+ smp_wmb(); /* make sure no writes get moved after unlock */
+ xl->lock = 0; /* release lock */
+
+- /* make sure unlock happens before kick */
+- barrier();
++ /*
++ * Make sure unlock happens before checking for waiting
++ * spinners. We need a strong barrier to enforce the
++ * write-read ordering to different memory locations, as the
++ * CPU makes no implied guarantees about their ordering.
++ */
++ mb();
+
+ if (unlikely(xl->spinners))
+ xen_spin_unlock_slow(xl);
diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c
index 0a5aa44..d4e9a97 100644
--- a/arch/x86/xen/time.c
@@ -6326,10 +6403,10 @@ index 1d886e0..f4a2b10 100644
This driver implements the front-end of the Xen virtual
block device driver. It communicates with a back-end driver
diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
-index 8c9d50d..5a8d914 100644
+index c585577..b45e7cd 100644
--- a/drivers/char/agp/intel-agp.c
+++ b/drivers/char/agp/intel-agp.c
-@@ -259,15 +259,19 @@ static void intel_i810_agp_enable(struct agp_bridge_data *bridge, u32 mode)
+@@ -261,15 +261,19 @@ static void intel_i810_agp_enable(struct agp_bridge_data *bridge, u32 mode)
/* Exists to support ARGB cursors */
static struct page *i8xx_alloc_pages(void)
{
@@ -6352,7 +6429,7 @@ index 8c9d50d..5a8d914 100644
return NULL;
}
get_page(page);
-@@ -277,12 +281,17 @@ static struct page *i8xx_alloc_pages(void)
+@@ -279,12 +283,17 @@ static struct page *i8xx_alloc_pages(void)
static void i8xx_destroy_pages(struct page *page)
{
@@ -7765,10 +7842,10 @@ index 0000000..8bab63d
+blkbk-y := blkback.o xenbus.o interface.o vbd.o
diff --git a/drivers/xen/blkback/blkback.c b/drivers/xen/blkback/blkback.c
new file mode 100644
-index 0000000..ac5af91
+index 0000000..31458bd
--- /dev/null
+++ b/drivers/xen/blkback/blkback.c
-@@ -0,0 +1,658 @@
+@@ -0,0 +1,657 @@
+/******************************************************************************
+ * arch/xen/drivers/blkif/backend/main.c
+ *
@@ -8386,7 +8463,6 @@ index 0000000..ac5af91
+{
+ int i, mmap_pages;
+
-+ printk(KERN_CRIT "***blkif_init\n");
+ if (!xen_pv_domain())
+ return -ENODEV;
+
@@ -10988,10 +11064,10 @@ index 0000000..21c1f95
+}
diff --git a/drivers/xen/netback/netback.c b/drivers/xen/netback/netback.c
new file mode 100644
-index 0000000..7c0f05b
+index 0000000..d7d738e
--- /dev/null
+++ b/drivers/xen/netback/netback.c
-@@ -0,0 +1,1604 @@
+@@ -0,0 +1,1602 @@
+/******************************************************************************
+ * drivers/xen/netback/netback.c
+ *
@@ -12531,8 +12607,6 @@ index 0000000..7c0f05b
+ int i;
+ struct page *page;
+
-+ printk(KERN_CRIT "*** netif_init\n");
-+
+ if (!xen_domain())
+ return -ENODEV;
+
@@ -16860,7 +16934,7 @@ index bffe6d7..cec5f62 100644
panic("Cannot allocate SWIOTLB overflow buffer!\n");
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
-index 5cc986e..c7b76b2 100644
+index a0de15f..5e84a5c 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -566,6 +566,13 @@ static void __free_pages_ok(struct page *page, unsigned int order)
@@ -16877,7 +16951,7 @@ index 5cc986e..c7b76b2 100644
if (!PageHighMem(page)) {
debug_check_no_locks_freed(page_address(page),PAGE_SIZE<<order);
debug_check_no_obj_freed(page_address(page),
-@@ -1028,6 +1035,13 @@ static void free_hot_cold_page(struct page *page, int cold)
+@@ -1030,6 +1037,13 @@ static void free_hot_cold_page(struct page *page, int cold)
kmemcheck_free_shadow(page, 0);
--- drm-ddc-caching-bug.patch DELETED ---
--- drm-god-shut-up-about-edid-already.patch DELETED ---
--- drm-r600-kms.patch DELETED ---
--- drm-rv710-ucode-fix.patch DELETED ---
--- linux-2.6.30.tar.bz2.sign DELETED ---
--- patch-2.6.31-rc8-git2.bz2.sign DELETED ---
--- patch-2.6.31-rc8.bz2.sign DELETED ---
More information about the fedora-extras-commits
mailing list