Re: [PATCH 1/2] xen/grant-table: remove gnttab_*transfer*() functions

2022-03-16 Thread Boris Ostrovsky



On 3/11/22 5:34 AM, Juergen Gross wrote:

All grant table operations related to the "transfer" functionality
are unused currently. There have been users in the old days of the
"Xen-o-Linux" kernel, but those didn't make it upstream.

So remove the "transfer" related functions.

Signed-off-by: Juergen Gross 



Applied to for-linus-5.18 (both patches)




Re: [PATCH 1/2] xen/grant-table: remove gnttab_*transfer*() functions

2022-03-15 Thread Boris Ostrovsky




On 3/15/22 2:10 AM, Juergen Gross wrote:

On 15.03.22 00:37, Boris Ostrovsky wrote:


On 3/11/22 5:34 AM, Juergen Gross wrote:

All grant table operations related to the "transfer" functionality
are unused currently. There have been users in the old days of the
"Xen-o-Linux" kernel, but those didn't make it upstream.

So remove the "transfer" related functions.



Do we need to assert somewhere that transfer flags are not set?


This would be an orthogonal change, right? My patch is just removing
never called functions.



I was thinking of having this done as part of code removal (maybe as a separate 
patch).



In any case I believe checking those flags is the job of the hypervisor.
If an operation is illegal due to a transfer flag being set, it needs to
be rejected at hypervisor level.


True.

Reviewed-by: Boris Ostrovsky 



Re: [PATCH 1/2] xen/grant-table: remove gnttab_*transfer*() functions

2022-03-14 Thread Juergen Gross

On 15.03.22 00:37, Boris Ostrovsky wrote:


On 3/11/22 5:34 AM, Juergen Gross wrote:

All grant table operations related to the "transfer" functionality
are unused currently. There have been users in the old days of the
"Xen-o-Linux" kernel, but those didn't make it upstream.

So remove the "transfer" related functions.



Do we need to assert somewhere that transfer flags are not set?


This would be an orthogonal change, right? My patch is just removing
never called functions.

In any case I believe checking those flags is the job of the hypervisor.
If an operation is illegal due to a transfer flag being set, it needs to
be rejected at hypervisor level.


Juergen


OpenPGP_0xB0DE9DD628BF132F.asc
Description: OpenPGP public key


OpenPGP_signature
Description: OpenPGP digital signature


Re: [PATCH 1/2] xen/grant-table: remove gnttab_*transfer*() functions

2022-03-14 Thread Boris Ostrovsky



On 3/11/22 5:34 AM, Juergen Gross wrote:

All grant table operations related to the "transfer" functionality
are unused currently. There have been users in the old days of the
"Xen-o-Linux" kernel, but those didn't make it upstream.

So remove the "transfer" related functions.



Do we need to assert somewhere that transfer flags are not set?


-boris





[PATCH 1/2] xen/grant-table: remove gnttab_*transfer*() functions

2022-03-11 Thread Juergen Gross
All grant table operations related to the "transfer" functionality
are unused currently. There have been users in the old days of the
"Xen-o-Linux" kernel, but those didn't make it upstream.

So remove the "transfer" related functions.

Signed-off-by: Juergen Gross 
---
 drivers/xen/grant-table.c | 113 +-
 include/xen/grant_table.h |   8 ---
 2 files changed, 2 insertions(+), 119 deletions(-)

diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c
index 5c83d41766c8..8963af8ec764 100644
--- a/drivers/xen/grant-table.c
+++ b/drivers/xen/grant-table.c
@@ -109,7 +109,7 @@ struct gnttab_ops {
void (*unmap_frames)(void);
/*
 * Introducing a valid entry into the grant table, granting the frame of
-* this grant entry to domain for accessing or transfering. Ref
+* this grant entry to domain for accessing. Ref
 * parameter is reference of this introduced grant entry, domid is id of
 * granted domain, frame is the page frame to be granted, and flags is
 * status of the grant entry to be updated.
@@ -125,14 +125,6 @@ struct gnttab_ops {
 * access for this entry and return success(==1).
 */
int (*end_foreign_access_ref)(grant_ref_t ref, int readonly);
-   /*
-* Stop granting a grant entry to domain for transfer. Ref parameter is
-* reference of a grant entry whose grant transfer will be stopped. If
-* tranfer has not started, just reclaim the grant entry and return
-* failure(==0). Otherwise, wait for the transfer to complete and then
-* return the frame.
-*/
-   unsigned long (*end_foreign_transfer_ref)(grant_ref_t ref);
/*
 * Read the frame number related to a given grant reference.
 */
@@ -230,10 +222,7 @@ static void put_free_entry(grant_ref_t ref)
  * Following applies to gnttab_update_entry_v1 and gnttab_update_entry_v2.
  * Introducing a valid entry into the grant table:
  *  1. Write ent->domid.
- *  2. Write ent->frame:
- *  GTF_permit_access:   Frame to which access is permitted.
- *  GTF_accept_transfer: Pseudo-phys frame slot being filled by new
- *   frame, or zero if none.
+ *  2. Write ent->frame: Frame to which access is permitted.
  *  3. Write memory barrier (WMB).
  *  4. Write ent->flags, inc. valid type.
  */
@@ -455,102 +444,6 @@ void gnttab_end_foreign_access(grant_ref_t ref, int 
readonly,
 }
 EXPORT_SYMBOL_GPL(gnttab_end_foreign_access);
 
-int gnttab_grant_foreign_transfer(domid_t domid, unsigned long pfn)
-{
-   int ref;
-
-   ref = get_free_entries(1);
-   if (unlikely(ref < 0))
-   return -ENOSPC;
-   gnttab_grant_foreign_transfer_ref(ref, domid, pfn);
-
-   return ref;
-}
-EXPORT_SYMBOL_GPL(gnttab_grant_foreign_transfer);
-
-void gnttab_grant_foreign_transfer_ref(grant_ref_t ref, domid_t domid,
-  unsigned long pfn)
-{
-   gnttab_interface->update_entry(ref, domid, pfn, GTF_accept_transfer);
-}
-EXPORT_SYMBOL_GPL(gnttab_grant_foreign_transfer_ref);
-
-static unsigned long gnttab_end_foreign_transfer_ref_v1(grant_ref_t ref)
-{
-   unsigned long frame;
-   u16   flags;
-   u16  *pflags;
-
-   pflags = &gnttab_shared.v1[ref].flags;
-
-   /*
-* If a transfer is not even yet started, try to reclaim the grant
-* reference and return failure (== 0).
-*/
-   while (!((flags = *pflags) & GTF_transfer_committed)) {
-   if (sync_cmpxchg(pflags, flags, 0) == flags)
-   return 0;
-   cpu_relax();
-   }
-
-   /* If a transfer is in progress then wait until it is completed. */
-   while (!(flags & GTF_transfer_completed)) {
-   flags = *pflags;
-   cpu_relax();
-   }
-
-   rmb();  /* Read the frame number /after/ reading completion status. */
-   frame = gnttab_shared.v1[ref].frame;
-   BUG_ON(frame == 0);
-
-   return frame;
-}
-
-static unsigned long gnttab_end_foreign_transfer_ref_v2(grant_ref_t ref)
-{
-   unsigned long frame;
-   u16   flags;
-   u16  *pflags;
-
-   pflags = &gnttab_shared.v2[ref].hdr.flags;
-
-   /*
-* If a transfer is not even yet started, try to reclaim the grant
-* reference and return failure (== 0).
-*/
-   while (!((flags = *pflags) & GTF_transfer_committed)) {
-   if (sync_cmpxchg(pflags, flags, 0) == flags)
-   return 0;
-   cpu_relax();
-   }
-
-   /* If a transfer is in progress then wait until it is completed. */
-   while (!(flags & GTF_transfer_completed)) {
-   flags = *pflags;
-   cpu_relax();
-   }
-
-   rmb();  /* Read the frame number /after/ reading completion status. */
-   frame = gnttab_shared.v2[ref].full_page.frame;
-   BUG_O