Hi.

My wonderful MPB (15", 2.6.18 + mactel patches, debian/etch)
was working seamlessly with the ATI driver w/o kernel module.

When I played a DVD I found out that performance sucked because
there was no XVideo support w/o the fglrx kernel module.

I had the fglrx-8.28.8 debian packages installed but the  kernel module
wouldn't build for linux-2.6.18 so I upgraded to 8.29.6.

After installing the fglrx driver/module (I'm using the kernel agpgart
module, not the ATI one) and restarting X the log reported XVideo
support and DVD playback was alright w/o loading the CPU much.
(as always make sure DMA is enabled on the DVD player [hdparm -d1]).

The surprise came when I tried to suspend the machine. It would just
freeze. After some playing around I found that the proprietary
routines ATI uses to save/restore the PCI config register state
are responsible. After substituting theirs for the generic linux versions
everything worked fine.

After doing some close inspection of the code and having
__ke_pci_read_config_dword() print it's arguments (wrapper called
by firegl_pci_save_state() confirmed my suspicion: the pointers passed to
__ke_pci_read_config_dword() are completely bogus and lead to
memory corruption and/or other bad things.

Using the attached patch squeezes this bug

-- Till

PS: Please CC me

      strauman theatsign slac adot stanford adot edu

when replying to this message, I'm not subscribed to this list

*** firegl_public.c.orig	2006-10-18 14:15:23.000000000 -0700
--- firegl_public.c	2006-10-18 15:17:16.000000000 -0700
***************
*** 725,731 ****
  
      if (!ret)
      {
!         firegl_pci_save_state(privdev);
          pci_disable_device(pdev);
          PMSG_EVENT(pdev->dev.power.power_state) = state;
      }
--- 725,731 ----
  
      if (!ret)
      {
!         pci_save_state(pdev);
          pci_disable_device(pdev);
          PMSG_EVENT(pdev->dev.power.power_state) = state;
      }
***************
*** 749,755 ****
  
      // PCI config space needs to be restored very early, in particular
      // before pci_set_master!
!     firegl_pci_restore_state(privdev);
  
      if (pci_enable_device(pdev)) 
      {
--- 749,755 ----
  
      // PCI config space needs to be restored very early, in particular
      // before pci_set_master!
!     pci_restore_state(pdev);
  
      if (pci_enable_device(pdev)) 
      {
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Mactel-linux-users mailing list
Mactel-linux-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mactel-linux-users

Reply via email to