Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'char-misc-3.16-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc

Pull char/misc driver fixes from Greg KH:
"Here are two hyperv driver fixes, and one i8k driver fix for 3.16"

* tag 'char-misc-3.16-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc:
i8k: Fix non-SMP operation
Drivers: hv: util: Fix a bug in the KVP code
Drivers: hv: vmbus: Fix a bug in the channel callback dispatch code

+24 -7
+3 -1
drivers/char/i8k.c
··· 138 138 if (!alloc_cpumask_var(&old_mask, GFP_KERNEL)) 139 139 return -ENOMEM; 140 140 cpumask_copy(old_mask, &current->cpus_allowed); 141 - set_cpus_allowed_ptr(current, cpumask_of(0)); 141 + rc = set_cpus_allowed_ptr(current, cpumask_of(0)); 142 + if (rc) 143 + goto out; 142 144 if (smp_processor_id() != 0) { 143 145 rc = -EBUSY; 144 146 goto out;
+6 -2
drivers/hv/connection.c
··· 339 339 */ 340 340 341 341 do { 342 - hv_begin_read(&channel->inbound); 342 + if (read_state) 343 + hv_begin_read(&channel->inbound); 343 344 channel->onchannel_callback(arg); 344 - bytes_to_read = hv_end_read(&channel->inbound); 345 + if (read_state) 346 + bytes_to_read = hv_end_read(&channel->inbound); 347 + else 348 + bytes_to_read = 0; 345 349 } while (read_state && (bytes_to_read != 0)); 346 350 } else { 347 351 pr_err("no channel callback for relid - %u\n", relid);
+14 -3
drivers/hv/hv_kvp.c
··· 127 127 kvp_respond_to_host(NULL, HV_E_FAIL); 128 128 } 129 129 130 + static void poll_channel(struct vmbus_channel *channel) 131 + { 132 + if (channel->target_cpu != smp_processor_id()) 133 + smp_call_function_single(channel->target_cpu, 134 + hv_kvp_onchannelcallback, 135 + channel, true); 136 + else 137 + hv_kvp_onchannelcallback(channel); 138 + } 139 + 140 + 130 141 static int kvp_handle_handshake(struct hv_kvp_msg *msg) 131 142 { 132 143 int ret = 1; ··· 166 155 kvp_register(dm_reg_value); 167 156 kvp_transaction.active = false; 168 157 if (kvp_transaction.kvp_context) 169 - hv_kvp_onchannelcallback(kvp_transaction.kvp_context); 158 + poll_channel(kvp_transaction.kvp_context); 170 159 } 171 160 return ret; 172 161 } ··· 579 568 580 569 vmbus_sendpacket(channel, recv_buffer, buf_len, req_id, 581 570 VM_PKT_DATA_INBAND, 0); 582 - 571 + poll_channel(channel); 583 572 } 584 573 585 574 /* ··· 614 603 return; 615 604 } 616 605 617 - vmbus_recvpacket(channel, recv_buffer, PAGE_SIZE * 2, &recvlen, 606 + vmbus_recvpacket(channel, recv_buffer, PAGE_SIZE * 4, &recvlen, 618 607 &requestid); 619 608 620 609 if (recvlen > 0) {
+1 -1
drivers/hv/hv_util.c
··· 319 319 (struct hv_util_service *)dev_id->driver_data; 320 320 int ret; 321 321 322 - srv->recv_buffer = kmalloc(PAGE_SIZE * 2, GFP_KERNEL); 322 + srv->recv_buffer = kmalloc(PAGE_SIZE * 4, GFP_KERNEL); 323 323 if (!srv->recv_buffer) 324 324 return -ENOMEM; 325 325 if (srv->util_init) {