.. | .. |
---|
1 | | -/* |
---|
2 | | - This file is provided under a dual BSD/GPLv2 license. When using or |
---|
3 | | - redistributing this file, you may do so under either license. |
---|
4 | | - |
---|
5 | | - GPL LICENSE SUMMARY |
---|
6 | | - Copyright(c) 2014 Intel Corporation. |
---|
7 | | - This program is free software; you can redistribute it and/or modify |
---|
8 | | - it under the terms of version 2 of the GNU General Public License as |
---|
9 | | - published by the Free Software Foundation. |
---|
10 | | - |
---|
11 | | - This program is distributed in the hope that it will be useful, but |
---|
12 | | - WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
13 | | - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
---|
14 | | - General Public License for more details. |
---|
15 | | - |
---|
16 | | - Contact Information: |
---|
17 | | - qat-linux@intel.com |
---|
18 | | - |
---|
19 | | - BSD LICENSE |
---|
20 | | - Copyright(c) 2014 Intel Corporation. |
---|
21 | | - Redistribution and use in source and binary forms, with or without |
---|
22 | | - modification, are permitted provided that the following conditions |
---|
23 | | - are met: |
---|
24 | | - |
---|
25 | | - * Redistributions of source code must retain the above copyright |
---|
26 | | - notice, this list of conditions and the following disclaimer. |
---|
27 | | - * Redistributions in binary form must reproduce the above copyright |
---|
28 | | - notice, this list of conditions and the following disclaimer in |
---|
29 | | - the documentation and/or other materials provided with the |
---|
30 | | - distribution. |
---|
31 | | - * Neither the name of Intel Corporation nor the names of its |
---|
32 | | - contributors may be used to endorse or promote products derived |
---|
33 | | - from this software without specific prior written permission. |
---|
34 | | - |
---|
35 | | - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
---|
36 | | - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
---|
37 | | - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
---|
38 | | - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
---|
39 | | - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
---|
40 | | - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
---|
41 | | - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
---|
42 | | - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
---|
43 | | - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
---|
44 | | - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
---|
45 | | - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
---|
46 | | -*/ |
---|
| 1 | +// SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) |
---|
| 2 | +/* Copyright(c) 2014 - 2020 Intel Corporation */ |
---|
47 | 3 | #include <linux/mutex.h> |
---|
48 | 4 | #include <linux/slab.h> |
---|
49 | 5 | #include <linux/seq_file.h> |
---|
.. | .. |
---|
121 | 77 | mutex_unlock(&ring_read_lock); |
---|
122 | 78 | } |
---|
123 | 79 | |
---|
124 | | -static const struct seq_operations adf_ring_sops = { |
---|
| 80 | +static const struct seq_operations adf_ring_debug_sops = { |
---|
125 | 81 | .start = adf_ring_start, |
---|
126 | 82 | .next = adf_ring_next, |
---|
127 | 83 | .stop = adf_ring_stop, |
---|
128 | 84 | .show = adf_ring_show |
---|
129 | 85 | }; |
---|
130 | 86 | |
---|
131 | | -static int adf_ring_open(struct inode *inode, struct file *file) |
---|
132 | | -{ |
---|
133 | | - int ret = seq_open(file, &adf_ring_sops); |
---|
134 | | - |
---|
135 | | - if (!ret) { |
---|
136 | | - struct seq_file *seq_f = file->private_data; |
---|
137 | | - |
---|
138 | | - seq_f->private = inode->i_private; |
---|
139 | | - } |
---|
140 | | - return ret; |
---|
141 | | -} |
---|
142 | | - |
---|
143 | | -static const struct file_operations adf_ring_debug_fops = { |
---|
144 | | - .open = adf_ring_open, |
---|
145 | | - .read = seq_read, |
---|
146 | | - .llseek = seq_lseek, |
---|
147 | | - .release = seq_release |
---|
148 | | -}; |
---|
| 87 | +DEFINE_SEQ_ATTRIBUTE(adf_ring_debug); |
---|
149 | 88 | |
---|
150 | 89 | int adf_ring_debugfs_add(struct adf_etr_ring_data *ring, const char *name) |
---|
151 | 90 | { |
---|
.. | .. |
---|
163 | 102 | ring_debug->debug = debugfs_create_file(entry_name, S_IRUSR, |
---|
164 | 103 | ring->bank->bank_debug_dir, |
---|
165 | 104 | ring, &adf_ring_debug_fops); |
---|
166 | | - if (!ring_debug->debug) { |
---|
167 | | - pr_err("QAT: Failed to create ring debug entry.\n"); |
---|
168 | | - kfree(ring_debug); |
---|
169 | | - return -EFAULT; |
---|
170 | | - } |
---|
171 | 105 | ring->ring_debug = ring_debug; |
---|
172 | 106 | return 0; |
---|
173 | 107 | } |
---|
.. | .. |
---|
237 | 171 | mutex_unlock(&bank_read_lock); |
---|
238 | 172 | } |
---|
239 | 173 | |
---|
240 | | -static const struct seq_operations adf_bank_sops = { |
---|
| 174 | +static const struct seq_operations adf_bank_debug_sops = { |
---|
241 | 175 | .start = adf_bank_start, |
---|
242 | 176 | .next = adf_bank_next, |
---|
243 | 177 | .stop = adf_bank_stop, |
---|
244 | 178 | .show = adf_bank_show |
---|
245 | 179 | }; |
---|
246 | 180 | |
---|
247 | | -static int adf_bank_open(struct inode *inode, struct file *file) |
---|
248 | | -{ |
---|
249 | | - int ret = seq_open(file, &adf_bank_sops); |
---|
250 | | - |
---|
251 | | - if (!ret) { |
---|
252 | | - struct seq_file *seq_f = file->private_data; |
---|
253 | | - |
---|
254 | | - seq_f->private = inode->i_private; |
---|
255 | | - } |
---|
256 | | - return ret; |
---|
257 | | -} |
---|
258 | | - |
---|
259 | | -static const struct file_operations adf_bank_debug_fops = { |
---|
260 | | - .open = adf_bank_open, |
---|
261 | | - .read = seq_read, |
---|
262 | | - .llseek = seq_lseek, |
---|
263 | | - .release = seq_release |
---|
264 | | -}; |
---|
| 181 | +DEFINE_SEQ_ATTRIBUTE(adf_bank_debug); |
---|
265 | 182 | |
---|
266 | 183 | int adf_bank_debugfs_add(struct adf_etr_bank_data *bank) |
---|
267 | 184 | { |
---|
.. | .. |
---|
271 | 188 | |
---|
272 | 189 | snprintf(name, sizeof(name), "bank_%02d", bank->bank_number); |
---|
273 | 190 | bank->bank_debug_dir = debugfs_create_dir(name, parent); |
---|
274 | | - if (!bank->bank_debug_dir) { |
---|
275 | | - pr_err("QAT: Failed to create bank debug dir.\n"); |
---|
276 | | - return -EFAULT; |
---|
277 | | - } |
---|
278 | | - |
---|
279 | 191 | bank->bank_debug_cfg = debugfs_create_file("config", S_IRUSR, |
---|
280 | 192 | bank->bank_debug_dir, bank, |
---|
281 | 193 | &adf_bank_debug_fops); |
---|
282 | | - if (!bank->bank_debug_cfg) { |
---|
283 | | - pr_err("QAT: Failed to create bank debug entry.\n"); |
---|
284 | | - debugfs_remove(bank->bank_debug_dir); |
---|
285 | | - return -EFAULT; |
---|
286 | | - } |
---|
287 | 194 | return 0; |
---|
288 | 195 | } |
---|
289 | 196 | |
---|