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 'hyperv-fixes-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux

Pull Hyper-V fixes from Sasha Levin:

- Fix for panics and network failures on PAE guests by Dexuan Cui.

- Fix of a memory leak (and related cleanups) in the hyper-v keyboard
driver by Dexuan Cui.

- Code cleanups for hyper-v clocksource driver during the merge window
by Dexuan Cui.

- Fix for a false positive warning in the userspace hyper-v KVP store
by Vitaly Kuznetsov.

* tag 'hyperv-fixes-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux:
Drivers: hv: vmbus: Fix virt_to_hvpfn() for X86_PAE
Tools: hv: kvp: eliminate 'may be used uninitialized' warning
Input: hyperv-keyboard: Use in-place iterator API in the channel callback
Drivers: hv: vmbus: Remove the unused "tsc_page" from struct hv_context

+8 -33
+1 -1
drivers/hv/channel.c
··· 26 26 27 27 static unsigned long virt_to_hvpfn(void *addr) 28 28 { 29 - unsigned long paddr; 29 + phys_addr_t paddr; 30 30 31 31 if (is_vmalloc_addr(addr)) 32 32 paddr = page_to_phys(vmalloc_to_page(addr)) +
-2
drivers/hv/hyperv_vmbus.h
··· 146 146 */ 147 147 u64 guestid; 148 148 149 - void *tsc_page; 150 - 151 149 struct hv_per_cpu_context __percpu *cpu_context; 152 150 153 151 /*
+6 -29
drivers/input/serio/hyperv-keyboard.c
··· 237 237 238 238 static void hv_kbd_on_channel_callback(void *context) 239 239 { 240 + struct vmpacket_descriptor *desc; 240 241 struct hv_device *hv_dev = context; 241 - void *buffer; 242 - int bufferlen = 0x100; /* Start with sensible size */ 243 242 u32 bytes_recvd; 244 243 u64 req_id; 245 - int error; 246 244 247 - buffer = kmalloc(bufferlen, GFP_ATOMIC); 248 - if (!buffer) 249 - return; 245 + foreach_vmbus_pkt(desc, hv_dev->channel) { 246 + bytes_recvd = desc->len8 * 8; 247 + req_id = desc->trans_id; 250 248 251 - while (1) { 252 - error = vmbus_recvpacket_raw(hv_dev->channel, buffer, bufferlen, 253 - &bytes_recvd, &req_id); 254 - switch (error) { 255 - case 0: 256 - if (bytes_recvd == 0) { 257 - kfree(buffer); 258 - return; 259 - } 260 - 261 - hv_kbd_handle_received_packet(hv_dev, buffer, 262 - bytes_recvd, req_id); 263 - break; 264 - 265 - case -ENOBUFS: 266 - kfree(buffer); 267 - /* Handle large packet */ 268 - bufferlen = bytes_recvd; 269 - buffer = kmalloc(bytes_recvd, GFP_ATOMIC); 270 - if (!buffer) 271 - return; 272 - break; 273 - } 249 + hv_kbd_handle_received_packet(hv_dev, desc, bytes_recvd, 250 + req_id); 274 251 } 275 252 } 276 253
+1 -1
tools/hv/hv_kvp_daemon.c
··· 809 809 int sn_offset = 0; 810 810 int error = 0; 811 811 char *buffer; 812 - struct hv_kvp_ipaddr_value *ip_buffer; 812 + struct hv_kvp_ipaddr_value *ip_buffer = NULL; 813 813 char cidr_mask[5]; /* /xyz */ 814 814 int weight; 815 815 int i;