Page MenuHomeFreeBSD

D11286.id29921.diff
No OneTemporary

D11286.id29921.diff

Index: head/sys/compat/linuxkpi/common/include/linux/io-mapping.h
===================================================================
--- head/sys/compat/linuxkpi/common/include/linux/io-mapping.h
+++ head/sys/compat/linuxkpi/common/include/linux/io-mapping.h
@@ -28,52 +28,85 @@
*
* $FreeBSD$
*/
-#ifndef _LINUX_IO_MAPPING_H_
+
+#ifndef _LINUX_IO_MAPPING_H_
#define _LINUX_IO_MAPPING_H_
+#include <sys/types.h>
+#include <machine/vm.h>
+
#include <linux/types.h>
#include <linux/io.h>
+#include <linux/slab.h>
-struct io_mapping;
+struct io_mapping {
+ unsigned long base;
+ unsigned long size;
+ void *mem;
+ vm_memattr_t attr;
+};
static inline struct io_mapping *
+io_mapping_init_wc(struct io_mapping *mapping, resource_size_t base,
+ unsigned long size)
+{
+
+ mapping->base = base;
+ mapping->size = size;
+ mapping->mem = ioremap_wc(base, size);
+ mapping->attr = VM_MEMATTR_WRITE_COMBINING;
+ return (mapping);
+}
+
+static inline struct io_mapping *
io_mapping_create_wc(resource_size_t base, unsigned long size)
{
+ struct io_mapping *mapping;
- return ioremap_wc(base, size);
+ mapping = kmalloc(sizeof(*mapping), GFP_KERNEL);
+ if (mapping == NULL)
+ return (NULL);
+ return (io_mapping_init_wc(mapping, base, size));
}
static inline void
+io_mapping_fini(struct io_mapping *mapping)
+{
+
+ iounmap(mapping->mem);
+}
+
+static inline void
io_mapping_free(struct io_mapping *mapping)
{
- iounmap(mapping);
+ io_mapping_fini(mapping->mem);
+ kfree(mapping);
}
static inline void *
io_mapping_map_atomic_wc(struct io_mapping *mapping, unsigned long offset)
{
- return (((char *)mapping) + offset);
+ return ((char *)mapping->mem + offset);
}
static inline void
io_mapping_unmap_atomic(void *vaddr)
{
-
}
static inline void *
-io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset)
+io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset,
+ unsigned long size)
{
- return (((char *) mapping) + offset);
+ return ((char *)mapping->mem + offset);
}
static inline void
io_mapping_unmap(void *vaddr)
{
-
}
-#endif /* _LINUX_IO_MAPPING_H_ */
+#endif /* _LINUX_IO_MAPPING_H_ */
Index: head/sys/dev/mlx4/mlx4_core/mlx4_pd.c
===================================================================
--- head/sys/dev/mlx4/mlx4_core/mlx4_pd.c
+++ head/sys/dev/mlx4/mlx4_core/mlx4_pd.c
@@ -204,7 +204,7 @@
goto free_uar;
}
- uar->bf_map = io_mapping_map_wc(priv->bf_mapping, uar->index << PAGE_SHIFT);
+ uar->bf_map = io_mapping_map_wc(priv->bf_mapping, uar->index << PAGE_SHIFT, PAGE_SIZE);
if (!uar->bf_map) {
err = -ENOMEM;
goto unamp_uar;
Index: head/sys/dev/mlx5/mlx5_core/mlx5_uar.c
===================================================================
--- head/sys/dev/mlx5/mlx5_core/mlx5_uar.c
+++ head/sys/dev/mlx5/mlx5_core/mlx5_uar.c
@@ -189,7 +189,8 @@
if (mdev->priv.bf_mapping)
uar->bf_map = io_mapping_map_wc(mdev->priv.bf_mapping,
- uar->index << PAGE_SHIFT);
+ uar->index << PAGE_SHIFT,
+ PAGE_SIZE);
return 0;

File Metadata

Mime Type
text/plain
Expires
Thu, Mar 13, 7:45 AM (12 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17131890
Default Alt Text
D11286.id29921.diff (2 KB)

Event Timeline