KVM: s390: Features and Enhancements for 5.7 part1 1. Allow to disable gisa 2. protected virtual machines Protected VMs (PVM) are KVM VMs, where KVM can't access the VM's state like guest memory and guest registers anymore. Instead the PVMs are mostly managed by a new entity called Ultravisor (UV), which provides an API, so KVM and the PV can request management actions. PVMs are encrypted at rest and protected from hypervisor access while running. They switch from a normal operation into protected mode, so we can still use the standard boot process to load a encrypted blob and then move it into protected mode. Rebooting is only possible by passing through the unprotected/normal mode and switching to protected again. One mm related patch will go via Andrews mm tree ( mm/gup/writeback: add callbacks for inaccessible pages)
Showing the changes to include/linux (9 of 362 files). Show all
Unified · Split
| @@ -201,9 +201,6 @@ static inline bool policy_is_shared(struct cpufreq_policy *policy) · 200 unmodified lines | |||
| 201 | return cpumask_weight(policy->cpus) > 1; | 201 | return cpumask_weight(policy->cpus) > 1; |
| 202 | } | 202 | } |
| 203 | 203 | ||
| 204 | /* /sys/devices/system/cpu/cpufreq: entry point for global variables */ | ||
| 205 | extern struct kobject *cpufreq_global_kobject; | ||
| 206 | |||
| 207 | #ifdef CONFIG_CPU_FREQ | 204 | #ifdef CONFIG_CPU_FREQ |
| 208 | unsigned int cpufreq_get(unsigned int cpu); | 205 | unsigned int cpufreq_get(unsigned int cpu); |
| 209 | unsigned int cpufreq_quick_get(unsigned int cpu); | 206 | unsigned int cpufreq_quick_get(unsigned int cpu); |
| @@ -129,11 +129,6 @@ static inline bool generic_fsdax_supported(struct dax_device *dax_dev, · 128 unmodified lines | |||
| 129 | sectors); | 129 | sectors); |
| 130 | } | 130 | } |
| 131 | 131 | ||
| 132 | static inline struct dax_device *fs_dax_get_by_host(const char *host) | ||
| 133 | { | ||
| 134 | return dax_get_by_host(host); | ||
| 135 | } | ||
| 136 | |||
| 137 | static inline void fs_put_dax(struct dax_device *dax_dev) | 132 | static inline void fs_put_dax(struct dax_device *dax_dev) |
| 138 | { | 133 | { |
| 139 | put_dax(dax_dev); | 134 | put_dax(dax_dev); |
| @@ -141,7 +136,7 @@ static inline void fs_put_dax(struct dax_device *dax_dev) · 1 unmodified line | |||
| 141 | 136 | ||
| 142 | struct dax_device *fs_dax_get_by_bdev(struct block_device *bdev); | 137 | struct dax_device *fs_dax_get_by_bdev(struct block_device *bdev); |
| 143 | int dax_writeback_mapping_range(struct address_space *mapping, | 138 | int dax_writeback_mapping_range(struct address_space *mapping, |
| 144 | struct block_device *bdev, struct writeback_control *wbc); | 139 | struct dax_device *dax_dev, struct writeback_control *wbc); |
| 145 | 140 | ||
| 146 | struct page *dax_layout_busy_page(struct address_space *mapping); | 141 | struct page *dax_layout_busy_page(struct address_space *mapping); |
| 147 | dax_entry_t dax_lock_page(struct page *page); | 142 | dax_entry_t dax_lock_page(struct page *page); |
| @@ -160,11 +155,6 @@ static inline bool generic_fsdax_supported(struct dax_device *dax_dev, · 12 unmodified lines | |||
| 160 | return false; | 155 | return false; |
| 161 | } | 156 | } |
| 162 | 157 | ||
| 163 | static inline struct dax_device *fs_dax_get_by_host(const char *host) | ||
| 164 | { | ||
| 165 | return NULL; | ||
| 166 | } | ||
| 167 | |||
| 168 | static inline void fs_put_dax(struct dax_device *dax_dev) | 158 | static inline void fs_put_dax(struct dax_device *dax_dev) |
| 169 | { | 159 | { |
| 170 | } | 160 | } |
| @@ -180,7 +170,7 @@ static inline struct page *dax_layout_busy_page(struct address_space *mapping) · 9 unmodified lines | |||
| 180 | } | 170 | } |
| 181 | 171 | ||
| 182 | static inline int dax_writeback_mapping_range(struct address_space *mapping, | 172 | static inline int dax_writeback_mapping_range(struct address_space *mapping, |
| 183 | struct block_device *bdev, struct writeback_control *wbc) | 173 | struct dax_device *dax_dev, struct writeback_control *wbc) |
| 184 | { | 174 | { |
| 185 | return -EOPNOTSUPP; | 175 | return -EOPNOTSUPP; |
| 186 | } | 176 | } |
| @@ -31,6 +31,12 @@ static inline void icmpv6_send(struct sk_buff *skb, · 30 unmodified lines | |||
| 31 | } | 31 | } |
| 32 | #endif | 32 | #endif |
| 33 | 33 | ||
| 34 | #if IS_ENABLED(CONFIG_NF_NAT) | ||
| 35 | void icmpv6_ndo_send(struct sk_buff *skb_in, u8 type, u8 code, __u32 info); | ||
| 36 | #else | ||
| 37 | #define icmpv6_ndo_send icmpv6_send | ||
| 38 | #endif | ||
| 39 | |||
| 34 | extern int icmpv6_init(void); | 40 | extern int icmpv6_init(void); |
| 35 | extern int icmpv6_err_convert(u8 type, u8 code, | 41 | extern int icmpv6_err_convert(u8 type, u8 code, |
| 36 | int *err); | 42 | int *err); |
| @@ -1616,6 +1616,7 @@ enum netdev_priv_flags { · 1615 unmodified lines | |||
| 1616 | * and drivers will need to set them appropriately. | 1616 | * and drivers will need to set them appropriately. |
| 1617 | * | 1617 | * |
| 1618 | * @mpls_features: Mask of features inheritable by MPLS | 1618 | * @mpls_features: Mask of features inheritable by MPLS |
| 1619 | * @gso_partial_features: value(s) from NETIF_F_GSO\* | ||
| 1619 | * | 1620 | * |
| 1620 | * @ifindex: interface index | 1621 | * @ifindex: interface index |
| 1621 | * @group: The group the device belongs to | 1622 | * @group: The group the device belongs to |
| @@ -1640,8 +1641,11 @@ enum netdev_priv_flags { · 18 unmodified lines | |||
| 1640 | * @netdev_ops: Includes several pointers to callbacks, | 1641 | * @netdev_ops: Includes several pointers to callbacks, |
| 1641 | * if one wants to override the ndo_*() functions | 1642 | * if one wants to override the ndo_*() functions |
| 1642 | * @ethtool_ops: Management operations | 1643 | * @ethtool_ops: Management operations |
| 1644 | * @l3mdev_ops: Layer 3 master device operations | ||
| 1643 | * @ndisc_ops: Includes callbacks for different IPv6 neighbour | 1645 | * @ndisc_ops: Includes callbacks for different IPv6 neighbour |
| 1644 | * discovery handling. Necessary for e.g. 6LoWPAN. | 1646 | * discovery handling. Necessary for e.g. 6LoWPAN. |
| 1647 | * @xfrmdev_ops: Transformation offload operations | ||
| 1648 | * @tlsdev_ops: Transport Layer Security offload operations | ||
| 1645 | * @header_ops: Includes callbacks for creating,parsing,caching,etc | 1649 | * @header_ops: Includes callbacks for creating,parsing,caching,etc |
| 1646 | * of Layer 2 headers. | 1650 | * of Layer 2 headers. |
| 1647 | * | 1651 | * |
| @@ -1680,6 +1684,7 @@ enum netdev_priv_flags { · 32 unmodified lines | |||
| 1680 | * @dev_port: Used to differentiate devices that share | 1684 | * @dev_port: Used to differentiate devices that share |
| 1681 | * the same function | 1685 | * the same function |
| 1682 | * @addr_list_lock: XXX: need comments on this one | 1686 | * @addr_list_lock: XXX: need comments on this one |
| 1687 | * @name_assign_type: network interface name assignment type | ||
| 1683 | * @uc_promisc: Counter that indicates promiscuous mode | 1688 | * @uc_promisc: Counter that indicates promiscuous mode |
| 1684 | * has been enabled due to the need to listen to | 1689 | * has been enabled due to the need to listen to |
| 1685 | * additional unicast addresses in a device that | 1690 | * additional unicast addresses in a device that |
| @@ -1702,6 +1707,9 @@ enum netdev_priv_flags { · 16 unmodified lines | |||
| 1702 | * @ip6_ptr: IPv6 specific data | 1707 | * @ip6_ptr: IPv6 specific data |
| 1703 | * @ax25_ptr: AX.25 specific data | 1708 | * @ax25_ptr: AX.25 specific data |
| 1704 | * @ieee80211_ptr: IEEE 802.11 specific data, assign before registering | 1709 | * @ieee80211_ptr: IEEE 802.11 specific data, assign before registering |
| 1710 | * @ieee802154_ptr: IEEE 802.15.4 low-rate Wireless Personal Area Network | ||
| 1711 | * device struct | ||
| 1712 | * @mpls_ptr: mpls_dev struct pointer | ||
| 1705 | * | 1713 | * |
| 1706 | * @dev_addr: Hw address (before bcast, | 1714 | * @dev_addr: Hw address (before bcast, |
| 1707 | * because most packets are unicast) | 1715 | * because most packets are unicast) |
| @@ -1710,6 +1718,8 @@ enum netdev_priv_flags { · 2 unmodified lines | |||
| 1710 | * @num_rx_queues: Number of RX queues | 1718 | * @num_rx_queues: Number of RX queues |
| 1711 | * allocated at register_netdev() time | 1719 | * allocated at register_netdev() time |
| 1712 | * @real_num_rx_queues: Number of RX queues currently active in device | 1720 | * @real_num_rx_queues: Number of RX queues currently active in device |
| 1721 | * @xdp_prog: XDP sockets filter program pointer | ||
| 1722 | * @gro_flush_timeout: timeout for GRO layer in NAPI | ||
| 1713 | * | 1723 | * |
| 1714 | * @rx_handler: handler for received packets | 1724 | * @rx_handler: handler for received packets |
| 1715 | * @rx_handler_data: XXX: need comments on this one | 1725 | * @rx_handler_data: XXX: need comments on this one |
| @@ -1731,10 +1741,14 @@ enum netdev_priv_flags { · 15 unmodified lines | |||
| 1731 | * @qdisc: Root qdisc from userspace point of view | 1741 | * @qdisc: Root qdisc from userspace point of view |
| 1732 | * @tx_queue_len: Max frames per queue allowed | 1742 | * @tx_queue_len: Max frames per queue allowed |
| 1733 | * @tx_global_lock: XXX: need comments on this one | 1743 | * @tx_global_lock: XXX: need comments on this one |
| 1744 | * @xdp_bulkq: XDP device bulk queue | ||
| 1745 | * @xps_cpus_map: all CPUs map for XPS device | ||
| 1746 | * @xps_rxqs_map: all RXQs map for XPS device | ||
| 1734 | * | 1747 | * |
| 1735 | * @xps_maps: XXX: need comments on this one | 1748 | * @xps_maps: XXX: need comments on this one |
| 1736 | * @miniq_egress: clsact qdisc specific data for | 1749 | * @miniq_egress: clsact qdisc specific data for |
| 1737 | * egress processing | 1750 | * egress processing |
| 1751 | * @qdisc_hash: qdisc hash table | ||
| 1738 | * @watchdog_timeo: Represents the timeout that is used by | 1752 | * @watchdog_timeo: Represents the timeout that is used by |
| 1739 | * the watchdog (see dev_watchdog()) | 1753 | * the watchdog (see dev_watchdog()) |
| 1740 | * @watchdog_timer: List of timers | 1754 | * @watchdog_timer: List of timers |
| @@ -3548,7 +3562,7 @@ static inline unsigned int netif_attrmask_next(int n, const unsigned long *srcp, · 1807 unmodified lines | |||
| 3548 | } | 3562 | } |
| 3549 | 3563 | ||
| 3550 | /** | 3564 | /** |
| 3551 | * netif_attrmask_next_and - get the next CPU/Rx queue in *src1p & *src2p | 3565 | * netif_attrmask_next_and - get the next CPU/Rx queue in \*src1p & \*src2p |
| 3552 | * @n: CPU/Rx queue index | 3566 | * @n: CPU/Rx queue index |
| 3553 | * @src1p: the first CPUs/Rx queues mask pointer | 3567 | * @src1p: the first CPUs/Rx queues mask pointer |
| 3554 | * @src2p: the second CPUs/Rx queues mask pointer | 3568 | * @src2p: the second CPUs/Rx queues mask pointer |
| @@ -337,35 +337,17 @@ static inline int nfs_server_capable(struct inode *inode, int cap) · 336 unmodified lines | |||
| 337 | return NFS_SERVER(inode)->caps & cap; | 337 | return NFS_SERVER(inode)->caps & cap; |
| 338 | } | 338 | } |
| 339 | 339 | ||
| 340 | static inline void nfs_set_verifier(struct dentry * dentry, unsigned long verf) | ||
| 341 | { | ||
| 342 | dentry->d_time = verf; | ||
| 343 | } | ||
| 344 | |||
| 345 | /** | 340 | /** |
| 346 | * nfs_save_change_attribute - Returns the inode attribute change cookie | 341 | * nfs_save_change_attribute - Returns the inode attribute change cookie |
| 347 | * @dir - pointer to parent directory inode | 342 | * @dir - pointer to parent directory inode |
| 348 | * The "change attribute" is updated every time we finish an operation | 343 | * The "cache change attribute" is updated when we need to revalidate |
| 349 | * that will result in a metadata change on the server. | 344 | * our dentry cache after a directory was seen to change on the server. |
| 350 | */ | 345 | */ |
| 351 | static inline unsigned long nfs_save_change_attribute(struct inode *dir) | 346 | static inline unsigned long nfs_save_change_attribute(struct inode *dir) |
| 352 | { | 347 | { |
| 353 | return NFS_I(dir)->cache_change_attribute; | 348 | return NFS_I(dir)->cache_change_attribute; |
| 354 | } | 349 | } |
| 355 | 350 | ||
| 356 | /** | ||
| 357 | * nfs_verify_change_attribute - Detects NFS remote directory changes | ||
| 358 | * @dir - pointer to parent directory inode | ||
| 359 | * @chattr - previously saved change attribute | ||
| 360 | * Return "false" if the verifiers doesn't match the change attribute. | ||
| 361 | * This would usually indicate that the directory contents have changed on | ||
| 362 | * the server, and that any dentries need revalidating. | ||
| 363 | */ | ||
| 364 | static inline int nfs_verify_change_attribute(struct inode *dir, unsigned long chattr) | ||
| 365 | { | ||
| 366 | return chattr == NFS_I(dir)->cache_change_attribute; | ||
| 367 | } | ||
| 368 | |||
| 369 | /* | 351 | /* |
| 370 | * linux/fs/nfs/inode.c | 352 | * linux/fs/nfs/inode.c |
| 371 | */ | 353 | */ |
| @@ -495,6 +477,10 @@ extern const struct file_operations nfs_dir_operations; · 123 unmodified lines | |||
| 495 | extern const struct dentry_operations nfs_dentry_operations; | 477 | extern const struct dentry_operations nfs_dentry_operations; |
| 496 | 478 | ||
| 497 | extern void nfs_force_lookup_revalidate(struct inode *dir); | 479 | extern void nfs_force_lookup_revalidate(struct inode *dir); |
| 480 | extern void nfs_set_verifier(struct dentry * dentry, unsigned long verf); | ||
| 481 | #if IS_ENABLED(CONFIG_NFS_V4) | ||
| 482 | extern void nfs_clear_verifier_delegated(struct inode *inode); | ||
| 483 | #endif /* IS_ENABLED(CONFIG_NFS_V4) */ | ||
| 498 | extern struct dentry *nfs_add_or_obtain(struct dentry *dentry, | 484 | extern struct dentry *nfs_add_or_obtain(struct dentry *dentry, |
| 499 | struct nfs_fh *fh, struct nfs_fattr *fattr, | 485 | struct nfs_fh *fh, struct nfs_fattr *fattr, |
| 500 | struct nfs4_label *label); | 486 | struct nfs4_label *label); |
| @@ -29,7 +29,8 @@ struct pipe_buffer { · 28 unmodified lines | |||
| 29 | /** | 29 | /** |
| 30 | * struct pipe_inode_info - a linux kernel pipe | 30 | * struct pipe_inode_info - a linux kernel pipe |
| 31 | * @mutex: mutex protecting the whole thing | 31 | * @mutex: mutex protecting the whole thing |
| 32 | * @wait: reader/writer wait point in case of empty/full pipe | 32 | * @rd_wait: reader wait point in case of empty pipe |
| 33 | * @wr_wait: writer wait point in case of full pipe | ||
| 33 | * @head: The point of buffer production | 34 | * @head: The point of buffer production |
| 34 | * @tail: The point of buffer consumption | 35 | * @tail: The point of buffer consumption |
| 35 | * @max_usage: The maximum number of slots that may be used in the ring | 36 | * @max_usage: The maximum number of slots that may be used in the ring |
| @@ -15,9 +15,11 @@ static inline void nohz_balance_enter_idle(int cpu) { } · 14 unmodified lines | |||
| 15 | 15 | ||
| 16 | #ifdef CONFIG_NO_HZ_COMMON | 16 | #ifdef CONFIG_NO_HZ_COMMON |
| 17 | void calc_load_nohz_start(void); | 17 | void calc_load_nohz_start(void); |
| 18 | void calc_load_nohz_remote(struct rq *rq); | ||
| 18 | void calc_load_nohz_stop(void); | 19 | void calc_load_nohz_stop(void); |
| 19 | #else | 20 | #else |
| 20 | static inline void calc_load_nohz_start(void) { } | 21 | static inline void calc_load_nohz_start(void) { } |
| 22 | static inline void calc_load_nohz_remote(struct rq *rq) { } | ||
| 21 | static inline void calc_load_nohz_stop(void) { } | 23 | static inline void calc_load_nohz_stop(void) { } |
| 22 | #endif /* CONFIG_NO_HZ_COMMON */ | 24 | #endif /* CONFIG_NO_HZ_COMMON */ |
| 23 | 25 | ||
| @@ -191,7 +191,7 @@ struct platform_s2idle_ops { · 190 unmodified lines | |||
| 191 | int (*begin)(void); | 191 | int (*begin)(void); |
| 192 | int (*prepare)(void); | 192 | int (*prepare)(void); |
| 193 | int (*prepare_late)(void); | 193 | int (*prepare_late)(void); |
| 194 | void (*wake)(void); | 194 | bool (*wake)(void); |
| 195 | void (*restore_early)(void); | 195 | void (*restore_early)(void); |
| 196 | void (*restore)(void); | 196 | void (*restore)(void); |
| 197 | void (*end)(void); | 197 | void (*end)(void); |
| @@ -440,7 +440,7 @@ struct synth_event_trace_state { · 439 unmodified lines | |||
| 440 | struct synth_event *event; | 440 | struct synth_event *event; |
| 441 | unsigned int cur_field; | 441 | unsigned int cur_field; |
| 442 | unsigned int n_u64; | 442 | unsigned int n_u64; |
| 443 | bool enabled; | 443 | bool disabled; |
| 444 | bool add_next; | 444 | bool add_next; |
| 445 | bool add_name; | 445 | bool add_name; |
| 446 | }; | 446 | }; |