- balloon: don't crash in HVM-with-PoD guests.
[opensuse:kernel-source.git] / patches.xen / xen-unpriv-build
1 From: jbeulich@novell.com
2 Subject: no need to build certain bits when building non-privileged kernel
3 Patch-mainline: n/a
4
5 --- 13.1.orig/arch/x86/Kconfig  2013-08-21 09:49:41.000000000 +0200
6 +++ 13.1/arch/x86/Kconfig       2013-08-12 16:13:59.000000000 +0200
7 @@ -767,6 +767,7 @@ config APB_TIMER
8  config DMI
9         default y
10         bool "Enable DMI scanning" if EXPERT
11 +       depends on !XEN_UNPRIVILEGED_GUEST
12         ---help---
13           Enabled scanning of DMI to identify machine quirks. Say Y
14           here unless you have verified that your setup is not
15 @@ -821,6 +822,7 @@ config CALGARY_IOMMU_ENABLED_BY_DEFAULT
16  # need this always selected by IOMMU for the VIA workaround
17  config SWIOTLB
18         def_bool y if X86_64 || XEN
19 +       prompt "Software I/O TLB" if XEN_UNPRIVILEGED_GUEST && !XEN_PCIDEV_FRONTEND
20         ---help---
21           Support for software bounce buffers used on x86-64 systems
22           which don't have a hardware IOMMU. Using this PCI devices
23 @@ -2100,13 +2102,15 @@ config PCI_GOBIOS
24  
25  config PCI_GOMMCONFIG
26         bool "MMConfig"
27 +       depends on !XEN_UNPRIVILEGED_GUEST
28  
29  config PCI_GODIRECT
30         bool "Direct"
31 +       depends on !XEN_UNPRIVILEGED_GUEST
32  
33  config PCI_GOOLPC
34         bool "OLPC XO-1"
35 -       depends on OLPC
36 +       depends on OLPC && !XEN_UNPRIVILEGED_GUEST
37  
38  config PCI_GOXEN_FE
39         bool "Xen PCI Frontend"
40 @@ -2117,6 +2121,7 @@ config PCI_GOXEN_FE
41  
42  config PCI_GOANY
43         bool "Any"
44 +       depends on !XEN_UNPRIVILEGED_GUEST
45  
46  endchoice
47  
48 @@ -2317,7 +2322,7 @@ endif # X86_32
49  
50  config AMD_NB
51         def_bool y
52 -       depends on CPU_SUP_AMD && PCI
53 +       depends on CPU_SUP_AMD && PCI && !XEN_UNPRIVILEGED_GUEST
54  
55  source "drivers/pcmcia/Kconfig"
56  
57 --- 13.1.orig/arch/x86/Kconfig.debug    2014-02-11 08:38:46.000000000 +0100
58 +++ 13.1/arch/x86/Kconfig.debug 2011-07-21 12:33:36.000000000 +0200
59 @@ -33,6 +33,7 @@ config X86_VERBOSE_BOOTUP
60  
61  config EARLY_PRINTK
62         bool "Early printk" if EXPERT
63 +       depends on !XEN_UNPRIVILEGED_GUEST
64         default y
65         ---help---
66           Write kernel log output directly into the VGA buffer or to a serial
67 --- 13.1.orig/arch/x86/include/mach-xen/asm/swiotlb.h   2014-02-11 08:38:46.000000000 +0100
68 +++ 13.1/arch/x86/include/mach-xen/asm/swiotlb.h        2011-02-02 15:10:34.000000000 +0100
69 @@ -1,4 +1,8 @@
70  #include_next <asm/swiotlb.h>
71  
72 +#ifndef CONFIG_SWIOTLB
73 +#define swiotlb_init(verbose) ((void)(verbose))
74 +#endif
75 +
76  dma_addr_t swiotlb_map_single_phys(struct device *, phys_addr_t, size_t size,
77                                    int dir);
78 --- 13.1.orig/drivers/pci/Kconfig       2014-02-11 08:38:46.000000000 +0100
79 +++ 13.1/drivers/pci/Kconfig    2013-08-12 16:14:07.000000000 +0200
80 @@ -85,7 +85,7 @@ config PARAVIRT_XEN_PCIDEV_FRONTEND
81  
82  config XEN_PCIDEV_FRONTEND
83         def_bool y
84 -       prompt "Xen PCI Frontend" if X86_64
85 +       prompt "Xen PCI Frontend" if X86_64 && !XEN_UNPRIVILEGED_GUEST
86         depends on PCI && XEN && (PCI_GOXEN_FE || PCI_GOANY || X86_64)
87         help
88           The PCI device frontend driver allows the kernel to import arbitrary
89 --- 13.1.orig/drivers/video/Kconfig     2014-02-11 08:38:46.000000000 +0100
90 +++ 13.1/drivers/video/Kconfig  2013-08-12 16:14:13.000000000 +0200
91 @@ -754,7 +754,7 @@ config FB_UVESA
92  
93  config FB_VESA
94         bool "VESA VGA graphics support"
95 -       depends on (FB = y) && X86
96 +       depends on (FB = y) && X86 && !XEN_UNPRIVILEGED_GUEST
97         select FB_CFB_FILLRECT
98         select FB_CFB_COPYAREA
99         select FB_CFB_IMAGEBLIT
100 --- 13.1.orig/drivers/xen/Kconfig       2012-02-17 14:38:14.000000000 +0100
101 +++ 13.1/drivers/xen/Kconfig    2012-02-10 11:56:27.000000000 +0100
102 @@ -18,7 +18,8 @@ config XEN_PRIVILEGED_GUEST
103           Support for privileged operation (domain 0)
104  
105  config XEN_UNPRIVILEGED_GUEST
106 -       def_bool !XEN_PRIVILEGED_GUEST
107 +       def_bool y
108 +       depends on !XEN_PRIVILEGED_GUEST
109         select PM
110         select SUSPEND
111  
112 @@ -209,6 +210,7 @@ config XEN_USB_FRONTEND_HCD_PM
113  
114  config XEN_GRANT_DEV
115         tristate "User-space granted page access driver"
116 +       depends on XEN_BACKEND != n
117         default XEN_PRIVILEGED_GUEST
118         help
119           Device for accessing (in user-space) pages that have been granted
120 --- 13.1.orig/drivers/xen/balloon/balloon.c     2014-02-10 16:16:48.000000000 +0100
121 +++ 13.1/drivers/xen/balloon/balloon.c  2014-02-10 16:25:41.000000000 +0100
122 @@ -41,6 +41,7 @@
123  #include <linux/swap.h>
124  #include <linux/bootmem.h>
125  #include <linux/highmem.h>
126 +#include <linux/kconfig.h>
127  #include <linux/slab.h>
128  #include <linux/mutex.h>
129  #include <linux/seq_file.h>
130 @@ -626,6 +627,9 @@ void balloon_update_driver_allowance(lon
131         bs.driver_pages += delta;
132         balloon_unlock(flags);
133  }
134 +EXPORT_SYMBOL_GPL(balloon_update_driver_allowance);
135 +
136 +#if IS_ENABLED(CONFIG_XEN_BACKEND)
137  
138  #ifdef CONFIG_XEN
139  static int dealloc_pte_fn(
140 @@ -733,6 +737,7 @@ struct page **alloc_empty_pages_and_page
141         pagevec = NULL;
142         goto out;
143  }
144 +EXPORT_SYMBOL_GPL(alloc_empty_pages_and_pagevec);
145  
146  void free_empty_pages_and_pagevec(struct page **pagevec, int nr_pages)
147  {
148 @@ -753,6 +758,9 @@ void free_empty_pages_and_pagevec(struct
149  
150         schedule_work(&balloon_worker);
151  }
152 +EXPORT_SYMBOL_GPL(free_empty_pages_and_pagevec);
153 +
154 +#endif /* CONFIG_XEN_BACKEND */
155  
156  void balloon_release_driver_page(struct page *page)
157  {
158 @@ -766,10 +774,6 @@ void balloon_release_driver_page(struct 
159  
160         schedule_work(&balloon_worker);
161  }
162 -
163 -EXPORT_SYMBOL_GPL(balloon_update_driver_allowance);
164 -EXPORT_SYMBOL_GPL(alloc_empty_pages_and_pagevec);
165 -EXPORT_SYMBOL_GPL(free_empty_pages_and_pagevec);
166  EXPORT_SYMBOL_GPL(balloon_release_driver_page);
167  
168  MODULE_LICENSE("Dual BSD/GPL");
169 --- 13.1.orig/drivers/xen/console/console.c     2014-02-11 08:38:46.000000000 +0100
170 +++ 13.1/drivers/xen/console/console.c  2012-03-22 14:31:13.000000000 +0100
171 @@ -45,7 +45,6 @@
172  #include <linux/init.h>
173  #include <linux/console.h>
174  #include <linux/sysrq.h>
175 -#include <linux/screen_info.h>
176  #include <linux/vt.h>
177  #include <xen/interface/xen.h>
178  #include <xen/interface/event_channel.h>
179 @@ -236,6 +235,7 @@ static int __init xen_console_init(void)
180  }
181  console_initcall(xen_console_init);
182  
183 +#ifdef CONFIG_XEN_PRIVILEGED_GUEST
184  /*** Useful function for console debugging -- goes straight to Xen. ***/
185  int xprintk(const char *fmt, ...)
186  {
187 @@ -253,6 +253,7 @@ int xprintk(const char *fmt, ...)
188  
189         return 0;
190  }
191 +#endif
192  
193  /*** Forcibly flush console data before dying. ***/
194  void xencons_force_flush(void)
195 @@ -277,6 +278,9 @@ void xencons_force_flush(void)
196  }
197  
198  
199 +#ifdef CONFIG_XEN_PRIVILEGED_GUEST
200 +#include <linux/screen_info.h>
201 +
202  void __init dom0_init_screen_info(const struct dom0_vga_console_info *info, size_t size)
203  {
204         /* This is drawn from a dump from vgacon:startup in
205 @@ -332,6 +336,7 @@ void __init dom0_init_screen_info(const 
206                 break;
207         }
208  }
209 +#endif
210  
211  
212  /******************** User-space console driver (/dev/console) ************/
213 --- 13.1.orig/drivers/xen/console/xencons_ring.c        2014-02-11 08:38:46.000000000 +0100
214 +++ 13.1/drivers/xen/console/xencons_ring.c     2012-03-22 14:31:18.000000000 +0100
215 @@ -89,7 +89,11 @@ static irqreturn_t handle_input(int irq,
216         return IRQ_HANDLED;
217  }
218  
219 -int xencons_ring_init(void)
220 +int
221 +#ifndef CONFIG_PM_SLEEP
222 +__init
223 +#endif
224 +xencons_ring_init(void)
225  {
226         int irq;
227  
228 --- 13.1.orig/drivers/xen/core/evtchn.c 2013-08-08 11:52:54.000000000 +0200
229 +++ 13.1/drivers/xen/core/evtchn.c      2013-08-08 11:53:55.000000000 +0200
230 @@ -1862,6 +1862,7 @@ void evtchn_register_pirq(int irq)
231                                       "fasteoi");
232  }
233  
234 +#ifdef CONFIG_PCI_MSI
235  int evtchn_map_pirq(int irq, unsigned int xen_pirq, unsigned int nr)
236  {
237         if (irq < 0) {
238 @@ -1955,6 +1956,7 @@ int evtchn_map_pirq(int irq, unsigned in
239                 }
240         return index_from_irq(irq) ? irq : -EINVAL;
241  }
242 +#endif
243  
244  int evtchn_get_xen_pirq(int irq)
245  {
246 --- 13.1.orig/drivers/xen/core/gnttab.c 2013-08-12 16:04:01.000000000 +0200
247 +++ 13.1/drivers/xen/core/gnttab.c      2012-11-14 13:34:00.000000000 +0100
248 @@ -521,8 +521,6 @@ static inline unsigned int max_nr_grant_
249  
250  #ifdef CONFIG_XEN
251  
252 -static DEFINE_SEQLOCK(gnttab_dma_lock);
253 -
254  #ifdef CONFIG_X86
255  static int map_pte_fn(pte_t *pte, struct page *pmd_page,
256                       unsigned long addr, void *data)
257 @@ -592,6 +590,10 @@ static int gnttab_map(unsigned int start
258         return 0;
259  }
260  
261 +#if IS_ENABLED(CONFIG_XEN_BACKEND)
262 +
263 +static DEFINE_SEQLOCK(gnttab_dma_lock);
264 +
265  static void gnttab_page_free(struct page *page, unsigned int order)
266  {
267         BUG_ON(order);
268 @@ -725,6 +727,8 @@ void __gnttab_dma_map_page(struct page *
269         } while (unlikely(read_seqretry(&gnttab_dma_lock, seq)));
270  }
271  
272 +#endif /* CONFIG_XEN_BACKEND */
273 +
274  #ifdef __HAVE_ARCH_PTE_SPECIAL
275  
276  static unsigned int GNTMAP_pte_special;
277 --- 13.1.orig/drivers/xen/privcmd/Makefile      2014-02-11 08:38:46.000000000 +0100
278 +++ 13.1/drivers/xen/privcmd/Makefile   2011-02-02 15:10:34.000000000 +0100
279 @@ -1,3 +1,3 @@
280 -
281 -obj-y  += privcmd.o
282 -obj-$(CONFIG_COMPAT)   += compat_privcmd.o
283 +priv-$(CONFIG_COMPAT) := compat_privcmd.o
284 +obj-y := privcmd.o
285 +obj-$(CONFIG_XEN_PRIVILEGED_GUEST) += $(priv-y)
286 --- 13.1.orig/drivers/xen/privcmd/privcmd.c     2013-05-28 10:50:58.000000000 +0200
287 +++ 13.1/drivers/xen/privcmd/privcmd.c  2013-05-28 09:25:37.000000000 +0200
288 @@ -25,6 +25,9 @@
289  #include <xen/xen_proc.h>
290  #include <xen/features.h>
291  
292 +#ifndef CONFIG_XEN_PRIVILEGED_GUEST
293 +#define HAVE_ARCH_PRIVCMD_MMAP
294 +#endif
295  #ifndef HAVE_ARCH_PRIVCMD_MMAP
296  static int enforce_singleshot_mapping_fn(pte_t *pte, struct page *pmd_page,
297                                          unsigned long addr, void *data)
298 @@ -49,12 +52,14 @@ static long privcmd_ioctl(struct file *f
299  {
300         long ret;
301         void __user *udata = (void __user *) data;
302 +#ifdef CONFIG_XEN_PRIVILEGED_GUEST
303         unsigned long i, addr, nr, nr_pages;
304         int paged_out;
305         struct mm_struct *mm = current->mm;
306         struct vm_area_struct *vma;
307         LIST_HEAD(pagelist);
308         struct list_head *l, *l2;
309 +#endif
310  
311         switch (cmd) {
312         case IOCTL_PRIVCMD_HYPERCALL: {
313 @@ -79,6 +84,8 @@ static long privcmd_ioctl(struct file *f
314         }
315         break;
316  
317 +#ifdef CONFIG_XEN_PRIVILEGED_GUEST
318 +
319         case IOCTL_PRIVCMD_MMAP: {
320  #define MMAP_NR_PER_PAGE \
321         (unsigned long)((PAGE_SIZE - sizeof(*l)) / sizeof(*msg))
322 @@ -384,6 +391,8 @@ static long privcmd_ioctl(struct file *f
323         }
324         break;
325  
326 +#endif /* CONFIG_XEN_PRIVILEGED_GUEST */
327 +
328         default:
329                 ret = -EINVAL;
330                 break;
331 @@ -423,7 +432,9 @@ static const struct file_operations priv
332         .open = nonseekable_open,
333         .llseek = no_llseek,
334         .unlocked_ioctl = privcmd_ioctl,
335 +#ifdef CONFIG_XEN_PRIVILEGED_GUEST
336         .mmap = privcmd_mmap
337 +#endif
338  };
339  
340  static int capabilities_show(struct seq_file *m, void *v)
341 --- 13.1.orig/drivers/xen/xenbus/xenbus_comms.c 2013-08-12 13:51:56.000000000 +0200
342 +++ 13.1/drivers/xen/xenbus/xenbus_comms.c      2013-08-12 16:14:24.000000000 +0200
343 @@ -54,12 +54,12 @@
344  
345  static int xenbus_irq;
346  
347 -static DECLARE_WORK(probe_work, xenbus_probe);
348 -
349  static DECLARE_WAIT_QUEUE_HEAD(xb_waitq);
350  
351  static irqreturn_t wake_waiting(int irq, void *unused)
352  {
353 +#ifdef CONFIG_XEN_PRIVILEGED_GUEST
354 +       static DECLARE_WORK(probe_work, xenbus_probe);
355         int old, new;
356  
357         old = atomic_read(&xenbus_xsd_state);
358 @@ -87,6 +87,7 @@ static irqreturn_t wake_waiting(int irq,
359                 schedule_work(&probe_work);
360  
361  wake:
362 +#endif
363         wake_up(&xb_waitq);
364         return IRQ_HANDLED;
365  }
366 --- 13.1.orig/drivers/xen/xenbus/xenbus_probe.c 2013-08-12 15:14:21.000000000 +0200
367 +++ 13.1/drivers/xen/xenbus/xenbus_probe.c      2013-08-12 16:14:27.000000000 +0200
368 @@ -101,7 +101,11 @@ static unsigned long xen_store_mfn;
369  
370  extern struct mutex xenwatch_mutex;
371  
372 -static BLOCKING_NOTIFIER_HEAD(xenstore_chain);
373 +static
374 +#ifdef CONFIG_XEN_UNPRIVILEGED_GUEST
375 +__initdata
376 +#endif
377 +BLOCKING_NOTIFIER_HEAD(xenstore_chain);
378  
379  #if defined(CONFIG_XEN) || defined(MODULE)
380  static void wait_for_devices(struct xenbus_driver *xendrv);
381 @@ -1072,7 +1076,11 @@ static void xenbus_reset_state(void)
382  }
383  #endif
384  
385 -void xenbus_probe(struct work_struct *unused)
386 +void
387 +#if defined(CONFIG_XEN_UNPRIVILEGED_GUEST)
388 +__init
389 +#endif
390 +xenbus_probe(struct work_struct *unused)
391  {
392         BUG_ON(!is_xenstored_ready());
393  
394 --- 13.1.orig/drivers/xen/xenbus/xenbus_probe_backend.c 2013-08-12 13:55:51.000000000 +0200
395 +++ 13.1/drivers/xen/xenbus/xenbus_probe_backend.c      2013-08-12 16:14:29.000000000 +0200
396 @@ -324,7 +324,7 @@ subsys_initcall(xenbus_probe_backend_ini
397  
398  #else
399  
400 -void xenbus_backend_bus_register(void)
401 +void __init xenbus_backend_bus_register(void)
402  {
403         xenbus_backend.error = bus_register(&xenbus_backend.bus);
404         if (xenbus_backend.error)
405 @@ -332,7 +332,7 @@ void xenbus_backend_bus_register(void)
406                         xenbus_backend.error);
407  }
408  
409 -void xenbus_backend_device_register(void)
410 +void __init xenbus_backend_device_register(void)
411  {
412         if (xenbus_backend.error)
413                 return;
414 --- 13.1.orig/drivers/xen/xenbus/xenbus_xs.c    2013-08-12 13:00:59.000000000 +0200
415 +++ 13.1/drivers/xen/xenbus/xenbus_xs.c 2013-01-30 12:35:53.000000000 +0100
416 @@ -979,7 +979,11 @@ static int xenbus_thread(void *unused)
417         return 0;
418  }
419  
420 -int xs_init(void)
421 +int
422 +#ifndef MODULE
423 +__init
424 +#endif
425 +xs_init(void)
426  {
427         struct task_struct *task;
428  
429 --- 13.1.orig/fs/compat_ioctl.c 2014-02-11 08:38:46.000000000 +0100
430 +++ 13.1/fs/compat_ioctl.c      2013-08-12 16:14:39.000000000 +0200
431 @@ -1496,7 +1496,7 @@ static long do_ioctl_trans(int fd, unsig
432                 return do_video_stillpicture(fd, cmd, argp);
433         case VIDEO_SET_SPU_PALETTE:
434                 return do_video_set_spu_palette(fd, cmd, argp);
435 -#ifdef CONFIG_XEN
436 +#ifdef CONFIG_XEN_PRIVILEGED_GUEST
437         case IOCTL_PRIVCMD_MMAP_32:
438         case IOCTL_PRIVCMD_MMAPBATCH_32:
439         case IOCTL_PRIVCMD_MMAPBATCH_V2_32:
440 --- 13.1.orig/include/xen/gnttab.h      2012-03-12 14:00:59.000000000 +0100
441 +++ 13.1/include/xen/gnttab.h   2012-06-08 11:26:50.000000000 +0200
442 @@ -40,6 +40,7 @@
443  #include <asm/hypervisor.h>
444  #include <asm/maddr.h> /* maddr_t */
445  #include <linux/mm.h>
446 +#include <linux/kconfig.h>
447  #include <linux/delay.h>
448  #include <xen/interface/grant_table.h>
449  #include <xen/features.h>
450 @@ -106,7 +107,11 @@ void gnttab_grant_foreign_transfer_ref(g
451                                        unsigned long pfn);
452  
453  int gnttab_copy_grant_page(grant_ref_t ref, struct page **pagep);
454 +#if IS_ENABLED(CONFIG_XEN_BACKEND)
455  void __gnttab_dma_map_page(struct page *page);
456 +#else
457 +#define __gnttab_dma_map_page __gnttab_dma_unmap_page
458 +#endif
459  static inline void __gnttab_dma_unmap_page(struct page *page)
460  {
461  }