WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [linux-2.6.18-xen] Clean up gnttab interface and allow t

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [linux-2.6.18-xen] Clean up gnttab interface and allow to grant iomem page access with
From: "Xen patchbot-linux-2.6.18-xen" <patchbot-linux-2.6.18-xen@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 22 Nov 2007 12:01:03 -0800
Delivery-date: Thu, 22 Nov 2007 12:17:15 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1195579831 0
# Node ID 037c44559e55120f9bb746383023670ae1582380
# Parent  ca05cf1a9bdc2c7604b95fd085fa5abe067c969a
Clean up gnttab interface and allow to grant iomem page access with
arbitrary cache attributes (x86 only).
Signed-off-by: Kieran Mansley <kmansley@xxxxxxxxxxxxxx>
---
 drivers/char/tpm/tpm_xen.c          |    3 +--
 drivers/xen/blkfront/blkfront.c     |   12 ++++++------
 drivers/xen/core/gnttab.c           |   19 ++++++++++---------
 drivers/xen/netfront/netfront.c     |   18 ++++++++----------
 drivers/xen/pcifront/xenbus.c       |    2 +-
 include/xen/gnttab.h                |    9 ++++-----
 include/xen/interface/grant_table.h |    7 +++++++
 7 files changed, 37 insertions(+), 33 deletions(-)

diff -r ca05cf1a9bdc -r 037c44559e55 drivers/char/tpm/tpm_xen.c
--- a/drivers/char/tpm/tpm_xen.c        Fri Nov 16 16:55:46 2007 +0000
+++ b/drivers/char/tpm/tpm_xen.c        Tue Nov 20 17:30:31 2007 +0000
@@ -266,8 +266,7 @@ static void destroy_tpmring(struct tpm_p
        tpmif_set_connected_state(tp, 0);
 
        if (tp->ring_ref != GRANT_INVALID_REF) {
-               gnttab_end_foreign_access(tp->ring_ref, 0,
-                                         (unsigned long)tp->tx);
+               gnttab_end_foreign_access(tp->ring_ref, (unsigned long)tp->tx);
                tp->ring_ref = GRANT_INVALID_REF;
                tp->tx = NULL;
        }
diff -r ca05cf1a9bdc -r 037c44559e55 drivers/xen/blkfront/blkfront.c
--- a/drivers/xen/blkfront/blkfront.c   Fri Nov 16 16:55:46 2007 +0000
+++ b/drivers/xen/blkfront/blkfront.c   Tue Nov 20 17:30:31 2007 +0000
@@ -622,7 +622,7 @@ static int blkif_queue_request(struct re
                                ref,
                                info->xbdev->otherend_id,
                                buffer_mfn,
-                               rq_data_dir(req) );
+                               rq_data_dir(req) ? GTF_readonly : 0 );
 
                        info->shadow[id].frame[ring_req->nr_segments] =
                                mfn_to_pfn(buffer_mfn);
