From owner-svn-src-all@freebsd.org Mon May 16 03:56:26 2016 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 66E11B3C3D8; Mon, 16 May 2016 03:56:26 +0000 (UTC) (envelope-from sephe@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0DC7918BB; Mon, 16 May 2016 03:56:25 +0000 (UTC) (envelope-from sephe@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u4G3uPo5013928; Mon, 16 May 2016 03:56:25 GMT (envelope-from sephe@FreeBSD.org) Received: (from sephe@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u4G3uPIJ013926; Mon, 16 May 2016 03:56:25 GMT (envelope-from sephe@FreeBSD.org) Message-Id: <201605160356.u4G3uPIJ013926@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sephe set sender to sephe@FreeBSD.org using -f From: Sepherosa Ziehau Date: Mon, 16 May 2016 03:56:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r299890 - head/sys/dev/hyperv/vmbus X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 16 May 2016 03:56:26 -0000 Author: sephe Date: Mon May 16 03:56:24 2016 New Revision: 299890 URL: https://svnweb.freebsd.org/changeset/base/299890 Log: hyperv/vmbus: Simplify event processing For channel0, it will never be processed on event handling path, so there is no need to install it. After skipping in the channel0 installation, we could discard the channel0 check on event handling hot code path. MFC after: 1 week Sponsored by: Microsoft OSTC Differential Revision: https://reviews.freebsd.org/D6333 Modified: head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c head/sys/dev/hyperv/vmbus/hv_connection.c Modified: head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c ============================================================================== --- head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c Mon May 16 03:48:00 2016 (r299889) +++ head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c Mon May 16 03:56:24 2016 (r299890) @@ -183,7 +183,14 @@ vmbus_channel_process_offer(hv_vmbus_cha * Make sure this is a new offer */ mtx_lock(&hv_vmbus_g_connection.channel_lock); - hv_vmbus_g_connection.channels[relid] = new_channel; + if (relid == 0) { + /* + * XXX channel0 will not be processed; skip it. + */ + printf("VMBUS: got channel0 offer\n"); + } else { + hv_vmbus_g_connection.channels[relid] = new_channel; + } TAILQ_FOREACH(channel, &hv_vmbus_g_connection.channel_anchor, list_entry) { Modified: head/sys/dev/hyperv/vmbus/hv_connection.c ============================================================================== --- head/sys/dev/hyperv/vmbus/hv_connection.c Mon May 16 03:48:00 2016 (r299889) +++ head/sys/dev/hyperv/vmbus/hv_connection.c Mon May 16 03:56:24 2016 (r299890) @@ -337,15 +337,11 @@ hv_vmbus_on_events(int cpu) for (bit = 0; bit < HV_CHANNEL_DWORD_LEN; bit++) { if (synch_test_and_clear_bit(bit, (uint32_t *) &recv_interrupt_page[dword])) { - rel_id = (dword << 5) + bit; - if (rel_id == 0) { - /* - * Special case - - * vmbus channel protocol msg. - */ - continue; - } else { - hv_vmbus_channel * channel = hv_vmbus_g_connection.channels[rel_id]; + struct hv_vmbus_channel *channel; + + rel_id = (dword << 5) + bit; + channel = hv_vmbus_g_connection.channels[rel_id]; + /* if channel is closed or closing */ if (channel == NULL || channel->rxq == NULL) continue; @@ -353,7 +349,6 @@ hv_vmbus_on_events(int cpu) if (channel->batched_reading) hv_ring_buffer_read_begin(&channel->inbound); taskqueue_enqueue(channel->rxq, &channel->channel_task); - } } } }