diff --git a/sys/dev/xen/netfront/netfront.c b/sys/dev/xen/netfront/netfront.c index 12dbf04..313153d 100644 --- a/sys/dev/xen/netfront/netfront.c +++ b/sys/dev/xen/netfront/netfront.c @@ -230,7 +230,7 @@ struct netfront_info { struct mtx tx_lock; struct mtx rx_lock; - struct sx sc_lock; + struct mtx sc_lock; u_int handle; u_int irq; @@ -274,7 +274,7 @@ struct netfront_info { #define XN_LOCK_INIT(_sc, _name) \ mtx_init(&(_sc)->tx_lock, #_name"_tx", "network transmit lock", MTX_DEF); \ mtx_init(&(_sc)->rx_lock, #_name"_rx", "network receive lock", MTX_DEF); \ - sx_init(&(_sc)->sc_lock, #_name"_rx") + mtx_init(&(_sc)->sc_lock, #_name"_sc", "netfront softc lock", MTX_DEF) #define XN_RX_LOCK(_sc) mtx_lock(&(_sc)->rx_lock) #define XN_RX_UNLOCK(_sc) mtx_unlock(&(_sc)->rx_lock) @@ -282,15 +282,15 @@ struct netfront_info { #define XN_TX_LOCK(_sc) mtx_lock(&(_sc)->tx_lock) #define XN_TX_UNLOCK(_sc) mtx_unlock(&(_sc)->tx_lock) -#define XN_LOCK(_sc) sx_xlock(&(_sc)->sc_lock); -#define XN_UNLOCK(_sc) sx_xunlock(&(_sc)->sc_lock); +#define XN_LOCK(_sc) mtx_lock(&(_sc)->sc_lock); +#define XN_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_lock); -#define XN_LOCK_ASSERT(_sc) sx_assert(&(_sc)->sc_lock, SX_LOCKED); +#define XN_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_lock, MA_OWNED); #define XN_RX_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->rx_lock, MA_OWNED); #define XN_TX_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->tx_lock, MA_OWNED); #define XN_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->rx_lock); \ mtx_destroy(&(_sc)->tx_lock); \ - sx_destroy(&(_sc)->sc_lock); + mtx_destroy(&(_sc)->sc_lock); struct netfront_rx_info { struct netif_rx_response rx; @@ -1814,7 +1814,6 @@ network_connect(struct netfront_info *np) np->copying_receiver = ((MODPARM_rx_copy && feature_rx_copy) || (MODPARM_rx_flip && !feature_rx_flip)); - XN_LOCK(np); /* Recovery procedure: */ error = talk_to_backend(np->xbdev, np); if (error) @@ -1864,7 +1863,6 @@ network_connect(struct netfront_info *np) xn_txeof(np); XN_TX_UNLOCK(np); network_alloc_rx_buffers(np); - XN_UNLOCK(np); return (0); } diff --git a/sys/i386/xen/clock.c b/sys/i386/xen/clock.c index 085b2a5..dd1b813 100644 --- a/sys/i386/xen/clock.c +++ b/sys/i386/xen/clock.c @@ -350,7 +350,8 @@ clkintr(void *arg) */ if (shadow_tv_version != HYPERVISOR_shared_info->wc_version) { - printf("[XEN] hypervisor wallclock nudged; nudging TOD.\n"); + if (bootverbose) + printf("[XEN] hypervisor wallclock nudged; nudging TOD.\n"); update_wallclock(); add_uptime_to_wallclock(); tc_setclock(&shadow_tv); diff --git a/sys/i386/xen/pmap.c b/sys/i386/xen/pmap.c index e3b1c08..dab0534 100644 --- a/sys/i386/xen/pmap.c +++ b/sys/i386/xen/pmap.c @@ -1216,7 +1216,6 @@ pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) oldpte = 0; pte = vtopte(sva); endpte = pte + count; - vm_page_lock_queues(); critical_enter(); while (pte < endpte) { oldpte |= *pte; @@ -1232,7 +1231,6 @@ pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) if ((oldpte & PG_V) != 0) pmap_invalidate_range(kernel_pmap, sva, sva + count * PAGE_SIZE); - vm_page_unlock_queues(); critical_exit(); } diff --git a/sys/kern/subr_witness.c b/sys/kern/subr_witness.c index 9054365..b6f9ddb 100644 --- a/sys/kern/subr_witness.c +++ b/sys/kern/subr_witness.c @@ -412,6 +412,10 @@ static struct witness_order_list_entry order_lists[] = { { "tw_cl_io_lock", &lock_class_mtx_spin }, { "tw_cl_intr_lock", &lock_class_mtx_spin }, { "tw_cl_gen_lock", &lock_class_mtx_spin }, +#ifdef XEN + { "XCONS LOCK", &lock_class_mtx_spin }, + { "xp", &lock_class_mtx_spin }, +#endif { NULL, NULL }, { NULL, NULL } }; diff --git a/sys/xen/evtchn/evtchn_dev.c b/sys/xen/evtchn/evtchn_dev.c index 4253d8a..7e21d7a 100644 --- a/sys/xen/evtchn/evtchn_dev.c +++ b/sys/xen/evtchn/evtchn_dev.c @@ -302,11 +302,11 @@ evtchn_close(struct cdev *dev, int flag, int otyp, struct thread *td __unused) { int i; - mtx_lock_spin(&lock); if (ring != NULL) { free(ring, M_DEVBUF); ring = NULL; } + mtx_lock_spin(&lock); for ( i = 0; i < NR_EVENT_CHANNELS; i++ ) if ( synch_test_and_clear_bit(i, &bound_ports[0]) ) mask_evtchn(i);