Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 16 Jan 2000 16:06:25 +0000 (GMT)
From:      Doug Rabson <dfr@nlsystems.com>
To:        Michael Kennett <mike@laurasia.com.au>
Cc:        hackers@freebsd.org
Subject:   Re: Use of newbus in sys/pci/pci.c
Message-ID:  <Pine.BSF.4.10.10001161601110.25118-100000@salmon.nlsystems.com>
In-Reply-To: <200001150332.LAA24167@laurasia.com.au>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, 15 Jan 2000, Michael Kennett wrote:

> Hello All,
> 
> I have a question on the sys/pci/pci.c code, and its use of the
> newbus architecture. An example of the code in question is:
> 
> static struct resource *
> pci_alloc_resource(device_t dev, device_t child, int type, int *rid,
> 		   u_long start, u_long end, u_long count, u_int flags)
> {
> 	struct pci_devinfo *dinfo = device_get_ivars(child);
>                                                 ^^^^^   Looks wrong
> 	struct resource_list *rl = &dinfo->resources;
> 
> 	return resource_list_alloc(rl, dev, child, type, rid,
> 				   start, end, count, flags);
> }
> 
> I don't understand the line that extracts the ivars from the child
> device.  Isn't it the case that the ivars are a property of the bus
> device (dev)?  In any case, the child device might not be directly
> descended from the pci bus (e.g. it could be attached thru' the
> bridge isab0: <VIA 82C586 PCI-ISA bridge>).

The ivars are for bus-specific per-child information. The resource
locations for pci devices fall into this category and the information is
stored in a pci-private structure in the child device's ivars field.

This code is slightly dubious for the case when child isn't a direct
descendant of dev (i.e. a grandchild etc). In this case, the ivars pointer
would be read but not indirected through since the first thing
resource_list_alloc() does is check for this and pass the allocation up
the tree. It should be safe but its certainly dubious.

--
Doug Rabson				Mail:  dfr@nlsystems.com
Nonlinear Systems Ltd.			Phone: +44 181 442 9037




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.10.10001161601110.25118-100000>