Deleted Added
full compact
1/*-
2 * Copyright (c) 2009-2012 Microsoft Corp.
3 * Copyright (c) 2012 NetApp Inc.
4 * Copyright (c) 2012 Citrix Inc.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 291 unchanged lines hidden (view full) ---

300 int rel_id;
301 int maxdword;
302 hv_vmbus_synic_event_flags *event;
303 /* int maxdword = PAGE_SIZE >> 3; */
304
305 KASSERT(cpu <= mp_maxid, ("VMBUS: hv_vmbus_on_events: "
306 "cpu out of range!"));
307
308 page_addr = hv_vmbus_g_context.syn_ic_event_page[cpu];
309 event = (hv_vmbus_synic_event_flags *)
310 page_addr + HV_VMBUS_MESSAGE_SINT;
311 if ((hv_vmbus_protocal_version == HV_VMBUS_VERSION_WS2008) ||
312 (hv_vmbus_protocal_version == HV_VMBUS_VERSION_WIN7)) {
313 maxdword = HV_MAX_NUM_CHANNELS_SUPPORTED >> 5;
314 /*
315 * receive size is 1/2 page and divide that by 4 bytes
316 */
314 recv_interrupt_page =
315 hv_vmbus_g_connection.recv_interrupt_page;
317 if (synch_test_and_clear_bit(0, &event->flags32[0]))
318 recv_interrupt_page =
319 hv_vmbus_g_connection.recv_interrupt_page;
320 } else {
321 /*
322 * On Host with Win8 or above, the event page can be
323 * checked directly to get the id of the channel
324 * that has the pending interrupt.
325 */
326 maxdword = HV_EVENT_FLAGS_DWORD_COUNT;
323 page_addr = hv_vmbus_g_context.syn_ic_event_page[cpu];
324 event = (hv_vmbus_synic_event_flags *)
325 page_addr + HV_VMBUS_MESSAGE_SINT;
327 recv_interrupt_page = event->flags32;
328 }
329
330 /*
331 * Check events
332 */
333 if (recv_interrupt_page != NULL) {
334 for (dword = 0; dword < maxdword; dword++) {

--- 81 unchanged lines hidden ---