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]
Message-ID: <cabce091-531a-de77-5b90-9ee1f1482da7@linux.ibm.com>
Date:   Thu, 9 Dec 2021 16:47:02 +0100
From:   Christian Borntraeger <borntraeger@...ux.ibm.com>
To:     Matthew Rosato <mjrosato@...ux.ibm.com>, linux-s390@...r.kernel.org
Cc:     alex.williamson@...hat.com, cohuck@...hat.com,
        schnelle@...ux.ibm.com, farman@...ux.ibm.com, pmorel@...ux.ibm.com,
        hca@...ux.ibm.com, gor@...ux.ibm.com,
        gerald.schaefer@...ux.ibm.com, agordeev@...ux.ibm.com,
        frankja@...ux.ibm.com, david@...hat.com, imbrenda@...ux.ibm.com,
        vneethv@...ux.ibm.com, oberpar@...ux.ibm.com, freude@...ux.ibm.com,
        thuth@...hat.com, pasic@...ux.ibm.com, kvm@...r.kernel.org,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH 12/32] s390/pci: get SHM information from list pci

Am 07.12.21 um 21:57 schrieb Matthew Rosato:
> KVM will need information on the special handle mask used to indicate
> emulated devices.  In order to obtain this, a new type of list pci call
> must be made to gather the information.  Remove the unused data pointer
> from clp_list_pci and __clp_add and instead optionally pass a pointer to
> a model-dependent-data field.  Additionally, allow for clp_list_pci calls
> that don't specify a callback - in this case, just do the first pass of
> list pci and exit.
> 
> Signed-off-by: Matthew Rosato <mjrosato@...ux.ibm.com>
> ---
>   arch/s390/include/asm/pci.h     |  6 ++++++
>   arch/s390/include/asm/pci_clp.h |  2 +-
>   arch/s390/pci/pci.c             | 19 +++++++++++++++++++
>   arch/s390/pci/pci_clp.c         | 16 ++++++++++------
>   4 files changed, 36 insertions(+), 7 deletions(-)
> 
> diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h
> index 00a2c24d6d2b..86f43644756d 100644
> --- a/arch/s390/include/asm/pci.h
> +++ b/arch/s390/include/asm/pci.h
> @@ -219,12 +219,18 @@ int zpci_unregister_ioat(struct zpci_dev *, u8);
>   void zpci_remove_reserved_devices(void);
>   void zpci_update_fh(struct zpci_dev *zdev, u32 fh);
>   
> +int zpci_get_mdd(u32 *mdd);
> +
>   /* CLP */
> +void *clp_alloc_block(gfp_t gfp_mask);
> +void clp_free_block(void *ptr);
>   int clp_setup_writeback_mio(void);
>   int clp_scan_pci_devices(void);
>   int clp_query_pci_fn(struct zpci_dev *zdev);
>   int clp_enable_fh(struct zpci_dev *zdev, u32 *fh, u8 nr_dma_as);
>   int clp_disable_fh(struct zpci_dev *zdev, u32 *fh);
> +int clp_list_pci(struct clp_req_rsp_list_pci *rrb, u32 *mdd,
> +		 void (*cb)(struct clp_fh_list_entry *));
>   int clp_get_state(u32 fid, enum zpci_state *state);
>   int clp_refresh_fh(u32 fid, u32 *fh);
>   
> diff --git a/arch/s390/include/asm/pci_clp.h b/arch/s390/include/asm/pci_clp.h
> index 124fadfb74b9..d6bc324763f3 100644
> --- a/arch/s390/include/asm/pci_clp.h
> +++ b/arch/s390/include/asm/pci_clp.h
> @@ -76,7 +76,7 @@ struct clp_req_list_pci {
>   struct clp_rsp_list_pci {
>   	struct clp_rsp_hdr hdr;
>   	u64 resume_token;
> -	u32 reserved2;
> +	u32 mdd;
>   	u16 max_fn;
>   	u8			: 7;
>   	u8 uid_checking		: 1;
> diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c
> index af1c0ae017b1..175854c861cd 100644
> --- a/arch/s390/pci/pci.c
> +++ b/arch/s390/pci/pci.c
> @@ -531,6 +531,25 @@ void zpci_update_fh(struct zpci_dev *zdev, u32 fh)
>   		zpci_do_update_iomap_fh(zdev, fh);
>   }
>   
> +int zpci_get_mdd(u32 *mdd)
> +{
> +	struct clp_req_rsp_list_pci *rrb;
> +	int rc;
> +
> +	if (!mdd)
> +		return -EINVAL;
> +
> +	rrb = clp_alloc_block(GFP_KERNEL);
> +	if (!rrb)
> +		return -ENOMEM;
> +
> +	rc = clp_list_pci(rrb, mdd, NULL);
> +
> +	clp_free_block(rrb);
> +	return rc;
> +}
> +EXPORT_SYMBOL_GPL(zpci_get_mdd);

Maybe move this into pci_clp.c to avoid the export of clp_alloc_block and void clp_free_block?
Niklas?
In any case the code looks correct from a HW perspective.

Reviewed-by: Christian Borntraeger <borntraeger@...ibm.com>


> +
>   static struct resource *__alloc_res(struct zpci_dev *zdev, unsigned long start,
>   				    unsigned long size, unsigned long flags)
>   {
> diff --git a/arch/s390/pci/pci_clp.c b/arch/s390/pci/pci_clp.c
> index bc7446566cbc..e18a548ac22d 100644
> --- a/arch/s390/pci/pci_clp.c
> +++ b/arch/s390/pci/pci_clp.c
> @@ -84,12 +84,12 @@ static __always_inline int clp_req(void *data, unsigned int lps)
>   	return cc;
>   }
>   
> -static void *clp_alloc_block(gfp_t gfp_mask)
> +void *clp_alloc_block(gfp_t gfp_mask)
>   {
>   	return (void *) __get_free_pages(gfp_mask, get_order(CLP_BLK_SIZE));
>   }
>   
> -static void clp_free_block(void *ptr)
> +void clp_free_block(void *ptr)
>   {
>   	free_pages((unsigned long) ptr, get_order(CLP_BLK_SIZE));
>   }
> @@ -358,8 +358,8 @@ static int clp_list_pci_req(struct clp_req_rsp_list_pci *rrb,
>   	return rc;
>   }
>   
> -static int clp_list_pci(struct clp_req_rsp_list_pci *rrb, void *data,
> -			void (*cb)(struct clp_fh_list_entry *, void *))
> +int clp_list_pci(struct clp_req_rsp_list_pci *rrb, u32 *mdd,
> +		 void (*cb)(struct clp_fh_list_entry *))
>   {
>   	u64 resume_token = 0;
>   	int nentries, i, rc;
> @@ -368,8 +368,12 @@ static int clp_list_pci(struct clp_req_rsp_list_pci *rrb, void *data,
>   		rc = clp_list_pci_req(rrb, &resume_token, &nentries);
>   		if (rc)
>   			return rc;
> +		if (mdd)
> +			*mdd = rrb->response.mdd;
> +		if (!cb)
> +			return 0;
>   		for (i = 0; i < nentries; i++)
> -			cb(&rrb->response.fh_list[i], data);
> +			cb(&rrb->response.fh_list[i]);
>   	} while (resume_token);
>   
>   	return rc;
> @@ -398,7 +402,7 @@ static int clp_find_pci(struct clp_req_rsp_list_pci *rrb, u32 fid,
>   	return -ENODEV;
>   }
>   
> -static void __clp_add(struct clp_fh_list_entry *entry, void *data)
> +static void __clp_add(struct clp_fh_list_entry *entry)
>   {
>   	struct zpci_dev *zdev;
>   
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