Re: [PATCH 1/3] staging: comedi: work without HAS_DMA

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, May 10, 2013 at 11:37:38AM -0500, H Hartley Sweeten wrote:
> On Friday, May 10, 2013 6:07 AM, Ian Abbott wrote:
> > The core "comedi" module and the "mite" helper module for NI PCI devices
> > both have calls to `dma_alloc_coherent()` and `dma_free_coherent()`.
> > Those functions are only available if `CONFIG_HAS_DMA` is defined.
> >
> > Apart from the "mite" module, the functions are only called for comedi
> > drivers that set `s->async_dma_dir` (where `s` is a pointer to a `struct
> > comedi_subdevice`) to anything other than `DMA_NONE`.
> >
> > Change local helper functions `__comedi_buf_alloc()` and
> > `__comedi_buf_free()` to only call `dma_alloc_coherent()` and
> > `dma_free_coherent()` if `CONFIG_HAS_DMA` is defined.
> >
> > Change the "Kconfig" to make the following configuration options depend
> > on `HAS_DMA`:
> >
> > `COMEDI_MITE` - builds the "mite" module.
> > `COMEDI_NI_6527` - selects `COMEDI_MITE`.
> > `COMEDI_NI_65XX` - selects `COMEDI_MITE`.
> > `COMEDI_NI_670X` - selects `COMEDI_MITE`.
> > `COMEDI_NI_LABPC_PCI` - selects `COMEDI_MITE`.
> > `COMEDI_NI_PCIDIO` - selects `COMEDI_MITE`.
> > `COMEDI_NI_TIOCMD` - selects `COMEDI_MITE`.
> > `COMEDI_NI_660X` - selects `COMEDI_NI_TIOCMD`,
> >                    sets `s->async_dma_dir`.
> > `COMEDI_NI_PCIMIO` - selects `COMEDI_NI_TIOCMD`,
> >                      sets `s->async_dma_dir`.
> >
> > Signed-off-by: Ian Abbott <abbotti@xxxxxxxxx>
> > ---
> >  drivers/staging/comedi/Kconfig      | 9 +++++++++
> >  drivers/staging/comedi/comedi_buf.c | 6 ++++++
> >  2 files changed, 15 insertions(+)
> >
> > diff --git a/drivers/staging/comedi/Kconfig b/drivers/staging/comedi/Kconfig
> > index 7871579..87e852a 100644
> > --- a/drivers/staging/comedi/Kconfig
> > +++ b/drivers/staging/comedi/Kconfig
> > @@ -981,6 +981,7 @@ config COMEDI_ME_DAQ
> >  
> >  config COMEDI_NI_6527
> >  	tristate "NI 6527 support"
> > +	depends on HAS_DMA
> >  	select COMEDI_MITE
> >  	---help---
> >  	  Enable support for the National Instruments 6527 PCI card
> > @@ -990,6 +991,7 @@ config COMEDI_NI_6527
> >  
> >  config COMEDI_NI_65XX
> >  	tristate "NI 65xx static dio PCI card support"
> > +	depends on HAS_DMA
> >  	select COMEDI_MITE
> >  	---help---
> >  	  Enable support for National Instruments 65xx static dio boards.
> > @@ -1003,6 +1005,7 @@ config COMEDI_NI_65XX
> >  
> >  config COMEDI_NI_660X
> >  	tristate "NI 660x counter/timer PCI card support"
> > +	depends on HAS_DMA
> >  	select COMEDI_NI_TIOCMD
> >  	---help---
> >  	  Enable support for National Instruments PCI-6601 (ni_660x), PCI-6602,
> > @@ -1013,6 +1016,7 @@ config COMEDI_NI_660X
> >  
> >  config COMEDI_NI_670X
> >  	tristate "NI 670x PCI card support"
> > +	depends on HAS_DMA
> >  	select COMEDI_MITE
> >  	---help---
> >  	  Enable support for National Instruments PCI-6703 and PCI-6704
> > @@ -1022,6 +1026,7 @@ config COMEDI_NI_670X
> >  
> >  config COMEDI_NI_LABPC_PCI
> >  	tristate "NI Lab-PC PCI-1200 support"
> > +	depends on HAS_DMA
> >  	select COMEDI_NI_LABPC
> >  	select COMEDI_MITE
> >  	---help---
> > @@ -1032,6 +1037,7 @@ config COMEDI_NI_LABPC_PCI
> >  
> >  config COMEDI_NI_PCIDIO
> >  	tristate "NI PCI-DIO32HS, PCI-6533, PCI-6534 support"
> > +	depends on HAS_DMA
> >  	select COMEDI_MITE
> >  	select COMEDI_8255
> >  	---help---
> > @@ -1043,6 +1049,7 @@ config COMEDI_NI_PCIDIO
> >  
> >  config COMEDI_NI_PCIMIO
> >  	tristate "NI PCI-MIO-E series and M series support"
> > +	depends on HAS_DMA
> >  	select COMEDI_NI_TIOCMD
> >  	select COMEDI_8255
> >  	select COMEDI_FC
> > @@ -1095,10 +1102,12 @@ config COMEDI_SSV_DNP
> >  	  called ssv_dnp.
> >  
> >  config COMEDI_MITE
> > +	depends on HAS_DMA
> >  	tristate
> >  
> >  config COMEDI_NI_TIOCMD
> >  	tristate
> > +	depends on HAS_DMA
> >  	select COMEDI_NI_TIO
> >  	select COMEDI_MITE
> >  
> > diff --git a/drivers/staging/comedi/comedi_buf.c b/drivers/staging/comedi/comedi_buf.c
> > index ca70990..b6cd67a 100644
> > --- a/drivers/staging/comedi/comedi_buf.c
> > +++ b/drivers/staging/comedi/comedi_buf.c
> > @@ -51,10 +51,12 @@ static void __comedi_buf_free(struct comedi_device *dev,
> >  			clear_bit(PG_reserved,
> >  				  &(virt_to_page(buf->virt_addr)->flags));
> >  			if (s->async_dma_dir != DMA_NONE) {
> > +#ifdef CONFIG_HAS_DMA
> >  				dma_free_coherent(dev->hw_dev,
> >  						  PAGE_SIZE,
> >  						  buf->virt_addr,
> >  						  buf->dma_addr);
> > +#endif
> >  			} else {
> >  				free_page((unsigned long)buf->virt_addr);
> >  			}
> > @@ -84,11 +86,15 @@ static void __comedi_buf_alloc(struct comedi_device *dev,
> >  	for (i = 0; i < n_pages; i++) {
> >  		buf = &async->buf_page_list[i];
> >  		if (s->async_dma_dir != DMA_NONE)
> > +#ifdef CONFIG_HAS_DMA
> >  			buf->virt_addr = dma_alloc_coherent(dev->hw_dev,
> >  							    PAGE_SIZE,
> >  							    &buf->dma_addr,
> >  							    GFP_KERNEL |
> >  							    __GFP_COMP);
> > +#else
> > +			break;
> > +#endif
> 
> This break is unnecessary.
> 

You'd need something there or it would cause a parse error when
CONFIG_HAS_DMA is disabled.  "break;" is probably as good as
"buf->virt_addr = NULL;" or whatever.

regards,
dan carpenter

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel




[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux