Linus Torvalds wrote:
> On Tue, 1 Oct 2002, Keith Whitwell wrote:
> 
>>Sounds like you aren't getting irq's, for some reason, and it is falling back 
>>to busy waiting.
>>
>>The question is why aren't you getting irq's?
>>
> 
> Keith, are you even asking the kernel to look up (and possibly enable) the 
> irq for you?
> 
> The magic word isn't "please", it's "pci_enable_device(dev)", which will 
> check that all resources are allocated and enabled, including things like 
> trying to route irq's using the PIRQ table (or ACPI, or whatever).
> 
> Doing a quick grep through the drm stuff doesn't show a single caller..
> 
> Btw, I'd like to also point out that some of DRI PCI bus handling seems
> fundamentally broken. Like the notion that you can specify the device by
> bus number, device and fn. Those days are past, I'm afraid, and were never
> true on some other platforms. It can be a much more complicated tree, with
> multiple independent PCI segments. You don't see that yet on regular PC's,
> but get ready (and X in general should probably stop thinking that it can
> do things like PCI configuration from user space).
> 

Sorry for the delay replying.  This is well outside any area I claim to know 
anything about, so I'm kind of groping around at the moment.

Would the appropriate place to call 'pci_enable_device' be just after a 
successful call to (deprecated) pci_find_slot() ?

ie, something like this?

Keith


--- drm_ioctl.h 25 Sep 2001 09:32:15 -0000      1.9
+++ drm_ioctl.h 3 Oct 2002 09:50:36 -0000
@@ -32,6 +32,7 @@
  #define __NO_VERSION__
  #include "drmP.h"

+
  int DRM(irq_busid)(struct inode *inode, struct file *filp,
                   unsigned int cmd, unsigned long arg)
  {
@@ -41,6 +42,11 @@
        if (copy_from_user(&p, (drm_irq_busid_t *)arg, sizeof(p)))
                return -EFAULT;
        dev = pci_find_slot(p.busnum, PCI_DEVFN(p.devnum, p.funcnum));
+ 
if (!pci_enable_device(dev)) {
+ 
        DRM_ERROR("pci_enable_device failed for %d:%d:%d\n",
+ 
                  p.busnum, p.devnum, p.funcnum);
+ 
        return -EBUSY;
+ 
} 
        
        if (dev) p.irq = dev->irq;
        else     p.irq = 0;
        DRM_DEBUG("%d:%d:%d => IRQ %d\n",










-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to