lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Fri, 28 Nov 2008 10:50:20 +0800
From:	"Han, Weidong" <weidong.han@...el.com>
To:	'Joerg Roedel' <joerg.roedel@....com>,
	"'kvm@...r.kernel.org'" <kvm@...r.kernel.org>,
	"'linux-kernel@...r.kernel.org'" <linux-kernel@...r.kernel.org>,
	"'iommu@...ts.linux-foundation.org'" 
	<iommu@...ts.linux-foundation.org>
CC:	"'avi@...hat.com'" <avi@...hat.com>,
	"'mingo@...hat.com'" <mingo@...hat.com>,
	"'dwmw2@...radead.org'" <dwmw2@...radead.org>,
	"'amit.shah@...hat.com'" <amit.shah@...hat.com>
Subject: RE: [PATCH 2/9] introcude linux/iommu.h for an iommu api

Joerg Roedel wrote:
> This patch introduces the API to abstract the exported VT-d functions
> for KVM into a generic API. This way the AMD IOMMU implementation can
> plug into this API later.
> 
> Signed-off-by: Joerg Roedel <joerg.roedel@....com>
> ---
>  include/linux/iommu.h |  100
>  +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed,
>  100 insertions(+), 0 deletions(-) create mode 100644
> include/linux/iommu.h 
> 
> diff --git a/include/linux/iommu.h b/include/linux/iommu.h
> new file mode 100644
> index 0000000..6dbc279
> --- /dev/null
> +++ b/include/linux/iommu.h
> @@ -0,0 +1,100 @@
> +/*
> + * Copyright (C) 2007-2008 Advanced Micro Devices, Inc.
> + * Author: Joerg Roedel <joerg.roedel@....com>
> + *
> + * This program is free software; you can redistribute it and/or
> modify it + * under the terms of the GNU General Public License
> version 2 as published + * by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 
> 02111-1307 USA + */
> +
> +#ifndef __LINUX_IOMMU_H
> +#define __LINUX_IOMMU_H
> +
> +struct device;
> +
> +struct iommu_domain {
> +	void *priv;
> +};
> +
> +struct iommu_ops {
> +	int (*domain_init)(struct iommu_domain *domain, struct device *dev);

needn't parameter dev, use attach_dev to assign dev to domain.

> +	void (*domain_destroy)(struct iommu_domain *domain);
> +	int (*attach_dev)(struct iommu_domain *domain, struct device *dev);
> +	void (*detach_dev)(struct iommu_domain *domain, struct device *dev);
> +	int (*map)(struct iommu_domain *domain, dma_addr_t iova,
> +		   phys_addr_t paddr, size_t size, int prot);

It maps/unmaps pages for iommu in kvm, so I think it's better change to 
	int (*map_pages)(struct iommu_domain *domain, unsigned long gfn, unsigned long pfn,
			  unsigned long npages, int prot);
and also add unmap op:
	int (*unmap_pages)(struct iommu_domain *domain, unsigned long gfn, unsigned long npages);

> +	phys_addr_t (*iova_to_phys)(struct iommu_domain *domain,
> +				    dma_addr_t iova);
> +};
> +
> +#ifdef CONFIG_IOMMU_API
> +
> +extern void register_iommu(struct iommu_ops *ops);
> +extern bool iommu_found(void);
> +extern struct iommu_domain *iommu_domain_alloc(struct device *dev);
> +extern void iommu_domain_free(struct iommu_domain *domain);
> +extern int iommu_attach_device(struct iommu_domain *domain,
> +			       struct device *dev);
> +extern void iommu_detach_device(struct iommu_domain *domain,
> +				struct device *dev);
> +extern int iommu_map_address(struct iommu_domain *domain, dma_addr_t
> iova, +			     phys_addr_t paddr, size_t size, int prot);

similarly:
extern int iommu_map_pages(struct iommu_domain *domain, unsigned long gfn, unsigned long pfn,
			        unsigned long npages, int prot);
extern int iommu_unmap_pages(struct iommu_domain *domain, unsigned long gfn, unsigned long npages);

Regards,
Weidong

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists