Re: [PATCH 2/6] staging: vme: make [alloc|free]_consistent bridgespecific

From: Martyn Welch
Date: Wed Aug 10 2011 - 09:55:24 EST


On 10/08/11 14:51, Joe Perches wrote:
> On Wed, 2011-08-10 at 14:34 +0100, Martyn Welch wrote:
>> On 10/08/11 14:12, Joe Perches wrote:
>>> On Wed, 2011-08-10 at 11:33 +0200, Manohar Vanga wrote:
>>>> Make PCI dependent functions ([alloc|free]_consistent() in
>>>> 'vme.c') bridge specific. By removing the dependency of the
>>>> VME bridge framework on PCI, this patch allows for addition of
>>>> non-PCI based VME bridges.
>>> []
>>>> diff --git a/drivers/staging/vme/bridges/vme_ca91cx42.c b/drivers/staging/vme/bridges/vme_ca91cx42.c
>>> []
>>>> +void *ca91cx42_alloc_consistent(struct device *parent, size_t size,
>>>> + dma_addr_t *dma)
>>>> +{
>>>> + struct pci_dev *pdev;
>>>> +
>>>> + /* Find pci_dev container of dev */
>>>> + pdev = container_of(parent, struct pci_dev, dev);
>>>> +
>>>> + return pci_alloc_consistent(pdev, size, dma);
>>>> +}
>>>> +
>>>> +void ca91cx42_free_consistent(struct device *parent, size_t size, void *vaddr,
>>>> + dma_addr_t dma)
>>>> +{
>>>> + struct pci_dev *pdev;
>>>> +
>>>> + /* Find pci_dev container of dev */
>>>> + pdev = container_of(parent, struct pci_dev, dev);
>>>> +
>>>> + pci_free_consistent(pdev, size, vaddr, dma);
>>>> +}
>>> []
>>>> diff --git a/drivers/staging/vme/bridges/vme_tsi148.c b/drivers/staging/vme/bridges/vme_tsi148.c
>>> []
>>>> @@ -2122,6 +2122,28 @@ static int tsi148_slot_get(struct vme_bridge *tsi148_bridge)
>>>> return (int)slot;
>>>> }
>>>>
>>>> +void *tsi148_alloc_consistent(struct device *parent, size_t size,
>>>> + dma_addr_t *dma)
>>>> +{
>>>> + struct pci_dev *pdev;
>>>> +
>>>> + /* Find pci_dev container of dev */
>>>> + pdev = container_of(parent, struct pci_dev, dev);
>>>> +
>>>> + return pci_alloc_consistent(pdev, size, dma);
>>>> +}
>>>> +
>>>> +void tsi148_free_consistent(struct device *parent, size_t size, void *vaddr,
>>>> + dma_addr_t dma)
>>>> +{
>>>> + struct pci_dev *pdev;
>>>> +
>>>> + /* Find pci_dev container of dev */
>>>> + pdev = container_of(parent, struct pci_dev, dev);
>>>> +
>>>> + pci_free_consistent(pdev, size, vaddr, dma);
>>>> +}
>>>> +
>>>> static int __init tsi148_init(void)
>>>> {
>>>> return pci_register_driver(&tsi148_driver);
>>>
>>> Except for the name, those 2 blocks are identical.
>>> Maybe create a non-pci generic version instead?
>>>
>>
>> I'm not sure you can (I spent quite a bit of time attempting to do just that
>> when I wrote the original). It just so happens that both of the bridges we
>> have at the moment are PCI devices,
>
> Doesn't something like this work?
>
> void *generic_vme_pci_alloc_consistent(struct device *parent, size_t size,
> dma_addr_t *dma)
> [implementation...]
> EXPORT_SYMBOL(generic_vme_pci_alloc_consistent);
> (if necessary)
>
> void *generic_vme_pci_free_consistent(struct device *parent, size_t size,
> void *vaddr, dma_addr_t dma)
> [implementation...]
> EXPORT_SYMBOL(generic_vme_pci_free_consistent);
>
> and uses like:
>
> + ca91cx42_bridge->alloc_consistent = generic_vme_pci_alloc_consistent;
> + ca91cx42_bridge->free_consistent = generic_vme_pci_free_consistent;
>
> ?
>

Could. Though we'd have to put this in a new common file for use by
vme_tsi148.c and vme_ca91cx42.c as the point of this was to get it out of the
VME core code. I'm just not sure that it's worth it.

Martyn

--
Martyn Welch (Principal Software Engineer) | Registered in England and
GE Intelligent Platforms | Wales (3828642) at 100
T +44(0)127322748 | Barbirolli Square, Manchester,
E martyn.welch@xxxxxx | M2 3AB VAT:GB 927559189
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/