* [PATCH 0/3] scsi: smartpqi: fix DMA overlapping mappings asymmetry
@ 2023-03-15 19:21 Desnes Nunes
2023-03-15 19:21 ` [PATCH 1/3] dma-debug: small dma_debug_entry's comment and variable name updates Desnes Nunes
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Desnes Nunes @ 2023-03-15 19:21 UTC (permalink / raw)
To: iommu, linux-scsi, storagedev, linux-kernel
Cc: hch, martin.petersen, don.brace, m.szyprowski, robin.murphy,
jejb, jsnitsel, Desnes Nunes
In summary, this series fixes an overlapping mappings asymmetry on the
smartpqi driver due to a missing pqi_pci_unmap() call, while also adding
the cacheline on debug messages of dma-debug debugging functions.
Other minor non-functional updates are also provided.
Desnes Nunes (3):
dma-debug: small dma_debug_entry's comment and variable name updates
dma-debug: add cacheline to user/kernel space dump messages
scsi: smartpqi: fix overlapping mappings asymmetry on DMA
drivers/scsi/smartpqi/smartpqi_init.c | 2 +
kernel/dma/debug.c | 133 ++++++++++++++------------
2 files changed, 72 insertions(+), 63 deletions(-)
--
2.39.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/3] dma-debug: small dma_debug_entry's comment and variable name updates
2023-03-15 19:21 [PATCH 0/3] scsi: smartpqi: fix DMA overlapping mappings asymmetry Desnes Nunes
@ 2023-03-15 19:21 ` Desnes Nunes
2023-03-16 10:24 ` Robin Murphy
2023-03-15 19:21 ` [PATCH 2/3] dma-debug: add cacheline to user/kernel space dump messages Desnes Nunes
2023-03-15 19:21 ` [PATCH 3/3] scsi: smartpqi: fix DMA overlapping mappings asymmetry Desnes Nunes
2 siblings, 1 reply; 8+ messages in thread
From: Desnes Nunes @ 2023-03-15 19:21 UTC (permalink / raw)
To: iommu, linux-scsi, storagedev, linux-kernel
Cc: hch, martin.petersen, don.brace, m.szyprowski, robin.murphy,
jejb, jsnitsel, Desnes Nunes
Small update on dma_debug_entry's struct commentary and also standardize
the usage of 'dma_addr' variable name from debug_dma_map_page() on
debug_dma_unmap_page(), and similarly on debug_dma_free_coherent()
Signed-off-by: Desnes Nunes <desnesn@redhat.com>
---
kernel/dma/debug.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c
index 18c93c2276ca..e0ad8db1ec25 100644
--- a/kernel/dma/debug.c
+++ b/kernel/dma/debug.c
@@ -52,7 +52,8 @@ enum map_err_types {
/**
* struct dma_debug_entry - track a dma_map* or dma_alloc_coherent mapping
* @list: node on pre-allocated free_entries list
- * @dev: 'dev' argument to dma_map_{page|single|sg} or dma_alloc_coherent
+ * @dev: pointer to the device driver
+ * @dev_addr: 'dev' argument to dma_map_{page|single|sg} or dma_alloc_coherent
* @size: length of the mapping
* @type: single, page, sg, coherent
* @direction: enum dma_data_direction
@@ -1262,13 +1263,13 @@ void debug_dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
}
EXPORT_SYMBOL(debug_dma_mapping_error);
-void debug_dma_unmap_page(struct device *dev, dma_addr_t addr,
+void debug_dma_unmap_page(struct device *dev, dma_addr_t dma_addr,
size_t size, int direction)
{
struct dma_debug_entry ref = {
.type = dma_debug_single,
.dev = dev,
- .dev_addr = addr,
+ .dev_addr = dma_addr,
.size = size,
.direction = direction,
};
@@ -1403,13 +1404,13 @@ void debug_dma_alloc_coherent(struct device *dev, size_t size,
}
void debug_dma_free_coherent(struct device *dev, size_t size,
- void *virt, dma_addr_t addr)
+ void *virt, dma_addr_t dma_addr)
{
struct dma_debug_entry ref = {
.type = dma_debug_coherent,
.dev = dev,
.offset = offset_in_page(virt),
- .dev_addr = addr,
+ .dev_addr = dma_addr,
.size = size,
.direction = DMA_BIDIRECTIONAL,
};
--
2.39.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/3] dma-debug: add cacheline to user/kernel space dump messages
2023-03-15 19:21 [PATCH 0/3] scsi: smartpqi: fix DMA overlapping mappings asymmetry Desnes Nunes
2023-03-15 19:21 ` [PATCH 1/3] dma-debug: small dma_debug_entry's comment and variable name updates Desnes Nunes
@ 2023-03-15 19:21 ` Desnes Nunes
2023-03-15 21:46 ` kernel test robot
2023-03-16 1:32 ` kernel test robot
2023-03-15 19:21 ` [PATCH 3/3] scsi: smartpqi: fix DMA overlapping mappings asymmetry Desnes Nunes
2 siblings, 2 replies; 8+ messages in thread
From: Desnes Nunes @ 2023-03-15 19:21 UTC (permalink / raw)
To: iommu, linux-scsi, storagedev, linux-kernel
Cc: hch, martin.petersen, don.brace, m.szyprowski, robin.murphy,
jejb, jsnitsel, Desnes Nunes
Having the cacheline also printed on the debug_dma_dump_mappings() and
dump_show() is useful for debugging. Furthermore, this also standardizes
the messages shown on both dump functions.
Signed-off-by: Desnes Nunes <desnesn@redhat.com>
---
kernel/dma/debug.c | 122 ++++++++++++++++++++++++---------------------
1 file changed, 64 insertions(+), 58 deletions(-)
diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c
index e0ad8db1ec25..19cc59829ffd 100644
--- a/kernel/dma/debug.c
+++ b/kernel/dma/debug.c
@@ -396,37 +396,6 @@ static unsigned long long phys_addr(struct dma_debug_entry *entry)
return page_to_phys(pfn_to_page(entry->pfn)) + entry->offset;
}
-/*
- * Dump mapping entries for debugging purposes
- */
-void debug_dma_dump_mappings(struct device *dev)
-{
- int idx;
-
- for (idx = 0; idx < HASH_SIZE; idx++) {
- struct hash_bucket *bucket = &dma_entry_hash[idx];
- struct dma_debug_entry *entry;
- unsigned long flags;
-
- spin_lock_irqsave(&bucket->lock, flags);
-
- list_for_each_entry(entry, &bucket->list, list) {
- if (!dev || dev == entry->dev) {
- dev_info(entry->dev,
- "%s idx %d P=%Lx N=%lx D=%Lx L=%Lx %s %s\n",
- type2name[entry->type], idx,
- phys_addr(entry), entry->pfn,
- entry->dev_addr, entry->size,
- dir2name[entry->direction],
- maperr2str[entry->map_err_type]);
- }
- }
-
- spin_unlock_irqrestore(&bucket->lock, flags);
- cond_resched();
- }
-}
-
/*
* For each mapping (initial cacheline in the case of
* dma_alloc_coherent/dma_map_page, initial cacheline in each page of a
@@ -547,6 +516,70 @@ static void active_cacheline_remove(struct dma_debug_entry *entry)
spin_unlock_irqrestore(&radix_lock, flags);
}
+/*
+ * Dump mappings entries on kernel space for debugging purposes
+ */
+void debug_dma_dump_mappings(struct device *dev)
+{
+ int idx;
+ phys_addr_t cln;
+
+ for (idx = 0; idx < HASH_SIZE; idx++) {
+ struct hash_bucket *bucket = &dma_entry_hash[idx];
+ struct dma_debug_entry *entry;
+ unsigned long flags;
+
+ spin_lock_irqsave(&bucket->lock, flags);
+ list_for_each_entry(entry, &bucket->list, list) {
+ if (!dev || dev == entry->dev) {
+ cln = to_cacheline_number(entry);
+ dev_info(entry->dev,
+ "%s idx %d P=%llx N=%lx D=%llx L=%llx cln=%llx %s %s\n",
+ type2name[entry->type], idx,
+ phys_addr(entry), entry->pfn,
+ entry->dev_addr, entry->size,
+ cln, dir2name[entry->direction],
+ maperr2str[entry->map_err_type]);
+ }
+ }
+ spin_unlock_irqrestore(&bucket->lock, flags);
+
+ cond_resched();
+ }
+}
+
+/*
+ * Dump mappings entries on user space via debugfs
+ */
+static int dump_show(struct seq_file *seq, void *v)
+{
+ int idx;
+ phys_addr_t cln;
+
+ for (idx = 0; idx < HASH_SIZE; idx++) {
+ struct hash_bucket *bucket = &dma_entry_hash[idx];
+ struct dma_debug_entry *entry;
+ unsigned long flags;
+
+ spin_lock_irqsave(&bucket->lock, flags);
+ list_for_each_entry(entry, &bucket->list, list) {
+ cln = to_cacheline_number(entry);
+ seq_printf(seq,
+ "%s %s %s idx %d P=%llx N=%lx D=%llx L=%llx cln=%llx %s %s\n",
+ dev_driver_string(entry->dev),
+ dev_name(entry->dev),
+ type2name[entry->type], idx,
+ phys_addr(entry), entry->pfn,
+ entry->dev_addr, entry->size,
+ cln, dir2name[entry->direction],
+ maperr2str[entry->map_err_type]);
+ }
+ spin_unlock_irqrestore(&bucket->lock, flags);
+ }
+ return 0;
+}
+DEFINE_SHOW_ATTRIBUTE(dump);
+
/*
* Wrapper function for adding an entry to the hash.
* This function takes care of locking itself.
@@ -765,33 +798,6 @@ static const struct file_operations filter_fops = {
.llseek = default_llseek,
};
-static int dump_show(struct seq_file *seq, void *v)
-{
- int idx;
-
- for (idx = 0; idx < HASH_SIZE; idx++) {
- struct hash_bucket *bucket = &dma_entry_hash[idx];
- struct dma_debug_entry *entry;
- unsigned long flags;
-
- spin_lock_irqsave(&bucket->lock, flags);
- list_for_each_entry(entry, &bucket->list, list) {
- seq_printf(seq,
- "%s %s %s idx %d P=%llx N=%lx D=%llx L=%llx %s %s\n",
- dev_name(entry->dev),
- dev_driver_string(entry->dev),
- type2name[entry->type], idx,
- phys_addr(entry), entry->pfn,
- entry->dev_addr, entry->size,
- dir2name[entry->direction],
- maperr2str[entry->map_err_type]);
- }
- spin_unlock_irqrestore(&bucket->lock, flags);
- }
- return 0;
-}
-DEFINE_SHOW_ATTRIBUTE(dump);
-
static int __init dma_debug_fs_init(void)
{
struct dentry *dentry = debugfs_create_dir("dma-api", NULL);
--
2.39.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/3] scsi: smartpqi: fix DMA overlapping mappings asymmetry
2023-03-15 19:21 [PATCH 0/3] scsi: smartpqi: fix DMA overlapping mappings asymmetry Desnes Nunes
2023-03-15 19:21 ` [PATCH 1/3] dma-debug: small dma_debug_entry's comment and variable name updates Desnes Nunes
2023-03-15 19:21 ` [PATCH 2/3] dma-debug: add cacheline to user/kernel space dump messages Desnes Nunes
@ 2023-03-15 19:21 ` Desnes Nunes
2 siblings, 0 replies; 8+ messages in thread
From: Desnes Nunes @ 2023-03-15 19:21 UTC (permalink / raw)
To: iommu, linux-scsi, storagedev, linux-kernel
Cc: hch, martin.petersen, don.brace, m.szyprowski, robin.murphy,
jejb, jsnitsel, Desnes Nunes
Currently, pqi_keep_device_offline() calls pqi_build_raid_path_request()
(i.e., a wrapper to pqi_map_single()), but there isn't a pqi_pci_unmap()
call in pqi_keep_device_offline(). Hence, this is flaged as an API viola-
tion due to the overlapping mapping of the physical address.
This patch fixes following warning:
DMA-API: smartpqi 0000:43:00.0: cacheline tracking EEXIST, overlapping
mappings aren't supported
WARNING: CPU: 0 PID: 15 at kernel/dma/debug.c:570
add_dma_entry+0x1f6/0x2f0
CPU: 0 PID: 15 Comm: kworker/0:1 Not tainted 6.3.0-rc1-linux #1
Call Trace:
<TASK>
dma_map_page_attrs+0x6f/0xa0
pqi_map_single+0xaa/0x160 [smartpqi]
pqi_keep_device_offline+0xaf/0x160 [smartpqi]
? dma_unmap_page_attrs+0x1a1/0x1e0
? pqi_identify_physical_device.constprop.0+0xd3/0xe0 [smartpqi]
pqi_update_scsi_devices+0x284/0x7e0 [smartpqi]
pqi_scan_scsi_devices+0x87/0xe0 [smartpqi]
pqi_ctrl_init+0x725/0xa60 [smartpqi]
pqi_pci_probe+0xa7/0x130 [smartpqi]
local_pci_probe+0x46/0xa0
work_for_cpu_fn+0x16/0x20
process_one_work+0x2bf/0x670
? __pfx_worker_thread+0x10/0x10
worker_thread+0x1d1/0x3b0
? __pfx_worker_thread+0x10/0x10
kthread+0xf3/0x120
? __pfx_kthread+0x10/0x10
ret_from_fork+0x2c/0x50
</TASK>
Fixes: be76f90668d8 ("scsi: smartpqi: Add TEST UNIT READY check for SANITIZE operation")
Signed-off-by: Desnes Nunes <desnesn@redhat.com>
---
drivers/scsi/smartpqi/smartpqi_init.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/scsi/smartpqi/smartpqi_init.c b/drivers/scsi/smartpqi/smartpqi_init.c
index 49a8f91810b6..6fca497ca605 100644
--- a/drivers/scsi/smartpqi/smartpqi_init.c
+++ b/drivers/scsi/smartpqi/smartpqi_init.c
@@ -1726,6 +1726,8 @@ static bool pqi_keep_device_offline(struct pqi_ctrl_info *ctrl_info,
rc = pqi_submit_raid_request_synchronous(ctrl_info, &request.header, 0, &error_info);
+ pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1, dir);
+
if (rc)
goto out; /* Assume not offline */
--
2.39.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3] dma-debug: add cacheline to user/kernel space dump messages
2023-03-15 19:21 ` [PATCH 2/3] dma-debug: add cacheline to user/kernel space dump messages Desnes Nunes
@ 2023-03-15 21:46 ` kernel test robot
2023-03-16 1:32 ` kernel test robot
1 sibling, 0 replies; 8+ messages in thread
From: kernel test robot @ 2023-03-15 21:46 UTC (permalink / raw)
To: Desnes Nunes, iommu, linux-scsi, storagedev, linux-kernel
Cc: oe-kbuild-all, hch, martin.petersen, don.brace, m.szyprowski,
robin.murphy, jejb, jsnitsel, Desnes Nunes
Hi Desnes,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on jejb-scsi/for-next]
[also build test WARNING on mkp-scsi/for-next linus/master hch-configfs/for-next v6.3-rc2 next-20230315]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Desnes-Nunes/dma-debug-small-dma_debug_entry-s-comment-and-variable-name-updates/20230316-032542
base: https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
patch link: https://lore.kernel.org/r/20230315192130.970021-3-desnesn%40redhat.com
patch subject: [PATCH 2/3] dma-debug: add cacheline to user/kernel space dump messages
config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20230316/202303160548.ReyuTsGD-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/ae3f8fdd17c54b837d476952733456723c472ed8
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Desnes-Nunes/dma-debug-small-dma_debug_entry-s-comment-and-variable-name-updates/20230316-032542
git checkout ae3f8fdd17c54b837d476952733456723c472ed8
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=m68k olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=m68k SHELL=/bin/bash kernel/dma/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202303160548.ReyuTsGD-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from include/linux/device.h:15,
from include/linux/dma-mapping.h:7,
from include/linux/dma-map-ops.h:9,
from kernel/dma/debug.c:12:
kernel/dma/debug.c: In function 'debug_dma_dump_mappings':
>> kernel/dma/debug.c:537:42: warning: format '%llx' expects argument of type 'long long unsigned int', but argument 9 has type 'phys_addr_t' {aka 'unsigned int'} [-Wformat=]
537 | "%s idx %d P=%llx N=%lx D=%llx L=%llx cln=%llx %s %s\n",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/dev_printk.h:110:30: note: in definition of macro 'dev_printk_index_wrap'
110 | _p_func(dev, fmt, ##__VA_ARGS__); \
| ^~~
include/linux/dev_printk.h:150:58: note: in expansion of macro 'dev_fmt'
150 | dev_printk_index_wrap(_dev_info, KERN_INFO, dev, dev_fmt(fmt), ##__VA_ARGS__)
| ^~~~~~~
kernel/dma/debug.c:536:33: note: in expansion of macro 'dev_info'
536 | dev_info(entry->dev,
| ^~~~~~~~
kernel/dma/debug.c:537:87: note: format string is defined here
537 | "%s idx %d P=%llx N=%lx D=%llx L=%llx cln=%llx %s %s\n",
| ~~~^
| |
| long long unsigned int
| %x
kernel/dma/debug.c: In function 'dump_show':
kernel/dma/debug.c:568:87: warning: format '%llx' expects argument of type 'long long unsigned int', but argument 11 has type 'phys_addr_t' {aka 'unsigned int'} [-Wformat=]
568 | "%s %s %s idx %d P=%llx N=%lx D=%llx L=%llx cln=%llx %s %s\n",
| ~~~^
| |
| long long unsigned int
| %x
......
574 | cln, dir2name[entry->direction],
| ~~~
| |
| phys_addr_t {aka unsigned int}
vim +537 kernel/dma/debug.c
518
519 /*
520 * Dump mappings entries on kernel space for debugging purposes
521 */
522 void debug_dma_dump_mappings(struct device *dev)
523 {
524 int idx;
525 phys_addr_t cln;
526
527 for (idx = 0; idx < HASH_SIZE; idx++) {
528 struct hash_bucket *bucket = &dma_entry_hash[idx];
529 struct dma_debug_entry *entry;
530 unsigned long flags;
531
532 spin_lock_irqsave(&bucket->lock, flags);
533 list_for_each_entry(entry, &bucket->list, list) {
534 if (!dev || dev == entry->dev) {
535 cln = to_cacheline_number(entry);
536 dev_info(entry->dev,
> 537 "%s idx %d P=%llx N=%lx D=%llx L=%llx cln=%llx %s %s\n",
538 type2name[entry->type], idx,
539 phys_addr(entry), entry->pfn,
540 entry->dev_addr, entry->size,
541 cln, dir2name[entry->direction],
542 maperr2str[entry->map_err_type]);
543 }
544 }
545 spin_unlock_irqrestore(&bucket->lock, flags);
546
547 cond_resched();
548 }
549 }
550
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3] dma-debug: add cacheline to user/kernel space dump messages
2023-03-15 19:21 ` [PATCH 2/3] dma-debug: add cacheline to user/kernel space dump messages Desnes Nunes
2023-03-15 21:46 ` kernel test robot
@ 2023-03-16 1:32 ` kernel test robot
1 sibling, 0 replies; 8+ messages in thread
From: kernel test robot @ 2023-03-16 1:32 UTC (permalink / raw)
To: Desnes Nunes, iommu, linux-scsi, storagedev, linux-kernel
Cc: llvm, oe-kbuild-all, hch, martin.petersen, don.brace,
m.szyprowski, robin.murphy, jejb, jsnitsel, Desnes Nunes
Hi Desnes,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on jejb-scsi/for-next]
[also build test WARNING on mkp-scsi/for-next linus/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Desnes-Nunes/dma-debug-small-dma_debug_entry-s-comment-and-variable-name-updates/20230316-032542
base: https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
patch link: https://lore.kernel.org/r/20230315192130.970021-3-desnesn%40redhat.com
patch subject: [PATCH 2/3] dma-debug: add cacheline to user/kernel space dump messages
config: arm-randconfig-r046-20230312 (https://download.01.org/0day-ci/archive/20230316/202303160927.dwt0jHFb-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project 67409911353323ca5edf2049ef0df54132fa1ca7)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://github.com/intel-lab-lkp/linux/commit/ae3f8fdd17c54b837d476952733456723c472ed8
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Desnes-Nunes/dma-debug-small-dma_debug_entry-s-comment-and-variable-name-updates/20230316-032542
git checkout ae3f8fdd17c54b837d476952733456723c472ed8
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash kernel/dma/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202303160927.dwt0jHFb-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> kernel/dma/debug.c:541:7: warning: format specifies type 'unsigned long long' but the argument has type 'phys_addr_t' (aka 'unsigned int') [-Wformat]
cln, dir2name[entry->direction],
^~~
include/linux/dev_printk.h:150:67: note: expanded from macro 'dev_info'
dev_printk_index_wrap(_dev_info, KERN_INFO, dev, dev_fmt(fmt), ##__VA_ARGS__)
~~~ ^~~~~~~~~~~
include/linux/dev_printk.h:110:23: note: expanded from macro 'dev_printk_index_wrap'
_p_func(dev, fmt, ##__VA_ARGS__); \
~~~ ^~~~~~~~~~~
kernel/dma/debug.c:574:8: warning: format specifies type 'unsigned long long' but the argument has type 'phys_addr_t' (aka 'unsigned int') [-Wformat]
cln, dir2name[entry->direction],
^~~
2 warnings generated.
vim +541 kernel/dma/debug.c
518
519 /*
520 * Dump mappings entries on kernel space for debugging purposes
521 */
522 void debug_dma_dump_mappings(struct device *dev)
523 {
524 int idx;
525 phys_addr_t cln;
526
527 for (idx = 0; idx < HASH_SIZE; idx++) {
528 struct hash_bucket *bucket = &dma_entry_hash[idx];
529 struct dma_debug_entry *entry;
530 unsigned long flags;
531
532 spin_lock_irqsave(&bucket->lock, flags);
533 list_for_each_entry(entry, &bucket->list, list) {
534 if (!dev || dev == entry->dev) {
535 cln = to_cacheline_number(entry);
536 dev_info(entry->dev,
537 "%s idx %d P=%llx N=%lx D=%llx L=%llx cln=%llx %s %s\n",
538 type2name[entry->type], idx,
539 phys_addr(entry), entry->pfn,
540 entry->dev_addr, entry->size,
> 541 cln, dir2name[entry->direction],
542 maperr2str[entry->map_err_type]);
543 }
544 }
545 spin_unlock_irqrestore(&bucket->lock, flags);
546
547 cond_resched();
548 }
549 }
550
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] dma-debug: small dma_debug_entry's comment and variable name updates
2023-03-15 19:21 ` [PATCH 1/3] dma-debug: small dma_debug_entry's comment and variable name updates Desnes Nunes
@ 2023-03-16 10:24 ` Robin Murphy
2023-03-16 14:06 ` Desnes Nunes
0 siblings, 1 reply; 8+ messages in thread
From: Robin Murphy @ 2023-03-16 10:24 UTC (permalink / raw)
To: Desnes Nunes, iommu, linux-scsi, storagedev, linux-kernel
Cc: hch, martin.petersen, don.brace, m.szyprowski, jejb, jsnitsel
On 2023-03-15 19:21, Desnes Nunes wrote:
> Small update on dma_debug_entry's struct commentary and also standardize
> the usage of 'dma_addr' variable name from debug_dma_map_page() on
> debug_dma_unmap_page(), and similarly on debug_dma_free_coherent()
>
> Signed-off-by: Desnes Nunes <desnesn@redhat.com>
> ---
> kernel/dma/debug.c | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c
> index 18c93c2276ca..e0ad8db1ec25 100644
> --- a/kernel/dma/debug.c
> +++ b/kernel/dma/debug.c
> @@ -52,7 +52,8 @@ enum map_err_types {
> /**
> * struct dma_debug_entry - track a dma_map* or dma_alloc_coherent mapping
> * @list: node on pre-allocated free_entries list
> - * @dev: 'dev' argument to dma_map_{page|single|sg} or dma_alloc_coherent
> + * @dev: pointer to the device driver
The original comment was correct...
> + * @dev_addr: 'dev' argument to dma_map_{page|single|sg} or dma_alloc_coherent
...and the address is clearly not the argument representing the device,
since it is an address :/
Thanks,
Robin.
> * @size: length of the mapping
> * @type: single, page, sg, coherent
> * @direction: enum dma_data_direction
> @@ -1262,13 +1263,13 @@ void debug_dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
> }
> EXPORT_SYMBOL(debug_dma_mapping_error);
>
> -void debug_dma_unmap_page(struct device *dev, dma_addr_t addr,
> +void debug_dma_unmap_page(struct device *dev, dma_addr_t dma_addr,
> size_t size, int direction)
> {
> struct dma_debug_entry ref = {
> .type = dma_debug_single,
> .dev = dev,
> - .dev_addr = addr,
> + .dev_addr = dma_addr,
> .size = size,
> .direction = direction,
> };
> @@ -1403,13 +1404,13 @@ void debug_dma_alloc_coherent(struct device *dev, size_t size,
> }
>
> void debug_dma_free_coherent(struct device *dev, size_t size,
> - void *virt, dma_addr_t addr)
> + void *virt, dma_addr_t dma_addr)
> {
> struct dma_debug_entry ref = {
> .type = dma_debug_coherent,
> .dev = dev,
> .offset = offset_in_page(virt),
> - .dev_addr = addr,
> + .dev_addr = dma_addr,
> .size = size,
> .direction = DMA_BIDIRECTIONAL,
> };
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] dma-debug: small dma_debug_entry's comment and variable name updates
2023-03-16 10:24 ` Robin Murphy
@ 2023-03-16 14:06 ` Desnes Nunes
0 siblings, 0 replies; 8+ messages in thread
From: Desnes Nunes @ 2023-03-16 14:06 UTC (permalink / raw)
To: Robin Murphy
Cc: iommu, linux-scsi, storagedev, linux-kernel, hch,
martin.petersen, don.brace, m.szyprowski, jejb, jsnitsel
Good day Robin,
Thank you very much for the review and clarification - will send a v2
with the proper comment update.
Best Regards,
On Thu, Mar 16, 2023 at 7:24 AM Robin Murphy <robin.murphy@arm.com> wrote:
>
> On 2023-03-15 19:21, Desnes Nunes wrote:
> > Small update on dma_debug_entry's struct commentary and also standardize
> > the usage of 'dma_addr' variable name from debug_dma_map_page() on
> > debug_dma_unmap_page(), and similarly on debug_dma_free_coherent()
> >
> > Signed-off-by: Desnes Nunes <desnesn@redhat.com>
> > ---
> > kernel/dma/debug.c | 11 ++++++-----
> > 1 file changed, 6 insertions(+), 5 deletions(-)
> >
> > diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c
> > index 18c93c2276ca..e0ad8db1ec25 100644
> > --- a/kernel/dma/debug.c
> > +++ b/kernel/dma/debug.c
> > @@ -52,7 +52,8 @@ enum map_err_types {
> > /**
> > * struct dma_debug_entry - track a dma_map* or dma_alloc_coherent mapping
> > * @list: node on pre-allocated free_entries list
> > - * @dev: 'dev' argument to dma_map_{page|single|sg} or dma_alloc_coherent
> > + * @dev: pointer to the device driver
>
> The original comment was correct...
>
> > + * @dev_addr: 'dev' argument to dma_map_{page|single|sg} or dma_alloc_coherent
>
> ...and the address is clearly not the argument representing the device,
> since it is an address :/
>
> Thanks,
> Robin.
>
> > * @size: length of the mapping
> > * @type: single, page, sg, coherent
> > * @direction: enum dma_data_direction
> > @@ -1262,13 +1263,13 @@ void debug_dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
> > }
> > EXPORT_SYMBOL(debug_dma_mapping_error);
> >
> > -void debug_dma_unmap_page(struct device *dev, dma_addr_t addr,
> > +void debug_dma_unmap_page(struct device *dev, dma_addr_t dma_addr,
> > size_t size, int direction)
> > {
> > struct dma_debug_entry ref = {
> > .type = dma_debug_single,
> > .dev = dev,
> > - .dev_addr = addr,
> > + .dev_addr = dma_addr,
> > .size = size,
> > .direction = direction,
> > };
> > @@ -1403,13 +1404,13 @@ void debug_dma_alloc_coherent(struct device *dev, size_t size,
> > }
> >
> > void debug_dma_free_coherent(struct device *dev, size_t size,
> > - void *virt, dma_addr_t addr)
> > + void *virt, dma_addr_t dma_addr)
> > {
> > struct dma_debug_entry ref = {
> > .type = dma_debug_coherent,
> > .dev = dev,
> > .offset = offset_in_page(virt),
> > - .dev_addr = addr,
> > + .dev_addr = dma_addr,
> > .size = size,
> > .direction = DMA_BIDIRECTIONAL,
> > };
>
--
Desnes Nunes
Principal Software Engineer
Red Hat Brasil
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-03-16 14:07 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-15 19:21 [PATCH 0/3] scsi: smartpqi: fix DMA overlapping mappings asymmetry Desnes Nunes
2023-03-15 19:21 ` [PATCH 1/3] dma-debug: small dma_debug_entry's comment and variable name updates Desnes Nunes
2023-03-16 10:24 ` Robin Murphy
2023-03-16 14:06 ` Desnes Nunes
2023-03-15 19:21 ` [PATCH 2/3] dma-debug: add cacheline to user/kernel space dump messages Desnes Nunes
2023-03-15 21:46 ` kernel test robot
2023-03-16 1:32 ` kernel test robot
2023-03-15 19:21 ` [PATCH 3/3] scsi: smartpqi: fix DMA overlapping mappings asymmetry Desnes Nunes
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.