Re: [PATCH 1/2] mm: dmapool: Align to ARCH_DMA_MINALIGN in non-coherent DMA mode

From: kbuild test robot
Date: Sat Sep 09 2017 - 11:25:12 EST


Hi Huacai,

[auto build test ERROR on mmotm/master]
[also build test ERROR on v4.13 next-20170908]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Huacai-Chen/mm-dmapool-Align-to-ARCH_DMA_MINALIGN-in-non-coherent-DMA-mode/20170909-230504
base: git://git.cmpxchg.org/linux-mmotm.git master
config: i386-tinyconfig (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=i386

All errors (new ones prefixed by >>):

mm/dmapool.c: In function 'dma_pool_create':
>> mm/dmapool.c:143:7: error: implicit declaration of function 'plat_device_is_coherent' [-Werror=implicit-function-declaration]
if (!plat_device_is_coherent(dev))
^~~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors

vim +/plat_device_is_coherent +143 mm/dmapool.c

109
110 /**
111 * dma_pool_create - Creates a pool of consistent memory blocks, for dma.
112 * @name: name of pool, for diagnostics
113 * @dev: device that will be doing the DMA
114 * @size: size of the blocks in this pool.
115 * @align: alignment requirement for blocks; must be a power of two
116 * @boundary: returned blocks won't cross this power of two boundary
117 * Context: !in_interrupt()
118 *
119 * Returns a dma allocation pool with the requested characteristics, or
120 * null if one can't be created. Given one of these pools, dma_pool_alloc()
121 * may be used to allocate memory. Such memory will all have "consistent"
122 * DMA mappings, accessible by the device and its driver without using
123 * cache flushing primitives. The actual size of blocks allocated may be
124 * larger than requested because of alignment.
125 *
126 * If @boundary is nonzero, objects returned from dma_pool_alloc() won't
127 * cross that size boundary. This is useful for devices which have
128 * addressing restrictions on individual DMA transfers, such as not crossing
129 * boundaries of 4KBytes.
130 */
131 struct dma_pool *dma_pool_create(const char *name, struct device *dev,
132 size_t size, size_t align, size_t boundary)
133 {
134 struct dma_pool *retval;
135 size_t allocation;
136 bool empty = false;
137
138 if (align == 0)
139 align = 1;
140 else if (align & (align - 1))
141 return NULL;
142
> 143 if (!plat_device_is_coherent(dev))
144 align = max_t(size_t, align, dma_get_cache_alignment());
145
146 if (size == 0)
147 return NULL;
148 else if (size < 4)
149 size = 4;
150
151 if ((size % align) != 0)
152 size = ALIGN(size, align);
153
154 allocation = max_t(size_t, size, PAGE_SIZE);
155
156 if (!boundary)
157 boundary = allocation;
158 else if ((boundary < size) || (boundary & (boundary - 1)))
159 return NULL;
160
161 retval = kmalloc_node(sizeof(*retval), GFP_KERNEL, dev_to_node(dev));
162 if (!retval)
163 return retval;
164
165 strlcpy(retval->name, name, sizeof(retval->name));
166
167 retval->dev = dev;
168
169 INIT_LIST_HEAD(&retval->page_list);
170 spin_lock_init(&retval->lock);
171 retval->size = size;
172 retval->boundary = boundary;
173 retval->allocation = allocation;
174
175 INIT_LIST_HEAD(&retval->pools);
176
177 /*
178 * pools_lock ensures that the ->dma_pools list does not get corrupted.
179 * pools_reg_lock ensures that there is not a race between
180 * dma_pool_create() and dma_pool_destroy() or within dma_pool_create()
181 * when the first invocation of dma_pool_create() failed on
182 * device_create_file() and the second assumes that it has been done (I
183 * know it is a short window).
184 */
185 mutex_lock(&pools_reg_lock);
186 mutex_lock(&pools_lock);
187 if (list_empty(&dev->dma_pools))
188 empty = true;
189 list_add(&retval->pools, &dev->dma_pools);
190 mutex_unlock(&pools_lock);
191 if (empty) {
192 int err;
193
194 err = device_create_file(dev, &dev_attr_pools);
195 if (err) {
196 mutex_lock(&pools_lock);
197 list_del(&retval->pools);
198 mutex_unlock(&pools_lock);
199 mutex_unlock(&pools_reg_lock);
200 kfree(retval);
201 return NULL;
202 }
203 }
204 mutex_unlock(&pools_reg_lock);
205 return retval;
206 }
207 EXPORT_SYMBOL(dma_pool_create);
208

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

Attachment: .config.gz
Description: application/gzip