• Arnd Bergmann's avatar
    mic: avoid statically declaring a 'struct device'. · bc83f79b
    Arnd Bergmann authored
    Generally, declaring a platform device as a static variable is
    a bad idea and can cause all kinds of problems, in particular
    with the DMA configuration and lifetime rules.
    
    A specific problem we hit here is from a bug in clang that warns
    about certain (otherwise valid) macros when used in static variables:
    
    drivers/misc/mic/card/mic_x100.c:285:27: warning: shift count >= width of type [-Wshift-count-overflow]
    static u64 mic_dma_mask = DMA_BIT_MASK(64);
                              ^~~~~~~~~~~~~~~~
    include/linux/dma-mapping.h:141:54: note: expanded from macro 'DMA_BIT_MASK'
     #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))
                                                         ^ ~~~
    
    A slightly better way here is to create the platform device dynamically
    and set the dma mask in the probe function.
    This avoids the warning and some other problems, but is still not ideal
    because the device creation should really be separated from the driver,
    and the fact that the device has no parent means we have to force
    the dma mask rather than having it set up from the bus that the device
    is actually on.
    
    Fixes: dd8d8d44 ("misc: mic: MIC card driver specific changes to enable SCIF")
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20190712092426.872625-1-arnd@arndb.deSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    bc83f79b
mic_x100.c 8.76 KB