@@ -790,7 +790,7 @@ static void blkif_free(struct blkfront_i
 
        /* Free resources associated with old device channel. */
        if (info->ring_ref != GRANT_INVALID_REF) {
-               gnttab_end_foreign_access(info->ring_ref, 0,
+               gnttab_end_foreign_access(info->ring_ref, 
                                          (unsigned long)info->ring.sring);
                info->ring_ref = GRANT_INVALID_REF;
                info->ring.sring = NULL;
@@ -804,7 +804,7 @@ static void blkif_completion(struct blk_
 {
        int i;
        for (i = 0; i < s->req.nr_segments; i++)
-               gnttab_end_foreign_access(s->req.seg[i].gref, 0, 0UL);
+               gnttab_end_foreign_access(s->req.seg[i].gref, 0UL);
 }
 
 static void blkif_recover(struct blkfront_info *info)
@@ -846,9 +846,9 @@ static void blkif_recover(struct blkfron
                                req->seg[j].gref,
                                info->xbdev->otherend_id,
                                pfn_to_mfn(info->shadow[req->id].frame[j]),
-                               rq_data_dir(
-                                       (struct request *)
-                                       info->shadow[req->id].request));
+                               rq_data_dir((struct request *)
+                                           info->shadow[req->id].request) ?
+                               GTF_readonly : 0);
                info->shadow[req->id].req = *req;
 
                info->ring.req_prod_pvt++;
diff -r ca05cf1a9bdc -r 037c44559e55 drivers/xen/core/gnttab.c
--- a/drivers/xen/core/gnttab.c Fri Nov 16 16:55:46 2007 +0000
+++ b/drivers/xen/core/gnttab.c Tue Nov 20 17:30:31 2007 +0000
@@ -140,7 +140,7 @@ static void put_free_entry(grant_ref_t r
  */
 
 int gnttab_grant_foreign_access(domid_t domid, unsigned long frame,
-                               int readonly)
+                               int flags)
 {
        int ref;
 
@@ -150,19 +150,21 @@ int gnttab_grant_foreign_access(domid_t 
        shared[ref].frame = frame;
        shared[ref].domid = domid;
        wmb();
-       shared[ref].flags = GTF_permit_access | (readonly ? GTF_readonly : 0);
+       BUG_ON(flags & (GTF_accept_transfer | GTF_reading | GTF_writing));
+       shared[ref].flags = GTF_permit_access | flags;
 
        return ref;
 }
 EXPORT_SYMBOL_GPL(gnttab_grant_foreign_access);
 
 void gnttab_grant_foreign_access_ref(grant_ref_t ref, domid_t domid,
-                                    unsigned long frame, int readonly)
+                                    unsigned long frame, int flags)
 {
        shared[ref].frame = frame;
        shared[ref].domid = domid;
        wmb();
-       shared[ref].flags = GTF_permit_access | (readonly ? GTF_readonly : 0);
+       BUG_ON(flags & (GTF_accept_transfer | GTF_reading | GTF_writing));
+       shared[ref].flags = GTF_permit_access | flags;
 }
 EXPORT_SYMBOL_GPL(gnttab_grant_foreign_access_ref);
 
@@ -177,7 +179,7 @@ int gnttab_query_foreign_access(grant_re
 }
 EXPORT_SYMBOL_GPL(gnttab_query_foreign_access);
 
-int gnttab_end_foreign_access_ref(grant_ref_t ref, int readonly)
+int gnttab_end_foreign_access_ref(grant_ref_t ref)
 {
        u16 flags, nflags;
 
@@ -194,10 +196,9 @@ int gnttab_end_foreign_access_ref(grant_
 }
 EXPORT_SYMBOL_GPL(gnttab_end_foreign_access_ref);
 
-void gnttab_end_foreign_access(grant_ref_t ref, int readonly,
-                              unsigned long page)
-{
-       if (gnttab_end_foreign_access_ref(ref, readonly)) {
+void gnttab_end_foreign_access(grant_ref_t ref, unsigned long page)
+{
+       if (gnttab_end_foreign_access_ref(ref)) {
                put_free_entry(ref);
                if (page != 0)
                        free_page(page);
diff -r ca05cf1a9bdc -r 037c44559e55 drivers/xen/netfront/netfront.c
--- a/drivers/xen/netfront/netfront.c   Fri Nov 16 16:55:46 2007 +0000
+++ b/drivers/xen/netfront/netfront.c   Tue Nov 20 17:30:31 2007 +0000
@@ -663,8 +663,7 @@ static void network_tx_buf_gc(struct net
                                       "domain.\n");
                                BUG();
                        }
-                       gnttab_end_foreign_access_ref(
-                               np->grant_tx_ref[id], GNTMAP_readonly);
+                       gnttab_end_foreign_access_ref(np->grant_tx_ref[id]);
                        gnttab_release_grant_reference(
                                &np->gref_tx_head, np->grant_tx_ref[id]);
                        np->grant_tx_ref[id] = GRANT_INVALID_REF;
@@ -888,7 +887,7 @@ static void xennet_make_frags(struct sk_
 
                mfn = virt_to_mfn(data);
                gnttab_grant_foreign_access_ref(ref, np->xbdev->otherend_id,
-                                               mfn, GNTMAP_readonly);
+                                               mfn, GTF_readonly);
 
                tx->gref = np->grant_tx_ref[id] = ref;
                tx->offset = offset;
@@ -910,7 +909,7 @@ static void xennet_make_frags(struct sk_
 
                mfn = pfn_to_mfn(page_to_pfn(frag->page));
                gnttab_grant_foreign_access_ref(ref, np->xbdev->otherend_id,
-                                               mfn, GNTMAP_readonly);
+                                               mfn, GTF_readonly);
 
                tx->gref = np->grant_tx_ref[id] = ref;
                tx->offset = frag->page_offset;
@@ -972,7 +971,7 @@ static int network_start_xmit(struct sk_
        BUG_ON((signed short)ref < 0);
        mfn = virt_to_mfn(data);
        gnttab_grant_foreign_access_ref(
-               ref, np->xbdev->otherend_id, mfn, GNTMAP_readonly);
+               ref, np->xbdev->otherend_id, mfn, GTF_readonly);
        tx->gref = np->grant_tx_ref[id] = ref;
        tx->offset = offset;
        tx->size = len;
@@ -1198,7 +1197,7 @@ static int xennet_get_responses(struct n
                        }
                        pages_flipped++;
                } else {
-                       ret = gnttab_end_foreign_access_ref(ref, 0);
+                       ret = gnttab_end_foreign_access_ref(ref);
                        BUG_ON(!ret);
                }
 
@@ -1531,8 +1530,7 @@ static void netif_release_tx_bufs(struct
                        continue;
 
                skb = np->tx_skbs[i];
-               gnttab_end_foreign_access_ref(
-                       np->grant_tx_ref[i], GNTMAP_readonly);
+               gnttab_end_foreign_access_ref(np->grant_tx_ref[i]);
                gnttab_release_grant_reference(
                        &np->gref_tx_head, np->grant_tx_ref[i]);
                np->grant_tx_ref[i] = GRANT_INVALID_REF;
@@ -1642,7 +1640,7 @@ static void netif_release_rx_bufs_copy(s
 
                skb = np->rx_skbs[i];
 
-               if (!gnttab_end_foreign_access_ref(ref, 0))
+               if (!gnttab_end_foreign_access_ref(ref))
                {
                        busy++;
                        continue;
@@ -2151,7 +2149,7 @@ static void end_access(int ref, void *pa
 static void end_access(int ref, void *page)
 {
        if (ref != GRANT_INVALID_REF)
-               gnttab_end_foreign_access(ref, 0, (unsigned long)page);
+               gnttab_end_foreign_access(ref, (unsigned long)page);
 }
 
 
diff -r ca05cf1a9bdc -r 037c44559e55 drivers/xen/pcifront/xenbus.c
--- a/drivers/xen/pcifront/xenbus.c     Fri Nov 16 16:55:46 2007 +0000
+++ b/drivers/xen/pcifront/xenbus.c     Tue Nov 20 17:30:31 2007 +0000
@@ -57,7 +57,7 @@ static void free_pdev(struct pcifront_de
                xenbus_free_evtchn(pdev->xdev, pdev->evtchn);
 
        if (pdev->gnt_ref != INVALID_GRANT_REF)
-               gnttab_end_foreign_access(pdev->gnt_ref, 0,
+               gnttab_end_foreign_access(pdev->gnt_ref,
                                          (unsigned long)pdev->sh_info);
 
        pdev->xdev->dev.driver_data = NULL;
diff -r ca05cf1a9bdc -r 037c44559e55 include/xen/gnttab.h
--- a/include/xen/gnttab.h      Fri Nov 16 16:55:46 2007 +0000
+++ b/include/xen/gnttab.h      Tue Nov 20 17:30:31 2007 +0000
@@ -51,14 +51,14 @@ struct gnttab_free_callback {
 };
 
 int gnttab_grant_foreign_access(domid_t domid, unsigned long frame,
-                               int readonly);
+                               int flags);
 
 /*
  * End access through the given grant reference, iff the grant entry is no
  * longer in use.  Return 1 if the grant entry was freed, 0 if it is still in
  * use.
  */
-int gnttab_end_foreign_access_ref(grant_ref_t ref, int readonly);
+int gnttab_end_foreign_access_ref(grant_ref_t ref);
 
 /*
  * Eventually end access through the given grant reference, and once that
@@ -66,8 +66,7 @@ int gnttab_end_foreign_access_ref(grant_
  * immediately iff the grant entry is not in use, otherwise it will happen
  * some time later.  page may be 0, in which case no freeing will occur.
  */
-void gnttab_end_foreign_access(grant_ref_t ref, int readonly,
-                              unsigned long page);
+void gnttab_end_foreign_access(grant_ref_t ref, unsigned long page);
 
 int gnttab_grant_foreign_transfer(domid_t domid, unsigned long pfn);
 
@@ -97,7 +96,7 @@ void gnttab_cancel_free_callback(struct 
 void gnttab_cancel_free_callback(struct gnttab_free_callback *callback);
 
 void gnttab_grant_foreign_access_ref(grant_ref_t ref, domid_t domid,
-                                    unsigned long frame, int readonly);
+                                    unsigned long frame, int flags);
 
 void gnttab_grant_foreign_transfer_ref(grant_ref_t, domid_t domid,
                                       unsigned long pfn);
diff -r ca05cf1a9bdc -r 037c44559e55 include/xen/interface/grant_table.h
--- a/include/xen/interface/grant_table.h       Fri Nov 16 16:55:46 2007 +0000
+++ b/include/xen/interface/grant_table.h       Tue Nov 20 17:30:31 2007 +0000
@@ -119,6 +119,7 @@ typedef struct grant_entry grant_entry_t
  *  GTF_readonly: Restrict @domid to read-only mappings and accesses. [GST]
  *  GTF_reading: Grant entry is currently mapped for reading by @domid. [XEN]
  *  GTF_writing: Grant entry is currently mapped for writing by @domid. [XEN]
+ *  GTF_PAT, GTF_PWT, GTF_PCD: (x86) cache attribute flags for the grant [GST]
  */
 #define _GTF_readonly       (2)
 #define GTF_readonly        (1U<<_GTF_readonly)
@@ -126,6 +127,12 @@ typedef struct grant_entry grant_entry_t
 #define GTF_reading         (1U<<_GTF_reading)
 #define _GTF_writing        (4)
 #define GTF_writing         (1U<<_GTF_writing)
+#define _GTF_PWT            (5)
+#define GTF_PWT             (1U<<_GTF_PWT)
+#define _GTF_PCD            (6)
+#define GTF_PCD             (1U<<_GTF_PCD)
+#define _GTF_PAT            (7)
+#define GTF_PAT             (1U<<_GTF_PAT)
 
 /*
  * Subflags for GTF_accept_transfer:

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [linux-2.6.18-xen] Clean up gnttab interface and allow to grant iomem page access with, Xen patchbot-linux-2.6.18-xen <=