All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <greg@kroah.com>
To: Andi Kleen <ak@suse.de>
Cc: davej@codemonkey.org.uk, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] fix improper use of pci_module_init() in drivers/char/agp/amd64-agp.c
Date: Thu, 30 Sep 2004 14:05:16 -0700	[thread overview]
Message-ID: <20040930210516.GA18674@kroah.com> (raw)
In-Reply-To: <20040930200630.GB28315@wotan.suse.de>

On Thu, Sep 30, 2004 at 10:06:30PM +0200, Andi Kleen wrote:
> On Thu, Sep 30, 2004 at 12:59:05PM -0700, Greg KH wrote:
> > On Thu, Sep 30, 2004 at 09:20:09PM +0200, Andi Kleen wrote:
> > > On Thu, Sep 30, 2004 at 11:42:48AM -0700, Greg KH wrote:
> > > > Hi,
> > > > 
> > > > In going through the tree and auditing the usage of pci_module_init(), I
> > > > noticed that the amd64-agp driver was assuming that the return value of
> > > > this function could be greater than 0 (which is what could happen in 2.2
> > > > and 2.4 kernels.)  As this is no longer true, I think the following
> > > > patch is correct.
> > > > 
> > > > I can add this to my bk-pci tree if you wish, otherwise feel free to
> > > > send it upwards.
> > > 
> > > There needs to be some replacement for it, you cannot just delete 
> > > the code.
> > 
> > But that code has not ever run, since early 2.5 days.  Don't tell me
> > people are used to it :)
> 
> No, but it's needed for new chipsets that are not in the PCI tables.
> People probably didn't complain because we're covering the current
> generation of K8 AGP bridges, but there should be new ones soon
> 
> 2.4 had similar code.

Ok, that makes sense.

> > > The idea is to run it as fallback when no devices are found. 
> > > 
> > > How about this patch?
> > 
> > That does not work the way you are asking it to work.  pci_module_init()
> > is just a replacement for pci_register_driver these days.  It will
> > return either "0" if the driver is successfully registered, or a
> > negative value if something bad happened.  It will not return the number
> > of devices that this driver bound to.
> > 
> > So, if no devices are in the system, it will return 0, and again, the
> > code you are wanting to run, will not.
> 
> Oh, yes I forgot that hotplug makes everything simple complicated.

Welcome to my life, hotplug is hard, let's go shopping... :)

> > So, how about using the new pci_dev_present() call instead?  That should
> > be what you want, right?
> 
> 
> % grep pci_dev_present include/linux/*
> % 
> 
> This patch will probably do and doesn't rely on any nonexisting
> calls.

Sorry, that's a function that was added to my bk trees, and is in the
next -mm release.

> ----------------------------------------------------------------------
> 
> Fix fallback code in K8 AGP driver.
> 
> Problem pointed out by Greg KH
> 
> Signed-off-by: Andi Kleen <ak@suse.de>
> 
> 
> diff -u linux-2.6.9rc3-work/drivers/char/agp/amd64-agp.c-o linux-2.6.9rc3-work/drivers/char/agp/amd64-agp.c
> --- linux-2.6.9rc3-work/drivers/char/agp/amd64-agp.c-o	2004-09-30 10:35:07.000000000 +0200
> +++ linux-2.6.9rc3-work/drivers/char/agp/amd64-agp.c	2004-09-30 22:04:56.000000000 +0200
> @@ -55,6 +55,8 @@
>  static int gart_iterator;
>  #define for_each_nb() for(gart_iterator=0;gart_iterator<nr_garts;gart_iterator++)
>  
> +static int num_bridges;
> +
>  static void flush_amd64_tlb(struct pci_dev *dev)
>  {
>  	u32 tmp;
> @@ -514,6 +516,7 @@
>  	}
>  
>  	pci_set_drvdata(pdev, bridge);
> +	num_bridges++;
>  	return agp_add_bridge(bridge);
>  }
>  
> @@ -627,7 +630,8 @@
>  	int err = 0;
>  	if (agp_off)
>  		return -EINVAL;
> -	if (pci_module_init(&agp_amd64_pci_driver) > 0) {
> +	pci_module_init(&agp_amd64_pci_driver);
> +	if (num_bridges == 0) { 

Hm, no.  When I add the "do all device probes in a separate thread"
patch to the tree, this will break, as pci_module_init() will return
right away, and pci device probing will happen in a different thread.
I'm currently still working on this, but don't want to go and add stuff
to the tree today, that I know will not work in the near future.

I still like my patch better, want me to wait until pci_dev_present() is
in the mainline tree before bringing this up again?

thanks,

greg k-h

  reply	other threads:[~2004-09-30 21:07 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-09-30 18:42 [PATCH] fix improper use of pci_module_init() in drivers/char/agp/amd64-agp.c Greg KH
2004-09-30 19:20 ` Andi Kleen
2004-09-30 19:59   ` Greg KH
2004-09-30 20:06     ` Andi Kleen
2004-09-30 21:05       ` Greg KH [this message]
2004-09-30 20:09     ` Greg KH
2004-10-01  1:56 ` Dave Jones

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040930210516.GA18674@kroah.com \
    --to=greg@kroah.com \
    --cc=ak@suse.de \
    --cc=davej@codemonkey.org.uk \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.