On Wed, Sep 23, 2009 at 10:54:09PM -0700, Boris Derzhavets wrote:
> Sorry , there is difference in dmesg reports under xen and as vanilla.
>
> dmesg under xen:-
>
> [ 243.858191] mtrr: type mismatch for d0000000,10000000 old: write-back new: write-combining
> [ 243.858263] mtrr: type mismatch for d0000000,10000000 old: write-back new: write-combining
> [ 244.132051] mtrr: type mismatch for d0000000,10000000 old: write-back new: write-combining
> [ 244.132115] mtrr: type mismatch for d0000000,10000000 old: write-back new: write-combining
> [ 244.132181] mtrr: type mismatch for d0000000,10000000 old: write-back new: write-combining
> [ 244.157265] [drm] Setting GART location based on new memory
map
> [ 244.190885] [drm] Loading RV730/RV740 PFP Microcode
> [ 244.190911] [drm] Loading RV730/RV740 CP Microcode
> [ 244.205974] [drm] Resetting GPU
> -> [ 244.310103] [drm] writeback test failed
> [ 251.220092] [drm] Resetting GPU
>
> dmesg 2.6.31 vanilla:-
>
> [ 36.941430] [drm] Initialized drm 1.1.0 20060810
> [ 36.988225] pci 0000:01:00.0: setting latency timer to 64
> [ 36.988341] [drm] Initialized radeon 1.31.0 20080528 for 0000:01:00.0 on minor 0
> [ 36.989222] mtrr: type mismatch for d0000000,10000000 old: write-back new: write-combining
> [ 37.210900] mtrr: type mismatch for d0000000,10000000 old: write-back new: write-combining
> [ 37.210940] mtrr: type mismatch for d0000000,10000000 old: write-back new: write-combining
>
[ 37.210976] mtrr: type mismatch for d0000000,10000000 old: write-back new: write-combining
> [ 37.232744] [drm] Setting GART location based on new memory map
> [ 37.248205] [drm] Loading RV730/RV740 PFP Microcode
> [ 37.248227] [drm] Loading RV730/RV740 CP Microcode
> [ 37.263281] [drm] Resetting GPU
> -> [ 37.263336] [drm] writeback test succeeded in 1 usecs
I think I know why this is not working.
The DRM and its AGP modules call virt_to_gart and gart_to_virt, which is defined as:
#define virt_to_gart(x) (phys_to_gart(virt_to_phys(x)))
#define gart_to_virt(x) (phys_to_virt(gart_to_phys(x)))
and phys_to_gart and gart_to_phys are:
#define phys_to_gart(x) swiotlb_phys_to_bus(NULL, (x))
#define gart_to_phys(x) swiotlb_bus_to_phys(NULL, (x))
The swiotlb_* calls do return the wrong information when the
kernel is
running under Xen.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxhttp://lists.xensource.com/xen-devel