Date: Mon, 30 Mar 2009 08:53:02 -0700 (PDT) From: Barney Cordoba <barney_cordoba@yahoo.com> To: freebsd-current@FreeBSD.org, John Baldwin <jhb@FreeBSD.org> Subject: Re: pci_alloc_resource is broken Message-ID: <452083.9826.qm@web63906.mail.re1.yahoo.com> In-Reply-To: <200903301059.13428.jhb@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--- On Mon, 3/30/09, John Baldwin <jhb@FreeBSD.org> wrote: > From: John Baldwin <jhb@FreeBSD.org> > Subject: Re: pci_alloc_resource is broken > To: freebsd-current@FreeBSD.org, barney_cordoba@yahoo.com > Date: Monday, March 30, 2009, 10:59 AM > On Sunday 29 March 2009 11:34:32 am Barney Cordoba wrote: > > > > --- On Sat, 3/28/09, Barney Cordoba > <barney_cordoba@yahoo.com> wrote: > > > > > From: Barney Cordoba > <barney_cordoba@yahoo.com> > > > Subject: Re: Bus Resource busy panic > > > To: current@freebsd.org > > > Date: Saturday, March 28, 2009, 8:03 PM > > > --- On Sat, 3/28/09, Barney Cordoba > > > <barney_cordoba@yahoo.com> wrote: > > > > > > > From: Barney Cordoba > <barney_cordoba@yahoo.com> > > > > Subject: Bus Resource busy panic > > > > To: current@freebsd.org > > > > Date: Saturday, March 28, 2009, 6:35 PM > > > > I have a situation that results in a panic > in 8 that > > > runs > > > > happily in 7. > > > > Its a bus_alloc_resource of type > SYS_RES_MEMORY that > > > is > > > > used by 2 > > > > separate devices. > > > > > > > > I see there is an RF_SHAREABLE flag. That > flag > > > hadn't > > > > been set, but is there > > > > something in 8 that now requires it? > > > > > > > > As a side question, should a > bus_alloc_resource call > > > panic > > > > the system just > > > > because the resource is busy? > > > > > > > > Barney > > > > > > Some more info on this. The panic is in > > > resource_list_alloc() and > > > setting SHAREABLE doesn't fix it. I see the > same code > > > in 7 so > > > I'm not sure why it would work in 7 and not > 8. > > > > > > Basically there are 2 devices that need to do IO > on a > > > board, and they > > > are both doing > > > > > > bus_alloc_resource_any(dev, > SYS_RES_MEMORY,&rid, > > > RF_ACTIVE); > > > > > > > > > Barney > > > > > > > I'm not sure if anyone was reading the original > thread, so I > > created another with my results. > > > > Someone broke pci_alloc_resource. In the > SYS_RES_MEMORY case, when > > rman_get_device() != dev (but rle->res is set), it > erroneously > > falls to resource_list_alloc which will panic on > device resource busy. > > > > It seems that this would preclude the sharing of a > resource, as any > > secondary request will not only fail, but panic the > system > > This was actually on purpose to prevent multiple > allocations of a resource. > Multiple allocations actually leak kernel memory since the > resource only > keeps track of the current mapping. My question is why are > you having one > device allocate resources of another device? If you have > two functions of a > multi-function PCI adapter that you want one logical driver > for, then have > each function's driver allocate its own resources and > store the 'struct > resource *' in a "global" softc. You can > then use whichever resource you > need for bus_read/write when you do bit-banging. > > -- > John Baldwin We're remapping in another driver because in the commercial world, we don't always have access to kernel source, and there is a strong desire to separate the NIC driver from the secondary function so customers can get patches for the OS without having to worry about incompatibility with the secondary modules. I can add a function to the NIC driver also, but the goal is to be able to distribute a module that doesn't require modification to the stock driver for the system. Barney
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?452083.9826.qm>