Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F166988961
D21341.id61055.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D21341.id61055.diff
View Options
Index: sys/vm/vm_page.h
===================================================================
--- sys/vm/vm_page.h
+++ sys/vm/vm_page.h
@@ -552,7 +552,6 @@
vm_page_t vm_page_lookup (vm_object_t, vm_pindex_t);
vm_page_t vm_page_next(vm_page_t m);
int vm_page_pa_tryrelock(pmap_t, vm_paddr_t, vm_paddr_t *);
-struct vm_pagequeue *vm_page_pagequeue(vm_page_t m);
vm_page_t vm_page_prev(vm_page_t m);
bool vm_page_ps_test(vm_page_t m, int flags, vm_page_t skip_m);
void vm_page_putfake(vm_page_t m);
Index: sys/vm/vm_page.c
===================================================================
--- sys/vm/vm_page.c
+++ sys/vm/vm_page.c
@@ -3056,21 +3056,15 @@
mtx_unlock(&vm_domainset_lock);
}
-struct vm_pagequeue *
+static struct vm_pagequeue *
vm_page_pagequeue(vm_page_t m)
{
- return (&vm_pagequeue_domain(m)->vmd_pagequeues[m->queue]);
-}
-
-static struct mtx *
-vm_page_pagequeue_lockptr(vm_page_t m)
-{
uint8_t queue;
if ((queue = atomic_load_8(&m->queue)) == PQ_NONE)
return (NULL);
- return (&vm_pagequeue_domain(m)->vmd_pagequeues[queue].pq_mutex);
+ return (&vm_pagequeue_domain(m)->vmd_pagequeues[queue]);
}
static inline void
@@ -3093,10 +3087,8 @@
m, pq, qflags));
if ((qflags & PGA_DEQUEUE) != 0) {
- if (__predict_true((qflags & PGA_ENQUEUED) != 0)) {
- TAILQ_REMOVE(&pq->pq_pl, m, plinks.q);
- vm_pagequeue_cnt_dec(pq);
- }
+ if (__predict_true((qflags & PGA_ENQUEUED) != 0))
+ vm_pagequeue_remove(pq, m);
vm_page_dequeue_complete(m);
} else if ((qflags & (PGA_REQUEUE | PGA_REQUEUE_HEAD)) != 0) {
if ((qflags & PGA_ENQUEUED) != 0)
@@ -3299,16 +3291,14 @@
void
vm_page_dequeue(vm_page_t m)
{
- struct mtx *lock, *lock1;
- struct vm_pagequeue *pq;
+ struct vm_pagequeue *pq, *pq1;
uint8_t aflags;
- KASSERT(mtx_owned(vm_page_lockptr(m)) || m->order == VM_NFREEORDER,
+ KASSERT(mtx_owned(vm_page_lockptr(m)) || m->object == NULL,
("page %p is allocated and unlocked", m));
- for (;;) {
- lock = vm_page_pagequeue_lockptr(m);
- if (lock == NULL) {
+ for (pq = vm_page_pagequeue(m);; pq = pq1) {
+ if (pq == NULL) {
/*
* A thread may be concurrently executing
* vm_page_dequeue_complete(). Ensure that all queue
@@ -3327,27 +3317,24 @@
* critical section.
*/
cpu_spinwait();
+ pq1 = vm_page_pagequeue(m);
continue;
}
- mtx_lock(lock);
- if ((lock1 = vm_page_pagequeue_lockptr(m)) == lock)
+ vm_pagequeue_lock(pq);
+ if ((pq1 = vm_page_pagequeue(m)) == pq)
break;
- mtx_unlock(lock);
- lock = lock1;
+ vm_pagequeue_unlock(pq);
}
- KASSERT(lock == vm_page_pagequeue_lockptr(m),
+ KASSERT(pq == vm_page_pagequeue(m),
("%s: page %p migrated directly between queues", __func__, m));
KASSERT((m->aflags & PGA_DEQUEUE) != 0 ||
mtx_owned(vm_page_lockptr(m)),
("%s: queued unlocked page %p", __func__, m));
- if ((m->aflags & PGA_ENQUEUED) != 0) {
- pq = vm_page_pagequeue(m);
- TAILQ_REMOVE(&pq->pq_pl, m, plinks.q);
- vm_pagequeue_cnt_dec(pq);
- }
+ if ((m->aflags & PGA_ENQUEUED) != 0)
+ vm_pagequeue_remove(pq, m);
vm_page_dequeue_complete(m);
- mtx_unlock(lock);
+ vm_pagequeue_unlock(pq);
}
/*
Index: sys/vm/vm_pagequeue.h
===================================================================
--- sys/vm/vm_pagequeue.h
+++ sys/vm/vm_pagequeue.h
@@ -198,6 +198,14 @@
#define vm_pagequeue_cnt_inc(pq) vm_pagequeue_cnt_add((pq), 1)
#define vm_pagequeue_cnt_dec(pq) vm_pagequeue_cnt_add((pq), -1)
+static inline void
+vm_pagequeue_remove(struct vm_pagequeue *pq, vm_page_t m)
+{
+
+ TAILQ_REMOVE(&pq->pq_pl, m, plinks.q);
+ vm_pagequeue_cnt_dec(pq);
+}
+
static inline void
vm_batchqueue_init(struct vm_batchqueue *bq)
{
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Aug 19, 10:20 AM (44 m, 44 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
36928080
Default Alt Text
D21341.id61055.diff (3 KB)
Attached To
Mode
D21341: Slightly simplify page queue code.
Attached
Detach File
Event Timeline
Log In to Comment