diff options
Diffstat (limited to 'include')
117 files changed, 1787 insertions, 332 deletions
diff --git a/include/asm-generic/atomic.h b/include/asm-generic/atomic.h index c33749f95b32..058129e9b04c 100644 --- a/include/asm-generic/atomic.h +++ b/include/asm-generic/atomic.h | |||
| @@ -30,8 +30,7 @@ | |||
| 30 | * atomic_read - read atomic variable | 30 | * atomic_read - read atomic variable |
| 31 | * @v: pointer of type atomic_t | 31 | * @v: pointer of type atomic_t |
| 32 | * | 32 | * |
| 33 | * Atomically reads the value of @v. Note that the guaranteed | 33 | * Atomically reads the value of @v. |
| 34 | * useful range of an atomic_t is only 24 bits. | ||
| 35 | */ | 34 | */ |
| 36 | #define atomic_read(v) (*(volatile int *)&(v)->counter) | 35 | #define atomic_read(v) (*(volatile int *)&(v)->counter) |
| 37 | 36 | ||
| @@ -40,8 +39,7 @@ | |||
| 40 | * @v: pointer of type atomic_t | 39 | * @v: pointer of type atomic_t |
| 41 | * @i: required value | 40 | * @i: required value |
| 42 | * | 41 | * |
| 43 | * Atomically sets the value of @v to @i. Note that the guaranteed | 42 | * Atomically sets the value of @v to @i. |
| 44 | * useful range of an atomic_t is only 24 bits. | ||
| 45 | */ | 43 | */ |
| 46 | #define atomic_set(v, i) (((v)->counter) = (i)) | 44 | #define atomic_set(v, i) (((v)->counter) = (i)) |
| 47 | 45 | ||
| @@ -53,7 +51,6 @@ | |||
| 53 | * @v: pointer of type atomic_t | 51 | * @v: pointer of type atomic_t |
| 54 | * | 52 | * |
| 55 | * Atomically adds @i to @v and returns the result | 53 | * Atomically adds @i to @v and returns the result |
| 56 | * Note that the guaranteed useful range of an atomic_t is only 24 bits. | ||
| 57 | */ | 54 | */ |
| 58 | static inline int atomic_add_return(int i, atomic_t *v) | 55 | static inline int atomic_add_return(int i, atomic_t *v) |
| 59 | { | 56 | { |
| @@ -75,7 +72,6 @@ static inline int atomic_add_return(int i, atomic_t *v) | |||
| 75 | * @v: pointer of type atomic_t | 72 | * @v: pointer of type atomic_t |
| 76 | * | 73 | * |
| 77 | * Atomically subtracts @i from @v and returns the result | 74 | * Atomically subtracts @i from @v and returns the result |
| 78 | * Note that the guaranteed useful range of an atomic_t is only 24 bits. | ||
| 79 | */ | 75 | */ |
| 80 | static inline int atomic_sub_return(int i, atomic_t *v) | 76 | static inline int atomic_sub_return(int i, atomic_t *v) |
| 81 | { | 77 | { |
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h index 18c435d7c082..c2c9ba032d46 100644 --- a/include/asm-generic/bug.h +++ b/include/asm-generic/bug.h | |||
| @@ -25,7 +25,10 @@ struct bug_entry { | |||
| 25 | }; | 25 | }; |
| 26 | #endif /* __ASSEMBLY__ */ | 26 | #endif /* __ASSEMBLY__ */ |
| 27 | 27 | ||
| 28 | #define BUGFLAG_WARNING (1<<0) | 28 | #define BUGFLAG_WARNING (1 << 0) |
| 29 | #define BUGFLAG_TAINT(taint) (BUGFLAG_WARNING | ((taint) << 8)) | ||
| 30 | #define BUG_GET_TAINT(bug) ((bug)->flags >> 8) | ||
| 31 | |||
| 29 | #endif /* CONFIG_GENERIC_BUG */ | 32 | #endif /* CONFIG_GENERIC_BUG */ |
| 30 | 33 | ||
| 31 | /* | 34 | /* |
| @@ -56,17 +59,25 @@ struct bug_entry { | |||
| 56 | * appear at runtime. Use the versions with printk format strings | 59 | * appear at runtime. Use the versions with printk format strings |
| 57 | * to provide better diagnostics. | 60 | * to provide better diagnostics. |
| 58 | */ | 61 | */ |
| 59 | #ifndef __WARN | 62 | #ifndef __WARN_TAINT |
| 60 | #ifndef __ASSEMBLY__ | 63 | #ifndef __ASSEMBLY__ |
| 61 | extern void warn_slowpath_fmt(const char *file, const int line, | 64 | extern void warn_slowpath_fmt(const char *file, const int line, |
| 62 | const char *fmt, ...) __attribute__((format(printf, 3, 4))); | 65 | const char *fmt, ...) __attribute__((format(printf, 3, 4))); |
| 66 | extern void warn_slowpath_fmt_taint(const char *file, const int line, | ||
| 67 | unsigned taint, const char *fmt, ...) | ||
| 68 | __attribute__((format(printf, 4, 5))); | ||
| 63 | extern void warn_slowpath_null(const char *file, const int line); | 69 | extern void warn_slowpath_null(const char *file, const int line); |
| 64 | #define WANT_WARN_ON_SLOWPATH | 70 | #define WANT_WARN_ON_SLOWPATH |
| 65 | #endif | 71 | #endif |
| 66 | #define __WARN() warn_slowpath_null(__FILE__, __LINE__) | 72 | #define __WARN() warn_slowpath_null(__FILE__, __LINE__) |
| 67 | #define __WARN_printf(arg...) warn_slowpath_fmt(__FILE__, __LINE__, arg) | 73 | #define __WARN_printf(arg...) warn_slowpath_fmt(__FILE__, __LINE__, arg) |
| 74 | #define __WARN_printf_taint(taint, arg...) \ | ||
| 75 | warn_slowpath_fmt_taint(__FILE__, __LINE__, taint, arg) | ||
| 68 | #else | 76 | #else |
| 77 | #define __WARN() __WARN_TAINT(TAINT_WARN) | ||
| 69 | #define __WARN_printf(arg...) do { printk(arg); __WARN(); } while (0) | 78 | #define __WARN_printf(arg...) do { printk(arg); __WARN(); } while (0) |
| 79 | #define __WARN_printf_taint(taint, arg...) \ | ||
| 80 | do { printk(arg); __WARN_TAINT(taint); } while (0) | ||
| 70 | #endif | 81 | #endif |
| 71 | 82 | ||
| 72 | #ifndef WARN_ON | 83 | #ifndef WARN_ON |
| @@ -87,6 +98,13 @@ extern void warn_slowpath_null(const char *file, const int line); | |||
| 87 | }) | 98 | }) |
| 88 | #endif | 99 | #endif |
| 89 | 100 | ||
| 101 | #define WARN_TAINT(condition, taint, format...) ({ \ | ||
| 102 | int __ret_warn_on = !!(condition); \ | ||
| 103 | if (unlikely(__ret_warn_on)) \ | ||
| 104 | __WARN_printf_taint(taint, format); \ | ||
| 105 | unlikely(__ret_warn_on); \ | ||
| 106 | }) | ||
| 107 | |||
| 90 | #else /* !CONFIG_BUG */ | 108 | #else /* !CONFIG_BUG */ |
| 91 | #ifndef HAVE_ARCH_BUG | 109 | #ifndef HAVE_ARCH_BUG |
| 92 | #define BUG() do {} while(0) | 110 | #define BUG() do {} while(0) |
| @@ -110,6 +128,8 @@ extern void warn_slowpath_null(const char *file, const int line); | |||
| 110 | }) | 128 | }) |
| 111 | #endif | 129 | #endif |
| 112 | 130 | ||
| 131 | #define WARN_TAINT(condition, taint, format...) WARN_ON(condition) | ||
| 132 | |||
| 113 | #endif | 133 | #endif |
| 114 | 134 | ||
| 115 | #define WARN_ON_ONCE(condition) ({ \ | 135 | #define WARN_ON_ONCE(condition) ({ \ |
| @@ -132,6 +152,16 @@ extern void warn_slowpath_null(const char *file, const int line); | |||
| 132 | unlikely(__ret_warn_once); \ | 152 | unlikely(__ret_warn_once); \ |
| 133 | }) | 153 | }) |
| 134 | 154 | ||
| 155 | #define WARN_TAINT_ONCE(condition, taint, format...) ({ \ | ||
| 156 | static bool __warned; \ | ||
| 157 | int __ret_warn_once = !!(condition); \ | ||
| 158 | \ | ||
| 159 | if (unlikely(__ret_warn_once)) \ | ||
| 160 | if (WARN_TAINT(!__warned, taint, format)) \ | ||
| 161 | __warned = true; \ | ||
| 162 | unlikely(__ret_warn_once); \ | ||
| 163 | }) | ||
| 164 | |||
| 135 | #define WARN_ON_RATELIMIT(condition, state) \ | 165 | #define WARN_ON_RATELIMIT(condition, state) \ |
| 136 | WARN_ON((condition) && __ratelimit(state)) | 166 | WARN_ON((condition) && __ratelimit(state)) |
| 137 | 167 | ||
diff --git a/include/asm-generic/kmap_types.h b/include/asm-generic/kmap_types.h index e5f234a08540..0232ccb76f2b 100644 --- a/include/asm-generic/kmap_types.h +++ b/include/asm-generic/kmap_types.h | |||
| @@ -28,7 +28,11 @@ KMAP_D(15) KM_UML_USERCOPY, | |||
| 28 | KMAP_D(16) KM_IRQ_PTE, | 28 | KMAP_D(16) KM_IRQ_PTE, |
| 29 | KMAP_D(17) KM_NMI, | 29 | KMAP_D(17) KM_NMI, |
| 30 | KMAP_D(18) KM_NMI_PTE, | 30 | KMAP_D(18) KM_NMI_PTE, |
| 31 | KMAP_D(19) KM_TYPE_NR | 31 | KMAP_D(19) KM_KDB, |
| 32 | /* | ||
| 33 | * Remember to update debug_kmap_atomic() when adding new kmap types! | ||
| 34 | */ | ||
| 35 | KMAP_D(20) KM_TYPE_NR | ||
| 32 | }; | 36 | }; |
| 33 | 37 | ||
| 34 | #undef KMAP_D | 38 | #undef KMAP_D |
diff --git a/include/crypto/algapi.h b/include/crypto/algapi.h index fc0d575c71e0..59c3e5bd2c06 100644 --- a/include/crypto/algapi.h +++ b/include/crypto/algapi.h | |||
| @@ -103,6 +103,23 @@ struct blkcipher_walk { | |||
| 103 | unsigned int blocksize; | 103 | unsigned int blocksize; |
| 104 | }; | 104 | }; |
| 105 | 105 | ||
| 106 | struct ablkcipher_walk { | ||
| 107 | struct { | ||
| 108 | struct page *page; | ||
| 109 | unsigned int offset; | ||
| 110 | } src, dst; | ||
| 111 | |||
| 112 | struct scatter_walk in; | ||
| 113 | unsigned int nbytes; | ||
| 114 | struct scatter_walk out; | ||
| 115 | unsigned int total; | ||
| 116 | struct list_head buffers; | ||
| 117 | u8 *iv_buffer; | ||
| 118 | u8 *iv; | ||
| 119 | int flags; | ||
| 120 | unsigned int blocksize; | ||
| 121 | }; | ||
| 122 | |||
| 106 | extern const struct crypto_type crypto_ablkcipher_type; | 123 | extern const struct crypto_type crypto_ablkcipher_type; |
| 107 | extern const struct crypto_type crypto_aead_type; | 124 | extern const struct crypto_type crypto_aead_type; |
| 108 | extern const struct crypto_type crypto_blkcipher_type; | 125 | extern const struct crypto_type crypto_blkcipher_type; |
| @@ -173,6 +190,12 @@ int blkcipher_walk_virt_block(struct blkcipher_desc *desc, | |||
| 173 | struct blkcipher_walk *walk, | 190 | struct blkcipher_walk *walk, |
| 174 | unsigned int blocksize); | 191 | unsigned int blocksize); |
| 175 | 192 | ||
| 193 | int ablkcipher_walk_done(struct ablkcipher_request *req, | ||
| 194 | struct ablkcipher_walk *walk, int err); | ||
| 195 | int ablkcipher_walk_phys(struct ablkcipher_request *req, | ||
| 196 | struct ablkcipher_walk *walk); | ||
| 197 | void __ablkcipher_walk_complete(struct ablkcipher_walk *walk); | ||
| 198 | |||
| 176 | static inline void *crypto_tfm_ctx_aligned(struct crypto_tfm *tfm) | 199 | static inline void *crypto_tfm_ctx_aligned(struct crypto_tfm *tfm) |
| 177 | { | 200 | { |
| 178 | return PTR_ALIGN(crypto_tfm_ctx(tfm), | 201 | return PTR_ALIGN(crypto_tfm_ctx(tfm), |
| @@ -283,6 +306,23 @@ static inline void blkcipher_walk_init(struct blkcipher_walk *walk, | |||
| 283 | walk->total = nbytes; | 306 | walk->total = nbytes; |
| 284 | } | 307 | } |
| 285 | 308 | ||
| 309 | static inline void ablkcipher_walk_init(struct ablkcipher_walk *walk, | ||
| 310 | struct scatterlist *dst, | ||
| 311 | struct scatterlist *src, | ||
| 312 | unsigned int nbytes) | ||
| 313 | { | ||
| 314 | walk->in.sg = src; | ||
| 315 | walk->out.sg = dst; | ||
| 316 | walk->total = nbytes; | ||
| 317 | INIT_LIST_HEAD(&walk->buffers); | ||
| 318 | } | ||
| 319 | |||
| 320 | static inline void ablkcipher_walk_complete(struct ablkcipher_walk *walk) | ||
| 321 | { | ||
| 322 | if (unlikely(!list_empty(&walk->buffers))) | ||
| 323 | __ablkcipher_walk_complete(walk); | ||
| 324 | } | ||
| 325 | |||
| 286 | static inline struct crypto_async_request *crypto_get_backlog( | 326 | static inline struct crypto_async_request *crypto_get_backlog( |
| 287 | struct crypto_queue *queue) | 327 | struct crypto_queue *queue) |
| 288 | { | 328 | { |
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 2f3b3a00b7a3..c1b987158dfa 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
| @@ -1428,10 +1428,13 @@ extern void drm_sysfs_connector_remove(struct drm_connector *connector); | |||
| 1428 | /* Graphics Execution Manager library functions (drm_gem.c) */ | 1428 | /* Graphics Execution Manager library functions (drm_gem.c) */ |
| 1429 | int drm_gem_init(struct drm_device *dev); | 1429 | int drm_gem_init(struct drm_device *dev); |
| 1430 | void drm_gem_destroy(struct drm_device *dev); | 1430 | void drm_gem_destroy(struct drm_device *dev); |
| 1431 | void drm_gem_object_release(struct drm_gem_object *obj); | ||
| 1431 | void drm_gem_object_free(struct kref *kref); | 1432 | void drm_gem_object_free(struct kref *kref); |
| 1432 | void drm_gem_object_free_unlocked(struct kref *kref); | 1433 | void drm_gem_object_free_unlocked(struct kref *kref); |
| 1433 | struct drm_gem_object *drm_gem_object_alloc(struct drm_device *dev, | 1434 | struct drm_gem_object *drm_gem_object_alloc(struct drm_device *dev, |
| 1434 | size_t size); | 1435 | size_t size); |
| 1436 | int drm_gem_object_init(struct drm_device *dev, | ||
| 1437 | struct drm_gem_object *obj, size_t size); | ||
| 1435 | void drm_gem_object_handle_free(struct kref *kref); | 1438 | void drm_gem_object_handle_free(struct kref *kref); |
| 1436 | void drm_gem_vm_open(struct vm_area_struct *vma); | 1439 | void drm_gem_vm_open(struct vm_area_struct *vma); |
| 1437 | void drm_gem_vm_close(struct vm_area_struct *vma); | 1440 | void drm_gem_vm_close(struct vm_area_struct *vma); |
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 1347524a8e30..93a1a31b9c2d 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h | |||
| @@ -31,6 +31,7 @@ | |||
| 31 | #include <linux/idr.h> | 31 | #include <linux/idr.h> |
| 32 | 32 | ||
| 33 | #include <linux/fb.h> | 33 | #include <linux/fb.h> |
| 34 | #include <linux/slow-work.h> | ||
| 34 | 35 | ||
| 35 | struct drm_device; | 36 | struct drm_device; |
| 36 | struct drm_mode_set; | 37 | struct drm_mode_set; |
| @@ -271,8 +272,6 @@ struct drm_framebuffer { | |||
| 271 | unsigned int depth; | 272 | unsigned int depth; |
| 272 | int bits_per_pixel; | 273 | int bits_per_pixel; |
| 273 | int flags; | 274 | int flags; |
| 274 | struct fb_info *fbdev; | ||
| 275 | u32 pseudo_palette[17]; | ||
| 276 | struct list_head filp_head; | 275 | struct list_head filp_head; |
| 277 | /* if you are using the helper */ | 276 | /* if you are using the helper */ |
| 278 | void *helper_private; | 277 | void *helper_private; |
| @@ -369,9 +368,6 @@ struct drm_crtc_funcs { | |||
| 369 | * @enabled: is this CRTC enabled? | 368 | * @enabled: is this CRTC enabled? |
| 370 | * @x: x position on screen | 369 | * @x: x position on screen |
| 371 | * @y: y position on screen | 370 | * @y: y position on screen |
| 372 | * @desired_mode: new desired mode | ||
| 373 | * @desired_x: desired x for desired_mode | ||
| 374 | * @desired_y: desired y for desired_mode | ||
| 375 | * @funcs: CRTC control functions | 371 | * @funcs: CRTC control functions |
| 376 | * | 372 | * |
| 377 | * Each CRTC may have one or more connectors associated with it. This structure | 373 | * Each CRTC may have one or more connectors associated with it. This structure |
| @@ -391,8 +387,6 @@ struct drm_crtc { | |||
| 391 | struct drm_display_mode mode; | 387 | struct drm_display_mode mode; |
| 392 | 388 | ||
| 393 | int x, y; | 389 | int x, y; |
| 394 | struct drm_display_mode *desired_mode; | ||
| 395 | int desired_x, desired_y; | ||
| 396 | const struct drm_crtc_funcs *funcs; | 390 | const struct drm_crtc_funcs *funcs; |
| 397 | 391 | ||
| 398 | /* CRTC gamma size for reporting to userspace */ | 392 | /* CRTC gamma size for reporting to userspace */ |
| @@ -467,6 +461,15 @@ enum drm_connector_force { | |||
| 467 | DRM_FORCE_ON_DIGITAL, /* for DVI-I use digital connector */ | 461 | DRM_FORCE_ON_DIGITAL, /* for DVI-I use digital connector */ |
| 468 | }; | 462 | }; |
| 469 | 463 | ||
| 464 | /* should we poll this connector for connects and disconnects */ | ||
| 465 | /* hot plug detectable */ | ||
| 466 | #define DRM_CONNECTOR_POLL_HPD (1 << 0) | ||
| 467 | /* poll for connections */ | ||
| 468 | #define DRM_CONNECTOR_POLL_CONNECT (1 << 1) | ||
| 469 | /* can cleanly poll for disconnections without flickering the screen */ | ||
| 470 | /* DACs should rarely do this without a lot of testing */ | ||
| 471 | #define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2) | ||
| 472 | |||
| 470 | /** | 473 | /** |
| 471 | * drm_connector - central DRM connector control structure | 474 | * drm_connector - central DRM connector control structure |
| 472 | * @crtc: CRTC this connector is currently connected to, NULL if none | 475 | * @crtc: CRTC this connector is currently connected to, NULL if none |
| @@ -511,6 +514,8 @@ struct drm_connector { | |||
| 511 | u32 property_ids[DRM_CONNECTOR_MAX_PROPERTY]; | 514 | u32 property_ids[DRM_CONNECTOR_MAX_PROPERTY]; |
| 512 | uint64_t property_values[DRM_CONNECTOR_MAX_PROPERTY]; | 515 | uint64_t property_values[DRM_CONNECTOR_MAX_PROPERTY]; |
| 513 | 516 | ||
| 517 | uint8_t polled; /* DRM_CONNECTOR_POLL_* */ | ||
| 518 | |||
| 514 | /* requested DPMS state */ | 519 | /* requested DPMS state */ |
| 515 | int dpms; | 520 | int dpms; |
| 516 | 521 | ||
| @@ -521,7 +526,6 @@ struct drm_connector { | |||
| 521 | uint32_t encoder_ids[DRM_CONNECTOR_MAX_ENCODER]; | 526 | uint32_t encoder_ids[DRM_CONNECTOR_MAX_ENCODER]; |
| 522 | uint32_t force_encoder_id; | 527 | uint32_t force_encoder_id; |
| 523 | struct drm_encoder *encoder; /* currently active encoder */ | 528 | struct drm_encoder *encoder; /* currently active encoder */ |
| 524 | void *fb_helper_private; | ||
| 525 | }; | 529 | }; |
| 526 | 530 | ||
| 527 | /** | 531 | /** |
| @@ -548,16 +552,10 @@ struct drm_mode_set { | |||
| 548 | 552 | ||
| 549 | /** | 553 | /** |
| 550 | * struct drm_mode_config_funcs - configure CRTCs for a given screen layout | 554 | * struct drm_mode_config_funcs - configure CRTCs for a given screen layout |
| 551 | * @resize: adjust CRTCs as necessary for the proposed layout | ||
| 552 | * | ||
| 553 | * Currently only a resize hook is available. DRM will call back into the | ||
| 554 | * driver with a new screen width and height. If the driver can't support | ||
| 555 | * the proposed size, it can return false. Otherwise it should adjust | ||
| 556 | * the CRTC<->connector mappings as needed and update its view of the screen. | ||
| 557 | */ | 555 | */ |
| 558 | struct drm_mode_config_funcs { | 556 | struct drm_mode_config_funcs { |
| 559 | struct drm_framebuffer *(*fb_create)(struct drm_device *dev, struct drm_file *file_priv, struct drm_mode_fb_cmd *mode_cmd); | 557 | struct drm_framebuffer *(*fb_create)(struct drm_device *dev, struct drm_file *file_priv, struct drm_mode_fb_cmd *mode_cmd); |
| 560 | int (*fb_changed)(struct drm_device *dev); | 558 | void (*output_poll_changed)(struct drm_device *dev); |
| 561 | }; | 559 | }; |
| 562 | 560 | ||
| 563 | struct drm_mode_group { | 561 | struct drm_mode_group { |
| @@ -590,14 +588,15 @@ struct drm_mode_config { | |||
| 590 | 588 | ||
| 591 | struct list_head property_list; | 589 | struct list_head property_list; |
| 592 | 590 | ||
| 593 | /* in-kernel framebuffers - hung of filp_head in drm_framebuffer */ | ||
| 594 | struct list_head fb_kernel_list; | ||
| 595 | |||
| 596 | int min_width, min_height; | 591 | int min_width, min_height; |
| 597 | int max_width, max_height; | 592 | int max_width, max_height; |
| 598 | struct drm_mode_config_funcs *funcs; | 593 | struct drm_mode_config_funcs *funcs; |
| 599 | resource_size_t fb_base; | 594 | resource_size_t fb_base; |
| 600 | 595 | ||
| 596 | /* output poll support */ | ||
| 597 | bool poll_enabled; | ||
| 598 | struct delayed_slow_work output_poll_slow_work; | ||
| 599 | |||
| 601 | /* pointers to standard properties */ | 600 | /* pointers to standard properties */ |
| 602 | struct list_head property_blob_list; | 601 | struct list_head property_blob_list; |
| 603 | struct drm_property *edid_property; | 602 | struct drm_property *edid_property; |
| @@ -666,8 +665,6 @@ extern void drm_fb_release(struct drm_file *file_priv); | |||
| 666 | extern int drm_mode_group_init_legacy_group(struct drm_device *dev, struct drm_mode_group *group); | 665 | extern int drm_mode_group_init_legacy_group(struct drm_device *dev, struct drm_mode_group *group); |
| 667 | extern struct edid *drm_get_edid(struct drm_connector *connector, | 666 | extern struct edid *drm_get_edid(struct drm_connector *connector, |
| 668 | struct i2c_adapter *adapter); | 667 | struct i2c_adapter *adapter); |
| 669 | extern int drm_do_probe_ddc_edid(struct i2c_adapter *adapter, | ||
| 670 | unsigned char *buf, int len); | ||
| 671 | extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid); | 668 | extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid); |
| 672 | extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode); | 669 | extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode); |
| 673 | extern void drm_mode_remove(struct drm_connector *connector, struct drm_display_mode *mode); | 670 | extern void drm_mode_remove(struct drm_connector *connector, struct drm_display_mode *mode); |
| @@ -799,8 +796,14 @@ extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, | |||
| 799 | extern struct drm_display_mode *drm_gtf_mode(struct drm_device *dev, | 796 | extern struct drm_display_mode *drm_gtf_mode(struct drm_device *dev, |
| 800 | int hdisplay, int vdisplay, int vrefresh, | 797 | int hdisplay, int vdisplay, int vrefresh, |
| 801 | bool interlaced, int margins); | 798 | bool interlaced, int margins); |
| 799 | extern struct drm_display_mode *drm_gtf_mode_complex(struct drm_device *dev, | ||
| 800 | int hdisplay, int vdisplay, int vrefresh, | ||
| 801 | bool interlaced, int margins, int GTF_M, | ||
| 802 | int GTF_2C, int GTF_K, int GTF_2J); | ||
| 802 | extern int drm_add_modes_noedid(struct drm_connector *connector, | 803 | extern int drm_add_modes_noedid(struct drm_connector *connector, |
| 803 | int hdisplay, int vdisplay); | 804 | int hdisplay, int vdisplay); |
| 804 | 805 | ||
| 805 | extern bool drm_edid_is_valid(struct edid *edid); | 806 | extern bool drm_edid_is_valid(struct edid *edid); |
| 807 | struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev, | ||
| 808 | int hsize, int vsize, int fresh); | ||
| 806 | #endif /* __DRM_CRTC_H__ */ | 809 | #endif /* __DRM_CRTC_H__ */ |
diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h index b29e20168b5f..dc5873c21e45 100644 --- a/include/drm/drm_crtc_helper.h +++ b/include/drm/drm_crtc_helper.h | |||
| @@ -39,7 +39,6 @@ | |||
| 39 | 39 | ||
| 40 | #include <linux/fb.h> | 40 | #include <linux/fb.h> |
| 41 | 41 | ||
| 42 | #include "drm_fb_helper.h" | ||
| 43 | struct drm_crtc_helper_funcs { | 42 | struct drm_crtc_helper_funcs { |
| 44 | /* | 43 | /* |
| 45 | * Control power levels on the CRTC. If the mode passed in is | 44 | * Control power levels on the CRTC. If the mode passed in is |
| @@ -96,8 +95,6 @@ struct drm_connector_helper_funcs { | |||
| 96 | 95 | ||
| 97 | extern int drm_helper_probe_single_connector_modes(struct drm_connector *connector, uint32_t maxX, uint32_t maxY); | 96 | extern int drm_helper_probe_single_connector_modes(struct drm_connector *connector, uint32_t maxX, uint32_t maxY); |
| 98 | extern void drm_helper_disable_unused_functions(struct drm_device *dev); | 97 | extern void drm_helper_disable_unused_functions(struct drm_device *dev); |
| 99 | extern int drm_helper_hotplug_stage_two(struct drm_device *dev); | ||
| 100 | extern bool drm_helper_initial_config(struct drm_device *dev); | ||
| 101 | extern int drm_crtc_helper_set_config(struct drm_mode_set *set); | 98 | extern int drm_crtc_helper_set_config(struct drm_mode_set *set); |
| 102 | extern bool drm_crtc_helper_set_mode(struct drm_crtc *crtc, | 99 | extern bool drm_crtc_helper_set_mode(struct drm_crtc *crtc, |
| 103 | struct drm_display_mode *mode, | 100 | struct drm_display_mode *mode, |
| @@ -123,12 +120,14 @@ static inline void drm_encoder_helper_add(struct drm_encoder *encoder, | |||
| 123 | encoder->helper_private = (void *)funcs; | 120 | encoder->helper_private = (void *)funcs; |
| 124 | } | 121 | } |
| 125 | 122 | ||
| 126 | static inline int drm_connector_helper_add(struct drm_connector *connector, | 123 | static inline void drm_connector_helper_add(struct drm_connector *connector, |
| 127 | const struct drm_connector_helper_funcs *funcs) | 124 | const struct drm_connector_helper_funcs *funcs) |
| 128 | { | 125 | { |
| 129 | connector->helper_private = (void *)funcs; | 126 | connector->helper_private = (void *)funcs; |
| 130 | return drm_fb_helper_add_connector(connector); | ||
| 131 | } | 127 | } |
| 132 | 128 | ||
| 133 | extern int drm_helper_resume_force_mode(struct drm_device *dev); | 129 | extern int drm_helper_resume_force_mode(struct drm_device *dev); |
| 130 | extern void drm_kms_helper_poll_init(struct drm_device *dev); | ||
| 131 | extern void drm_kms_helper_poll_fini(struct drm_device *dev); | ||
| 132 | extern void drm_helper_hpd_irq_event(struct drm_device *dev); | ||
| 134 | #endif | 133 | #endif |
diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h index b4209898f115..39e2cc5c7e66 100644 --- a/include/drm/drm_edid.h +++ b/include/drm/drm_edid.h | |||
| @@ -120,7 +120,7 @@ struct detailed_non_pixel { | |||
| 120 | struct detailed_data_string str; | 120 | struct detailed_data_string str; |
| 121 | struct detailed_data_monitor_range range; | 121 | struct detailed_data_monitor_range range; |
| 122 | struct detailed_data_wpindex color; | 122 | struct detailed_data_wpindex color; |
| 123 | struct std_timing timings[5]; | 123 | struct std_timing timings[6]; |
| 124 | struct cvt_timing cvt[4]; | 124 | struct cvt_timing cvt[4]; |
| 125 | } data; | 125 | } data; |
| 126 | } __attribute__((packed)); | 126 | } __attribute__((packed)); |
| @@ -201,7 +201,4 @@ struct edid { | |||
| 201 | 201 | ||
| 202 | #define EDID_PRODUCT_ID(e) ((e)->prod_code[0] | ((e)->prod_code[1] << 8)) | 202 | #define EDID_PRODUCT_ID(e) ((e)->prod_code[0] | ((e)->prod_code[1] << 8)) |
| 203 | 203 | ||
| 204 | /* define the number of Extension EDID block */ | ||
| 205 | #define DRM_MAX_EDID_EXT_NUM 4 | ||
| 206 | |||
| 207 | #endif /* __DRM_EDID_H__ */ | 204 | #endif /* __DRM_EDID_H__ */ |
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h index 58c892a2cbfa..f0a6afc47e76 100644 --- a/include/drm/drm_fb_helper.h +++ b/include/drm/drm_fb_helper.h | |||
| @@ -30,17 +30,12 @@ | |||
| 30 | #ifndef DRM_FB_HELPER_H | 30 | #ifndef DRM_FB_HELPER_H |
| 31 | #define DRM_FB_HELPER_H | 31 | #define DRM_FB_HELPER_H |
| 32 | 32 | ||
| 33 | struct drm_fb_helper; | ||
| 34 | |||
| 33 | struct drm_fb_helper_crtc { | 35 | struct drm_fb_helper_crtc { |
| 34 | uint32_t crtc_id; | 36 | uint32_t crtc_id; |
| 35 | struct drm_mode_set mode_set; | 37 | struct drm_mode_set mode_set; |
| 36 | }; | 38 | struct drm_display_mode *desired_mode; |
| 37 | |||
| 38 | |||
| 39 | struct drm_fb_helper_funcs { | ||
| 40 | void (*gamma_set)(struct drm_crtc *crtc, u16 red, u16 green, | ||
| 41 | u16 blue, int regno); | ||
| 42 | void (*gamma_get)(struct drm_crtc *crtc, u16 *red, u16 *green, | ||
| 43 | u16 *blue, int regno); | ||
| 44 | }; | 39 | }; |
| 45 | 40 | ||
| 46 | /* mode specified on the command line */ | 41 | /* mode specified on the command line */ |
| @@ -57,8 +52,28 @@ struct drm_fb_helper_cmdline_mode { | |||
| 57 | bool margins; | 52 | bool margins; |
| 58 | }; | 53 | }; |
| 59 | 54 | ||
| 55 | struct drm_fb_helper_surface_size { | ||
| 56 | u32 fb_width; | ||
| 57 | u32 fb_height; | ||
| 58 | u32 surface_width; | ||
| 59 | u32 surface_height; | ||
| 60 | u32 surface_bpp; | ||
| 61 | u32 surface_depth; | ||
| 62 | }; | ||
| 63 | |||
| 64 | struct drm_fb_helper_funcs { | ||
| 65 | void (*gamma_set)(struct drm_crtc *crtc, u16 red, u16 green, | ||
| 66 | u16 blue, int regno); | ||
| 67 | void (*gamma_get)(struct drm_crtc *crtc, u16 *red, u16 *green, | ||
| 68 | u16 *blue, int regno); | ||
| 69 | |||
| 70 | int (*fb_probe)(struct drm_fb_helper *helper, | ||
| 71 | struct drm_fb_helper_surface_size *sizes); | ||
| 72 | }; | ||
| 73 | |||
| 60 | struct drm_fb_helper_connector { | 74 | struct drm_fb_helper_connector { |
| 61 | struct drm_fb_helper_cmdline_mode cmdline_mode; | 75 | struct drm_fb_helper_cmdline_mode cmdline_mode; |
| 76 | struct drm_connector *connector; | ||
| 62 | }; | 77 | }; |
| 63 | 78 | ||
| 64 | struct drm_fb_helper { | 79 | struct drm_fb_helper { |
| @@ -67,24 +82,26 @@ struct drm_fb_helper { | |||
| 67 | struct drm_display_mode *mode; | 82 | struct drm_display_mode *mode; |
| 68 | int crtc_count; | 83 | int crtc_count; |
| 69 | struct drm_fb_helper_crtc *crtc_info; | 84 | struct drm_fb_helper_crtc *crtc_info; |
| 85 | int connector_count; | ||
| 86 | struct drm_fb_helper_connector **connector_info; | ||
| 70 | struct drm_fb_helper_funcs *funcs; | 87 | struct drm_fb_helper_funcs *funcs; |
| 71 | int conn_limit; | 88 | int conn_limit; |
| 89 | struct fb_info *fbdev; | ||
| 90 | u32 pseudo_palette[17]; | ||
| 72 | struct list_head kernel_fb_list; | 91 | struct list_head kernel_fb_list; |
| 92 | |||
| 93 | /* we got a hotplug but fbdev wasn't running the console | ||
| 94 | delay until next set_par */ | ||
| 95 | bool delayed_hotplug; | ||
| 73 | }; | 96 | }; |
| 74 | 97 | ||
| 75 | int drm_fb_helper_single_fb_probe(struct drm_device *dev, | 98 | int drm_fb_helper_single_fb_probe(struct drm_fb_helper *helper, |
| 76 | int preferred_bpp, | 99 | int preferred_bpp); |
| 77 | int (*fb_create)(struct drm_device *dev, | 100 | |
| 78 | uint32_t fb_width, | 101 | int drm_fb_helper_init(struct drm_device *dev, |
| 79 | uint32_t fb_height, | 102 | struct drm_fb_helper *helper, int crtc_count, |
| 80 | uint32_t surface_width, | 103 | int max_conn); |
| 81 | uint32_t surface_height, | 104 | void drm_fb_helper_fini(struct drm_fb_helper *helper); |
| 82 | uint32_t surface_depth, | ||
| 83 | uint32_t surface_bpp, | ||
| 84 | struct drm_framebuffer **fb_ptr)); | ||
| 85 | int drm_fb_helper_init_crtc_count(struct drm_fb_helper *helper, int crtc_count, | ||
| 86 | int max_conn); | ||
| 87 | void drm_fb_helper_free(struct drm_fb_helper *helper); | ||
| 88 | int drm_fb_helper_blank(int blank, struct fb_info *info); | 105 | int drm_fb_helper_blank(int blank, struct fb_info *info); |
| 89 | int drm_fb_helper_pan_display(struct fb_var_screeninfo *var, | 106 | int drm_fb_helper_pan_display(struct fb_var_screeninfo *var, |
| 90 | struct fb_info *info); | 107 | struct fb_info *info); |
| @@ -99,13 +116,15 @@ int drm_fb_helper_setcolreg(unsigned regno, | |||
| 99 | struct fb_info *info); | 116 | struct fb_info *info); |
| 100 | 117 | ||
| 101 | void drm_fb_helper_restore(void); | 118 | void drm_fb_helper_restore(void); |
| 102 | void drm_fb_helper_fill_var(struct fb_info *info, struct drm_framebuffer *fb, | 119 | void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper, |
| 103 | uint32_t fb_width, uint32_t fb_height); | 120 | uint32_t fb_width, uint32_t fb_height); |
| 104 | void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch, | 121 | void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch, |
| 105 | uint32_t depth); | 122 | uint32_t depth); |
| 106 | 123 | ||
| 107 | int drm_fb_helper_add_connector(struct drm_connector *connector); | ||
| 108 | int drm_fb_helper_parse_command_line(struct drm_device *dev); | ||
| 109 | int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info); | 124 | int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info); |
| 110 | 125 | ||
| 126 | bool drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper); | ||
| 127 | bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel); | ||
| 128 | int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper); | ||
| 129 | |||
| 111 | #endif | 130 | #endif |
diff --git a/include/drm/drm_fixed.h b/include/drm/drm_fixed.h new file mode 100644 index 000000000000..4a08a664ff1f --- /dev/null +++ b/include/drm/drm_fixed.h | |||
| @@ -0,0 +1,67 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2009 Red Hat Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | * Authors: Dave Airlie | ||
| 23 | */ | ||
| 24 | #ifndef DRM_FIXED_H | ||
| 25 | #define DRM_FIXED_H | ||
| 26 | |||
| 27 | typedef union dfixed { | ||
| 28 | u32 full; | ||
| 29 | } fixed20_12; | ||
| 30 | |||
| 31 | |||
| 32 | #define dfixed_const(A) (u32)(((A) << 12))/* + ((B + 0.000122)*4096)) */ | ||
| 33 | #define dfixed_const_half(A) (u32)(((A) << 12) + 2048) | ||
| 34 | #define dfixed_const_666(A) (u32)(((A) << 12) + 2731) | ||
| 35 | #define dfixed_const_8(A) (u32)(((A) << 12) + 3277) | ||
| 36 | #define dfixed_mul(A, B) ((u64)((u64)(A).full * (B).full + 2048) >> 12) | ||
| 37 | #define dfixed_init(A) { .full = dfixed_const((A)) } | ||
| 38 | #define dfixed_init_half(A) { .full = dfixed_const_half((A)) } | ||
| 39 | #define dfixed_trunc(A) ((A).full >> 12) | ||
| 40 | |||
| 41 | static inline u32 dfixed_floor(fixed20_12 A) | ||
| 42 | { | ||
| 43 | u32 non_frac = dfixed_trunc(A); | ||
| 44 | |||
| 45 | return dfixed_const(non_frac); | ||
| 46 | } | ||
| 47 | |||
| 48 | static inline u32 dfixed_ceil(fixed20_12 A) | ||
| 49 | { | ||
| 50 | u32 non_frac = dfixed_trunc(A); | ||
| 51 | |||
| 52 | if (A.full > dfixed_const(non_frac)) | ||
| 53 | return dfixed_const(non_frac + 1); | ||
| 54 | else | ||
| 55 | return dfixed_const(non_frac); | ||
| 56 | } | ||
| 57 | |||
| 58 | static inline u32 dfixed_div(fixed20_12 A, fixed20_12 B) | ||
| 59 | { | ||
| 60 | u64 tmp = ((u64)A.full << 13); | ||
| 61 | |||
| 62 | do_div(tmp, B.full); | ||
| 63 | tmp += 1; | ||
| 64 | tmp /= 2; | ||
| 65 | return lower_32_bits(tmp); | ||
| 66 | } | ||
| 67 | #endif | ||
diff --git a/include/drm/radeon_drm.h b/include/drm/radeon_drm.h index 81e614bf2dc3..3ff9fc071dfe 100644 --- a/include/drm/radeon_drm.h +++ b/include/drm/radeon_drm.h | |||
| @@ -902,6 +902,7 @@ struct drm_radeon_cs { | |||
| 902 | #define RADEON_INFO_NUM_GB_PIPES 0x01 | 902 | #define RADEON_INFO_NUM_GB_PIPES 0x01 |
| 903 | #define RADEON_INFO_NUM_Z_PIPES 0x02 | 903 | #define RADEON_INFO_NUM_Z_PIPES 0x02 |
| 904 | #define RADEON_INFO_ACCEL_WORKING 0x03 | 904 | #define RADEON_INFO_ACCEL_WORKING 0x03 |
| 905 | #define RADEON_INFO_CRTC_FROM_ID 0x04 | ||
| 905 | 906 | ||
| 906 | struct drm_radeon_info { | 907 | struct drm_radeon_info { |
| 907 | uint32_t request; | 908 | uint32_t request; |
diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h index 81eb9f45883c..267a86c74e2e 100644 --- a/include/drm/ttm/ttm_bo_api.h +++ b/include/drm/ttm/ttm_bo_api.h | |||
| @@ -66,6 +66,26 @@ struct ttm_placement { | |||
| 66 | const uint32_t *busy_placement; | 66 | const uint32_t *busy_placement; |
| 67 | }; | 67 | }; |
| 68 | 68 | ||
| 69 | /** | ||
| 70 | * struct ttm_bus_placement | ||
| 71 | * | ||
| 72 | * @addr: mapped virtual address | ||
| 73 | * @base: bus base address | ||
| 74 | * @is_iomem: is this io memory ? | ||
| 75 | * @size: size in byte | ||
| 76 | * @offset: offset from the base address | ||
| 77 | * | ||
| 78 | * Structure indicating the bus placement of an object. | ||
| 79 | */ | ||
| 80 | struct ttm_bus_placement { | ||
| 81 | void *addr; | ||
| 82 | unsigned long base; | ||
| 83 | unsigned long size; | ||
| 84 | unsigned long offset; | ||
| 85 | bool is_iomem; | ||
| 86 | bool io_reserved; | ||
| 87 | }; | ||
| 88 | |||
| 69 | 89 | ||
| 70 | /** | 90 | /** |
| 71 | * struct ttm_mem_reg | 91 | * struct ttm_mem_reg |
| @@ -75,6 +95,7 @@ struct ttm_placement { | |||
| 75 | * @num_pages: Actual size of memory region in pages. | 95 | * @num_pages: Actual size of memory region in pages. |
| 76 | * @page_alignment: Page alignment. | 96 | * @page_alignment: Page alignment. |
| 77 | * @placement: Placement flags. | 97 | * @placement: Placement flags. |
| 98 | * @bus: Placement on io bus accessible to the CPU | ||
| 78 | * | 99 | * |
| 79 | * Structure indicating the placement and space resources used by a | 100 | * Structure indicating the placement and space resources used by a |
| 80 | * buffer object. | 101 | * buffer object. |
| @@ -87,6 +108,7 @@ struct ttm_mem_reg { | |||
| 87 | uint32_t page_alignment; | 108 | uint32_t page_alignment; |
| 88 | uint32_t mem_type; | 109 | uint32_t mem_type; |
| 89 | uint32_t placement; | 110 | uint32_t placement; |
| 111 | struct ttm_bus_placement bus; | ||
| 90 | }; | 112 | }; |
| 91 | 113 | ||
| 92 | /** | 114 | /** |
| @@ -274,6 +296,7 @@ struct ttm_bo_kmap_obj { | |||
| 274 | ttm_bo_map_kmap = 3, | 296 | ttm_bo_map_kmap = 3, |
| 275 | ttm_bo_map_premapped = 4 | TTM_BO_MAP_IOMEM_MASK, | 297 | ttm_bo_map_premapped = 4 | TTM_BO_MAP_IOMEM_MASK, |
| 276 | } bo_kmap_type; | 298 | } bo_kmap_type; |
| 299 | struct ttm_buffer_object *bo; | ||
| 277 | }; | 300 | }; |
| 278 | 301 | ||
| 279 | /** | 302 | /** |
| @@ -313,7 +336,8 @@ extern int ttm_bo_wait(struct ttm_buffer_object *bo, bool lazy, | |||
| 313 | * @bo: The buffer object. | 336 | * @bo: The buffer object. |
| 314 | * @placement: Proposed placement for the buffer object. | 337 | * @placement: Proposed placement for the buffer object. |
| 315 | * @interruptible: Sleep interruptible if sleeping. | 338 | * @interruptible: Sleep interruptible if sleeping. |
| 316 | * @no_wait: Return immediately if the buffer is busy. | 339 | * @no_wait_reserve: Return immediately if other buffers are busy. |
| 340 | * @no_wait_gpu: Return immediately if the GPU is busy. | ||
| 317 | * | 341 | * |
| 318 | * Changes placement and caching policy of the buffer object | 342 | * Changes placement and caching policy of the buffer object |
| 319 | * according proposed placement. | 343 | * according proposed placement. |
| @@ -325,7 +349,8 @@ extern int ttm_bo_wait(struct ttm_buffer_object *bo, bool lazy, | |||
| 325 | */ | 349 | */ |
| 326 | extern int ttm_bo_validate(struct ttm_buffer_object *bo, | 350 | extern int ttm_bo_validate(struct ttm_buffer_object *bo, |
| 327 | struct ttm_placement *placement, | 351 | struct ttm_placement *placement, |
| 328 | bool interruptible, bool no_wait); | 352 | bool interruptible, bool no_wait_reserve, |
| 353 | bool no_wait_gpu); | ||
| 329 | 354 | ||
| 330 | /** | 355 | /** |
| 331 | * ttm_bo_unref | 356 | * ttm_bo_unref |
| @@ -337,6 +362,23 @@ extern int ttm_bo_validate(struct ttm_buffer_object *bo, | |||
| 337 | extern void ttm_bo_unref(struct ttm_buffer_object **bo); | 362 | extern void ttm_bo_unref(struct ttm_buffer_object **bo); |
| 338 | 363 | ||
| 339 | /** | 364 | /** |
| 365 | * ttm_bo_lock_delayed_workqueue | ||
| 366 | * | ||
| 367 | * Prevent the delayed workqueue from running. | ||
| 368 | * Returns | ||
| 369 | * True if the workqueue was queued at the time | ||
| 370 | */ | ||
| 371 | extern int ttm_bo_lock_delayed_workqueue(struct ttm_bo_device *bdev); | ||
| 372 | |||
| 373 | /** | ||
| 374 | * ttm_bo_unlock_delayed_workqueue | ||
| 375 | * | ||
| 376 | * Allows the delayed workqueue to run. | ||
| 377 | */ | ||
| 378 | extern void ttm_bo_unlock_delayed_workqueue(struct ttm_bo_device *bdev, | ||
| 379 | int resched); | ||
| 380 | |||
| 381 | /** | ||
| 340 | * ttm_bo_synccpu_write_grab | 382 | * ttm_bo_synccpu_write_grab |
| 341 | * | 383 | * |
| 342 | * @bo: The buffer object: | 384 | * @bo: The buffer object: |
diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h index 6b9db917e717..0ea602da43e7 100644 --- a/include/drm/ttm/ttm_bo_driver.h +++ b/include/drm/ttm/ttm_bo_driver.h | |||
| @@ -176,8 +176,6 @@ struct ttm_tt { | |||
| 176 | 176 | ||
| 177 | #define TTM_MEMTYPE_FLAG_FIXED (1 << 0) /* Fixed (on-card) PCI memory */ | 177 | #define TTM_MEMTYPE_FLAG_FIXED (1 << 0) /* Fixed (on-card) PCI memory */ |
| 178 | #define TTM_MEMTYPE_FLAG_MAPPABLE (1 << 1) /* Memory mappable */ | 178 | #define TTM_MEMTYPE_FLAG_MAPPABLE (1 << 1) /* Memory mappable */ |
| 179 | #define TTM_MEMTYPE_FLAG_NEEDS_IOREMAP (1 << 2) /* Fixed memory needs ioremap | ||
| 180 | before kernel access. */ | ||
| 181 | #define TTM_MEMTYPE_FLAG_CMA (1 << 3) /* Can't map aperture */ | 179 | #define TTM_MEMTYPE_FLAG_CMA (1 << 3) /* Can't map aperture */ |
| 182 | 180 | ||
| 183 | /** | 181 | /** |
| @@ -189,13 +187,6 @@ struct ttm_tt { | |||
| 189 | * managed by this memory type. | 187 | * managed by this memory type. |
| 190 | * @gpu_offset: If used, the GPU offset of the first managed page of | 188 | * @gpu_offset: If used, the GPU offset of the first managed page of |
| 191 | * fixed memory or the first managed location in an aperture. | 189 | * fixed memory or the first managed location in an aperture. |
| 192 | * @io_offset: The io_offset of the first managed page of IO memory or | ||
| 193 | * the first managed location in an aperture. For TTM_MEMTYPE_FLAG_CMA | ||
| 194 | * memory, this should be set to NULL. | ||
| 195 | * @io_size: The size of a managed IO region (fixed memory or aperture). | ||
| 196 | * @io_addr: Virtual kernel address if the io region is pre-mapped. For | ||
| 197 | * TTM_MEMTYPE_FLAG_NEEDS_IOREMAP there is no pre-mapped io map and | ||
| 198 | * @io_addr should be set to NULL. | ||
| 199 | * @size: Size of the managed region. | 190 | * @size: Size of the managed region. |
| 200 | * @available_caching: A mask of available caching types, TTM_PL_FLAG_XX, | 191 | * @available_caching: A mask of available caching types, TTM_PL_FLAG_XX, |
| 201 | * as defined in ttm_placement_common.h | 192 | * as defined in ttm_placement_common.h |
| @@ -221,9 +212,6 @@ struct ttm_mem_type_manager { | |||
| 221 | bool use_type; | 212 | bool use_type; |
| 222 | uint32_t flags; | 213 | uint32_t flags; |
| 223 | unsigned long gpu_offset; | 214 | unsigned long gpu_offset; |
| 224 | unsigned long io_offset; | ||
| 225 | unsigned long io_size; | ||
| 226 | void *io_addr; | ||
| 227 | uint64_t size; | 215 | uint64_t size; |
| 228 | uint32_t available_caching; | 216 | uint32_t available_caching; |
| 229 | uint32_t default_caching; | 217 | uint32_t default_caching; |
| @@ -311,7 +299,8 @@ struct ttm_bo_driver { | |||
| 311 | */ | 299 | */ |
| 312 | int (*move) (struct ttm_buffer_object *bo, | 300 | int (*move) (struct ttm_buffer_object *bo, |
| 313 | bool evict, bool interruptible, | 301 | bool evict, bool interruptible, |
| 314 | bool no_wait, struct ttm_mem_reg *new_mem); | 302 | bool no_wait_reserve, bool no_wait_gpu, |
| 303 | struct ttm_mem_reg *new_mem); | ||
| 315 | 304 | ||
| 316 | /** | 305 | /** |
| 317 | * struct ttm_bo_driver_member verify_access | 306 | * struct ttm_bo_driver_member verify_access |
| @@ -351,12 +340,21 @@ struct ttm_bo_driver { | |||
| 351 | struct ttm_mem_reg *new_mem); | 340 | struct ttm_mem_reg *new_mem); |
| 352 | /* notify the driver we are taking a fault on this BO | 341 | /* notify the driver we are taking a fault on this BO |
| 353 | * and have reserved it */ | 342 | * and have reserved it */ |
| 354 | void (*fault_reserve_notify)(struct ttm_buffer_object *bo); | 343 | int (*fault_reserve_notify)(struct ttm_buffer_object *bo); |
| 355 | 344 | ||
| 356 | /** | 345 | /** |
| 357 | * notify the driver that we're about to swap out this bo | 346 | * notify the driver that we're about to swap out this bo |
| 358 | */ | 347 | */ |
| 359 | void (*swap_notify) (struct ttm_buffer_object *bo); | 348 | void (*swap_notify) (struct ttm_buffer_object *bo); |
| 349 | |||
| 350 | /** | ||
| 351 | * Driver callback on when mapping io memory (for bo_move_memcpy | ||
| 352 | * for instance). TTM will take care to call io_mem_free whenever | ||
| 353 | * the mapping is not use anymore. io_mem_reserve & io_mem_free | ||
| 354 | * are balanced. | ||
| 355 | */ | ||
| 356 | int (*io_mem_reserve)(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem); | ||
| 357 | void (*io_mem_free)(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem); | ||
| 360 | }; | 358 | }; |
| 361 | 359 | ||
| 362 | /** | 360 | /** |
| @@ -633,7 +631,8 @@ extern bool ttm_mem_reg_is_pci(struct ttm_bo_device *bdev, | |||
| 633 | * @proposed_placement: Proposed new placement for the buffer object. | 631 | * @proposed_placement: Proposed new placement for the buffer object. |
| 634 | * @mem: A struct ttm_mem_reg. | 632 | * @mem: A struct ttm_mem_reg. |
| 635 | * @interruptible: Sleep interruptible when sliping. | 633 | * @interruptible: Sleep interruptible when sliping. |
| 636 | * @no_wait: Don't sleep waiting for space to become available. | 634 | * @no_wait_reserve: Return immediately if other buffers are busy. |
| 635 | * @no_wait_gpu: Return immediately if the GPU is busy. | ||
| 637 | * | 636 | * |
| 638 | * Allocate memory space for the buffer object pointed to by @bo, using | 637 | * Allocate memory space for the buffer object pointed to by @bo, using |
| 639 | * the placement flags in @mem, potentially evicting other idle buffer objects. | 638 | * the placement flags in @mem, potentially evicting other idle buffer objects. |
| @@ -647,7 +646,8 @@ extern bool ttm_mem_reg_is_pci(struct ttm_bo_device *bdev, | |||
| 647 | extern int ttm_bo_mem_space(struct ttm_buffer_object *bo, | 646 | extern int ttm_bo_mem_space(struct ttm_buffer_object *bo, |
| 648 | struct ttm_placement *placement, | 647 | struct ttm_placement *placement, |
| 649 | struct ttm_mem_reg *mem, | 648 | struct ttm_mem_reg *mem, |
| 650 | bool interruptible, bool no_wait); | 649 | bool interruptible, |
| 650 | bool no_wait_reserve, bool no_wait_gpu); | ||
| 651 | /** | 651 | /** |
| 652 | * ttm_bo_wait_for_cpu | 652 | * ttm_bo_wait_for_cpu |
| 653 | * | 653 | * |
| @@ -682,6 +682,11 @@ extern int ttm_bo_pci_offset(struct ttm_bo_device *bdev, | |||
| 682 | unsigned long *bus_offset, | 682 | unsigned long *bus_offset, |
| 683 | unsigned long *bus_size); | 683 | unsigned long *bus_size); |
| 684 | 684 | ||
| 685 | extern int ttm_mem_io_reserve(struct ttm_bo_device *bdev, | ||
| 686 | struct ttm_mem_reg *mem); | ||
| 687 | extern void ttm_mem_io_free(struct ttm_bo_device *bdev, | ||
| 688 | struct ttm_mem_reg *mem); | ||
| 689 | |||
| 685 | extern void ttm_bo_global_release(struct ttm_global_reference *ref); | 690 | extern void ttm_bo_global_release(struct ttm_global_reference *ref); |
| 686 | extern int ttm_bo_global_init(struct ttm_global_reference *ref); | 691 | extern int ttm_bo_global_init(struct ttm_global_reference *ref); |
| 687 | 692 | ||
| @@ -798,7 +803,8 @@ extern int ttm_bo_wait_unreserved(struct ttm_buffer_object *bo, | |||
| 798 | * | 803 | * |
| 799 | * @bo: A pointer to a struct ttm_buffer_object. | 804 | * @bo: A pointer to a struct ttm_buffer_object. |
| 800 | * @evict: 1: This is an eviction. Don't try to pipeline. | 805 | * @evict: 1: This is an eviction. Don't try to pipeline. |
| 801 | * @no_wait: Never sleep, but rather return with -EBUSY. | 806 | * @no_wait_reserve: Return immediately if other buffers are busy. |
| 807 | * @no_wait_gpu: Return immediately if the GPU is busy. | ||
| 802 | * @new_mem: struct ttm_mem_reg indicating where to move. | 808 | * @new_mem: struct ttm_mem_reg indicating where to move. |
| 803 | * | 809 | * |
| 804 | * Optimized move function for a buffer object with both old and | 810 | * Optimized move function for a buffer object with both old and |
| @@ -812,15 +818,16 @@ extern int ttm_bo_wait_unreserved(struct ttm_buffer_object *bo, | |||
| 812 | */ | 818 | */ |
| 813 | 819 | ||
| 814 | extern int ttm_bo_move_ttm(struct ttm_buffer_object *bo, | 820 | extern int ttm_bo_move_ttm(struct ttm_buffer_object *bo, |
| 815 | bool evict, bool no_wait, | 821 | bool evict, bool no_wait_reserve, |
| 816 | struct ttm_mem_reg *new_mem); | 822 | bool no_wait_gpu, struct ttm_mem_reg *new_mem); |
| 817 | 823 | ||
| 818 | /** | 824 | /** |
| 819 | * ttm_bo_move_memcpy | 825 | * ttm_bo_move_memcpy |
| 820 | * | 826 | * |
| 821 | * @bo: A pointer to a struct ttm_buffer_object. | 827 | * @bo: A pointer to a struct ttm_buffer_object. |
| 822 | * @evict: 1: This is an eviction. Don't try to pipeline. | 828 | * @evict: 1: This is an eviction. Don't try to pipeline. |
| 823 | * @no_wait: Never sleep, but rather return with -EBUSY. | 829 | * @no_wait_reserve: Return immediately if other buffers are busy. |
| 830 | * @no_wait_gpu: Return immediately if the GPU is busy. | ||
| 824 | * @new_mem: struct ttm_mem_reg indicating where to move. | 831 | * @new_mem: struct ttm_mem_reg indicating where to move. |
| 825 | * | 832 | * |
| 826 | * Fallback move function for a mappable buffer object in mappable memory. | 833 | * Fallback move function for a mappable buffer object in mappable memory. |
| @@ -834,8 +841,8 @@ extern int ttm_bo_move_ttm(struct ttm_buffer_object *bo, | |||
| 834 | */ | 841 | */ |
| 835 | 842 | ||
| 836 | extern int ttm_bo_move_memcpy(struct ttm_buffer_object *bo, | 843 | extern int ttm_bo_move_memcpy(struct ttm_buffer_object *bo, |
| 837 | bool evict, | 844 | bool evict, bool no_wait_reserve, |
| 838 | bool no_wait, struct ttm_mem_reg *new_mem); | 845 | bool no_wait_gpu, struct ttm_mem_reg *new_mem); |
| 839 | 846 | ||
| 840 | /** | 847 | /** |
| 841 | * ttm_bo_free_old_node | 848 | * ttm_bo_free_old_node |
| @@ -854,7 +861,8 @@ extern void ttm_bo_free_old_node(struct ttm_buffer_object *bo); | |||
| 854 | * @sync_obj_arg: An argument to pass to the sync object idle / wait | 861 | * @sync_obj_arg: An argument to pass to the sync object idle / wait |
| 855 | * functions. | 862 | * functions. |
| 856 | * @evict: This is an evict move. Don't return until the buffer is idle. | 863 | * @evict: This is an evict move. Don't return until the buffer is idle. |
| 857 | * @no_wait: Never sleep, but rather return with -EBUSY. | 864 | * @no_wait_reserve: Return immediately if other buffers are busy. |
| 865 | * @no_wait_gpu: Return immediately if the GPU is busy. | ||
| 858 | * @new_mem: struct ttm_mem_reg indicating where to move. | 866 | * @new_mem: struct ttm_mem_reg indicating where to move. |
| 859 | * | 867 | * |
| 860 | * Accelerated move function to be called when an accelerated move | 868 | * Accelerated move function to be called when an accelerated move |
| @@ -868,7 +876,8 @@ extern void ttm_bo_free_old_node(struct ttm_buffer_object *bo); | |||
| 868 | extern int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo, | 876 | extern int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo, |
| 869 | void *sync_obj, | 877 | void *sync_obj, |
| 870 | void *sync_obj_arg, | 878 | void *sync_obj_arg, |
| 871 | bool evict, bool no_wait, | 879 | bool evict, bool no_wait_reserve, |
| 880 | bool no_wait_gpu, | ||
| 872 | struct ttm_mem_reg *new_mem); | 881 | struct ttm_mem_reg *new_mem); |
| 873 | /** | 882 | /** |
| 874 | * ttm_io_prot | 883 | * ttm_io_prot |
diff --git a/include/drm/ttm/ttm_page_alloc.h b/include/drm/ttm/ttm_page_alloc.h new file mode 100644 index 000000000000..8bb4de567b2c --- /dev/null +++ b/include/drm/ttm/ttm_page_alloc.h | |||
| @@ -0,0 +1,74 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) Red Hat Inc. | ||
| 3 | |||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sub license, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice (including the | ||
| 12 | * next paragraph) shall be included in all copies or substantial portions | ||
| 13 | * of the Software. | ||
| 14 | * | ||
| 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 16 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL | ||
| 18 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
| 20 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
| 21 | * DEALINGS IN THE SOFTWARE. | ||
| 22 | * | ||
| 23 | * Authors: Dave Airlie <airlied@redhat.com> | ||
| 24 | * Jerome Glisse <jglisse@redhat.com> | ||
| 25 | */ | ||
| 26 | #ifndef TTM_PAGE_ALLOC | ||
| 27 | #define TTM_PAGE_ALLOC | ||
| 28 | |||
| 29 | #include "ttm_bo_driver.h" | ||
| 30 | #include "ttm_memory.h" | ||
| 31 | |||
| 32 | /** | ||
| 33 | * Get count number of pages from pool to pages list. | ||
| 34 | * | ||
| 35 | * @pages: heado of empty linked list where pages are filled. | ||
| 36 | * @flags: ttm flags for page allocation. | ||
| 37 | * @cstate: ttm caching state for the page. | ||
| 38 | * @count: number of pages to allocate. | ||
| 39 | */ | ||
| 40 | int ttm_get_pages(struct list_head *pages, | ||
| 41 | int flags, | ||
| 42 | enum ttm_caching_state cstate, | ||
| 43 | unsigned count); | ||
| 44 | /** | ||
| 45 | * Put linked list of pages to pool. | ||
| 46 | * | ||
| 47 | * @pages: list of pages to free. | ||
| 48 | * @page_count: number of pages in the list. Zero can be passed for unknown | ||
| 49 | * count. | ||
| 50 | * @flags: ttm flags for page allocation. | ||
| 51 | * @cstate: ttm caching state. | ||
| 52 | */ | ||
| 53 | void ttm_put_pages(struct list_head *pages, | ||
| 54 | unsigned page_count, | ||
| 55 | int flags, | ||
| 56 | enum ttm_caching_state cstate); | ||
| 57 | /** | ||
| 58 | * Initialize pool allocator. | ||
| 59 | * | ||
| 60 | * Pool allocator is internaly reference counted so it can be initialized | ||
| 61 | * multiple times but ttm_page_alloc_fini has to be called same number of | ||
| 62 | * times. | ||
| 63 | */ | ||
| 64 | int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages); | ||
| 65 | /** | ||
| 66 | * Free pool allocator. | ||
| 67 | */ | ||
| 68 | void ttm_page_alloc_fini(void); | ||
| 69 | |||
| 70 | /** | ||
| 71 | * Output the state of pools to debugfs file | ||
| 72 | */ | ||
| 73 | extern int ttm_page_alloc_debugfs(struct seq_file *m, void *data); | ||
| 74 | #endif | ||
diff --git a/include/linux/altera_jtaguart.h b/include/linux/altera_jtaguart.h new file mode 100644 index 000000000000..953b178a1650 --- /dev/null +++ b/include/linux/altera_jtaguart.h | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | /* | ||
| 2 | * altera_jtaguart.h -- Altera JTAG UART driver defines. | ||
| 3 | */ | ||
| 4 | |||
| 5 | #ifndef __ALTJUART_H | ||
| 6 | #define __ALTJUART_H | ||
| 7 | |||
| 8 | #define ALTERA_JTAGUART_MAJOR 204 | ||
| 9 | #define ALTERA_JTAGUART_MINOR 186 | ||
| 10 | |||
| 11 | struct altera_jtaguart_platform_uart { | ||
| 12 | unsigned long mapbase; /* Physical address base */ | ||
| 13 | unsigned int irq; /* Interrupt vector */ | ||
| 14 | }; | ||
| 15 | |||
| 16 | #endif /* __ALTJUART_H */ | ||
diff --git a/include/linux/altera_uart.h b/include/linux/altera_uart.h new file mode 100644 index 000000000000..8d441064a30d --- /dev/null +++ b/include/linux/altera_uart.h | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | /* | ||
| 2 | * altera_uart.h -- Altera UART driver defines. | ||
| 3 | */ | ||
| 4 | |||
| 5 | #ifndef __ALTUART_H | ||
| 6 | #define __ALTUART_H | ||
| 7 | |||
| 8 | struct altera_uart_platform_uart { | ||
| 9 | unsigned long mapbase; /* Physical address base */ | ||
| 10 | unsigned int irq; /* Interrupt vector */ | ||
| 11 | unsigned int uartclk; /* UART clock rate */ | ||
| 12 | }; | ||
| 13 | |||
| 14 | #endif /* __ALTUART_H */ | ||
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index bd0e3c6f323f..e6e0cb5437e6 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
| 15 | #include <linux/fs.h> | 15 | #include <linux/fs.h> |
| 16 | #include <linux/sched.h> | 16 | #include <linux/sched.h> |
| 17 | #include <linux/timer.h> | ||
| 17 | #include <linux/writeback.h> | 18 | #include <linux/writeback.h> |
| 18 | #include <asm/atomic.h> | 19 | #include <asm/atomic.h> |
| 19 | 20 | ||
| @@ -88,6 +89,8 @@ struct backing_dev_info { | |||
| 88 | 89 | ||
| 89 | struct device *dev; | 90 | struct device *dev; |
| 90 | 91 | ||
| 92 | struct timer_list laptop_mode_wb_timer; | ||
| 93 | |||
| 91 | #ifdef CONFIG_DEBUG_FS | 94 | #ifdef CONFIG_DEBUG_FS |
| 92 | struct dentry *debug_dir; | 95 | struct dentry *debug_dir; |
| 93 | struct dentry *debug_stats; | 96 | struct dentry *debug_stats; |
| @@ -103,9 +106,10 @@ int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev); | |||
| 103 | void bdi_unregister(struct backing_dev_info *bdi); | 106 | void bdi_unregister(struct backing_dev_info *bdi); |
| 104 | int bdi_setup_and_register(struct backing_dev_info *, char *, unsigned int); | 107 | int bdi_setup_and_register(struct backing_dev_info *, char *, unsigned int); |
| 105 | void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb, | 108 | void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb, |
| 106 | long nr_pages); | 109 | long nr_pages, int sb_locked); |
| 107 | int bdi_writeback_task(struct bdi_writeback *wb); | 110 | int bdi_writeback_task(struct bdi_writeback *wb); |
| 108 | int bdi_has_dirty_io(struct backing_dev_info *bdi); | 111 | int bdi_has_dirty_io(struct backing_dev_info *bdi); |
| 112 | void bdi_arm_supers_timer(void); | ||
| 109 | 113 | ||
| 110 | extern spinlock_t bdi_lock; | 114 | extern spinlock_t bdi_lock; |
| 111 | extern struct list_head bdi_list; | 115 | extern struct list_head bdi_list; |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 6690e8bae7bb..8b7f5e0914ad 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -186,15 +186,19 @@ struct request { | |||
| 186 | }; | 186 | }; |
| 187 | 187 | ||
| 188 | /* | 188 | /* |
| 189 | * two pointers are available for the IO schedulers, if they need | 189 | * Three pointers are available for the IO schedulers, if they need |
| 190 | * more they have to dynamically allocate it. | 190 | * more they have to dynamically allocate it. |
| 191 | */ | 191 | */ |
| 192 | void *elevator_private; | 192 | void *elevator_private; |
| 193 | void *elevator_private2; | 193 | void *elevator_private2; |
| 194 | void *elevator_private3; | ||
| 194 | 195 | ||
| 195 | struct gendisk *rq_disk; | 196 | struct gendisk *rq_disk; |
| 196 | unsigned long start_time; | 197 | unsigned long start_time; |
| 197 | 198 | #ifdef CONFIG_BLK_CGROUP | |
| 199 | unsigned long long start_time_ns; | ||
| 200 | unsigned long long io_start_time_ns; /* when passed to hardware */ | ||
| 201 | #endif | ||
| 198 | /* Number of scatter-gather DMA addr+len pairs after | 202 | /* Number of scatter-gather DMA addr+len pairs after |
| 199 | * physical address coalescing is performed. | 203 | * physical address coalescing is performed. |
| 200 | */ | 204 | */ |
| @@ -917,7 +921,12 @@ extern void blk_abort_queue(struct request_queue *); | |||
| 917 | */ | 921 | */ |
| 918 | extern struct request_queue *blk_init_queue_node(request_fn_proc *rfn, | 922 | extern struct request_queue *blk_init_queue_node(request_fn_proc *rfn, |
| 919 | spinlock_t *lock, int node_id); | 923 | spinlock_t *lock, int node_id); |
| 924 | extern struct request_queue *blk_init_allocated_queue_node(struct request_queue *, | ||
| 925 | request_fn_proc *, | ||
| 926 | spinlock_t *, int node_id); | ||
| 920 | extern struct request_queue *blk_init_queue(request_fn_proc *, spinlock_t *); | 927 | extern struct request_queue *blk_init_queue(request_fn_proc *, spinlock_t *); |
| 928 | extern struct request_queue *blk_init_allocated_queue(struct request_queue *, | ||
| 929 | request_fn_proc *, spinlock_t *); | ||
| 921 | extern void blk_cleanup_queue(struct request_queue *); | 930 | extern void blk_cleanup_queue(struct request_queue *); |
| 922 | extern void blk_queue_make_request(struct request_queue *, make_request_fn *); | 931 | extern void blk_queue_make_request(struct request_queue *, make_request_fn *); |
| 923 | extern void blk_queue_bounce_limit(struct request_queue *, u64); | 932 | extern void blk_queue_bounce_limit(struct request_queue *, u64); |
| @@ -994,20 +1003,25 @@ static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt, | |||
| 994 | return NULL; | 1003 | return NULL; |
| 995 | return bqt->tag_index[tag]; | 1004 | return bqt->tag_index[tag]; |
| 996 | } | 1005 | } |
| 997 | 1006 | enum{ | |
| 998 | extern int blkdev_issue_flush(struct block_device *, sector_t *); | 1007 | BLKDEV_WAIT, /* wait for completion */ |
| 999 | #define DISCARD_FL_WAIT 0x01 /* wait for completion */ | 1008 | BLKDEV_BARRIER, /*issue request with barrier */ |
| 1000 | #define DISCARD_FL_BARRIER 0x02 /* issue DISCARD_BARRIER request */ | 1009 | }; |
| 1001 | extern int blkdev_issue_discard(struct block_device *, sector_t sector, | 1010 | #define BLKDEV_IFL_WAIT (1 << BLKDEV_WAIT) |
| 1002 | sector_t nr_sects, gfp_t, int flags); | 1011 | #define BLKDEV_IFL_BARRIER (1 << BLKDEV_BARRIER) |
| 1003 | 1012 | extern int blkdev_issue_flush(struct block_device *, gfp_t, sector_t *, | |
| 1013 | unsigned long); | ||
| 1014 | extern int blkdev_issue_discard(struct block_device *bdev, sector_t sector, | ||
| 1015 | sector_t nr_sects, gfp_t gfp_mask, unsigned long flags); | ||
| 1016 | extern int blkdev_issue_zeroout(struct block_device *bdev, sector_t sector, | ||
| 1017 | sector_t nr_sects, gfp_t gfp_mask, unsigned long flags); | ||
| 1004 | static inline int sb_issue_discard(struct super_block *sb, | 1018 | static inline int sb_issue_discard(struct super_block *sb, |
| 1005 | sector_t block, sector_t nr_blocks) | 1019 | sector_t block, sector_t nr_blocks) |
| 1006 | { | 1020 | { |
| 1007 | block <<= (sb->s_blocksize_bits - 9); | 1021 | block <<= (sb->s_blocksize_bits - 9); |
| 1008 | nr_blocks <<= (sb->s_blocksize_bits - 9); | 1022 | nr_blocks <<= (sb->s_blocksize_bits - 9); |
| 1009 | return blkdev_issue_discard(sb->s_bdev, block, nr_blocks, GFP_KERNEL, | 1023 | return blkdev_issue_discard(sb->s_bdev, block, nr_blocks, GFP_KERNEL, |
| 1010 | DISCARD_FL_BARRIER); | 1024 | BLKDEV_IFL_WAIT | BLKDEV_IFL_BARRIER); |
| 1011 | } | 1025 | } |
| 1012 | 1026 | ||
| 1013 | extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); | 1027 | extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); |
| @@ -1196,6 +1210,39 @@ static inline void put_dev_sector(Sector p) | |||
| 1196 | struct work_struct; | 1210 | struct work_struct; |
| 1197 | int kblockd_schedule_work(struct request_queue *q, struct work_struct *work); | 1211 | int kblockd_schedule_work(struct request_queue *q, struct work_struct *work); |
| 1198 | 1212 | ||
| 1213 | #ifdef CONFIG_BLK_CGROUP | ||
| 1214 | static inline void set_start_time_ns(struct request *req) | ||
| 1215 | { | ||
| 1216 | req->start_time_ns = sched_clock(); | ||
| 1217 | } | ||
| 1218 | |||
| 1219 | static inline void set_io_start_time_ns(struct request *req) | ||
| 1220 | { | ||
| 1221 | req->io_start_time_ns = sched_clock(); | ||
| 1222 | } | ||
| 1223 | |||
| 1224 | static inline uint64_t rq_start_time_ns(struct request *req) | ||
| 1225 | { | ||
| 1226 | return req->start_time_ns; | ||
| 1227 | } | ||
| 1228 | |||
| 1229 | static inline uint64_t rq_io_start_time_ns(struct request *req) | ||
| 1230 | { | ||
| 1231 | return req->io_start_time_ns; | ||
| 1232 | } | ||
| 1233 | #else | ||
| 1234 | static inline void set_start_time_ns(struct request *req) {} | ||
| 1235 | static inline void set_io_start_time_ns(struct request *req) {} | ||
| 1236 | static inline uint64_t rq_start_time_ns(struct request *req) | ||
| 1237 | { | ||
| 1238 | return 0; | ||
| 1239 | } | ||
| 1240 | static inline uint64_t rq_io_start_time_ns(struct request *req) | ||
| 1241 | { | ||
| 1242 | return 0; | ||
| 1243 | } | ||
| 1244 | #endif | ||
| 1245 | |||
| 1199 | #define MODULE_ALIAS_BLOCKDEV(major,minor) \ | 1246 | #define MODULE_ALIAS_BLOCKDEV(major,minor) \ |
| 1200 | MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor)) | 1247 | MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor)) |
| 1201 | #define MODULE_ALIAS_BLOCKDEV_MAJOR(major) \ | 1248 | #define MODULE_ALIAS_BLOCKDEV_MAJOR(major) \ |
| @@ -1283,10 +1330,11 @@ struct block_device_operations { | |||
| 1283 | int (*direct_access) (struct block_device *, sector_t, | 1330 | int (*direct_access) (struct block_device *, sector_t, |
| 1284 | void **, unsigned long *); | 1331 | void **, unsigned long *); |
| 1285 | int (*media_changed) (struct gendisk *); | 1332 | int (*media_changed) (struct gendisk *); |
| 1286 | unsigned long long (*set_capacity) (struct gendisk *, | 1333 | void (*unlock_native_capacity) (struct gendisk *); |
| 1287 | unsigned long long); | ||
| 1288 | int (*revalidate_disk) (struct gendisk *); | 1334 | int (*revalidate_disk) (struct gendisk *); |
| 1289 | int (*getgeo)(struct block_device *, struct hd_geometry *); | 1335 | int (*getgeo)(struct block_device *, struct hd_geometry *); |
| 1336 | /* this callback is with swap_lock and sometimes page table lock held */ | ||
| 1337 | void (*swap_slot_free_notify) (struct block_device *, unsigned long); | ||
| 1290 | struct module *owner; | 1338 | struct module *owner; |
| 1291 | }; | 1339 | }; |
| 1292 | 1340 | ||
diff --git a/include/linux/byteorder/big_endian.h b/include/linux/byteorder/big_endian.h index 3c80fd7e8b56..d53a67dff018 100644 --- a/include/linux/byteorder/big_endian.h +++ b/include/linux/byteorder/big_endian.h | |||
| @@ -7,6 +7,9 @@ | |||
| 7 | #ifndef __BIG_ENDIAN_BITFIELD | 7 | #ifndef __BIG_ENDIAN_BITFIELD |
| 8 | #define __BIG_ENDIAN_BITFIELD | 8 | #define __BIG_ENDIAN_BITFIELD |
| 9 | #endif | 9 | #endif |
| 10 | #ifndef __BYTE_ORDER | ||
| 11 | #define __BYTE_ORDER __BIG_ENDIAN | ||
| 12 | #endif | ||
| 10 | 13 | ||
| 11 | #include <linux/types.h> | 14 | #include <linux/types.h> |
| 12 | #include <linux/swab.h> | 15 | #include <linux/swab.h> |
diff --git a/include/linux/byteorder/little_endian.h b/include/linux/byteorder/little_endian.h index 83195fb82962..f7f8ad13adb6 100644 --- a/include/linux/byteorder/little_endian.h +++ b/include/linux/byteorder/little_endian.h | |||
| @@ -7,6 +7,9 @@ | |||
| 7 | #ifndef __LITTLE_ENDIAN_BITFIELD | 7 | #ifndef __LITTLE_ENDIAN_BITFIELD |
| 8 | #define __LITTLE_ENDIAN_BITFIELD | 8 | #define __LITTLE_ENDIAN_BITFIELD |
| 9 | #endif | 9 | #endif |
| 10 | #ifndef __BYTE_ORDER | ||
| 11 | #define __BYTE_ORDER __LITTLE_ENDIAN | ||
| 12 | #endif | ||
| 10 | 13 | ||
| 11 | #include <linux/types.h> | 14 | #include <linux/types.h> |
| 12 | #include <linux/swab.h> | 15 | #include <linux/swab.h> |
diff --git a/include/linux/compaction.h b/include/linux/compaction.h new file mode 100644 index 000000000000..5ac51552d908 --- /dev/null +++ b/include/linux/compaction.h | |||
| @@ -0,0 +1,89 @@ | |||
| 1 | #ifndef _LINUX_COMPACTION_H | ||
| 2 | #define _LINUX_COMPACTION_H | ||
| 3 | |||
| 4 | /* Return values for compact_zone() and try_to_compact_pages() */ | ||
| 5 | /* compaction didn't start as it was not possible or direct reclaim was more suitable */ | ||
| 6 | #define COMPACT_SKIPPED 0 | ||
| 7 | /* compaction should continue to another pageblock */ | ||
| 8 | #define COMPACT_CONTINUE 1 | ||
| 9 | /* direct compaction partially compacted a zone and there are suitable pages */ | ||
| 10 | #define COMPACT_PARTIAL 2 | ||
| 11 | /* The full zone was compacted */ | ||
| 12 | #define COMPACT_COMPLETE 3 | ||
| 13 | |||
| 14 | #ifdef CONFIG_COMPACTION | ||
| 15 | extern int sysctl_compact_memory; | ||
| 16 | extern int sysctl_compaction_handler(struct ctl_table *table, int write, | ||
| 17 | void __user *buffer, size_t *length, loff_t *ppos); | ||
| 18 | extern int sysctl_extfrag_threshold; | ||
| 19 | extern int sysctl_extfrag_handler(struct ctl_table *table, int write, | ||
| 20 | void __user *buffer, size_t *length, loff_t *ppos); | ||
| 21 | |||
| 22 | extern int fragmentation_index(struct zone *zone, unsigned int order); | ||
| 23 | extern unsigned long try_to_compact_pages(struct zonelist *zonelist, | ||
| 24 | int order, gfp_t gfp_mask, nodemask_t *mask); | ||
| 25 | |||
| 26 | /* Do not skip compaction more than 64 times */ | ||
| 27 | #define COMPACT_MAX_DEFER_SHIFT 6 | ||
| 28 | |||
| 29 | /* | ||
| 30 | * Compaction is deferred when compaction fails to result in a page | ||
| 31 | * allocation success. 1 << compact_defer_limit compactions are skipped up | ||
| 32 | * to a limit of 1 << COMPACT_MAX_DEFER_SHIFT | ||
| 33 | */ | ||
| 34 | static inline void defer_compaction(struct zone *zone) | ||
| 35 | { | ||
| 36 | zone->compact_considered = 0; | ||
| 37 | zone->compact_defer_shift++; | ||
| 38 | |||
| 39 | if (zone->compact_defer_shift > COMPACT_MAX_DEFER_SHIFT) | ||
| 40 | zone->compact_defer_shift = COMPACT_MAX_DEFER_SHIFT; | ||
| 41 | } | ||
| 42 | |||
| 43 | /* Returns true if compaction should be skipped this time */ | ||
| 44 | static inline bool compaction_deferred(struct zone *zone) | ||
| 45 | { | ||
| 46 | unsigned long defer_limit = 1UL << zone->compact_defer_shift; | ||
| 47 | |||
| 48 | /* Avoid possible overflow */ | ||
| 49 | if (++zone->compact_considered > defer_limit) | ||
| 50 | zone->compact_considered = defer_limit; | ||
| 51 | |||
| 52 | return zone->compact_considered < (1UL << zone->compact_defer_shift); | ||
| 53 | } | ||
| 54 | |||
| 55 | #else | ||
| 56 | static inline unsigned long try_to_compact_pages(struct zonelist *zonelist, | ||
| 57 | int order, gfp_t gfp_mask, nodemask_t *nodemask) | ||
| 58 | { | ||
| 59 | return COMPACT_CONTINUE; | ||
| 60 | } | ||
| 61 | |||
| 62 | static inline void defer_compaction(struct zone *zone) | ||
| 63 | { | ||
| 64 | } | ||
| 65 | |||
| 66 | static inline bool compaction_deferred(struct zone *zone) | ||
| 67 | { | ||
| 68 | return 1; | ||
| 69 | } | ||
| 70 | |||
| 71 | #endif /* CONFIG_COMPACTION */ | ||
| 72 | |||
| 73 | #if defined(CONFIG_COMPACTION) && defined(CONFIG_SYSFS) && defined(CONFIG_NUMA) | ||
| 74 | extern int compaction_register_node(struct node *node); | ||
| 75 | extern void compaction_unregister_node(struct node *node); | ||
| 76 | |||
| 77 | #else | ||
| 78 | |||
| 79 | static inline int compaction_register_node(struct node *node) | ||
| 80 | { | ||
| 81 | return 0; | ||
| 82 | } | ||
| 83 | |||
| 84 | static inline void compaction_unregister_node(struct node *node) | ||
| 85 | { | ||
| 86 | } | ||
| 87 | #endif /* CONFIG_COMPACTION && CONFIG_SYSFS && CONFIG_NUMA */ | ||
| 88 | |||
| 89 | #endif /* _LINUX_COMPACTION_H */ | ||
diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h index a73454aec333..20b51cab6593 100644 --- a/include/linux/cpuset.h +++ b/include/linux/cpuset.h | |||
| @@ -86,9 +86,44 @@ extern void rebuild_sched_domains(void); | |||
| 86 | 86 | ||
| 87 | extern void cpuset_print_task_mems_allowed(struct task_struct *p); | 87 | extern void cpuset_print_task_mems_allowed(struct task_struct *p); |
| 88 | 88 | ||
| 89 | /* | ||
| 90 | * reading current mems_allowed and mempolicy in the fastpath must protected | ||
| 91 | * by get_mems_allowed() | ||
| 92 | */ | ||
| 93 | static inline void get_mems_allowed(void) | ||
| 94 | { | ||
| 95 | current->mems_allowed_change_disable++; | ||
| 96 | |||
| 97 | /* | ||
| 98 | * ensure that reading mems_allowed and mempolicy happens after the | ||
| 99 | * update of ->mems_allowed_change_disable. | ||
| 100 | * | ||
| 101 | * the write-side task finds ->mems_allowed_change_disable is not 0, | ||
| 102 | * and knows the read-side task is reading mems_allowed or mempolicy, | ||
| 103 | * so it will clear old bits lazily. | ||
| 104 | */ | ||
| 105 | smp_mb(); | ||
| 106 | } | ||
| 107 | |||
| 108 | static inline void put_mems_allowed(void) | ||
| 109 | { | ||
| 110 | /* | ||
| 111 | * ensure that reading mems_allowed and mempolicy before reducing | ||
| 112 | * mems_allowed_change_disable. | ||
| 113 | * | ||
| 114 | * the write-side task will know that the read-side task is still | ||
| 115 | * reading mems_allowed or mempolicy, don't clears old bits in the | ||
| 116 | * nodemask. | ||
| 117 | */ | ||
| 118 | smp_mb(); | ||
| 119 | --ACCESS_ONCE(current->mems_allowed_change_disable); | ||
| 120 | } | ||
| 121 | |||
| 89 | static inline void set_mems_allowed(nodemask_t nodemask) | 122 | static inline void set_mems_allowed(nodemask_t nodemask) |
| 90 | { | 123 | { |
| 124 | task_lock(current); | ||
| 91 | current->mems_allowed = nodemask; | 125 | current->mems_allowed = nodemask; |
| 126 | task_unlock(current); | ||
| 92 | } | 127 | } |
| 93 | 128 | ||
| 94 | #else /* !CONFIG_CPUSETS */ | 129 | #else /* !CONFIG_CPUSETS */ |
| @@ -187,6 +222,14 @@ static inline void set_mems_allowed(nodemask_t nodemask) | |||
| 187 | { | 222 | { |
| 188 | } | 223 | } |
| 189 | 224 | ||
| 225 | static inline void get_mems_allowed(void) | ||
| 226 | { | ||
| 227 | } | ||
| 228 | |||
| 229 | static inline void put_mems_allowed(void) | ||
| 230 | { | ||
| 231 | } | ||
| 232 | |||
| 190 | #endif /* !CONFIG_CPUSETS */ | 233 | #endif /* !CONFIG_CPUSETS */ |
| 191 | 234 | ||
| 192 | #endif /* _LINUX_CPUSET_H */ | 235 | #endif /* _LINUX_CPUSET_H */ |
diff --git a/include/linux/crypto.h b/include/linux/crypto.h index 24d2e30f1b46..a6a7a1c83f54 100644 --- a/include/linux/crypto.h +++ b/include/linux/crypto.h | |||
| @@ -99,13 +99,7 @@ | |||
| 99 | * as arm where pointers are 32-bit aligned but there are data types such as | 99 | * as arm where pointers are 32-bit aligned but there are data types such as |
| 100 | * u64 which require 64-bit alignment. | 100 | * u64 which require 64-bit alignment. |
| 101 | */ | 101 | */ |
| 102 | #if defined(ARCH_KMALLOC_MINALIGN) | ||
| 103 | #define CRYPTO_MINALIGN ARCH_KMALLOC_MINALIGN | 102 | #define CRYPTO_MINALIGN ARCH_KMALLOC_MINALIGN |
| 104 | #elif defined(ARCH_SLAB_MINALIGN) | ||
| 105 | #define CRYPTO_MINALIGN ARCH_SLAB_MINALIGN | ||
| 106 | #else | ||
| 107 | #define CRYPTO_MINALIGN __alignof__(unsigned long long) | ||
| 108 | #endif | ||
| 109 | 103 | ||
| 110 | #define CRYPTO_MINALIGN_ATTR __attribute__ ((__aligned__(CRYPTO_MINALIGN))) | 104 | #define CRYPTO_MINALIGN_ATTR __attribute__ ((__aligned__(CRYPTO_MINALIGN))) |
| 111 | 105 | ||
diff --git a/include/linux/device.h b/include/linux/device.h index 241b96bcd7ad..0713e10571dd 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
| @@ -22,7 +22,6 @@ | |||
| 22 | #include <linux/types.h> | 22 | #include <linux/types.h> |
| 23 | #include <linux/module.h> | 23 | #include <linux/module.h> |
| 24 | #include <linux/pm.h> | 24 | #include <linux/pm.h> |
| 25 | #include <linux/semaphore.h> | ||
| 26 | #include <asm/atomic.h> | 25 | #include <asm/atomic.h> |
| 27 | #include <asm/device.h> | 26 | #include <asm/device.h> |
| 28 | 27 | ||
| @@ -34,6 +33,7 @@ struct class; | |||
| 34 | struct class_private; | 33 | struct class_private; |
| 35 | struct bus_type; | 34 | struct bus_type; |
| 36 | struct bus_type_private; | 35 | struct bus_type_private; |
| 36 | struct device_node; | ||
| 37 | 37 | ||
| 38 | struct bus_attribute { | 38 | struct bus_attribute { |
| 39 | struct attribute attr; | 39 | struct attribute attr; |
| @@ -128,6 +128,10 @@ struct device_driver { | |||
| 128 | 128 | ||
| 129 | bool suppress_bind_attrs; /* disables bind/unbind via sysfs */ | 129 | bool suppress_bind_attrs; /* disables bind/unbind via sysfs */ |
| 130 | 130 | ||
| 131 | #if defined(CONFIG_OF) | ||
| 132 | const struct of_device_id *of_match_table; | ||
| 133 | #endif | ||
| 134 | |||
| 131 | int (*probe) (struct device *dev); | 135 | int (*probe) (struct device *dev); |
| 132 | int (*remove) (struct device *dev); | 136 | int (*remove) (struct device *dev); |
| 133 | void (*shutdown) (struct device *dev); | 137 | void (*shutdown) (struct device *dev); |
| @@ -203,6 +207,9 @@ struct class { | |||
| 203 | int (*suspend)(struct device *dev, pm_message_t state); | 207 | int (*suspend)(struct device *dev, pm_message_t state); |
| 204 | int (*resume)(struct device *dev); | 208 | int (*resume)(struct device *dev); |
| 205 | 209 | ||
| 210 | const struct kobj_ns_type_operations *ns_type; | ||
| 211 | const void *(*namespace)(struct device *dev); | ||
| 212 | |||
| 206 | const struct dev_pm_ops *pm; | 213 | const struct dev_pm_ops *pm; |
| 207 | 214 | ||
| 208 | struct class_private *p; | 215 | struct class_private *p; |
| @@ -404,7 +411,7 @@ struct device { | |||
| 404 | const char *init_name; /* initial name of the device */ | 411 | const char *init_name; /* initial name of the device */ |
| 405 | struct device_type *type; | 412 | struct device_type *type; |
| 406 | 413 | ||
| 407 | struct semaphore sem; /* semaphore to synchronize calls to | 414 | struct mutex mutex; /* mutex to synchronize calls to |
| 408 | * its driver. | 415 | * its driver. |
| 409 | */ | 416 | */ |
| 410 | 417 | ||
| @@ -433,6 +440,9 @@ struct device { | |||
| 433 | override */ | 440 | override */ |
| 434 | /* arch specific additions */ | 441 | /* arch specific additions */ |
| 435 | struct dev_archdata archdata; | 442 | struct dev_archdata archdata; |
| 443 | #ifdef CONFIG_OF | ||
| 444 | struct device_node *of_node; | ||
| 445 | #endif | ||
| 436 | 446 | ||
| 437 | dev_t devt; /* dev_t, creates the sysfs "dev" */ | 447 | dev_t devt; /* dev_t, creates the sysfs "dev" */ |
| 438 | 448 | ||
| @@ -514,17 +524,17 @@ static inline bool device_async_suspend_enabled(struct device *dev) | |||
| 514 | 524 | ||
| 515 | static inline void device_lock(struct device *dev) | 525 | static inline void device_lock(struct device *dev) |
| 516 | { | 526 | { |
| 517 | down(&dev->sem); | 527 | mutex_lock(&dev->mutex); |
| 518 | } | 528 | } |
| 519 | 529 | ||
| 520 | static inline int device_trylock(struct device *dev) | 530 | static inline int device_trylock(struct device *dev) |
| 521 | { | 531 | { |
| 522 | return down_trylock(&dev->sem); | 532 | return mutex_trylock(&dev->mutex); |
| 523 | } | 533 | } |
| 524 | 534 | ||
| 525 | static inline void device_unlock(struct device *dev) | 535 | static inline void device_unlock(struct device *dev) |
| 526 | { | 536 | { |
| 527 | up(&dev->sem); | 537 | mutex_unlock(&dev->mutex); |
| 528 | } | 538 | } |
| 529 | 539 | ||
| 530 | void driver_init(void); | 540 | void driver_init(void); |
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index 20ea12c86fd0..5204f018931b 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h | |||
| @@ -40,11 +40,13 @@ typedef s32 dma_cookie_t; | |||
| 40 | * enum dma_status - DMA transaction status | 40 | * enum dma_status - DMA transaction status |
| 41 | * @DMA_SUCCESS: transaction completed successfully | 41 | * @DMA_SUCCESS: transaction completed successfully |
| 42 | * @DMA_IN_PROGRESS: transaction not yet processed | 42 | * @DMA_IN_PROGRESS: transaction not yet processed |
| 43 | * @DMA_PAUSED: transaction is paused | ||
| 43 | * @DMA_ERROR: transaction failed | 44 | * @DMA_ERROR: transaction failed |
| 44 | */ | 45 | */ |
| 45 | enum dma_status { | 46 | enum dma_status { |
| 46 | DMA_SUCCESS, | 47 | DMA_SUCCESS, |
| 47 | DMA_IN_PROGRESS, | 48 | DMA_IN_PROGRESS, |
| 49 | DMA_PAUSED, | ||
| 48 | DMA_ERROR, | 50 | DMA_ERROR, |
| 49 | }; | 51 | }; |
| 50 | 52 | ||
| @@ -107,6 +109,19 @@ enum dma_ctrl_flags { | |||
| 107 | }; | 109 | }; |
| 108 | 110 | ||
| 109 | /** | 111 | /** |
| 112 | * enum dma_ctrl_cmd - DMA operations that can optionally be exercised | ||
| 113 | * on a running channel. | ||
| 114 | * @DMA_TERMINATE_ALL: terminate all ongoing transfers | ||
| 115 | * @DMA_PAUSE: pause ongoing transfers | ||
| 116 | * @DMA_RESUME: resume paused transfer | ||
| 117 | */ | ||
| 118 | enum dma_ctrl_cmd { | ||
| 119 | DMA_TERMINATE_ALL, | ||
| 120 | DMA_PAUSE, | ||
| 121 | DMA_RESUME, | ||
| 122 | }; | ||
| 123 | |||
| 124 | /** | ||
| 110 | * enum sum_check_bits - bit position of pq_check_flags | 125 | * enum sum_check_bits - bit position of pq_check_flags |
| 111 | */ | 126 | */ |
| 112 | enum sum_check_bits { | 127 | enum sum_check_bits { |
| @@ -230,9 +245,84 @@ struct dma_async_tx_descriptor { | |||
| 230 | dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *tx); | 245 | dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *tx); |
| 231 | dma_async_tx_callback callback; | 246 | dma_async_tx_callback callback; |
| 232 | void *callback_param; | 247 | void *callback_param; |
| 248 | #ifndef CONFIG_ASYNC_TX_DISABLE_CHANNEL_SWITCH | ||
| 233 | struct dma_async_tx_descriptor *next; | 249 | struct dma_async_tx_descriptor *next; |
| 234 | struct dma_async_tx_descriptor *parent; | 250 | struct dma_async_tx_descriptor *parent; |
| 235 | spinlock_t lock; | 251 | spinlock_t lock; |
| 252 | #endif | ||
| 253 | }; | ||
| 254 | |||
| 255 | #ifdef CONFIG_ASYNC_TX_DISABLE_CHANNEL_SWITCH | ||
| 256 | static inline void txd_lock(struct dma_async_tx_descriptor *txd) | ||
| 257 | { | ||
| 258 | } | ||
| 259 | static inline void txd_unlock(struct dma_async_tx_descriptor *txd) | ||
| 260 | { | ||
| 261 | } | ||
| 262 | static inline void txd_chain(struct dma_async_tx_descriptor *txd, struct dma_async_tx_descriptor *next) | ||
| 263 | { | ||
| 264 | BUG(); | ||
| 265 | } | ||
| 266 | static inline void txd_clear_parent(struct dma_async_tx_descriptor *txd) | ||
| 267 | { | ||
| 268 | } | ||
| 269 | static inline void txd_clear_next(struct dma_async_tx_descriptor *txd) | ||
| 270 | { | ||
| 271 | } | ||
| 272 | static inline struct dma_async_tx_descriptor *txd_next(struct dma_async_tx_descriptor *txd) | ||
| 273 | { | ||
| 274 | return NULL; | ||
| 275 | } | ||
| 276 | static inline struct dma_async_tx_descriptor *txd_parent(struct dma_async_tx_descriptor *txd) | ||
| 277 | { | ||
| 278 | return NULL; | ||
| 279 | } | ||
| 280 | |||
| 281 | #else | ||
| 282 | static inline void txd_lock(struct dma_async_tx_descriptor *txd) | ||
| 283 | { | ||
| 284 | spin_lock_bh(&txd->lock); | ||
| 285 | } | ||
| 286 | static inline void txd_unlock(struct dma_async_tx_descriptor *txd) | ||
| 287 | { | ||
| 288 | spin_unlock_bh(&txd->lock); | ||
| 289 | } | ||
| 290 | static inline void txd_chain(struct dma_async_tx_descriptor *txd, struct dma_async_tx_descriptor *next) | ||
| 291 | { | ||
| 292 | txd->next = next; | ||
| 293 | next->parent = txd; | ||
| 294 | } | ||
| 295 | static inline void txd_clear_parent(struct dma_async_tx_descriptor *txd) | ||
| 296 | { | ||
| 297 | txd->parent = NULL; | ||
| 298 | } | ||
| 299 | static inline void txd_clear_next(struct dma_async_tx_descriptor *txd) | ||
| 300 | { | ||
| 301 | txd->next = NULL; | ||
| 302 | } | ||
| 303 | static inline struct dma_async_tx_descriptor *txd_parent(struct dma_async_tx_descriptor *txd) | ||
| 304 | { | ||
| 305 | return txd->parent; | ||
| 306 | } | ||
| 307 | static inline struct dma_async_tx_descriptor *txd_next(struct dma_async_tx_descriptor *txd) | ||
| 308 | { | ||
| 309 | return txd->next; | ||
| 310 | } | ||
| 311 | #endif | ||
| 312 | |||
| 313 | /** | ||
| 314 | * struct dma_tx_state - filled in to report the status of | ||
| 315 | * a transfer. | ||
| 316 | * @last: last completed DMA cookie | ||
| 317 | * @used: last issued DMA cookie (i.e. the one in progress) | ||
| 318 | * @residue: the remaining number of bytes left to transmit | ||
| 319 | * on the selected transfer for states DMA_IN_PROGRESS and | ||
| 320 | * DMA_PAUSED if this is implemented in the driver, else 0 | ||
| 321 | */ | ||
| 322 | struct dma_tx_state { | ||
| 323 | dma_cookie_t last; | ||
| 324 | dma_cookie_t used; | ||
| 325 | u32 residue; | ||
| 236 | }; | 326 | }; |
| 237 | 327 | ||
| 238 | /** | 328 | /** |
| @@ -261,8 +351,12 @@ struct dma_async_tx_descriptor { | |||
| 261 | * @device_prep_dma_memset: prepares a memset operation | 351 | * @device_prep_dma_memset: prepares a memset operation |
| 262 | * @device_prep_dma_interrupt: prepares an end of chain interrupt operation | 352 | * @device_prep_dma_interrupt: prepares an end of chain interrupt operation |
| 263 | * @device_prep_slave_sg: prepares a slave dma operation | 353 | * @device_prep_slave_sg: prepares a slave dma operation |
| 264 | * @device_terminate_all: terminate all pending operations | 354 | * @device_control: manipulate all pending operations on a channel, returns |
| 265 | * @device_is_tx_complete: poll for transaction completion | 355 | * zero or error code |
| 356 | * @device_tx_status: poll for transaction completion, the optional | ||
| 357 | * txstate parameter can be supplied with a pointer to get a | ||
| 358 | * struct with auxilary transfer status information, otherwise the call | ||
| 359 | * will just return a simple status code | ||
| 266 | * @device_issue_pending: push pending transactions to hardware | 360 | * @device_issue_pending: push pending transactions to hardware |
| 267 | */ | 361 | */ |
| 268 | struct dma_device { | 362 | struct dma_device { |
| @@ -313,11 +407,12 @@ struct dma_device { | |||
| 313 | struct dma_chan *chan, struct scatterlist *sgl, | 407 | struct dma_chan *chan, struct scatterlist *sgl, |
| 314 | unsigned int sg_len, enum dma_data_direction direction, | 408 | unsigned int sg_len, enum dma_data_direction direction, |
| 315 | unsigned long flags); | 409 | unsigned long flags); |
| 316 | void (*device_terminate_all)(struct dma_chan *chan); | 410 | int (*device_control)(struct dma_chan *chan, enum dma_ctrl_cmd cmd, |
| 411 | unsigned long arg); | ||
| 317 | 412 | ||
| 318 | enum dma_status (*device_is_tx_complete)(struct dma_chan *chan, | 413 | enum dma_status (*device_tx_status)(struct dma_chan *chan, |
| 319 | dma_cookie_t cookie, dma_cookie_t *last, | 414 | dma_cookie_t cookie, |
| 320 | dma_cookie_t *used); | 415 | struct dma_tx_state *txstate); |
| 321 | void (*device_issue_pending)(struct dma_chan *chan); | 416 | void (*device_issue_pending)(struct dma_chan *chan); |
| 322 | }; | 417 | }; |
| 323 | 418 | ||
| @@ -558,7 +653,15 @@ static inline void dma_async_issue_pending(struct dma_chan *chan) | |||
| 558 | static inline enum dma_status dma_async_is_tx_complete(struct dma_chan *chan, | 653 | static inline enum dma_status dma_async_is_tx_complete(struct dma_chan *chan, |
| 559 | dma_cookie_t cookie, dma_cookie_t *last, dma_cookie_t *used) | 654 | dma_cookie_t cookie, dma_cookie_t *last, dma_cookie_t *used) |
| 560 | { | 655 | { |
| 561 | return chan->device->device_is_tx_complete(chan, cookie, last, used); | 656 | struct dma_tx_state state; |
| 657 | enum dma_status status; | ||
| 658 | |||
| 659 | status = chan->device->device_tx_status(chan, cookie, &state); | ||
| 660 | if (last) | ||
| 661 | *last = state.last; | ||
| 662 | if (used) | ||
| 663 | *used = state.used; | ||
| 664 | return status; | ||
| 562 | } | 665 | } |
| 563 | 666 | ||
| 564 | #define dma_async_memcpy_complete(chan, cookie, last, used)\ | 667 | #define dma_async_memcpy_complete(chan, cookie, last, used)\ |
| @@ -586,6 +689,16 @@ static inline enum dma_status dma_async_is_complete(dma_cookie_t cookie, | |||
| 586 | return DMA_IN_PROGRESS; | 689 | return DMA_IN_PROGRESS; |
| 587 | } | 690 | } |
| 588 | 691 | ||
| 692 | static inline void | ||
| 693 | dma_set_tx_state(struct dma_tx_state *st, dma_cookie_t last, dma_cookie_t used, u32 residue) | ||
| 694 | { | ||
| 695 | if (st) { | ||
| 696 | st->last = last; | ||
| 697 | st->used = used; | ||
| 698 | st->residue = residue; | ||
| 699 | } | ||
| 700 | } | ||
| 701 | |||
| 589 | enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie); | 702 | enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie); |
| 590 | #ifdef CONFIG_DMA_ENGINE | 703 | #ifdef CONFIG_DMA_ENGINE |
| 591 | enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx); | 704 | enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx); |
diff --git a/include/linux/dqblk_xfs.h b/include/linux/dqblk_xfs.h index 527504c11c5e..4389ae72024e 100644 --- a/include/linux/dqblk_xfs.h +++ b/include/linux/dqblk_xfs.h | |||
| @@ -110,6 +110,15 @@ typedef struct fs_disk_quota { | |||
| 110 | #define FS_DQ_WARNS_MASK (FS_DQ_BWARNS | FS_DQ_IWARNS | FS_DQ_RTBWARNS) | 110 | #define FS_DQ_WARNS_MASK (FS_DQ_BWARNS | FS_DQ_IWARNS | FS_DQ_RTBWARNS) |
| 111 | 111 | ||
| 112 | /* | 112 | /* |
| 113 | * Accounting values. These can only be set for filesystem with | ||
| 114 | * non-transactional quotas that require quotacheck(8) in userspace. | ||
| 115 | */ | ||
| 116 | #define FS_DQ_BCOUNT (1<<12) | ||
| 117 | #define FS_DQ_ICOUNT (1<<13) | ||
| 118 | #define FS_DQ_RTBCOUNT (1<<14) | ||
| 119 | #define FS_DQ_ACCT_MASK (FS_DQ_BCOUNT | FS_DQ_ICOUNT | FS_DQ_RTBCOUNT) | ||
| 120 | |||
| 121 | /* | ||
| 113 | * Various flags related to quotactl(2). Only relevant to XFS filesystems. | 122 | * Various flags related to quotactl(2). Only relevant to XFS filesystems. |
| 114 | */ | 123 | */ |
| 115 | #define XFS_QUOTA_UDQ_ACCT (1<<0) /* user quota accounting */ | 124 | #define XFS_QUOTA_UDQ_ACCT (1<<0) /* user quota accounting */ |
diff --git a/include/linux/drbd.h b/include/linux/drbd.h index 4341b1a97a34..68530521ad00 100644 --- a/include/linux/drbd.h +++ b/include/linux/drbd.h | |||
| @@ -53,10 +53,10 @@ | |||
| 53 | 53 | ||
| 54 | 54 | ||
| 55 | extern const char *drbd_buildtag(void); | 55 | extern const char *drbd_buildtag(void); |
| 56 | #define REL_VERSION "8.3.7" | 56 | #define REL_VERSION "8.3.8rc1" |
| 57 | #define API_VERSION 88 | 57 | #define API_VERSION 88 |
| 58 | #define PRO_VERSION_MIN 86 | 58 | #define PRO_VERSION_MIN 86 |
| 59 | #define PRO_VERSION_MAX 92 | 59 | #define PRO_VERSION_MAX 94 |
| 60 | 60 | ||
| 61 | 61 | ||
| 62 | enum drbd_io_error_p { | 62 | enum drbd_io_error_p { |
| @@ -139,6 +139,7 @@ enum drbd_ret_codes { | |||
| 139 | ERR_DATA_NOT_CURRENT = 150, | 139 | ERR_DATA_NOT_CURRENT = 150, |
| 140 | ERR_CONNECTED = 151, /* DRBD 8.3 only */ | 140 | ERR_CONNECTED = 151, /* DRBD 8.3 only */ |
| 141 | ERR_PERM = 152, | 141 | ERR_PERM = 152, |
| 142 | ERR_NEED_APV_93 = 153, | ||
| 142 | 143 | ||
| 143 | /* insert new ones above this line */ | 144 | /* insert new ones above this line */ |
| 144 | AFTER_LAST_ERR_CODE | 145 | AFTER_LAST_ERR_CODE |
diff --git a/include/linux/drbd_limits.h b/include/linux/drbd_limits.h index 51f47a586ad8..440b42e38e89 100644 --- a/include/linux/drbd_limits.h +++ b/include/linux/drbd_limits.h | |||
| @@ -133,5 +133,21 @@ | |||
| 133 | #define DRBD_MAX_BIO_BVECS_MAX 128 | 133 | #define DRBD_MAX_BIO_BVECS_MAX 128 |
| 134 | #define DRBD_MAX_BIO_BVECS_DEF 0 | 134 | #define DRBD_MAX_BIO_BVECS_DEF 0 |
| 135 | 135 | ||
| 136 | #define DRBD_DP_VOLUME_MIN 4 | ||
| 137 | #define DRBD_DP_VOLUME_MAX 1048576 | ||
| 138 | #define DRBD_DP_VOLUME_DEF 16384 | ||
| 139 | |||
| 140 | #define DRBD_DP_INTERVAL_MIN 1 | ||
| 141 | #define DRBD_DP_INTERVAL_MAX 600 | ||
| 142 | #define DRBD_DP_INTERVAL_DEF 5 | ||
| 143 | |||
| 144 | #define DRBD_RS_THROTTLE_TH_MIN 1 | ||
| 145 | #define DRBD_RS_THROTTLE_TH_MAX 600 | ||
| 146 | #define DRBD_RS_THROTTLE_TH_DEF 20 | ||
| 147 | |||
| 148 | #define DRBD_RS_HOLD_OFF_TH_MIN 1 | ||
| 149 | #define DRBD_RS_HOLD_OFF_TH_MAX 6000 | ||
| 150 | #define DRBD_RS_HOLD_OFF_TH_DEF 100 | ||
| 151 | |||
| 136 | #undef RANGE | 152 | #undef RANGE |
| 137 | #endif | 153 | #endif |
diff --git a/include/linux/drbd_nl.h b/include/linux/drbd_nl.h index f7431a4ca608..ce77a746fc9d 100644 --- a/include/linux/drbd_nl.h +++ b/include/linux/drbd_nl.h | |||
| @@ -71,12 +71,17 @@ NL_PACKET(disconnect, 6, ) | |||
| 71 | NL_PACKET(resize, 7, | 71 | NL_PACKET(resize, 7, |
| 72 | NL_INT64( 29, T_MAY_IGNORE, resize_size) | 72 | NL_INT64( 29, T_MAY_IGNORE, resize_size) |
| 73 | NL_BIT( 68, T_MAY_IGNORE, resize_force) | 73 | NL_BIT( 68, T_MAY_IGNORE, resize_force) |
| 74 | NL_BIT( 69, T_MANDATORY, no_resync) | ||
| 74 | ) | 75 | ) |
| 75 | 76 | ||
| 76 | NL_PACKET(syncer_conf, 8, | 77 | NL_PACKET(syncer_conf, 8, |
| 77 | NL_INTEGER( 30, T_MAY_IGNORE, rate) | 78 | NL_INTEGER( 30, T_MAY_IGNORE, rate) |
| 78 | NL_INTEGER( 31, T_MAY_IGNORE, after) | 79 | NL_INTEGER( 31, T_MAY_IGNORE, after) |
| 79 | NL_INTEGER( 32, T_MAY_IGNORE, al_extents) | 80 | NL_INTEGER( 32, T_MAY_IGNORE, al_extents) |
| 81 | NL_INTEGER( 71, T_MAY_IGNORE, dp_volume) | ||
| 82 | NL_INTEGER( 72, T_MAY_IGNORE, dp_interval) | ||
| 83 | NL_INTEGER( 73, T_MAY_IGNORE, throttle_th) | ||
| 84 | NL_INTEGER( 74, T_MAY_IGNORE, hold_off_th) | ||
| 80 | NL_STRING( 52, T_MAY_IGNORE, verify_alg, SHARED_SECRET_MAX) | 85 | NL_STRING( 52, T_MAY_IGNORE, verify_alg, SHARED_SECRET_MAX) |
| 81 | NL_STRING( 51, T_MAY_IGNORE, cpu_mask, 32) | 86 | NL_STRING( 51, T_MAY_IGNORE, cpu_mask, 32) |
| 82 | NL_STRING( 64, T_MAY_IGNORE, csums_alg, SHARED_SECRET_MAX) | 87 | NL_STRING( 64, T_MAY_IGNORE, csums_alg, SHARED_SECRET_MAX) |
diff --git a/include/linux/ds2782_battery.h b/include/linux/ds2782_battery.h new file mode 100644 index 000000000000..b4e281f65c15 --- /dev/null +++ b/include/linux/ds2782_battery.h | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #ifndef __LINUX_DS2782_BATTERY_H | ||
| 2 | #define __LINUX_DS2782_BATTERY_H | ||
| 3 | |||
| 4 | struct ds278x_platform_data { | ||
| 5 | int rsns; | ||
| 6 | }; | ||
| 7 | |||
| 8 | #endif | ||
diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index f8c2e1767500..b3cd4de9432b 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h | |||
| @@ -28,7 +28,7 @@ struct _ddebug { | |||
| 28 | /* | 28 | /* |
| 29 | * The flags field controls the behaviour at the callsite. | 29 | * The flags field controls the behaviour at the callsite. |
| 30 | * The bits here are changed dynamically when the user | 30 | * The bits here are changed dynamically when the user |
| 31 | * writes commands to <debugfs>/dynamic_debug/ddebug | 31 | * writes commands to <debugfs>/dynamic_debug/control |
| 32 | */ | 32 | */ |
| 33 | #define _DPRINTK_FLAGS_PRINT (1<<0) /* printk() a message using the format */ | 33 | #define _DPRINTK_FLAGS_PRINT (1<<0) /* printk() a message using the format */ |
| 34 | #define _DPRINTK_FLAGS_DEFAULT 0 | 34 | #define _DPRINTK_FLAGS_DEFAULT 0 |
diff --git a/include/linux/elevator.h b/include/linux/elevator.h index 1cb3372e65d8..2c958f4fce1e 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h | |||
| @@ -14,6 +14,9 @@ typedef void (elevator_merged_fn) (struct request_queue *, struct request *, int | |||
| 14 | 14 | ||
| 15 | typedef int (elevator_allow_merge_fn) (struct request_queue *, struct request *, struct bio *); | 15 | typedef int (elevator_allow_merge_fn) (struct request_queue *, struct request *, struct bio *); |
| 16 | 16 | ||
| 17 | typedef void (elevator_bio_merged_fn) (struct request_queue *, | ||
| 18 | struct request *, struct bio *); | ||
| 19 | |||
| 17 | typedef int (elevator_dispatch_fn) (struct request_queue *, int); | 20 | typedef int (elevator_dispatch_fn) (struct request_queue *, int); |
| 18 | 21 | ||
| 19 | typedef void (elevator_add_req_fn) (struct request_queue *, struct request *); | 22 | typedef void (elevator_add_req_fn) (struct request_queue *, struct request *); |
| @@ -36,6 +39,7 @@ struct elevator_ops | |||
| 36 | elevator_merged_fn *elevator_merged_fn; | 39 | elevator_merged_fn *elevator_merged_fn; |
| 37 | elevator_merge_req_fn *elevator_merge_req_fn; | 40 | elevator_merge_req_fn *elevator_merge_req_fn; |
| 38 | elevator_allow_merge_fn *elevator_allow_merge_fn; | 41 | elevator_allow_merge_fn *elevator_allow_merge_fn; |
| 42 | elevator_bio_merged_fn *elevator_bio_merged_fn; | ||
| 39 | 43 | ||
| 40 | elevator_dispatch_fn *elevator_dispatch_fn; | 44 | elevator_dispatch_fn *elevator_dispatch_fn; |
| 41 | elevator_add_req_fn *elevator_add_req_fn; | 45 | elevator_add_req_fn *elevator_add_req_fn; |
| @@ -103,6 +107,8 @@ extern int elv_merge(struct request_queue *, struct request **, struct bio *); | |||
| 103 | extern void elv_merge_requests(struct request_queue *, struct request *, | 107 | extern void elv_merge_requests(struct request_queue *, struct request *, |
| 104 | struct request *); | 108 | struct request *); |
| 105 | extern void elv_merged_request(struct request_queue *, struct request *, int); | 109 | extern void elv_merged_request(struct request_queue *, struct request *, int); |
| 110 | extern void elv_bio_merged(struct request_queue *q, struct request *, | ||
| 111 | struct bio *); | ||
| 106 | extern void elv_requeue_request(struct request_queue *, struct request *); | 112 | extern void elv_requeue_request(struct request_queue *, struct request *); |
| 107 | extern int elv_queue_empty(struct request_queue *); | 113 | extern int elv_queue_empty(struct request_queue *); |
| 108 | extern struct request *elv_former_request(struct request_queue *, struct request *); | 114 | extern struct request *elv_former_request(struct request_queue *, struct request *); |
diff --git a/include/linux/elfcore.h b/include/linux/elfcore.h index e687bc3ba4da..394a3e0e4a6b 100644 --- a/include/linux/elfcore.h +++ b/include/linux/elfcore.h | |||
| @@ -150,8 +150,6 @@ static inline int elf_core_copy_task_xfpregs(struct task_struct *t, elf_fpxregse | |||
| 150 | } | 150 | } |
| 151 | #endif | 151 | #endif |
| 152 | 152 | ||
| 153 | #endif /* __KERNEL__ */ | ||
| 154 | |||
| 155 | /* | 153 | /* |
| 156 | * These functions parameterize elf_core_dump in fs/binfmt_elf.c to write out | 154 | * These functions parameterize elf_core_dump in fs/binfmt_elf.c to write out |
| 157 | * extra segments containing the gate DSO contents. Dumping its | 155 | * extra segments containing the gate DSO contents. Dumping its |
| @@ -168,4 +166,6 @@ extern int | |||
| 168 | elf_core_write_extra_data(struct file *file, size_t *size, unsigned long limit); | 166 | elf_core_write_extra_data(struct file *file, size_t *size, unsigned long limit); |
| 169 | extern size_t elf_core_extra_data_size(void); | 167 | extern size_t elf_core_extra_data_size(void); |
| 170 | 168 | ||
| 169 | #endif /* __KERNEL__ */ | ||
| 170 | |||
| 171 | #endif /* _LINUX_ELFCORE_H */ | 171 | #endif /* _LINUX_ELFCORE_H */ |
diff --git a/include/linux/err.h b/include/linux/err.h index 1b12642636c7..448afc12c78a 100644 --- a/include/linux/err.h +++ b/include/linux/err.h | |||
| @@ -19,22 +19,22 @@ | |||
| 19 | 19 | ||
| 20 | #define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO) | 20 | #define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO) |
| 21 | 21 | ||
| 22 | static inline void *ERR_PTR(long error) | 22 | static inline void * __must_check ERR_PTR(long error) |
| 23 | { | 23 | { |
| 24 | return (void *) error; | 24 | return (void *) error; |
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | static inline long PTR_ERR(const void *ptr) | 27 | static inline long __must_check PTR_ERR(const void *ptr) |
| 28 | { | 28 | { |
| 29 | return (long) ptr; | 29 | return (long) ptr; |
| 30 | } | 30 | } |
| 31 | 31 | ||
| 32 | static inline long IS_ERR(const void *ptr) | 32 | static inline long __must_check IS_ERR(const void *ptr) |
| 33 | { | 33 | { |
| 34 | return IS_ERR_VALUE((unsigned long)ptr); | 34 | return IS_ERR_VALUE((unsigned long)ptr); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | static inline long IS_ERR_OR_NULL(const void *ptr) | 37 | static inline long __must_check IS_ERR_OR_NULL(const void *ptr) |
| 38 | { | 38 | { |
| 39 | return !ptr || IS_ERR_VALUE((unsigned long)ptr); | 39 | return !ptr || IS_ERR_VALUE((unsigned long)ptr); |
| 40 | } | 40 | } |
| @@ -46,7 +46,7 @@ static inline long IS_ERR_OR_NULL(const void *ptr) | |||
| 46 | * Explicitly cast an error-valued pointer to another pointer type in such a | 46 | * Explicitly cast an error-valued pointer to another pointer type in such a |
| 47 | * way as to make it clear that's what's going on. | 47 | * way as to make it clear that's what's going on. |
| 48 | */ | 48 | */ |
| 49 | static inline void *ERR_CAST(const void *ptr) | 49 | static inline void * __must_check ERR_CAST(const void *ptr) |
| 50 | { | 50 | { |
| 51 | /* cast away the const */ | 51 | /* cast away the const */ |
| 52 | return (void *) ptr; | 52 | return (void *) ptr; |
diff --git a/include/linux/ext2_fs_sb.h b/include/linux/ext2_fs_sb.h index 1cdb66367c98..db4d9f586bb6 100644 --- a/include/linux/ext2_fs_sb.h +++ b/include/linux/ext2_fs_sb.h | |||
| @@ -106,6 +106,15 @@ struct ext2_sb_info { | |||
| 106 | spinlock_t s_rsv_window_lock; | 106 | spinlock_t s_rsv_window_lock; |
| 107 | struct rb_root s_rsv_window_root; | 107 | struct rb_root s_rsv_window_root; |
| 108 | struct ext2_reserve_window_node s_rsv_window_head; | 108 | struct ext2_reserve_window_node s_rsv_window_head; |
| 109 | /* | ||
| 110 | * s_lock protects against concurrent modifications of s_mount_state, | ||
| 111 | * s_blocks_last, s_overhead_last and the content of superblock's | ||
| 112 | * buffer pointed to by sbi->s_es. | ||
| 113 | * | ||
| 114 | * Note: It is used in ext2_show_options() to provide a consistent view | ||
| 115 | * of the mount options. | ||
| 116 | */ | ||
| 117 | spinlock_t s_lock; | ||
| 109 | }; | 118 | }; |
| 110 | 119 | ||
| 111 | static inline spinlock_t * | 120 | static inline spinlock_t * |
diff --git a/include/linux/fb.h b/include/linux/fb.h index c10163b4c40e..f3793ebc241c 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h | |||
| @@ -37,7 +37,7 @@ struct dentry; | |||
| 37 | #define FBIOGET_HWCINFO 0x4616 | 37 | #define FBIOGET_HWCINFO 0x4616 |
| 38 | #define FBIOPUT_MODEINFO 0x4617 | 38 | #define FBIOPUT_MODEINFO 0x4617 |
| 39 | #define FBIOGET_DISPINFO 0x4618 | 39 | #define FBIOGET_DISPINFO 0x4618 |
| 40 | 40 | #define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32) | |
| 41 | 41 | ||
| 42 | #define FB_TYPE_PACKED_PIXELS 0 /* Packed Pixels */ | 42 | #define FB_TYPE_PACKED_PIXELS 0 /* Packed Pixels */ |
| 43 | #define FB_TYPE_PLANES 1 /* Non interleaved planes */ | 43 | #define FB_TYPE_PLANES 1 /* Non interleaved planes */ |
| @@ -403,6 +403,7 @@ struct fb_cursor { | |||
| 403 | #include <linux/notifier.h> | 403 | #include <linux/notifier.h> |
| 404 | #include <linux/list.h> | 404 | #include <linux/list.h> |
| 405 | #include <linux/backlight.h> | 405 | #include <linux/backlight.h> |
| 406 | #include <linux/slab.h> | ||
| 406 | #include <asm/io.h> | 407 | #include <asm/io.h> |
| 407 | 408 | ||
| 408 | struct vm_area_struct; | 409 | struct vm_area_struct; |
| @@ -862,10 +863,22 @@ struct fb_info { | |||
| 862 | /* we need the PCI or similiar aperture base/size not | 863 | /* we need the PCI or similiar aperture base/size not |
| 863 | smem_start/size as smem_start may just be an object | 864 | smem_start/size as smem_start may just be an object |
| 864 | allocated inside the aperture so may not actually overlap */ | 865 | allocated inside the aperture so may not actually overlap */ |
| 865 | resource_size_t aperture_base; | 866 | struct apertures_struct { |
| 866 | resource_size_t aperture_size; | 867 | unsigned int count; |
| 868 | struct aperture { | ||
| 869 | resource_size_t base; | ||
| 870 | resource_size_t size; | ||
| 871 | } ranges[0]; | ||
| 872 | } *apertures; | ||
| 867 | }; | 873 | }; |
| 868 | 874 | ||
| 875 | static inline struct apertures_struct *alloc_apertures(unsigned int max_num) { | ||
| 876 | struct apertures_struct *a = kzalloc(sizeof(struct apertures_struct) | ||
| 877 | + max_num * sizeof(struct aperture), GFP_KERNEL); | ||
| 878 | a->count = max_num; | ||
| 879 | return a; | ||
| 880 | } | ||
| 881 | |||
| 869 | #ifdef MODULE | 882 | #ifdef MODULE |
| 870 | #define FBINFO_DEFAULT FBINFO_MODULE | 883 | #define FBINFO_DEFAULT FBINFO_MODULE |
| 871 | #else | 884 | #else |
| @@ -958,6 +971,8 @@ extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf, | |||
| 958 | /* drivers/video/fbmem.c */ | 971 | /* drivers/video/fbmem.c */ |
| 959 | extern int register_framebuffer(struct fb_info *fb_info); | 972 | extern int register_framebuffer(struct fb_info *fb_info); |
| 960 | extern int unregister_framebuffer(struct fb_info *fb_info); | 973 | extern int unregister_framebuffer(struct fb_info *fb_info); |
| 974 | extern void remove_conflicting_framebuffers(struct apertures_struct *a, | ||
| 975 | const char *name, bool primary); | ||
| 961 | extern int fb_prepare_logo(struct fb_info *fb_info, int rotate); | 976 | extern int fb_prepare_logo(struct fb_info *fb_info, int rotate); |
| 962 | extern int fb_show_logo(struct fb_info *fb_info, int rotate); | 977 | extern int fb_show_logo(struct fb_info *fb_info, int rotate); |
| 963 | extern char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size); | 978 | extern char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size); |
diff --git a/include/linux/fcntl.h b/include/linux/fcntl.h index 86037400a6e3..afc00af3229b 100644 --- a/include/linux/fcntl.h +++ b/include/linux/fcntl.h | |||
| @@ -22,6 +22,12 @@ | |||
| 22 | #define F_NOTIFY (F_LINUX_SPECIFIC_BASE+2) | 22 | #define F_NOTIFY (F_LINUX_SPECIFIC_BASE+2) |
| 23 | 23 | ||
| 24 | /* | 24 | /* |
| 25 | * Set and get of pipe page size array | ||
| 26 | */ | ||
| 27 | #define F_SETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 7) | ||
| 28 | #define F_GETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 8) | ||
| 29 | |||
| 30 | /* | ||
| 25 | * Types of directory notifications that may be requested. | 31 | * Types of directory notifications that may be requested. |
| 26 | */ | 32 | */ |
| 27 | #define DN_ACCESS 0x00000001 /* File accessed */ | 33 | #define DN_ACCESS 0x00000001 /* File accessed */ |
diff --git a/include/linux/firmware.h b/include/linux/firmware.h index 043811f0d277..53d1e6c4f848 100644 --- a/include/linux/firmware.h +++ b/include/linux/firmware.h | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | struct firmware { | 12 | struct firmware { |
| 13 | size_t size; | 13 | size_t size; |
| 14 | const u8 *data; | 14 | const u8 *data; |
| 15 | struct page **pages; | ||
| 15 | }; | 16 | }; |
| 16 | 17 | ||
| 17 | struct device; | 18 | struct device; |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 4079ef99900f..b336cb9ca9a0 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -651,6 +651,7 @@ struct block_device { | |||
| 651 | int bd_openers; | 651 | int bd_openers; |
| 652 | struct mutex bd_mutex; /* open/close mutex */ | 652 | struct mutex bd_mutex; /* open/close mutex */ |
| 653 | struct list_head bd_inodes; | 653 | struct list_head bd_inodes; |
| 654 | void * bd_claiming; | ||
| 654 | void * bd_holder; | 655 | void * bd_holder; |
| 655 | int bd_holders; | 656 | int bd_holders; |
| 656 | #ifdef CONFIG_SYSFS | 657 | #ifdef CONFIG_SYSFS |
| @@ -1314,8 +1315,6 @@ extern int send_sigurg(struct fown_struct *fown); | |||
| 1314 | extern struct list_head super_blocks; | 1315 | extern struct list_head super_blocks; |
| 1315 | extern spinlock_t sb_lock; | 1316 | extern spinlock_t sb_lock; |
| 1316 | 1317 | ||
| 1317 | #define sb_entry(list) list_entry((list), struct super_block, s_list) | ||
| 1318 | #define S_BIAS (1<<30) | ||
| 1319 | struct super_block { | 1318 | struct super_block { |
| 1320 | struct list_head s_list; /* Keep this first */ | 1319 | struct list_head s_list; /* Keep this first */ |
| 1321 | dev_t s_dev; /* search index; _not_ kdev_t */ | 1320 | dev_t s_dev; /* search index; _not_ kdev_t */ |
| @@ -1334,12 +1333,11 @@ struct super_block { | |||
| 1334 | struct rw_semaphore s_umount; | 1333 | struct rw_semaphore s_umount; |
| 1335 | struct mutex s_lock; | 1334 | struct mutex s_lock; |
| 1336 | int s_count; | 1335 | int s_count; |
| 1337 | int s_need_sync; | ||
| 1338 | atomic_t s_active; | 1336 | atomic_t s_active; |
| 1339 | #ifdef CONFIG_SECURITY | 1337 | #ifdef CONFIG_SECURITY |
| 1340 | void *s_security; | 1338 | void *s_security; |
| 1341 | #endif | 1339 | #endif |
| 1342 | struct xattr_handler **s_xattr; | 1340 | const struct xattr_handler **s_xattr; |
| 1343 | 1341 | ||
| 1344 | struct list_head s_inodes; /* all inodes */ | 1342 | struct list_head s_inodes; /* all inodes */ |
| 1345 | struct hlist_head s_anon; /* anonymous dentries for (nfs) exporting */ | 1343 | struct hlist_head s_anon; /* anonymous dentries for (nfs) exporting */ |
| @@ -1431,7 +1429,8 @@ extern void dentry_unhash(struct dentry *dentry); | |||
| 1431 | * VFS file helper functions. | 1429 | * VFS file helper functions. |
| 1432 | */ | 1430 | */ |
| 1433 | extern int file_permission(struct file *, int); | 1431 | extern int file_permission(struct file *, int); |
| 1434 | 1432 | extern void inode_init_owner(struct inode *inode, const struct inode *dir, | |
| 1433 | mode_t mode); | ||
| 1435 | /* | 1434 | /* |
| 1436 | * VFS FS_IOC_FIEMAP helper definitions. | 1435 | * VFS FS_IOC_FIEMAP helper definitions. |
| 1437 | */ | 1436 | */ |
| @@ -1744,6 +1743,7 @@ struct file_system_type { | |||
| 1744 | 1743 | ||
| 1745 | struct lock_class_key s_lock_key; | 1744 | struct lock_class_key s_lock_key; |
| 1746 | struct lock_class_key s_umount_key; | 1745 | struct lock_class_key s_umount_key; |
| 1746 | struct lock_class_key s_vfs_rename_key; | ||
| 1747 | 1747 | ||
| 1748 | struct lock_class_key i_lock_key; | 1748 | struct lock_class_key i_lock_key; |
| 1749 | struct lock_class_key i_mutex_key; | 1749 | struct lock_class_key i_mutex_key; |
| @@ -1781,8 +1781,6 @@ extern int get_sb_pseudo(struct file_system_type *, char *, | |||
| 1781 | const struct super_operations *ops, unsigned long, | 1781 | const struct super_operations *ops, unsigned long, |
| 1782 | struct vfsmount *mnt); | 1782 | struct vfsmount *mnt); |
| 1783 | extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb); | 1783 | extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb); |
| 1784 | int __put_super_and_need_restart(struct super_block *sb); | ||
| 1785 | void put_super(struct super_block *sb); | ||
| 1786 | 1784 | ||
| 1787 | /* Alas, no aliases. Too much hassle with bringing module.h everywhere */ | 1785 | /* Alas, no aliases. Too much hassle with bringing module.h everywhere */ |
| 1788 | #define fops_get(fops) \ | 1786 | #define fops_get(fops) \ |
| @@ -1802,6 +1800,8 @@ extern void drop_collected_mounts(struct vfsmount *); | |||
| 1802 | extern int iterate_mounts(int (*)(struct vfsmount *, void *), void *, | 1800 | extern int iterate_mounts(int (*)(struct vfsmount *, void *), void *, |
| 1803 | struct vfsmount *); | 1801 | struct vfsmount *); |
| 1804 | extern int vfs_statfs(struct dentry *, struct kstatfs *); | 1802 | extern int vfs_statfs(struct dentry *, struct kstatfs *); |
| 1803 | extern int freeze_super(struct super_block *super); | ||
| 1804 | extern int thaw_super(struct super_block *super); | ||
| 1805 | 1805 | ||
| 1806 | extern int current_umask(void); | 1806 | extern int current_umask(void); |
| 1807 | 1807 | ||
| @@ -2087,9 +2087,9 @@ extern int __filemap_fdatawrite_range(struct address_space *mapping, | |||
| 2087 | extern int filemap_fdatawrite_range(struct address_space *mapping, | 2087 | extern int filemap_fdatawrite_range(struct address_space *mapping, |
| 2088 | loff_t start, loff_t end); | 2088 | loff_t start, loff_t end); |
| 2089 | 2089 | ||
| 2090 | extern int vfs_fsync_range(struct file *file, struct dentry *dentry, | 2090 | extern int vfs_fsync_range(struct file *file, loff_t start, loff_t end, |
| 2091 | loff_t start, loff_t end, int datasync); | 2091 | int datasync); |
| 2092 | extern int vfs_fsync(struct file *file, struct dentry *dentry, int datasync); | 2092 | extern int vfs_fsync(struct file *file, int datasync); |
| 2093 | extern int generic_write_sync(struct file *file, loff_t pos, loff_t count); | 2093 | extern int generic_write_sync(struct file *file, loff_t pos, loff_t count); |
| 2094 | extern void sync_supers(void); | 2094 | extern void sync_supers(void); |
| 2095 | extern void emergency_sync(void); | 2095 | extern void emergency_sync(void); |
| @@ -2329,6 +2329,7 @@ extern struct super_block *get_super(struct block_device *); | |||
| 2329 | extern struct super_block *get_active_super(struct block_device *bdev); | 2329 | extern struct super_block *get_active_super(struct block_device *bdev); |
| 2330 | extern struct super_block *user_get_super(dev_t); | 2330 | extern struct super_block *user_get_super(dev_t); |
| 2331 | extern void drop_super(struct super_block *sb); | 2331 | extern void drop_super(struct super_block *sb); |
| 2332 | extern void iterate_supers(void (*)(struct super_block *, void *), void *); | ||
| 2332 | 2333 | ||
| 2333 | extern int dcache_dir_open(struct inode *, struct file *); | 2334 | extern int dcache_dir_open(struct inode *, struct file *); |
| 2334 | extern int dcache_dir_close(struct inode *, struct file *); | 2335 | extern int dcache_dir_close(struct inode *, struct file *); |
diff --git a/include/linux/generic_acl.h b/include/linux/generic_acl.h index ca666d18ed67..574bea4013b6 100644 --- a/include/linux/generic_acl.h +++ b/include/linux/generic_acl.h | |||
| @@ -5,8 +5,8 @@ | |||
| 5 | 5 | ||
| 6 | struct inode; | 6 | struct inode; |
| 7 | 7 | ||
| 8 | extern struct xattr_handler generic_acl_access_handler; | 8 | extern const struct xattr_handler generic_acl_access_handler; |
| 9 | extern struct xattr_handler generic_acl_default_handler; | 9 | extern const struct xattr_handler generic_acl_default_handler; |
| 10 | 10 | ||
| 11 | int generic_acl_init(struct inode *, struct inode *); | 11 | int generic_acl_init(struct inode *, struct inode *); |
| 12 | int generic_acl_chmod(struct inode *); | 12 | int generic_acl_chmod(struct inode *); |
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 4c6d41333f98..975609cb8548 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
| @@ -15,7 +15,7 @@ struct vm_area_struct; | |||
| 15 | * Zone modifiers (see linux/mmzone.h - low three bits) | 15 | * Zone modifiers (see linux/mmzone.h - low three bits) |
| 16 | * | 16 | * |
| 17 | * Do not put any conditional on these. If necessary modify the definitions | 17 | * Do not put any conditional on these. If necessary modify the definitions |
| 18 | * without the underscores and use the consistently. The definitions here may | 18 | * without the underscores and use them consistently. The definitions here may |
| 19 | * be used in bit comparisons. | 19 | * be used in bit comparisons. |
| 20 | */ | 20 | */ |
| 21 | #define __GFP_DMA ((__force gfp_t)0x01u) | 21 | #define __GFP_DMA ((__force gfp_t)0x01u) |
| @@ -101,7 +101,7 @@ struct vm_area_struct; | |||
| 101 | __GFP_NORETRY|__GFP_NOMEMALLOC) | 101 | __GFP_NORETRY|__GFP_NOMEMALLOC) |
| 102 | 102 | ||
| 103 | /* Control slab gfp mask during early boot */ | 103 | /* Control slab gfp mask during early boot */ |
| 104 | #define GFP_BOOT_MASK __GFP_BITS_MASK & ~(__GFP_WAIT|__GFP_IO|__GFP_FS) | 104 | #define GFP_BOOT_MASK (__GFP_BITS_MASK & ~(__GFP_WAIT|__GFP_IO|__GFP_FS)) |
| 105 | 105 | ||
| 106 | /* Control allocation constraints */ | 106 | /* Control allocation constraints */ |
| 107 | #define GFP_CONSTRAINT_MASK (__GFP_HARDWALL|__GFP_THISNODE) | 107 | #define GFP_CONSTRAINT_MASK (__GFP_HARDWALL|__GFP_THISNODE) |
| @@ -152,12 +152,12 @@ static inline int allocflags_to_migratetype(gfp_t gfp_flags) | |||
| 152 | * GFP_ZONE_TABLE is a word size bitstring that is used for looking up the | 152 | * GFP_ZONE_TABLE is a word size bitstring that is used for looking up the |
| 153 | * zone to use given the lowest 4 bits of gfp_t. Entries are ZONE_SHIFT long | 153 | * zone to use given the lowest 4 bits of gfp_t. Entries are ZONE_SHIFT long |
| 154 | * and there are 16 of them to cover all possible combinations of | 154 | * and there are 16 of them to cover all possible combinations of |
| 155 | * __GFP_DMA, __GFP_DMA32, __GFP_MOVABLE and __GFP_HIGHMEM | 155 | * __GFP_DMA, __GFP_DMA32, __GFP_MOVABLE and __GFP_HIGHMEM. |
| 156 | * | 156 | * |
| 157 | * The zone fallback order is MOVABLE=>HIGHMEM=>NORMAL=>DMA32=>DMA. | 157 | * The zone fallback order is MOVABLE=>HIGHMEM=>NORMAL=>DMA32=>DMA. |
| 158 | * But GFP_MOVABLE is not only a zone specifier but also an allocation | 158 | * But GFP_MOVABLE is not only a zone specifier but also an allocation |
| 159 | * policy. Therefore __GFP_MOVABLE plus another zone selector is valid. | 159 | * policy. Therefore __GFP_MOVABLE plus another zone selector is valid. |
| 160 | * Only 1bit of the lowest 3 bit (DMA,DMA32,HIGHMEM) can be set to "1". | 160 | * Only 1 bit of the lowest 3 bits (DMA,DMA32,HIGHMEM) can be set to "1". |
| 161 | * | 161 | * |
| 162 | * bit result | 162 | * bit result |
| 163 | * ================= | 163 | * ================= |
| @@ -187,7 +187,7 @@ static inline int allocflags_to_migratetype(gfp_t gfp_flags) | |||
| 187 | 187 | ||
| 188 | #define GFP_ZONE_TABLE ( \ | 188 | #define GFP_ZONE_TABLE ( \ |
| 189 | (ZONE_NORMAL << 0 * ZONES_SHIFT) \ | 189 | (ZONE_NORMAL << 0 * ZONES_SHIFT) \ |
| 190 | | (OPT_ZONE_DMA << __GFP_DMA * ZONES_SHIFT) \ | 190 | | (OPT_ZONE_DMA << __GFP_DMA * ZONES_SHIFT) \ |
| 191 | | (OPT_ZONE_HIGHMEM << __GFP_HIGHMEM * ZONES_SHIFT) \ | 191 | | (OPT_ZONE_HIGHMEM << __GFP_HIGHMEM * ZONES_SHIFT) \ |
| 192 | | (OPT_ZONE_DMA32 << __GFP_DMA32 * ZONES_SHIFT) \ | 192 | | (OPT_ZONE_DMA32 << __GFP_DMA32 * ZONES_SHIFT) \ |
| 193 | | (ZONE_NORMAL << __GFP_MOVABLE * ZONES_SHIFT) \ | 193 | | (ZONE_NORMAL << __GFP_MOVABLE * ZONES_SHIFT) \ |
| @@ -197,7 +197,7 @@ static inline int allocflags_to_migratetype(gfp_t gfp_flags) | |||
| 197 | ) | 197 | ) |
| 198 | 198 | ||
| 199 | /* | 199 | /* |
| 200 | * GFP_ZONE_BAD is a bitmap for all combination of __GFP_DMA, __GFP_DMA32 | 200 | * GFP_ZONE_BAD is a bitmap for all combinations of __GFP_DMA, __GFP_DMA32 |
| 201 | * __GFP_HIGHMEM and __GFP_MOVABLE that are not permitted. One flag per | 201 | * __GFP_HIGHMEM and __GFP_MOVABLE that are not permitted. One flag per |
| 202 | * entry starting with bit 0. Bit is set if the combination is not | 202 | * entry starting with bit 0. Bit is set if the combination is not |
| 203 | * allowed. | 203 | * allowed. |
| @@ -320,17 +320,17 @@ void *alloc_pages_exact(size_t size, gfp_t gfp_mask); | |||
| 320 | void free_pages_exact(void *virt, size_t size); | 320 | void free_pages_exact(void *virt, size_t size); |
| 321 | 321 | ||
| 322 | #define __get_free_page(gfp_mask) \ | 322 | #define __get_free_page(gfp_mask) \ |
| 323 | __get_free_pages((gfp_mask),0) | 323 | __get_free_pages((gfp_mask), 0) |
| 324 | 324 | ||
| 325 | #define __get_dma_pages(gfp_mask, order) \ | 325 | #define __get_dma_pages(gfp_mask, order) \ |
| 326 | __get_free_pages((gfp_mask) | GFP_DMA,(order)) | 326 | __get_free_pages((gfp_mask) | GFP_DMA, (order)) |
| 327 | 327 | ||
| 328 | extern void __free_pages(struct page *page, unsigned int order); | 328 | extern void __free_pages(struct page *page, unsigned int order); |
| 329 | extern void free_pages(unsigned long addr, unsigned int order); | 329 | extern void free_pages(unsigned long addr, unsigned int order); |
| 330 | extern void free_hot_cold_page(struct page *page, int cold); | 330 | extern void free_hot_cold_page(struct page *page, int cold); |
| 331 | 331 | ||
| 332 | #define __free_page(page) __free_pages((page), 0) | 332 | #define __free_page(page) __free_pages((page), 0) |
| 333 | #define free_page(addr) free_pages((addr),0) | 333 | #define free_page(addr) free_pages((addr), 0) |
| 334 | 334 | ||
| 335 | void page_alloc_init(void); | 335 | void page_alloc_init(void); |
| 336 | void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp); | 336 | void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp); |
diff --git a/include/linux/gsmmux.h b/include/linux/gsmmux.h new file mode 100644 index 000000000000..378de4195caf --- /dev/null +++ b/include/linux/gsmmux.h | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | #ifndef _LINUX_GSMMUX_H | ||
| 2 | #define _LINUX_GSMMUX_H | ||
| 3 | |||
| 4 | struct gsm_config | ||
| 5 | { | ||
| 6 | unsigned int adaption; | ||
| 7 | unsigned int encapsulation; | ||
| 8 | unsigned int initiator; | ||
| 9 | unsigned int t1; | ||
| 10 | unsigned int t2; | ||
| 11 | unsigned int t3; | ||
| 12 | unsigned int n2; | ||
| 13 | unsigned int mru; | ||
| 14 | unsigned int mtu; | ||
| 15 | unsigned int k; | ||
| 16 | unsigned int i; | ||
| 17 | unsigned int unused[8]; /* Padding for expansion without | ||
| 18 | breaking stuff */ | ||
| 19 | }; | ||
| 20 | |||
| 21 | #define GSMIOC_GETCONF _IOR('G', 0, struct gsm_config) | ||
| 22 | #define GSMIOC_SETCONF _IOW('G', 1, struct gsm_config) | ||
| 23 | |||
| 24 | |||
| 25 | #endif | ||
diff --git a/include/linux/hdpu_features.h b/include/linux/hdpu_features.h deleted file mode 100644 index 6a8715431ae4..000000000000 --- a/include/linux/hdpu_features.h +++ /dev/null | |||
| @@ -1,26 +0,0 @@ | |||
| 1 | #include <linux/spinlock.h> | ||
| 2 | |||
| 3 | struct cpustate_t { | ||
| 4 | spinlock_t lock; | ||
| 5 | int excl; | ||
| 6 | int open_count; | ||
| 7 | unsigned char cached_val; | ||
| 8 | int inited; | ||
| 9 | unsigned long *set_addr; | ||
| 10 | unsigned long *clr_addr; | ||
| 11 | }; | ||
| 12 | |||
| 13 | |||
| 14 | #define HDPU_CPUSTATE_NAME "hdpu cpustate" | ||
| 15 | #define HDPU_NEXUS_NAME "hdpu nexus" | ||
| 16 | |||
| 17 | #define CPUSTATE_KERNEL_MAJOR 0x10 | ||
| 18 | |||
| 19 | #define CPUSTATE_KERNEL_INIT_DRV 0 /* CPU State Driver Initialized */ | ||
| 20 | #define CPUSTATE_KERNEL_INIT_PCI 1 /* 64360 PCI Busses Init */ | ||
| 21 | #define CPUSTATE_KERNEL_INIT_REG 2 /* 64360 Bridge Init */ | ||
| 22 | #define CPUSTATE_KERNEL_CPU1_KICK 3 /* Boot cpu 1 */ | ||
| 23 | #define CPUSTATE_KERNEL_CPU1_OK 4 /* Cpu 1 has checked in */ | ||
| 24 | #define CPUSTATE_KERNEL_OK 5 /* Terminal state */ | ||
| 25 | #define CPUSTATE_KERNEL_RESET 14 /* Board reset via SW*/ | ||
| 26 | #define CPUSTATE_KERNEL_HALT 15 /* Board halted via SW*/ | ||
diff --git a/include/linux/hid.h b/include/linux/hid.h index b1344ec4b7fc..895001f7f4b2 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
| @@ -308,11 +308,13 @@ struct hid_item { | |||
| 308 | #define HID_QUIRK_NOTOUCH 0x00000002 | 308 | #define HID_QUIRK_NOTOUCH 0x00000002 |
| 309 | #define HID_QUIRK_IGNORE 0x00000004 | 309 | #define HID_QUIRK_IGNORE 0x00000004 |
| 310 | #define HID_QUIRK_NOGET 0x00000008 | 310 | #define HID_QUIRK_NOGET 0x00000008 |
| 311 | #define HID_QUIRK_HIDDEV_FORCE 0x00000010 | ||
| 311 | #define HID_QUIRK_BADPAD 0x00000020 | 312 | #define HID_QUIRK_BADPAD 0x00000020 |
| 312 | #define HID_QUIRK_MULTI_INPUT 0x00000040 | 313 | #define HID_QUIRK_MULTI_INPUT 0x00000040 |
| 313 | #define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000 | 314 | #define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000 |
| 314 | #define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000 | 315 | #define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000 |
| 315 | #define HID_QUIRK_NO_INIT_REPORTS 0x20000000 | 316 | #define HID_QUIRK_NO_INIT_REPORTS 0x20000000 |
| 317 | #define HID_QUIRK_NO_IGNORE 0x40000000 | ||
| 316 | 318 | ||
| 317 | /* | 319 | /* |
| 318 | * This is the global environment of the parser. This information is | 320 | * This is the global environment of the parser. This information is |
| @@ -589,6 +591,9 @@ struct hid_usage_id { | |||
| 589 | * @report_fixup: called before report descriptor parsing (NULL means nop) | 591 | * @report_fixup: called before report descriptor parsing (NULL means nop) |
| 590 | * @input_mapping: invoked on input registering before mapping an usage | 592 | * @input_mapping: invoked on input registering before mapping an usage |
| 591 | * @input_mapped: invoked on input registering after mapping an usage | 593 | * @input_mapped: invoked on input registering after mapping an usage |
| 594 | * @suspend: invoked on suspend (NULL means nop) | ||
| 595 | * @resume: invoked on resume if device was not reset (NULL means nop) | ||
| 596 | * @reset_resume: invoked on resume if device was reset (NULL means nop) | ||
| 592 | * | 597 | * |
| 593 | * raw_event and event should return 0 on no action performed, 1 when no | 598 | * raw_event and event should return 0 on no action performed, 1 when no |
| 594 | * further processing should be done and negative on error | 599 | * further processing should be done and negative on error |
| @@ -629,6 +634,11 @@ struct hid_driver { | |||
| 629 | int (*input_mapped)(struct hid_device *hdev, | 634 | int (*input_mapped)(struct hid_device *hdev, |
| 630 | struct hid_input *hidinput, struct hid_field *field, | 635 | struct hid_input *hidinput, struct hid_field *field, |
| 631 | struct hid_usage *usage, unsigned long **bit, int *max); | 636 | struct hid_usage *usage, unsigned long **bit, int *max); |
| 637 | #ifdef CONFIG_PM | ||
| 638 | int (*suspend)(struct hid_device *hdev, pm_message_t message); | ||
| 639 | int (*resume)(struct hid_device *hdev); | ||
| 640 | int (*reset_resume)(struct hid_device *hdev); | ||
| 641 | #endif | ||
| 632 | /* private: */ | 642 | /* private: */ |
| 633 | struct device_driver driver; | 643 | struct device_driver driver; |
| 634 | }; | 644 | }; |
diff --git a/include/linux/highmem.h b/include/linux/highmem.h index 74152c08ad07..caafd0561aa1 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h | |||
| @@ -27,7 +27,7 @@ static inline void invalidate_kernel_vmap_range(void *vaddr, int size) | |||
| 27 | 27 | ||
| 28 | #include <asm/kmap_types.h> | 28 | #include <asm/kmap_types.h> |
| 29 | 29 | ||
| 30 | #if defined(CONFIG_DEBUG_HIGHMEM) && defined(CONFIG_TRACE_IRQFLAGS_SUPPORT) | 30 | #ifdef CONFIG_DEBUG_HIGHMEM |
| 31 | 31 | ||
| 32 | void debug_kmap_atomic(enum km_type type); | 32 | void debug_kmap_atomic(enum km_type type); |
| 33 | 33 | ||
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 6ed1d59bfb1e..21067b418536 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h | |||
| @@ -34,6 +34,7 @@ | |||
| 34 | #include <linux/device.h> /* for struct device */ | 34 | #include <linux/device.h> /* for struct device */ |
| 35 | #include <linux/sched.h> /* for completion */ | 35 | #include <linux/sched.h> /* for completion */ |
| 36 | #include <linux/mutex.h> | 36 | #include <linux/mutex.h> |
| 37 | #include <linux/of.h> /* for struct device_node */ | ||
| 37 | 38 | ||
| 38 | extern struct bus_type i2c_bus_type; | 39 | extern struct bus_type i2c_bus_type; |
| 39 | 40 | ||
| @@ -251,6 +252,9 @@ struct i2c_board_info { | |||
| 251 | unsigned short addr; | 252 | unsigned short addr; |
| 252 | void *platform_data; | 253 | void *platform_data; |
| 253 | struct dev_archdata *archdata; | 254 | struct dev_archdata *archdata; |
| 255 | #ifdef CONFIG_OF | ||
| 256 | struct device_node *of_node; | ||
| 257 | #endif | ||
| 254 | int irq; | 258 | int irq; |
| 255 | }; | 259 | }; |
| 256 | 260 | ||
diff --git a/include/linux/ide.h b/include/linux/ide.h index 3239d1c10acb..7b02aa5ce9b4 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
| @@ -362,7 +362,7 @@ struct ide_drive_s; | |||
| 362 | struct ide_disk_ops { | 362 | struct ide_disk_ops { |
| 363 | int (*check)(struct ide_drive_s *, const char *); | 363 | int (*check)(struct ide_drive_s *, const char *); |
| 364 | int (*get_capacity)(struct ide_drive_s *); | 364 | int (*get_capacity)(struct ide_drive_s *); |
| 365 | u64 (*set_capacity)(struct ide_drive_s *, u64); | 365 | void (*unlock_native_capacity)(struct ide_drive_s *); |
| 366 | void (*setup)(struct ide_drive_s *); | 366 | void (*setup)(struct ide_drive_s *); |
| 367 | void (*flush)(struct ide_drive_s *); | 367 | void (*flush)(struct ide_drive_s *); |
| 368 | int (*init_media)(struct ide_drive_s *, struct gendisk *); | 368 | int (*init_media)(struct ide_drive_s *, struct gendisk *); |
| @@ -516,8 +516,8 @@ struct ide_drive_s { | |||
| 516 | u8 current_speed; /* current transfer rate set */ | 516 | u8 current_speed; /* current transfer rate set */ |
| 517 | u8 desired_speed; /* desired transfer rate set */ | 517 | u8 desired_speed; /* desired transfer rate set */ |
| 518 | u8 pio_mode; /* for ->set_pio_mode _only_ */ | 518 | u8 pio_mode; /* for ->set_pio_mode _only_ */ |
| 519 | u8 dma_mode; /* for ->dma_pio_mode _only_ */ | 519 | u8 dma_mode; /* for ->set_dma_mode _only_ */ |
| 520 | u8 dn; /* now wide spread use */ | 520 | u8 dn; /* now wide spread use */ |
| 521 | u8 acoustic; /* acoustic management */ | 521 | u8 acoustic; /* acoustic management */ |
| 522 | u8 media; /* disk, cdrom, tape, floppy, ... */ | 522 | u8 media; /* disk, cdrom, tape, floppy, ... */ |
| 523 | u8 ready_stat; /* min status value for drive ready */ | 523 | u8 ready_stat; /* min status value for drive ready */ |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 5137db3317f9..c2331138ca1b 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -78,7 +78,7 @@ enum { | |||
| 78 | IRQTF_AFFINITY, | 78 | IRQTF_AFFINITY, |
| 79 | }; | 79 | }; |
| 80 | 80 | ||
| 81 | /** | 81 | /* |
| 82 | * These values can be returned by request_any_context_irq() and | 82 | * These values can be returned by request_any_context_irq() and |
| 83 | * describe the context the interrupt will be run in. | 83 | * describe the context the interrupt will be run in. |
| 84 | * | 84 | * |
diff --git a/include/linux/ioport.h b/include/linux/ioport.h index 26fad187d661..b22790268b64 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h | |||
| @@ -52,6 +52,7 @@ struct resource_list { | |||
| 52 | 52 | ||
| 53 | #define IORESOURCE_MEM_64 0x00100000 | 53 | #define IORESOURCE_MEM_64 0x00100000 |
| 54 | #define IORESOURCE_WINDOW 0x00200000 /* forwarded by bridge */ | 54 | #define IORESOURCE_WINDOW 0x00200000 /* forwarded by bridge */ |
| 55 | #define IORESOURCE_MUXED 0x00400000 /* Resource is software muxed */ | ||
| 55 | 56 | ||
| 56 | #define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */ | 57 | #define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */ |
| 57 | #define IORESOURCE_DISABLED 0x10000000 | 58 | #define IORESOURCE_DISABLED 0x10000000 |
| @@ -143,7 +144,8 @@ static inline unsigned long resource_type(const struct resource *res) | |||
| 143 | } | 144 | } |
| 144 | 145 | ||
| 145 | /* Convenience shorthand with allocation */ | 146 | /* Convenience shorthand with allocation */ |
| 146 | #define request_region(start,n,name) __request_region(&ioport_resource, (start), (n), (name), 0) | 147 | #define request_region(start,n,name) __request_region(&ioport_resource, (start), (n), (name), 0) |
| 148 | #define request_muxed_region(start,n,name) __request_region(&ioport_resource, (start), (n), (name), IORESOURCE_MUXED) | ||
| 147 | #define __request_mem_region(start,n,name, excl) __request_region(&iomem_resource, (start), (n), (name), excl) | 149 | #define __request_mem_region(start,n,name, excl) __request_region(&iomem_resource, (start), (n), (name), excl) |
| 148 | #define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name), 0) | 150 | #define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name), 0) |
| 149 | #define request_mem_region_exclusive(start,n,name) \ | 151 | #define request_mem_region_exclusive(start,n,name) \ |
diff --git a/include/linux/isapnp.h b/include/linux/isapnp.h index cd5a269fdb5e..e2d28b026a8c 100644 --- a/include/linux/isapnp.h +++ b/include/linux/isapnp.h | |||
| @@ -43,10 +43,10 @@ | |||
| 43 | */ | 43 | */ |
| 44 | 44 | ||
| 45 | #ifdef __KERNEL__ | 45 | #ifdef __KERNEL__ |
| 46 | #include <linux/mod_devicetable.h> | ||
| 46 | 47 | ||
| 47 | #define DEVICE_COUNT_COMPATIBLE 4 | 48 | #define DEVICE_COUNT_COMPATIBLE 4 |
| 48 | 49 | ||
| 49 | #define ISAPNP_ANY_ID 0xffff | ||
| 50 | #define ISAPNP_CARD_DEVS 8 | 50 | #define ISAPNP_CARD_DEVS 8 |
| 51 | 51 | ||
| 52 | #define ISAPNP_CARD_ID(_va, _vb, _vc, _device) \ | 52 | #define ISAPNP_CARD_ID(_va, _vb, _vc, _device) \ |
| @@ -74,12 +74,6 @@ struct isapnp_card_id { | |||
| 74 | #define ISAPNP_DEVICE_SINGLE_END \ | 74 | #define ISAPNP_DEVICE_SINGLE_END \ |
| 75 | .card_vendor = 0, .card_device = 0 | 75 | .card_vendor = 0, .card_device = 0 |
| 76 | 76 | ||
| 77 | struct isapnp_device_id { | ||
| 78 | unsigned short card_vendor, card_device; | ||
| 79 | unsigned short vendor, function; | ||
| 80 | unsigned long driver_data; /* data private to the driver */ | ||
| 81 | }; | ||
| 82 | |||
| 83 | #if defined(CONFIG_ISAPNP) || (defined(CONFIG_ISAPNP_MODULE) && defined(MODULE)) | 77 | #if defined(CONFIG_ISAPNP) || (defined(CONFIG_ISAPNP_MODULE) && defined(MODULE)) |
| 84 | 78 | ||
| 85 | #define __ISAPNP__ | 79 | #define __ISAPNP__ |
diff --git a/include/linux/ivtvfb.h b/include/linux/ivtvfb.h index 9d88b29ddf55..e8b92f67f10d 100644 --- a/include/linux/ivtvfb.h +++ b/include/linux/ivtvfb.h | |||
| @@ -33,6 +33,5 @@ struct ivtvfb_dma_frame { | |||
| 33 | }; | 33 | }; |
| 34 | 34 | ||
| 35 | #define IVTVFB_IOC_DMA_FRAME _IOW('V', BASE_VIDIOC_PRIVATE+0, struct ivtvfb_dma_frame) | 35 | #define IVTVFB_IOC_DMA_FRAME _IOW('V', BASE_VIDIOC_PRIVATE+0, struct ivtvfb_dma_frame) |
| 36 | #define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32) | ||
| 37 | 36 | ||
| 38 | #endif | 37 | #endif |
diff --git a/include/linux/jbd.h b/include/linux/jbd.h index 516a2a27e87a..e06965081ba5 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h | |||
| @@ -427,9 +427,9 @@ struct transaction_s | |||
| 427 | enum { | 427 | enum { |
| 428 | T_RUNNING, | 428 | T_RUNNING, |
| 429 | T_LOCKED, | 429 | T_LOCKED, |
| 430 | T_RUNDOWN, | ||
| 431 | T_FLUSH, | 430 | T_FLUSH, |
| 432 | T_COMMIT, | 431 | T_COMMIT, |
| 432 | T_COMMIT_RECORD, | ||
| 433 | T_FINISHED | 433 | T_FINISHED |
| 434 | } t_state; | 434 | } t_state; |
| 435 | 435 | ||
| @@ -991,6 +991,7 @@ int journal_start_commit(journal_t *journal, tid_t *tid); | |||
| 991 | int journal_force_commit_nested(journal_t *journal); | 991 | int journal_force_commit_nested(journal_t *journal); |
| 992 | int log_wait_commit(journal_t *journal, tid_t tid); | 992 | int log_wait_commit(journal_t *journal, tid_t tid); |
| 993 | int log_do_checkpoint(journal_t *journal); | 993 | int log_do_checkpoint(journal_t *journal); |
| 994 | int journal_trans_will_send_data_barrier(journal_t *journal, tid_t tid); | ||
| 994 | 995 | ||
| 995 | void __log_wait_for_space(journal_t *journal); | 996 | void __log_wait_for_space(journal_t *journal); |
| 996 | extern void __journal_drop_transaction(journal_t *, transaction_t *); | 997 | extern void __journal_drop_transaction(journal_t *, transaction_t *); |
diff --git a/include/linux/kdb.h b/include/linux/kdb.h new file mode 100644 index 000000000000..ccb2b3ec0fe8 --- /dev/null +++ b/include/linux/kdb.h | |||
| @@ -0,0 +1,117 @@ | |||
| 1 | #ifndef _KDB_H | ||
| 2 | #define _KDB_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * Kernel Debugger Architecture Independent Global Headers | ||
| 6 | * | ||
| 7 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 8 | * License. See the file "COPYING" in the main directory of this archive | ||
| 9 | * for more details. | ||
| 10 | * | ||
| 11 | * Copyright (c) 2000-2007 Silicon Graphics, Inc. All Rights Reserved. | ||
| 12 | * Copyright (C) 2000 Stephane Eranian <eranian@hpl.hp.com> | ||
| 13 | * Copyright (C) 2009 Jason Wessel <jason.wessel@windriver.com> | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifdef CONFIG_KGDB_KDB | ||
| 17 | #include <linux/init.h> | ||
| 18 | #include <linux/sched.h> | ||
| 19 | #include <asm/atomic.h> | ||
| 20 | |||
| 21 | #define KDB_POLL_FUNC_MAX 5 | ||
| 22 | extern int kdb_poll_idx; | ||
| 23 | |||
| 24 | /* | ||
| 25 | * kdb_initial_cpu is initialized to -1, and is set to the cpu | ||
| 26 | * number whenever the kernel debugger is entered. | ||
| 27 | */ | ||
| 28 | extern int kdb_initial_cpu; | ||
| 29 | extern atomic_t kdb_event; | ||
| 30 | |||
| 31 | /* | ||
| 32 | * kdb_diemsg | ||
| 33 | * | ||
| 34 | * Contains a pointer to the last string supplied to the | ||
| 35 | * kernel 'die' panic function. | ||
| 36 | */ | ||
| 37 | extern const char *kdb_diemsg; | ||
| 38 | |||
| 39 | #define KDB_FLAG_EARLYKDB (1 << 0) /* set from boot parameter kdb=early */ | ||
| 40 | #define KDB_FLAG_CATASTROPHIC (1 << 1) /* A catastrophic event has occurred */ | ||
| 41 | #define KDB_FLAG_CMD_INTERRUPT (1 << 2) /* Previous command was interrupted */ | ||
| 42 | #define KDB_FLAG_NOIPI (1 << 3) /* Do not send IPIs */ | ||
| 43 | #define KDB_FLAG_ONLY_DO_DUMP (1 << 4) /* Only do a dump, used when | ||
| 44 | * kdb is off */ | ||
| 45 | #define KDB_FLAG_NO_CONSOLE (1 << 5) /* No console is available, | ||
| 46 | * kdb is disabled */ | ||
| 47 | #define KDB_FLAG_NO_VT_CONSOLE (1 << 6) /* No VT console is available, do | ||
| 48 | * not use keyboard */ | ||
| 49 | #define KDB_FLAG_NO_I8042 (1 << 7) /* No i8042 chip is available, do | ||
| 50 | * not use keyboard */ | ||
| 51 | |||
| 52 | extern int kdb_flags; /* Global flags, see kdb_state for per cpu state */ | ||
| 53 | |||
| 54 | extern void kdb_save_flags(void); | ||
| 55 | extern void kdb_restore_flags(void); | ||
| 56 | |||
| 57 | #define KDB_FLAG(flag) (kdb_flags & KDB_FLAG_##flag) | ||
| 58 | #define KDB_FLAG_SET(flag) ((void)(kdb_flags |= KDB_FLAG_##flag)) | ||
| 59 | #define KDB_FLAG_CLEAR(flag) ((void)(kdb_flags &= ~KDB_FLAG_##flag)) | ||
| 60 | |||
| 61 | /* | ||
| 62 | * External entry point for the kernel debugger. The pt_regs | ||
| 63 | * at the time of entry are supplied along with the reason for | ||
| 64 | * entry to the kernel debugger. | ||
| 65 | */ | ||
| 66 | |||
| 67 | typedef enum { | ||
| 68 | KDB_REASON_ENTER = 1, /* KDB_ENTER() trap/fault - regs valid */ | ||
| 69 | KDB_REASON_ENTER_SLAVE, /* KDB_ENTER_SLAVE() trap/fault - regs valid */ | ||
| 70 | KDB_REASON_BREAK, /* Breakpoint inst. - regs valid */ | ||
| 71 | KDB_REASON_DEBUG, /* Debug Fault - regs valid */ | ||
| 72 | KDB_REASON_OOPS, /* Kernel Oops - regs valid */ | ||
| 73 | KDB_REASON_SWITCH, /* CPU switch - regs valid*/ | ||
| 74 | KDB_REASON_KEYBOARD, /* Keyboard entry - regs valid */ | ||
| 75 | KDB_REASON_NMI, /* Non-maskable interrupt; regs valid */ | ||
| 76 | KDB_REASON_RECURSE, /* Recursive entry to kdb; | ||
| 77 | * regs probably valid */ | ||
| 78 | KDB_REASON_SSTEP, /* Single Step trap. - regs valid */ | ||
| 79 | } kdb_reason_t; | ||
| 80 | |||
| 81 | extern int kdb_trap_printk; | ||
| 82 | extern int vkdb_printf(const char *fmt, va_list args) | ||
| 83 | __attribute__ ((format (printf, 1, 0))); | ||
| 84 | extern int kdb_printf(const char *, ...) | ||
| 85 | __attribute__ ((format (printf, 1, 2))); | ||
| 86 | typedef int (*kdb_printf_t)(const char *, ...) | ||
| 87 | __attribute__ ((format (printf, 1, 2))); | ||
| 88 | |||
| 89 | extern void kdb_init(int level); | ||
| 90 | |||
| 91 | /* Access to kdb specific polling devices */ | ||
| 92 | typedef int (*get_char_func)(void); | ||
| 93 | extern get_char_func kdb_poll_funcs[]; | ||
| 94 | extern int kdb_get_kbd_char(void); | ||
| 95 | |||
| 96 | static inline | ||
| 97 | int kdb_process_cpu(const struct task_struct *p) | ||
| 98 | { | ||
| 99 | unsigned int cpu = task_thread_info(p)->cpu; | ||
| 100 | if (cpu > num_possible_cpus()) | ||
| 101 | cpu = 0; | ||
| 102 | return cpu; | ||
| 103 | } | ||
| 104 | |||
| 105 | /* kdb access to register set for stack dumping */ | ||
| 106 | extern struct pt_regs *kdb_current_regs; | ||
| 107 | |||
| 108 | #else /* ! CONFIG_KGDB_KDB */ | ||
| 109 | #define kdb_printf(...) | ||
| 110 | #define kdb_init(x) | ||
| 111 | #endif /* CONFIG_KGDB_KDB */ | ||
| 112 | enum { | ||
| 113 | KDB_NOT_INITIALIZED, | ||
| 114 | KDB_INIT_EARLY, | ||
| 115 | KDB_INIT_FULL, | ||
| 116 | }; | ||
| 117 | #endif /* !_KDB_H */ | ||
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index fc33af911852..8317ec4b9f3b 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
| @@ -24,9 +24,9 @@ | |||
| 24 | extern const char linux_banner[]; | 24 | extern const char linux_banner[]; |
| 25 | extern const char linux_proc_banner[]; | 25 | extern const char linux_proc_banner[]; |
| 26 | 26 | ||
| 27 | #define USHORT_MAX ((u16)(~0U)) | 27 | #define USHRT_MAX ((u16)(~0U)) |
| 28 | #define SHORT_MAX ((s16)(USHORT_MAX>>1)) | 28 | #define SHRT_MAX ((s16)(USHRT_MAX>>1)) |
| 29 | #define SHORT_MIN (-SHORT_MAX - 1) | 29 | #define SHRT_MIN ((s16)(-SHRT_MAX - 1)) |
| 30 | #define INT_MAX ((int)(~0U>>1)) | 30 | #define INT_MAX ((int)(~0U>>1)) |
| 31 | #define INT_MIN (-INT_MAX - 1) | 31 | #define INT_MIN (-INT_MAX - 1) |
| 32 | #define UINT_MAX (~0U) | 32 | #define UINT_MAX (~0U) |
| @@ -346,6 +346,7 @@ extern enum system_states { | |||
| 346 | #define TAINT_OVERRIDDEN_ACPI_TABLE 8 | 346 | #define TAINT_OVERRIDDEN_ACPI_TABLE 8 |
| 347 | #define TAINT_WARN 9 | 347 | #define TAINT_WARN 9 |
| 348 | #define TAINT_CRAP 10 | 348 | #define TAINT_CRAP 10 |
| 349 | #define TAINT_FIRMWARE_WORKAROUND 11 | ||
| 349 | 350 | ||
| 350 | extern void dump_stack(void) __cold; | 351 | extern void dump_stack(void) __cold; |
| 351 | 352 | ||
| @@ -374,6 +375,8 @@ static inline char *pack_hex_byte(char *buf, u8 byte) | |||
| 374 | return buf; | 375 | return buf; |
| 375 | } | 376 | } |
| 376 | 377 | ||
| 378 | extern int hex_to_bin(char ch); | ||
| 379 | |||
| 377 | #ifndef pr_fmt | 380 | #ifndef pr_fmt |
| 378 | #define pr_fmt(fmt) fmt | 381 | #define pr_fmt(fmt) fmt |
| 379 | #endif | 382 | #endif |
| @@ -388,6 +391,7 @@ static inline char *pack_hex_byte(char *buf, u8 byte) | |||
| 388 | printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) | 391 | printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) |
| 389 | #define pr_warning(fmt, ...) \ | 392 | #define pr_warning(fmt, ...) \ |
| 390 | printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) | 393 | printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) |
| 394 | #define pr_warn pr_warning | ||
| 391 | #define pr_notice(fmt, ...) \ | 395 | #define pr_notice(fmt, ...) \ |
| 392 | printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) | 396 | printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) |
| 393 | #define pr_info(fmt, ...) \ | 397 | #define pr_info(fmt, ...) \ |
| @@ -422,14 +426,13 @@ static inline char *pack_hex_byte(char *buf, u8 byte) | |||
| 422 | * no local ratelimit_state used in the !PRINTK case | 426 | * no local ratelimit_state used in the !PRINTK case |
| 423 | */ | 427 | */ |
| 424 | #ifdef CONFIG_PRINTK | 428 | #ifdef CONFIG_PRINTK |
| 425 | #define printk_ratelimited(fmt, ...) ({ \ | 429 | #define printk_ratelimited(fmt, ...) ({ \ |
| 426 | static struct ratelimit_state _rs = { \ | 430 | static DEFINE_RATELIMIT_STATE(_rs, \ |
| 427 | .interval = DEFAULT_RATELIMIT_INTERVAL, \ | 431 | DEFAULT_RATELIMIT_INTERVAL, \ |
| 428 | .burst = DEFAULT_RATELIMIT_BURST, \ | 432 | DEFAULT_RATELIMIT_BURST); \ |
| 429 | }; \ | 433 | \ |
| 430 | \ | 434 | if (__ratelimit(&_rs)) \ |
| 431 | if (__ratelimit(&_rs)) \ | 435 | printk(fmt, ##__VA_ARGS__); \ |
| 432 | printk(fmt, ##__VA_ARGS__); \ | ||
| 433 | }) | 436 | }) |
| 434 | #else | 437 | #else |
| 435 | /* No effect, but we still get type checking even in the !PRINTK case: */ | 438 | /* No effect, but we still get type checking even in the !PRINTK case: */ |
| @@ -446,6 +449,7 @@ static inline char *pack_hex_byte(char *buf, u8 byte) | |||
| 446 | printk_ratelimited(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) | 449 | printk_ratelimited(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) |
| 447 | #define pr_warning_ratelimited(fmt, ...) \ | 450 | #define pr_warning_ratelimited(fmt, ...) \ |
| 448 | printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) | 451 | printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) |
| 452 | #define pr_warn_ratelimited pr_warning_ratelimited | ||
| 449 | #define pr_notice_ratelimited(fmt, ...) \ | 453 | #define pr_notice_ratelimited(fmt, ...) \ |
| 450 | printk_ratelimited(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) | 454 | printk_ratelimited(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) |
| 451 | #define pr_info_ratelimited(fmt, ...) \ | 455 | #define pr_info_ratelimited(fmt, ...) \ |
diff --git a/include/linux/kgdb.h b/include/linux/kgdb.h index 19ec41a183f5..9340f34d1bb5 100644 --- a/include/linux/kgdb.h +++ b/include/linux/kgdb.h | |||
| @@ -16,10 +16,12 @@ | |||
| 16 | #include <linux/serial_8250.h> | 16 | #include <linux/serial_8250.h> |
| 17 | #include <linux/linkage.h> | 17 | #include <linux/linkage.h> |
| 18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
| 19 | |||
| 20 | #include <asm/atomic.h> | 19 | #include <asm/atomic.h> |
| 20 | #ifdef CONFIG_HAVE_ARCH_KGDB | ||
| 21 | #include <asm/kgdb.h> | 21 | #include <asm/kgdb.h> |
| 22 | #endif | ||
| 22 | 23 | ||
| 24 | #ifdef CONFIG_KGDB | ||
| 23 | struct pt_regs; | 25 | struct pt_regs; |
| 24 | 26 | ||
| 25 | /** | 27 | /** |
| @@ -34,20 +36,6 @@ struct pt_regs; | |||
| 34 | extern int kgdb_skipexception(int exception, struct pt_regs *regs); | 36 | extern int kgdb_skipexception(int exception, struct pt_regs *regs); |
| 35 | 37 | ||
| 36 | /** | 38 | /** |
| 37 | * kgdb_post_primary_code - (optional) Save error vector/code numbers. | ||
| 38 | * @regs: Original pt_regs. | ||
| 39 | * @e_vector: Original error vector. | ||
| 40 | * @err_code: Original error code. | ||
| 41 | * | ||
| 42 | * This is usually needed on architectures which support SMP and | ||
| 43 | * KGDB. This function is called after all the secondary cpus have | ||
| 44 | * been put to a know spin state and the primary CPU has control over | ||
| 45 | * KGDB. | ||
| 46 | */ | ||
| 47 | extern void kgdb_post_primary_code(struct pt_regs *regs, int e_vector, | ||
| 48 | int err_code); | ||
| 49 | |||
| 50 | /** | ||
| 51 | * kgdb_disable_hw_debug - (optional) Disable hardware debugging hook | 39 | * kgdb_disable_hw_debug - (optional) Disable hardware debugging hook |
| 52 | * @regs: Current &struct pt_regs. | 40 | * @regs: Current &struct pt_regs. |
| 53 | * | 41 | * |
| @@ -72,6 +60,7 @@ struct uart_port; | |||
| 72 | void kgdb_breakpoint(void); | 60 | void kgdb_breakpoint(void); |
| 73 | 61 | ||
| 74 | extern int kgdb_connected; | 62 | extern int kgdb_connected; |
| 63 | extern int kgdb_io_module_registered; | ||
| 75 | 64 | ||
| 76 | extern atomic_t kgdb_setting_breakpoint; | 65 | extern atomic_t kgdb_setting_breakpoint; |
| 77 | extern atomic_t kgdb_cpu_doing_single_step; | 66 | extern atomic_t kgdb_cpu_doing_single_step; |
| @@ -202,12 +191,34 @@ kgdb_arch_handle_exception(int vector, int signo, int err_code, | |||
| 202 | */ | 191 | */ |
| 203 | extern void kgdb_roundup_cpus(unsigned long flags); | 192 | extern void kgdb_roundup_cpus(unsigned long flags); |
| 204 | 193 | ||
| 194 | /** | ||
| 195 | * kgdb_arch_set_pc - Generic call back to the program counter | ||
| 196 | * @regs: Current &struct pt_regs. | ||
| 197 | * @pc: The new value for the program counter | ||
| 198 | * | ||
| 199 | * This function handles updating the program counter and requires an | ||
| 200 | * architecture specific implementation. | ||
| 201 | */ | ||
| 202 | extern void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long pc); | ||
| 203 | |||
| 204 | |||
| 205 | /* Optional functions. */ | 205 | /* Optional functions. */ |
| 206 | extern int kgdb_validate_break_address(unsigned long addr); | 206 | extern int kgdb_validate_break_address(unsigned long addr); |
| 207 | extern int kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr); | 207 | extern int kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr); |
| 208 | extern int kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle); | 208 | extern int kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle); |
| 209 | 209 | ||
| 210 | /** | 210 | /** |
| 211 | * kgdb_arch_late - Perform any architecture specific initalization. | ||
| 212 | * | ||
| 213 | * This function will handle the late initalization of any | ||
| 214 | * architecture specific callbacks. This is an optional function for | ||
| 215 | * handling things like late initialization of hw breakpoints. The | ||
| 216 | * default implementation does nothing. | ||
| 217 | */ | ||
| 218 | extern void kgdb_arch_late(void); | ||
| 219 | |||
| 220 | |||
| 221 | /** | ||
| 211 | * struct kgdb_arch - Describe architecture specific values. | 222 | * struct kgdb_arch - Describe architecture specific values. |
| 212 | * @gdb_bpt_instr: The instruction to trigger a breakpoint. | 223 | * @gdb_bpt_instr: The instruction to trigger a breakpoint. |
| 213 | * @flags: Flags for the breakpoint, currently just %KGDB_HW_BREAKPOINT. | 224 | * @flags: Flags for the breakpoint, currently just %KGDB_HW_BREAKPOINT. |
| @@ -247,6 +258,8 @@ struct kgdb_arch { | |||
| 247 | * the I/O driver. | 258 | * the I/O driver. |
| 248 | * @post_exception: Pointer to a function that will do any cleanup work | 259 | * @post_exception: Pointer to a function that will do any cleanup work |
| 249 | * for the I/O driver. | 260 | * for the I/O driver. |
| 261 | * @is_console: 1 if the end device is a console 0 if the I/O device is | ||
| 262 | * not a console | ||
| 250 | */ | 263 | */ |
| 251 | struct kgdb_io { | 264 | struct kgdb_io { |
| 252 | const char *name; | 265 | const char *name; |
| @@ -256,6 +269,7 @@ struct kgdb_io { | |||
| 256 | int (*init) (void); | 269 | int (*init) (void); |
| 257 | void (*pre_exception) (void); | 270 | void (*pre_exception) (void); |
| 258 | void (*post_exception) (void); | 271 | void (*post_exception) (void); |
| 272 | int is_console; | ||
| 259 | }; | 273 | }; |
| 260 | 274 | ||
| 261 | extern struct kgdb_arch arch_kgdb_ops; | 275 | extern struct kgdb_arch arch_kgdb_ops; |
| @@ -264,12 +278,14 @@ extern unsigned long __weak kgdb_arch_pc(int exception, struct pt_regs *regs); | |||
| 264 | 278 | ||
| 265 | extern int kgdb_register_io_module(struct kgdb_io *local_kgdb_io_ops); | 279 | extern int kgdb_register_io_module(struct kgdb_io *local_kgdb_io_ops); |
| 266 | extern void kgdb_unregister_io_module(struct kgdb_io *local_kgdb_io_ops); | 280 | extern void kgdb_unregister_io_module(struct kgdb_io *local_kgdb_io_ops); |
| 281 | extern struct kgdb_io *dbg_io_ops; | ||
| 267 | 282 | ||
| 268 | extern int kgdb_hex2long(char **ptr, unsigned long *long_val); | 283 | extern int kgdb_hex2long(char **ptr, unsigned long *long_val); |
| 269 | extern int kgdb_mem2hex(char *mem, char *buf, int count); | 284 | extern int kgdb_mem2hex(char *mem, char *buf, int count); |
| 270 | extern int kgdb_hex2mem(char *buf, char *mem, int count); | 285 | extern int kgdb_hex2mem(char *buf, char *mem, int count); |
| 271 | 286 | ||
| 272 | extern int kgdb_isremovedbreak(unsigned long addr); | 287 | extern int kgdb_isremovedbreak(unsigned long addr); |
| 288 | extern void kgdb_schedule_breakpoint(void); | ||
| 273 | 289 | ||
| 274 | extern int | 290 | extern int |
| 275 | kgdb_handle_exception(int ex_vector, int signo, int err_code, | 291 | kgdb_handle_exception(int ex_vector, int signo, int err_code, |
| @@ -278,5 +294,12 @@ extern int kgdb_nmicallback(int cpu, void *regs); | |||
| 278 | 294 | ||
| 279 | extern int kgdb_single_step; | 295 | extern int kgdb_single_step; |
| 280 | extern atomic_t kgdb_active; | 296 | extern atomic_t kgdb_active; |
| 281 | 297 | #define in_dbg_master() \ | |
| 298 | (raw_smp_processor_id() == atomic_read(&kgdb_active)) | ||
| 299 | extern bool dbg_is_early; | ||
| 300 | extern void __init dbg_late_init(void); | ||
| 301 | #else /* ! CONFIG_KGDB */ | ||
| 302 | #define in_dbg_master() (0) | ||
| 303 | #define dbg_late_init() | ||
| 304 | #endif /* ! CONFIG_KGDB */ | ||
| 282 | #endif /* _KGDB_H_ */ | 305 | #endif /* _KGDB_H_ */ |
diff --git a/include/linux/kobject.h b/include/linux/kobject.h index 3950d3c2850d..cf343a852534 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h | |||
| @@ -108,6 +108,8 @@ struct kobj_type { | |||
| 108 | void (*release)(struct kobject *kobj); | 108 | void (*release)(struct kobject *kobj); |
| 109 | const struct sysfs_ops *sysfs_ops; | 109 | const struct sysfs_ops *sysfs_ops; |
| 110 | struct attribute **default_attrs; | 110 | struct attribute **default_attrs; |
| 111 | const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj); | ||
| 112 | const void *(*namespace)(struct kobject *kobj); | ||
| 111 | }; | 113 | }; |
| 112 | 114 | ||
| 113 | struct kobj_uevent_env { | 115 | struct kobj_uevent_env { |
| @@ -134,6 +136,42 @@ struct kobj_attribute { | |||
| 134 | 136 | ||
| 135 | extern const struct sysfs_ops kobj_sysfs_ops; | 137 | extern const struct sysfs_ops kobj_sysfs_ops; |
| 136 | 138 | ||
| 139 | /* | ||
| 140 | * Namespace types which are used to tag kobjects and sysfs entries. | ||
| 141 | * Network namespace will likely be the first. | ||
| 142 | */ | ||
| 143 | enum kobj_ns_type { | ||
| 144 | KOBJ_NS_TYPE_NONE = 0, | ||
| 145 | KOBJ_NS_TYPE_NET, | ||
| 146 | KOBJ_NS_TYPES | ||
| 147 | }; | ||
| 148 | |||
| 149 | struct sock; | ||
| 150 | |||
| 151 | /* | ||
| 152 | * Callbacks so sysfs can determine namespaces | ||
| 153 | * @current_ns: return calling task's namespace | ||
| 154 | * @netlink_ns: return namespace to which a sock belongs (right?) | ||
| 155 | * @initial_ns: return the initial namespace (i.e. init_net_ns) | ||
| 156 | */ | ||
| 157 | struct kobj_ns_type_operations { | ||
| 158 | enum kobj_ns_type type; | ||
| 159 | const void *(*current_ns)(void); | ||
| 160 | const void *(*netlink_ns)(struct sock *sk); | ||
| 161 | const void *(*initial_ns)(void); | ||
| 162 | }; | ||
| 163 | |||
| 164 | int kobj_ns_type_register(const struct kobj_ns_type_operations *ops); | ||
| 165 | int kobj_ns_type_registered(enum kobj_ns_type type); | ||
| 166 | const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent); | ||
| 167 | const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj); | ||
| 168 | |||
| 169 | const void *kobj_ns_current(enum kobj_ns_type type); | ||
| 170 | const void *kobj_ns_netlink(enum kobj_ns_type type, struct sock *sk); | ||
| 171 | const void *kobj_ns_initial(enum kobj_ns_type type); | ||
| 172 | void kobj_ns_exit(enum kobj_ns_type type, const void *ns); | ||
| 173 | |||
| 174 | |||
| 137 | /** | 175 | /** |
| 138 | * struct kset - a set of kobjects of a specific type, belonging to a specific subsystem. | 176 | * struct kset - a set of kobjects of a specific type, belonging to a specific subsystem. |
| 139 | * | 177 | * |
diff --git a/include/linux/kref.h b/include/linux/kref.h index baf4b9e4b194..6cc38fc07ab7 100644 --- a/include/linux/kref.h +++ b/include/linux/kref.h | |||
| @@ -21,7 +21,6 @@ struct kref { | |||
| 21 | atomic_t refcount; | 21 | atomic_t refcount; |
| 22 | }; | 22 | }; |
| 23 | 23 | ||
| 24 | void kref_set(struct kref *kref, int num); | ||
| 25 | void kref_init(struct kref *kref); | 24 | void kref_init(struct kref *kref); |
| 26 | void kref_get(struct kref *kref); | 25 | void kref_get(struct kref *kref); |
| 27 | int kref_put(struct kref *kref, void (*release) (struct kref *kref)); | 26 | int kref_put(struct kref *kref, void (*release) (struct kref *kref)); |
diff --git a/include/linux/kvm.h b/include/linux/kvm.h index 60df9c84ecae..23ea02253900 100644 --- a/include/linux/kvm.h +++ b/include/linux/kvm.h | |||
| @@ -160,6 +160,7 @@ struct kvm_pit_config { | |||
| 160 | #define KVM_EXIT_DCR 15 | 160 | #define KVM_EXIT_DCR 15 |
| 161 | #define KVM_EXIT_NMI 16 | 161 | #define KVM_EXIT_NMI 16 |
| 162 | #define KVM_EXIT_INTERNAL_ERROR 17 | 162 | #define KVM_EXIT_INTERNAL_ERROR 17 |
| 163 | #define KVM_EXIT_OSI 18 | ||
| 163 | 164 | ||
| 164 | /* For KVM_EXIT_INTERNAL_ERROR */ | 165 | /* For KVM_EXIT_INTERNAL_ERROR */ |
| 165 | #define KVM_INTERNAL_ERROR_EMULATION 1 | 166 | #define KVM_INTERNAL_ERROR_EMULATION 1 |
| @@ -259,6 +260,10 @@ struct kvm_run { | |||
| 259 | __u32 ndata; | 260 | __u32 ndata; |
| 260 | __u64 data[16]; | 261 | __u64 data[16]; |
| 261 | } internal; | 262 | } internal; |
| 263 | /* KVM_EXIT_OSI */ | ||
| 264 | struct { | ||
| 265 | __u64 gprs[32]; | ||
| 266 | } osi; | ||
| 262 | /* Fix the size of the union. */ | 267 | /* Fix the size of the union. */ |
| 263 | char padding[256]; | 268 | char padding[256]; |
| 264 | }; | 269 | }; |
| @@ -400,6 +405,15 @@ struct kvm_ioeventfd { | |||
| 400 | __u8 pad[36]; | 405 | __u8 pad[36]; |
| 401 | }; | 406 | }; |
| 402 | 407 | ||
| 408 | /* for KVM_ENABLE_CAP */ | ||
| 409 | struct kvm_enable_cap { | ||
| 410 | /* in */ | ||
| 411 | __u32 cap; | ||
| 412 | __u32 flags; | ||
| 413 | __u64 args[4]; | ||
| 414 | __u8 pad[64]; | ||
| 415 | }; | ||
| 416 | |||
| 403 | #define KVMIO 0xAE | 417 | #define KVMIO 0xAE |
| 404 | 418 | ||
| 405 | /* | 419 | /* |
| @@ -501,7 +515,15 @@ struct kvm_ioeventfd { | |||
| 501 | #define KVM_CAP_HYPERV_VAPIC 45 | 515 | #define KVM_CAP_HYPERV_VAPIC 45 |
| 502 | #define KVM_CAP_HYPERV_SPIN 46 | 516 | #define KVM_CAP_HYPERV_SPIN 46 |
| 503 | #define KVM_CAP_PCI_SEGMENT 47 | 517 | #define KVM_CAP_PCI_SEGMENT 47 |
| 518 | #define KVM_CAP_PPC_PAIRED_SINGLES 48 | ||
| 519 | #define KVM_CAP_INTR_SHADOW 49 | ||
| 520 | #ifdef __KVM_HAVE_DEBUGREGS | ||
| 521 | #define KVM_CAP_DEBUGREGS 50 | ||
| 522 | #endif | ||
| 504 | #define KVM_CAP_X86_ROBUST_SINGLESTEP 51 | 523 | #define KVM_CAP_X86_ROBUST_SINGLESTEP 51 |
| 524 | #define KVM_CAP_PPC_OSI 52 | ||
| 525 | #define KVM_CAP_PPC_UNSET_IRQ 53 | ||
| 526 | #define KVM_CAP_ENABLE_CAP 54 | ||
| 505 | 527 | ||
| 506 | #ifdef KVM_CAP_IRQ_ROUTING | 528 | #ifdef KVM_CAP_IRQ_ROUTING |
| 507 | 529 | ||
| @@ -688,6 +710,10 @@ struct kvm_clock_data { | |||
| 688 | /* Available with KVM_CAP_VCPU_EVENTS */ | 710 | /* Available with KVM_CAP_VCPU_EVENTS */ |
| 689 | #define KVM_GET_VCPU_EVENTS _IOR(KVMIO, 0x9f, struct kvm_vcpu_events) | 711 | #define KVM_GET_VCPU_EVENTS _IOR(KVMIO, 0x9f, struct kvm_vcpu_events) |
| 690 | #define KVM_SET_VCPU_EVENTS _IOW(KVMIO, 0xa0, struct kvm_vcpu_events) | 712 | #define KVM_SET_VCPU_EVENTS _IOW(KVMIO, 0xa0, struct kvm_vcpu_events) |
| 713 | /* Available with KVM_CAP_DEBUGREGS */ | ||
| 714 | #define KVM_GET_DEBUGREGS _IOR(KVMIO, 0xa1, struct kvm_debugregs) | ||
| 715 | #define KVM_SET_DEBUGREGS _IOW(KVMIO, 0xa2, struct kvm_debugregs) | ||
| 716 | #define KVM_ENABLE_CAP _IOW(KVMIO, 0xa3, struct kvm_enable_cap) | ||
| 691 | 717 | ||
| 692 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) | 718 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) |
| 693 | 719 | ||
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 169d07758ee5..7cb116afa1cd 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
| @@ -105,6 +105,12 @@ struct kvm_vcpu { | |||
| 105 | struct kvm_vcpu_arch arch; | 105 | struct kvm_vcpu_arch arch; |
| 106 | }; | 106 | }; |
| 107 | 107 | ||
| 108 | /* | ||
| 109 | * Some of the bitops functions do not support too long bitmaps. | ||
| 110 | * This number must be determined not to exceed such limits. | ||
| 111 | */ | ||
| 112 | #define KVM_MEM_MAX_NR_PAGES ((1UL << 31) - 1) | ||
| 113 | |||
| 108 | struct kvm_memory_slot { | 114 | struct kvm_memory_slot { |
| 109 | gfn_t base_gfn; | 115 | gfn_t base_gfn; |
| 110 | unsigned long npages; | 116 | unsigned long npages; |
| @@ -237,17 +243,23 @@ void kvm_vcpu_uninit(struct kvm_vcpu *vcpu); | |||
| 237 | void vcpu_load(struct kvm_vcpu *vcpu); | 243 | void vcpu_load(struct kvm_vcpu *vcpu); |
| 238 | void vcpu_put(struct kvm_vcpu *vcpu); | 244 | void vcpu_put(struct kvm_vcpu *vcpu); |
| 239 | 245 | ||
| 240 | int kvm_init(void *opaque, unsigned int vcpu_size, | 246 | int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, |
| 241 | struct module *module); | 247 | struct module *module); |
| 242 | void kvm_exit(void); | 248 | void kvm_exit(void); |
| 243 | 249 | ||
| 244 | void kvm_get_kvm(struct kvm *kvm); | 250 | void kvm_get_kvm(struct kvm *kvm); |
| 245 | void kvm_put_kvm(struct kvm *kvm); | 251 | void kvm_put_kvm(struct kvm *kvm); |
| 246 | 252 | ||
| 253 | static inline struct kvm_memslots *kvm_memslots(struct kvm *kvm) | ||
| 254 | { | ||
| 255 | return rcu_dereference_check(kvm->memslots, | ||
| 256 | srcu_read_lock_held(&kvm->srcu) | ||
| 257 | || lockdep_is_held(&kvm->slots_lock)); | ||
| 258 | } | ||
| 259 | |||
| 247 | #define HPA_MSB ((sizeof(hpa_t) * 8) - 1) | 260 | #define HPA_MSB ((sizeof(hpa_t) * 8) - 1) |
| 248 | #define HPA_ERR_MASK ((hpa_t)1 << HPA_MSB) | 261 | #define HPA_ERR_MASK ((hpa_t)1 << HPA_MSB) |
| 249 | static inline int is_error_hpa(hpa_t hpa) { return hpa >> HPA_MSB; } | 262 | static inline int is_error_hpa(hpa_t hpa) { return hpa >> HPA_MSB; } |
| 250 | struct page *gva_to_page(struct kvm_vcpu *vcpu, gva_t gva); | ||
| 251 | 263 | ||
| 252 | extern struct page *bad_page; | 264 | extern struct page *bad_page; |
| 253 | extern pfn_t bad_pfn; | 265 | extern pfn_t bad_pfn; |
diff --git a/include/linux/lis3lv02d.h b/include/linux/lis3lv02d.h index f1ca0dcc1628..0e8a346424bb 100644 --- a/include/linux/lis3lv02d.h +++ b/include/linux/lis3lv02d.h | |||
| @@ -25,12 +25,14 @@ struct lis3lv02d_platform_data { | |||
| 25 | #define LIS3_IRQ1_FF_WU_12 (3 << 0) | 25 | #define LIS3_IRQ1_FF_WU_12 (3 << 0) |
| 26 | #define LIS3_IRQ1_DATA_READY (4 << 0) | 26 | #define LIS3_IRQ1_DATA_READY (4 << 0) |
| 27 | #define LIS3_IRQ1_CLICK (7 << 0) | 27 | #define LIS3_IRQ1_CLICK (7 << 0) |
| 28 | #define LIS3_IRQ1_MASK (7 << 0) | ||
| 28 | #define LIS3_IRQ2_DISABLE (0 << 3) | 29 | #define LIS3_IRQ2_DISABLE (0 << 3) |
| 29 | #define LIS3_IRQ2_FF_WU_1 (1 << 3) | 30 | #define LIS3_IRQ2_FF_WU_1 (1 << 3) |
| 30 | #define LIS3_IRQ2_FF_WU_2 (2 << 3) | 31 | #define LIS3_IRQ2_FF_WU_2 (2 << 3) |
| 31 | #define LIS3_IRQ2_FF_WU_12 (3 << 3) | 32 | #define LIS3_IRQ2_FF_WU_12 (3 << 3) |
| 32 | #define LIS3_IRQ2_DATA_READY (4 << 3) | 33 | #define LIS3_IRQ2_DATA_READY (4 << 3) |
| 33 | #define LIS3_IRQ2_CLICK (7 << 3) | 34 | #define LIS3_IRQ2_CLICK (7 << 3) |
| 35 | #define LIS3_IRQ2_MASK (7 << 3) | ||
| 34 | #define LIS3_IRQ_OPEN_DRAIN (1 << 6) | 36 | #define LIS3_IRQ_OPEN_DRAIN (1 << 6) |
| 35 | #define LIS3_IRQ_ACTIVE_LOW (1 << 7) | 37 | #define LIS3_IRQ_ACTIVE_LOW (1 << 7) |
| 36 | unsigned char irq_cfg; | 38 | unsigned char irq_cfg; |
| @@ -43,6 +45,15 @@ struct lis3lv02d_platform_data { | |||
| 43 | #define LIS3_WAKEUP_Z_HI (1 << 5) | 45 | #define LIS3_WAKEUP_Z_HI (1 << 5) |
| 44 | unsigned char wakeup_flags; | 46 | unsigned char wakeup_flags; |
| 45 | unsigned char wakeup_thresh; | 47 | unsigned char wakeup_thresh; |
| 48 | unsigned char wakeup_flags2; | ||
| 49 | unsigned char wakeup_thresh2; | ||
| 50 | #define LIS3_HIPASS_CUTFF_8HZ 0 | ||
| 51 | #define LIS3_HIPASS_CUTFF_4HZ 1 | ||
| 52 | #define LIS3_HIPASS_CUTFF_2HZ 2 | ||
| 53 | #define LIS3_HIPASS_CUTFF_1HZ 3 | ||
| 54 | #define LIS3_HIPASS1_DISABLE (1 << 2) | ||
| 55 | #define LIS3_HIPASS2_DISABLE (1 << 3) | ||
| 56 | unsigned char hipass_ctrl; | ||
| 46 | #define LIS3_NO_MAP 0 | 57 | #define LIS3_NO_MAP 0 |
| 47 | #define LIS3_DEV_X 1 | 58 | #define LIS3_DEV_X 1 |
| 48 | #define LIS3_DEV_Y 2 | 59 | #define LIS3_DEV_Y 2 |
| @@ -58,6 +69,7 @@ struct lis3lv02d_platform_data { | |||
| 58 | /* Limits for selftest are specified in chip data sheet */ | 69 | /* Limits for selftest are specified in chip data sheet */ |
| 59 | s16 st_min_limits[3]; /* min pass limit x, y, z */ | 70 | s16 st_min_limits[3]; /* min pass limit x, y, z */ |
| 60 | s16 st_max_limits[3]; /* max pass limit x, y, z */ | 71 | s16 st_max_limits[3]; /* max pass limit x, y, z */ |
| 72 | int irq2; | ||
| 61 | }; | 73 | }; |
| 62 | 74 | ||
| 63 | #endif /* __LIS3LV02D_H_ */ | 75 | #endif /* __LIS3LV02D_H_ */ |
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index a03977a96d7e..06aed8305bf3 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h | |||
| @@ -44,6 +44,8 @@ struct lock_class_key { | |||
| 44 | struct lockdep_subclass_key subkeys[MAX_LOCKDEP_SUBCLASSES]; | 44 | struct lockdep_subclass_key subkeys[MAX_LOCKDEP_SUBCLASSES]; |
| 45 | }; | 45 | }; |
| 46 | 46 | ||
| 47 | extern struct lock_class_key __lockdep_no_validate__; | ||
| 48 | |||
| 47 | #define LOCKSTAT_POINTS 4 | 49 | #define LOCKSTAT_POINTS 4 |
| 48 | 50 | ||
| 49 | /* | 51 | /* |
| @@ -270,6 +272,9 @@ extern void lockdep_init_map(struct lockdep_map *lock, const char *name, | |||
| 270 | #define lockdep_set_subclass(lock, sub) \ | 272 | #define lockdep_set_subclass(lock, sub) \ |
| 271 | lockdep_init_map(&(lock)->dep_map, #lock, \ | 273 | lockdep_init_map(&(lock)->dep_map, #lock, \ |
| 272 | (lock)->dep_map.key, sub) | 274 | (lock)->dep_map.key, sub) |
| 275 | |||
| 276 | #define lockdep_set_novalidate_class(lock) \ | ||
| 277 | lockdep_set_class(lock, &__lockdep_no_validate__) | ||
| 273 | /* | 278 | /* |
| 274 | * Compare locking classes | 279 | * Compare locking classes |
| 275 | */ | 280 | */ |
| @@ -354,6 +359,9 @@ static inline void lockdep_on(void) | |||
| 354 | #define lockdep_set_class_and_subclass(lock, key, sub) \ | 359 | #define lockdep_set_class_and_subclass(lock, key, sub) \ |
| 355 | do { (void)(key); } while (0) | 360 | do { (void)(key); } while (0) |
| 356 | #define lockdep_set_subclass(lock, sub) do { } while (0) | 361 | #define lockdep_set_subclass(lock, sub) do { } while (0) |
| 362 | |||
| 363 | #define lockdep_set_novalidate_class(lock) do { } while (0) | ||
| 364 | |||
| 357 | /* | 365 | /* |
| 358 | * We don't define lockdep_match_class() and lockdep_match_key() for !LOCKDEP | 366 | * We don't define lockdep_match_class() and lockdep_match_key() for !LOCKDEP |
| 359 | * case since the result is not well defined and the caller should rather | 367 | * case since the result is not well defined and the caller should rather |
diff --git a/include/linux/matroxfb.h b/include/linux/matroxfb.h index 2203121a43e9..8c22a8938642 100644 --- a/include/linux/matroxfb.h +++ b/include/linux/matroxfb.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | #include <asm/ioctl.h> | 4 | #include <asm/ioctl.h> |
| 5 | #include <linux/types.h> | 5 | #include <linux/types.h> |
| 6 | #include <linux/videodev2.h> | 6 | #include <linux/videodev2.h> |
| 7 | #include <linux/fb.h> | ||
| 7 | 8 | ||
| 8 | struct matroxioc_output_mode { | 9 | struct matroxioc_output_mode { |
| 9 | __u32 output; /* which output */ | 10 | __u32 output; /* which output */ |
| @@ -37,7 +38,5 @@ enum matroxfb_ctrl_id { | |||
| 37 | MATROXFB_CID_LAST | 38 | MATROXFB_CID_LAST |
| 38 | }; | 39 | }; |
| 39 | 40 | ||
| 40 | #define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32) | ||
| 41 | |||
| 42 | #endif | 41 | #endif |
| 43 | 42 | ||
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 44301c6affa8..05894795fdc1 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h | |||
| @@ -25,6 +25,13 @@ struct page_cgroup; | |||
| 25 | struct page; | 25 | struct page; |
| 26 | struct mm_struct; | 26 | struct mm_struct; |
| 27 | 27 | ||
| 28 | extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, | ||
| 29 | struct list_head *dst, | ||
| 30 | unsigned long *scanned, int order, | ||
| 31 | int mode, struct zone *z, | ||
| 32 | struct mem_cgroup *mem_cont, | ||
| 33 | int active, int file); | ||
| 34 | |||
| 28 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR | 35 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR |
| 29 | /* | 36 | /* |
| 30 | * All "charge" functions with gfp_mask should use GFP_KERNEL or | 37 | * All "charge" functions with gfp_mask should use GFP_KERNEL or |
| @@ -64,12 +71,6 @@ extern void mem_cgroup_uncharge_cache_page(struct page *page); | |||
| 64 | extern int mem_cgroup_shmem_charge_fallback(struct page *page, | 71 | extern int mem_cgroup_shmem_charge_fallback(struct page *page, |
| 65 | struct mm_struct *mm, gfp_t gfp_mask); | 72 | struct mm_struct *mm, gfp_t gfp_mask); |
| 66 | 73 | ||
| 67 | extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, | ||
| 68 | struct list_head *dst, | ||
| 69 | unsigned long *scanned, int order, | ||
| 70 | int mode, struct zone *z, | ||
| 71 | struct mem_cgroup *mem_cont, | ||
| 72 | int active, int file); | ||
| 73 | extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask); | 74 | extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask); |
| 74 | int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem); | 75 | int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem); |
| 75 | 76 | ||
diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index 35b07b773e6c..864035fb8f8a 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h | |||
| @@ -202,6 +202,7 @@ static inline int is_mem_section_removable(unsigned long pfn, | |||
| 202 | } | 202 | } |
| 203 | #endif /* CONFIG_MEMORY_HOTREMOVE */ | 203 | #endif /* CONFIG_MEMORY_HOTREMOVE */ |
| 204 | 204 | ||
| 205 | extern int mem_online_node(int nid); | ||
| 205 | extern int add_memory(int nid, u64 start, u64 size); | 206 | extern int add_memory(int nid, u64 start, u64 size); |
| 206 | extern int arch_add_memory(int nid, u64 start, u64 size); | 207 | extern int arch_add_memory(int nid, u64 start, u64 size); |
| 207 | extern int remove_memory(u64 start, u64 size); | 208 | extern int remove_memory(u64 start, u64 size); |
diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h index 1cc966cd3e5f..7b9ef6bf45aa 100644 --- a/include/linux/mempolicy.h +++ b/include/linux/mempolicy.h | |||
| @@ -23,6 +23,13 @@ enum { | |||
| 23 | MPOL_MAX, /* always last member of enum */ | 23 | MPOL_MAX, /* always last member of enum */ |
| 24 | }; | 24 | }; |
| 25 | 25 | ||
| 26 | enum mpol_rebind_step { | ||
| 27 | MPOL_REBIND_ONCE, /* do rebind work at once(not by two step) */ | ||
| 28 | MPOL_REBIND_STEP1, /* first step(set all the newly nodes) */ | ||
| 29 | MPOL_REBIND_STEP2, /* second step(clean all the disallowed nodes)*/ | ||
| 30 | MPOL_REBIND_NSTEP, | ||
| 31 | }; | ||
| 32 | |||
| 26 | /* Flags for set_mempolicy */ | 33 | /* Flags for set_mempolicy */ |
| 27 | #define MPOL_F_STATIC_NODES (1 << 15) | 34 | #define MPOL_F_STATIC_NODES (1 << 15) |
| 28 | #define MPOL_F_RELATIVE_NODES (1 << 14) | 35 | #define MPOL_F_RELATIVE_NODES (1 << 14) |
| @@ -51,6 +58,7 @@ enum { | |||
| 51 | */ | 58 | */ |
| 52 | #define MPOL_F_SHARED (1 << 0) /* identify shared policies */ | 59 | #define MPOL_F_SHARED (1 << 0) /* identify shared policies */ |
| 53 | #define MPOL_F_LOCAL (1 << 1) /* preferred local allocation */ | 60 | #define MPOL_F_LOCAL (1 << 1) /* preferred local allocation */ |
| 61 | #define MPOL_F_REBINDING (1 << 2) /* identify policies in rebinding */ | ||
| 54 | 62 | ||
| 55 | #ifdef __KERNEL__ | 63 | #ifdef __KERNEL__ |
| 56 | 64 | ||
| @@ -193,8 +201,8 @@ struct mempolicy *mpol_shared_policy_lookup(struct shared_policy *sp, | |||
| 193 | 201 | ||
| 194 | extern void numa_default_policy(void); | 202 | extern void numa_default_policy(void); |
| 195 | extern void numa_policy_init(void); | 203 | extern void numa_policy_init(void); |
| 196 | extern void mpol_rebind_task(struct task_struct *tsk, | 204 | extern void mpol_rebind_task(struct task_struct *tsk, const nodemask_t *new, |
| 197 | const nodemask_t *new); | 205 | enum mpol_rebind_step step); |
| 198 | extern void mpol_rebind_mm(struct mm_struct *mm, nodemask_t *new); | 206 | extern void mpol_rebind_mm(struct mm_struct *mm, nodemask_t *new); |
| 199 | extern void mpol_fix_fork_child_flag(struct task_struct *p); | 207 | extern void mpol_fix_fork_child_flag(struct task_struct *p); |
| 200 | 208 | ||
| @@ -308,7 +316,8 @@ static inline void numa_default_policy(void) | |||
| 308 | } | 316 | } |
| 309 | 317 | ||
| 310 | static inline void mpol_rebind_task(struct task_struct *tsk, | 318 | static inline void mpol_rebind_task(struct task_struct *tsk, |
| 311 | const nodemask_t *new) | 319 | const nodemask_t *new, |
| 320 | enum mpol_rebind_step step) | ||
| 312 | { | 321 | { |
| 313 | } | 322 | } |
| 314 | 323 | ||
diff --git a/include/linux/mfd/sh_mobile_sdhi.h b/include/linux/mfd/sh_mobile_sdhi.h index 3bcd7163485c..49067802a6d7 100644 --- a/include/linux/mfd/sh_mobile_sdhi.h +++ b/include/linux/mfd/sh_mobile_sdhi.h | |||
| @@ -1,7 +1,13 @@ | |||
| 1 | #ifndef __SH_MOBILE_SDHI_H__ | 1 | #ifndef __SH_MOBILE_SDHI_H__ |
| 2 | #define __SH_MOBILE_SDHI_H__ | 2 | #define __SH_MOBILE_SDHI_H__ |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | struct sh_mobile_sdhi_info { | 6 | struct sh_mobile_sdhi_info { |
| 7 | int dma_slave_tx; | ||
| 8 | int dma_slave_rx; | ||
| 9 | unsigned long tmio_flags; | ||
| 10 | u32 tmio_ocr_mask; /* available MMC voltages */ | ||
| 5 | void (*set_pwr)(struct platform_device *pdev, int state); | 11 | void (*set_pwr)(struct platform_device *pdev, int state); |
| 6 | }; | 12 | }; |
| 7 | 13 | ||
diff --git a/include/linux/mfd/tmio.h b/include/linux/mfd/tmio.h index c3f7dff8effc..f07425bc3dcd 100644 --- a/include/linux/mfd/tmio.h +++ b/include/linux/mfd/tmio.h | |||
| @@ -50,17 +50,28 @@ | |||
| 50 | tmio_iowrite16((val) >> 16, (base) + ((reg + 2) << (shift))); \ | 50 | tmio_iowrite16((val) >> 16, (base) + ((reg + 2) << (shift))); \ |
| 51 | } while (0) | 51 | } while (0) |
| 52 | 52 | ||
| 53 | /* tmio MMC platform flags */ | ||
| 54 | #define TMIO_MMC_WRPROTECT_DISABLE (1 << 0) | ||
| 55 | |||
| 53 | int tmio_core_mmc_enable(void __iomem *cnf, int shift, unsigned long base); | 56 | int tmio_core_mmc_enable(void __iomem *cnf, int shift, unsigned long base); |
| 54 | int tmio_core_mmc_resume(void __iomem *cnf, int shift, unsigned long base); | 57 | int tmio_core_mmc_resume(void __iomem *cnf, int shift, unsigned long base); |
| 55 | void tmio_core_mmc_pwr(void __iomem *cnf, int shift, int state); | 58 | void tmio_core_mmc_pwr(void __iomem *cnf, int shift, int state); |
| 56 | void tmio_core_mmc_clk_div(void __iomem *cnf, int shift, int state); | 59 | void tmio_core_mmc_clk_div(void __iomem *cnf, int shift, int state); |
| 57 | 60 | ||
| 61 | struct tmio_mmc_dma { | ||
| 62 | void *chan_priv_tx; | ||
| 63 | void *chan_priv_rx; | ||
| 64 | }; | ||
| 65 | |||
| 58 | /* | 66 | /* |
| 59 | * data for the MMC controller | 67 | * data for the MMC controller |
| 60 | */ | 68 | */ |
| 61 | struct tmio_mmc_data { | 69 | struct tmio_mmc_data { |
| 62 | unsigned int hclk; | 70 | unsigned int hclk; |
| 63 | unsigned long capabilities; | 71 | unsigned long capabilities; |
| 72 | unsigned long flags; | ||
| 73 | u32 ocr_mask; /* available voltages */ | ||
| 74 | struct tmio_mmc_dma *dma; | ||
| 64 | void (*set_pwr)(struct platform_device *host, int state); | 75 | void (*set_pwr)(struct platform_device *host, int state); |
| 65 | void (*set_clk_div)(struct platform_device *host, int state); | 76 | void (*set_clk_div)(struct platform_device *host, int state); |
| 66 | }; | 77 | }; |
diff --git a/include/linux/migrate.h b/include/linux/migrate.h index 7f085c97c799..7238231b8dd4 100644 --- a/include/linux/migrate.h +++ b/include/linux/migrate.h | |||
| @@ -9,7 +9,7 @@ typedef struct page *new_page_t(struct page *, unsigned long private, int **); | |||
| 9 | #ifdef CONFIG_MIGRATION | 9 | #ifdef CONFIG_MIGRATION |
| 10 | #define PAGE_MIGRATION 1 | 10 | #define PAGE_MIGRATION 1 |
| 11 | 11 | ||
| 12 | extern int putback_lru_pages(struct list_head *l); | 12 | extern void putback_lru_pages(struct list_head *l); |
| 13 | extern int migrate_page(struct address_space *, | 13 | extern int migrate_page(struct address_space *, |
| 14 | struct page *, struct page *); | 14 | struct page *, struct page *); |
| 15 | extern int migrate_pages(struct list_head *l, new_page_t x, | 15 | extern int migrate_pages(struct list_head *l, new_page_t x, |
| @@ -19,17 +19,19 @@ extern int fail_migrate_page(struct address_space *, | |||
| 19 | struct page *, struct page *); | 19 | struct page *, struct page *); |
| 20 | 20 | ||
| 21 | extern int migrate_prep(void); | 21 | extern int migrate_prep(void); |
| 22 | extern int migrate_prep_local(void); | ||
| 22 | extern int migrate_vmas(struct mm_struct *mm, | 23 | extern int migrate_vmas(struct mm_struct *mm, |
| 23 | const nodemask_t *from, const nodemask_t *to, | 24 | const nodemask_t *from, const nodemask_t *to, |
| 24 | unsigned long flags); | 25 | unsigned long flags); |
| 25 | #else | 26 | #else |
| 26 | #define PAGE_MIGRATION 0 | 27 | #define PAGE_MIGRATION 0 |
| 27 | 28 | ||
| 28 | static inline int putback_lru_pages(struct list_head *l) { return 0; } | 29 | static inline void putback_lru_pages(struct list_head *l) {} |
| 29 | static inline int migrate_pages(struct list_head *l, new_page_t x, | 30 | static inline int migrate_pages(struct list_head *l, new_page_t x, |
| 30 | unsigned long private, int offlining) { return -ENOSYS; } | 31 | unsigned long private, int offlining) { return -ENOSYS; } |
| 31 | 32 | ||
| 32 | static inline int migrate_prep(void) { return -ENOSYS; } | 33 | static inline int migrate_prep(void) { return -ENOSYS; } |
| 34 | static inline int migrate_prep_local(void) { return -ENOSYS; } | ||
| 33 | 35 | ||
| 34 | static inline int migrate_vmas(struct mm_struct *mm, | 36 | static inline int migrate_vmas(struct mm_struct *mm, |
| 35 | const nodemask_t *from, const nodemask_t *to, | 37 | const nodemask_t *from, const nodemask_t *to, |
diff --git a/include/linux/mm.h b/include/linux/mm.h index fb19bb92b809..b969efb03787 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/debug_locks.h> | 13 | #include <linux/debug_locks.h> |
| 14 | #include <linux/mm_types.h> | 14 | #include <linux/mm_types.h> |
| 15 | #include <linux/range.h> | 15 | #include <linux/range.h> |
| 16 | #include <linux/pfn.h> | ||
| 16 | 17 | ||
| 17 | struct mempolicy; | 18 | struct mempolicy; |
| 18 | struct anon_vma; | 19 | struct anon_vma; |
| @@ -106,6 +107,9 @@ extern unsigned int kobjsize(const void *objp); | |||
| 106 | #define VM_PFN_AT_MMAP 0x40000000 /* PFNMAP vma that is fully mapped at mmap time */ | 107 | #define VM_PFN_AT_MMAP 0x40000000 /* PFNMAP vma that is fully mapped at mmap time */ |
| 107 | #define VM_MERGEABLE 0x80000000 /* KSM may merge identical pages */ | 108 | #define VM_MERGEABLE 0x80000000 /* KSM may merge identical pages */ |
| 108 | 109 | ||
| 110 | /* Bits set in the VMA until the stack is in its final location */ | ||
| 111 | #define VM_STACK_INCOMPLETE_SETUP (VM_RAND_READ | VM_SEQ_READ) | ||
| 112 | |||
| 109 | #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ | 113 | #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ |
| 110 | #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS | 114 | #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS |
| 111 | #endif | 115 | #endif |
| @@ -334,6 +338,7 @@ void put_page(struct page *page); | |||
| 334 | void put_pages_list(struct list_head *pages); | 338 | void put_pages_list(struct list_head *pages); |
| 335 | 339 | ||
| 336 | void split_page(struct page *page, unsigned int order); | 340 | void split_page(struct page *page, unsigned int order); |
| 341 | int split_free_page(struct page *page); | ||
| 337 | 342 | ||
| 338 | /* | 343 | /* |
| 339 | * Compound pages have a destructor function. Provide a | 344 | * Compound pages have a destructor function. Provide a |
| @@ -591,7 +596,7 @@ static inline void set_page_links(struct page *page, enum zone_type zone, | |||
| 591 | 596 | ||
| 592 | static __always_inline void *lowmem_page_address(struct page *page) | 597 | static __always_inline void *lowmem_page_address(struct page *page) |
| 593 | { | 598 | { |
| 594 | return __va(page_to_pfn(page) << PAGE_SHIFT); | 599 | return __va(PFN_PHYS(page_to_pfn(page))); |
| 595 | } | 600 | } |
| 596 | 601 | ||
| 597 | #if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL) | 602 | #if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL) |
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index cf9e458e96b0..0fa491326c4a 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
| @@ -321,6 +321,15 @@ struct zone { | |||
| 321 | unsigned long *pageblock_flags; | 321 | unsigned long *pageblock_flags; |
| 322 | #endif /* CONFIG_SPARSEMEM */ | 322 | #endif /* CONFIG_SPARSEMEM */ |
| 323 | 323 | ||
| 324 | #ifdef CONFIG_COMPACTION | ||
| 325 | /* | ||
| 326 | * On compaction failure, 1<<compact_defer_shift compactions | ||
| 327 | * are skipped before trying again. The number attempted since | ||
| 328 | * last failure is tracked with compact_considered. | ||
| 329 | */ | ||
| 330 | unsigned int compact_considered; | ||
| 331 | unsigned int compact_defer_shift; | ||
| 332 | #endif | ||
| 324 | 333 | ||
| 325 | ZONE_PADDING(_pad1_) | 334 | ZONE_PADDING(_pad1_) |
| 326 | 335 | ||
| @@ -641,9 +650,10 @@ typedef struct pglist_data { | |||
| 641 | 650 | ||
| 642 | #include <linux/memory_hotplug.h> | 651 | #include <linux/memory_hotplug.h> |
| 643 | 652 | ||
| 653 | extern struct mutex zonelists_mutex; | ||
| 644 | void get_zone_counts(unsigned long *active, unsigned long *inactive, | 654 | void get_zone_counts(unsigned long *active, unsigned long *inactive, |
| 645 | unsigned long *free); | 655 | unsigned long *free); |
| 646 | void build_all_zonelists(void); | 656 | void build_all_zonelists(void *data); |
| 647 | void wakeup_kswapd(struct zone *zone, int order); | 657 | void wakeup_kswapd(struct zone *zone, int order); |
| 648 | int zone_watermark_ok(struct zone *z, int order, unsigned long mark, | 658 | int zone_watermark_ok(struct zone *z, int order, unsigned long mark, |
| 649 | int classzone_idx, int alloc_flags); | 659 | int classzone_idx, int alloc_flags); |
| @@ -972,7 +982,7 @@ struct mem_section { | |||
| 972 | #endif | 982 | #endif |
| 973 | 983 | ||
| 974 | #define SECTION_NR_TO_ROOT(sec) ((sec) / SECTIONS_PER_ROOT) | 984 | #define SECTION_NR_TO_ROOT(sec) ((sec) / SECTIONS_PER_ROOT) |
| 975 | #define NR_SECTION_ROOTS (NR_MEM_SECTIONS / SECTIONS_PER_ROOT) | 985 | #define NR_SECTION_ROOTS DIV_ROUND_UP(NR_MEM_SECTIONS, SECTIONS_PER_ROOT) |
| 976 | #define SECTION_ROOT_MASK (SECTIONS_PER_ROOT - 1) | 986 | #define SECTION_ROOT_MASK (SECTIONS_PER_ROOT - 1) |
| 977 | 987 | ||
| 978 | #ifdef CONFIG_SPARSEMEM_EXTREME | 988 | #ifdef CONFIG_SPARSEMEM_EXTREME |
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 007fbaafead0..48c007dae476 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h | |||
| @@ -509,4 +509,11 @@ struct zorro_device_id { | |||
| 509 | 509 | ||
| 510 | #define ZORRO_DEVICE_MODALIAS_FMT "zorro:i%08X" | 510 | #define ZORRO_DEVICE_MODALIAS_FMT "zorro:i%08X" |
| 511 | 511 | ||
| 512 | #define ISAPNP_ANY_ID 0xffff | ||
| 513 | struct isapnp_device_id { | ||
| 514 | unsigned short card_vendor, card_device; | ||
| 515 | unsigned short vendor, function; | ||
| 516 | kernel_ulong_t driver_data; /* data private to the driver */ | ||
| 517 | }; | ||
| 518 | |||
| 512 | #endif /* LINUX_MOD_DEVICETABLE_H */ | 519 | #endif /* LINUX_MOD_DEVICETABLE_H */ |
diff --git a/include/linux/msm_mdp.h b/include/linux/msm_mdp.h new file mode 100644 index 000000000000..d11fe0f2f956 --- /dev/null +++ b/include/linux/msm_mdp.h | |||
| @@ -0,0 +1,78 @@ | |||
| 1 | /* include/linux/msm_mdp.h | ||
| 2 | * | ||
| 3 | * Copyright (C) 2007 Google Incorporated | ||
| 4 | * | ||
| 5 | * This software is licensed under the terms of the GNU General Public | ||
| 6 | * License version 2, as published by the Free Software Foundation, and | ||
| 7 | * may be copied, distributed, and modified under those terms. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | */ | ||
| 14 | #ifndef _MSM_MDP_H_ | ||
| 15 | #define _MSM_MDP_H_ | ||
| 16 | |||
| 17 | #include <linux/types.h> | ||
| 18 | |||
| 19 | #define MSMFB_IOCTL_MAGIC 'm' | ||
| 20 | #define MSMFB_GRP_DISP _IOW(MSMFB_IOCTL_MAGIC, 1, unsigned int) | ||
| 21 | #define MSMFB_BLIT _IOW(MSMFB_IOCTL_MAGIC, 2, unsigned int) | ||
| 22 | |||
| 23 | enum { | ||
| 24 | MDP_RGB_565, /* RGB 565 planar */ | ||
| 25 | MDP_XRGB_8888, /* RGB 888 padded */ | ||
| 26 | MDP_Y_CBCR_H2V2, /* Y and CbCr, pseudo planar w/ Cb is in MSB */ | ||
| 27 | MDP_ARGB_8888, /* ARGB 888 */ | ||
| 28 | MDP_RGB_888, /* RGB 888 planar */ | ||
| 29 | MDP_Y_CRCB_H2V2, /* Y and CrCb, pseudo planar w/ Cr is in MSB */ | ||
| 30 | MDP_YCRYCB_H2V1, /* YCrYCb interleave */ | ||
| 31 | MDP_Y_CRCB_H2V1, /* Y and CrCb, pseduo planar w/ Cr is in MSB */ | ||
| 32 | MDP_Y_CBCR_H2V1, /* Y and CrCb, pseduo planar w/ Cr is in MSB */ | ||
| 33 | MDP_RGBA_8888, /* ARGB 888 */ | ||
| 34 | MDP_BGRA_8888, /* ABGR 888 */ | ||
| 35 | MDP_IMGTYPE_LIMIT /* Non valid image type after this enum */ | ||
| 36 | }; | ||
| 37 | |||
| 38 | enum { | ||
| 39 | PMEM_IMG, | ||
| 40 | FB_IMG, | ||
| 41 | }; | ||
| 42 | |||
| 43 | /* flag values */ | ||
| 44 | #define MDP_ROT_NOP 0 | ||
| 45 | #define MDP_FLIP_LR 0x1 | ||
| 46 | #define MDP_FLIP_UD 0x2 | ||
| 47 | #define MDP_ROT_90 0x4 | ||
| 48 | #define MDP_ROT_180 (MDP_FLIP_UD|MDP_FLIP_LR) | ||
| 49 | #define MDP_ROT_270 (MDP_ROT_90|MDP_FLIP_UD|MDP_FLIP_LR) | ||
| 50 | #define MDP_DITHER 0x8 | ||
| 51 | #define MDP_BLUR 0x10 | ||
| 52 | |||
| 53 | #define MDP_TRANSP_NOP 0xffffffff | ||
| 54 | #define MDP_ALPHA_NOP 0xff | ||
| 55 | |||
| 56 | struct mdp_rect { | ||
| 57 | u32 x, y, w, h; | ||
| 58 | }; | ||
| 59 | |||
| 60 | struct mdp_img { | ||
| 61 | u32 width, height, format, offset; | ||
| 62 | int memory_id; /* the file descriptor */ | ||
| 63 | }; | ||
| 64 | |||
| 65 | struct mdp_blit_req { | ||
| 66 | struct mdp_img src; | ||
| 67 | struct mdp_img dst; | ||
| 68 | struct mdp_rect src_rect; | ||
| 69 | struct mdp_rect dst_rect; | ||
| 70 | u32 alpha, transp_mask, flags; | ||
| 71 | }; | ||
| 72 | |||
| 73 | struct mdp_blit_req_list { | ||
| 74 | u32 count; | ||
| 75 | struct mdp_blit_req req[]; | ||
| 76 | }; | ||
| 77 | |||
| 78 | #endif /* _MSM_MDP_H_ */ | ||
diff --git a/include/linux/ncp_fs.h b/include/linux/ncp_fs.h index 30b06c893944..4522aed00906 100644 --- a/include/linux/ncp_fs.h +++ b/include/linux/ncp_fs.h | |||
| @@ -210,7 +210,7 @@ int ncp_date_dos2unix(__le16 time, __le16 date); | |||
| 210 | void ncp_date_unix2dos(int unix_date, __le16 * time, __le16 * date); | 210 | void ncp_date_unix2dos(int unix_date, __le16 * time, __le16 * date); |
| 211 | 211 | ||
| 212 | /* linux/fs/ncpfs/ioctl.c */ | 212 | /* linux/fs/ncpfs/ioctl.c */ |
| 213 | int ncp_ioctl(struct inode *, struct file *, unsigned int, unsigned long); | 213 | long ncp_ioctl(struct file *, unsigned int, unsigned long); |
| 214 | long ncp_compat_ioctl(struct file *, unsigned int, unsigned long); | 214 | long ncp_compat_ioctl(struct file *, unsigned int, unsigned long); |
| 215 | 215 | ||
| 216 | /* linux/fs/ncpfs/sock.c */ | 216 | /* linux/fs/ncpfs/sock.c */ |
diff --git a/include/linux/netlink.h b/include/linux/netlink.h index 6eaca5e1e8ca..59d066936ab9 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h | |||
| @@ -188,6 +188,10 @@ extern int netlink_has_listeners(struct sock *sk, unsigned int group); | |||
| 188 | extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int nonblock); | 188 | extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int nonblock); |
| 189 | extern int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 pid, | 189 | extern int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 pid, |
| 190 | __u32 group, gfp_t allocation); | 190 | __u32 group, gfp_t allocation); |
| 191 | extern int netlink_broadcast_filtered(struct sock *ssk, struct sk_buff *skb, | ||
| 192 | __u32 pid, __u32 group, gfp_t allocation, | ||
| 193 | int (*filter)(struct sock *dsk, struct sk_buff *skb, void *data), | ||
| 194 | void *filter_data); | ||
| 191 | extern int netlink_set_err(struct sock *ssk, __u32 pid, __u32 group, int code); | 195 | extern int netlink_set_err(struct sock *ssk, __u32 pid, __u32 group, int code); |
| 192 | extern int netlink_register_notifier(struct notifier_block *nb); | 196 | extern int netlink_register_notifier(struct notifier_block *nb); |
| 193 | extern int netlink_unregister_notifier(struct notifier_block *nb); | 197 | extern int netlink_unregister_notifier(struct notifier_block *nb); |
diff --git a/include/linux/of_device.h b/include/linux/of_device.h index d3a74e00a3e1..11651facc5f1 100644 --- a/include/linux/of_device.h +++ b/include/linux/of_device.h | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | #ifndef _LINUX_OF_DEVICE_H | 1 | #ifndef _LINUX_OF_DEVICE_H |
| 2 | #define _LINUX_OF_DEVICE_H | 2 | #define _LINUX_OF_DEVICE_H |
| 3 | 3 | ||
| 4 | #ifdef CONFIG_OF_DEVICE | ||
| 4 | #include <linux/device.h> | 5 | #include <linux/device.h> |
| 5 | #include <linux/of.h> | 6 | #include <linux/of.h> |
| 6 | #include <linux/mod_devicetable.h> | 7 | #include <linux/mod_devicetable.h> |
| @@ -10,7 +11,7 @@ | |||
| 10 | #define to_of_device(d) container_of(d, struct of_device, dev) | 11 | #define to_of_device(d) container_of(d, struct of_device, dev) |
| 11 | 12 | ||
| 12 | extern const struct of_device_id *of_match_device( | 13 | extern const struct of_device_id *of_match_device( |
| 13 | const struct of_device_id *matches, const struct of_device *dev); | 14 | const struct of_device_id *matches, const struct device *dev); |
| 14 | 15 | ||
| 15 | extern struct of_device *of_dev_get(struct of_device *dev); | 16 | extern struct of_device *of_dev_get(struct of_device *dev); |
| 16 | extern void of_dev_put(struct of_device *dev); | 17 | extern void of_dev_put(struct of_device *dev); |
| @@ -26,5 +27,6 @@ static inline void of_device_free(struct of_device *dev) | |||
| 26 | 27 | ||
| 27 | extern ssize_t of_device_get_modalias(struct of_device *ofdev, | 28 | extern ssize_t of_device_get_modalias(struct of_device *ofdev, |
| 28 | char *str, ssize_t len); | 29 | char *str, ssize_t len); |
| 30 | #endif /* CONFIG_OF_DEVICE */ | ||
| 29 | 31 | ||
| 30 | #endif /* _LINUX_OF_DEVICE_H */ | 32 | #endif /* _LINUX_OF_DEVICE_H */ |
diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h index a1ca92ccb0ff..71e1a916d3fa 100644 --- a/include/linux/of_fdt.h +++ b/include/linux/of_fdt.h | |||
| @@ -57,6 +57,7 @@ struct boot_param_header { | |||
| 57 | __be32 dt_struct_size; /* size of the DT structure block */ | 57 | __be32 dt_struct_size; /* size of the DT structure block */ |
| 58 | }; | 58 | }; |
| 59 | 59 | ||
| 60 | #if defined(CONFIG_OF_FLATTREE) | ||
| 60 | /* TBD: Temporary export of fdt globals - remove when code fully merged */ | 61 | /* TBD: Temporary export of fdt globals - remove when code fully merged */ |
| 61 | extern int __initdata dt_root_addr_cells; | 62 | extern int __initdata dt_root_addr_cells; |
| 62 | extern int __initdata dt_root_size_cells; | 63 | extern int __initdata dt_root_size_cells; |
| @@ -98,6 +99,9 @@ extern int early_init_dt_scan_root(unsigned long node, const char *uname, | |||
| 98 | /* Other Prototypes */ | 99 | /* Other Prototypes */ |
| 99 | extern void unflatten_device_tree(void); | 100 | extern void unflatten_device_tree(void); |
| 100 | extern void early_init_devtree(void *); | 101 | extern void early_init_devtree(void *); |
| 102 | #else /* CONFIG_OF_FLATTREE */ | ||
| 103 | static inline void unflatten_device_tree(void) {} | ||
| 104 | #endif /* CONFIG_OF_FLATTREE */ | ||
| 101 | 105 | ||
| 102 | #endif /* __ASSEMBLY__ */ | 106 | #endif /* __ASSEMBLY__ */ |
| 103 | #endif /* _LINUX_OF_FDT_H */ | 107 | #endif /* _LINUX_OF_FDT_H */ |
diff --git a/include/linux/of_platform.h b/include/linux/of_platform.h index 908406651330..1643d3761eb4 100644 --- a/include/linux/of_platform.h +++ b/include/linux/of_platform.h | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | * | 11 | * |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #ifdef CONFIG_OF_DEVICE | ||
| 14 | #include <linux/module.h> | 15 | #include <linux/module.h> |
| 15 | #include <linux/device.h> | 16 | #include <linux/device.h> |
| 16 | #include <linux/mod_devicetable.h> | 17 | #include <linux/mod_devicetable.h> |
| @@ -30,10 +31,6 @@ extern struct bus_type of_platform_bus_type; | |||
| 30 | */ | 31 | */ |
| 31 | struct of_platform_driver | 32 | struct of_platform_driver |
| 32 | { | 33 | { |
| 33 | const char *name; | ||
| 34 | const struct of_device_id *match_table; | ||
| 35 | struct module *owner; | ||
| 36 | |||
| 37 | int (*probe)(struct of_device* dev, | 34 | int (*probe)(struct of_device* dev, |
| 38 | const struct of_device_id *match); | 35 | const struct of_device_id *match); |
| 39 | int (*remove)(struct of_device* dev); | 36 | int (*remove)(struct of_device* dev); |
| @@ -66,5 +63,6 @@ static inline void of_unregister_platform_driver(struct of_platform_driver *drv) | |||
| 66 | extern struct of_device *of_find_device_by_node(struct device_node *np); | 63 | extern struct of_device *of_find_device_by_node(struct device_node *np); |
| 67 | 64 | ||
| 68 | extern int of_bus_type_init(struct bus_type *bus, const char *name); | 65 | extern int of_bus_type_init(struct bus_type *bus, const char *name); |
| 66 | #endif /* CONFIG_OF_DEVICE */ | ||
| 69 | 67 | ||
| 70 | #endif /* _LINUX_OF_PLATFORM_H */ | 68 | #endif /* _LINUX_OF_PLATFORM_H */ |
diff --git a/include/linux/padata.h b/include/linux/padata.h index 51611da9c498..8d8406246eef 100644 --- a/include/linux/padata.h +++ b/include/linux/padata.h | |||
| @@ -24,7 +24,19 @@ | |||
| 24 | #include <linux/workqueue.h> | 24 | #include <linux/workqueue.h> |
| 25 | #include <linux/spinlock.h> | 25 | #include <linux/spinlock.h> |
| 26 | #include <linux/list.h> | 26 | #include <linux/list.h> |
| 27 | #include <linux/timer.h> | ||
| 27 | 28 | ||
| 29 | /** | ||
| 30 | * struct padata_priv - Embedded to the users data structure. | ||
| 31 | * | ||
| 32 | * @list: List entry, to attach to the padata lists. | ||
| 33 | * @pd: Pointer to the internal control structure. | ||
| 34 | * @cb_cpu: Callback cpu for serializatioon. | ||
| 35 | * @seq_nr: Sequence number of the parallelized data object. | ||
| 36 | * @info: Used to pass information from the parallel to the serial function. | ||
| 37 | * @parallel: Parallel execution function. | ||
| 38 | * @serial: Serial complete function. | ||
| 39 | */ | ||
| 28 | struct padata_priv { | 40 | struct padata_priv { |
| 29 | struct list_head list; | 41 | struct list_head list; |
| 30 | struct parallel_data *pd; | 42 | struct parallel_data *pd; |
| @@ -35,11 +47,29 @@ struct padata_priv { | |||
| 35 | void (*serial)(struct padata_priv *padata); | 47 | void (*serial)(struct padata_priv *padata); |
| 36 | }; | 48 | }; |
| 37 | 49 | ||
| 50 | /** | ||
| 51 | * struct padata_list | ||
| 52 | * | ||
| 53 | * @list: List head. | ||
| 54 | * @lock: List lock. | ||
| 55 | */ | ||
| 38 | struct padata_list { | 56 | struct padata_list { |
| 39 | struct list_head list; | 57 | struct list_head list; |
| 40 | spinlock_t lock; | 58 | spinlock_t lock; |
| 41 | }; | 59 | }; |
| 42 | 60 | ||
| 61 | /** | ||
| 62 | * struct padata_queue - The percpu padata queues. | ||
| 63 | * | ||
| 64 | * @parallel: List to wait for parallelization. | ||
| 65 | * @reorder: List to wait for reordering after parallel processing. | ||
| 66 | * @serial: List to wait for serialization after reordering. | ||
| 67 | * @pwork: work struct for parallelization. | ||
| 68 | * @swork: work struct for serialization. | ||
| 69 | * @pd: Backpointer to the internal control structure. | ||
| 70 | * @num_obj: Number of objects that are processed by this cpu. | ||
| 71 | * @cpu_index: Index of the cpu. | ||
| 72 | */ | ||
| 43 | struct padata_queue { | 73 | struct padata_queue { |
| 44 | struct padata_list parallel; | 74 | struct padata_list parallel; |
| 45 | struct padata_list reorder; | 75 | struct padata_list reorder; |
| @@ -51,6 +81,20 @@ struct padata_queue { | |||
| 51 | int cpu_index; | 81 | int cpu_index; |
| 52 | }; | 82 | }; |
| 53 | 83 | ||
| 84 | /** | ||
| 85 | * struct parallel_data - Internal control structure, covers everything | ||
| 86 | * that depends on the cpumask in use. | ||
| 87 | * | ||
| 88 | * @pinst: padata instance. | ||
| 89 | * @queue: percpu padata queues. | ||
| 90 | * @seq_nr: The sequence number that will be attached to the next object. | ||
| 91 | * @reorder_objects: Number of objects waiting in the reorder queues. | ||
| 92 | * @refcnt: Number of objects holding a reference on this parallel_data. | ||
| 93 | * @max_seq_nr: Maximal used sequence number. | ||
| 94 | * @cpumask: cpumask in use. | ||
| 95 | * @lock: Reorder lock. | ||
| 96 | * @timer: Reorder timer. | ||
| 97 | */ | ||
| 54 | struct parallel_data { | 98 | struct parallel_data { |
| 55 | struct padata_instance *pinst; | 99 | struct padata_instance *pinst; |
| 56 | struct padata_queue *queue; | 100 | struct padata_queue *queue; |
| @@ -60,8 +104,19 @@ struct parallel_data { | |||
| 60 | unsigned int max_seq_nr; | 104 | unsigned int max_seq_nr; |
| 61 | cpumask_var_t cpumask; | 105 | cpumask_var_t cpumask; |
| 62 | spinlock_t lock; | 106 | spinlock_t lock; |
| 107 | struct timer_list timer; | ||
| 63 | }; | 108 | }; |
| 64 | 109 | ||
| 110 | /** | ||
| 111 | * struct padata_instance - The overall control structure. | ||
| 112 | * | ||
| 113 | * @cpu_notifier: cpu hotplug notifier. | ||
| 114 | * @wq: The workqueue in use. | ||
| 115 | * @pd: The internal control structure. | ||
| 116 | * @cpumask: User supplied cpumask. | ||
| 117 | * @lock: padata instance lock. | ||
| 118 | * @flags: padata flags. | ||
| 119 | */ | ||
| 65 | struct padata_instance { | 120 | struct padata_instance { |
| 66 | struct notifier_block cpu_notifier; | 121 | struct notifier_block cpu_notifier; |
| 67 | struct workqueue_struct *wq; | 122 | struct workqueue_struct *wq; |
diff --git a/include/linux/pci.h b/include/linux/pci.h index a788fa12ff31..a327322a33ab 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
| @@ -334,6 +334,16 @@ struct pci_dev { | |||
| 334 | #endif | 334 | #endif |
| 335 | }; | 335 | }; |
| 336 | 336 | ||
| 337 | static inline struct pci_dev *pci_physfn(struct pci_dev *dev) | ||
| 338 | { | ||
| 339 | #ifdef CONFIG_PCI_IOV | ||
| 340 | if (dev->is_virtfn) | ||
| 341 | dev = dev->physfn; | ||
| 342 | #endif | ||
| 343 | |||
| 344 | return dev; | ||
| 345 | } | ||
| 346 | |||
| 337 | extern struct pci_dev *alloc_pci_dev(void); | 347 | extern struct pci_dev *alloc_pci_dev(void); |
| 338 | 348 | ||
| 339 | #define pci_dev_b(n) list_entry(n, struct pci_dev, bus_list) | 349 | #define pci_dev_b(n) list_entry(n, struct pci_dev, bus_list) |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 9f688d243b86..ae66851870be 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -2419,8 +2419,8 @@ | |||
| 2419 | #define PCI_DEVICE_ID_INTEL_82845_HB 0x1a30 | 2419 | #define PCI_DEVICE_ID_INTEL_82845_HB 0x1a30 |
| 2420 | #define PCI_DEVICE_ID_INTEL_IOAT 0x1a38 | 2420 | #define PCI_DEVICE_ID_INTEL_IOAT 0x1a38 |
| 2421 | #define PCI_DEVICE_ID_INTEL_CPT_SMBUS 0x1c22 | 2421 | #define PCI_DEVICE_ID_INTEL_CPT_SMBUS 0x1c22 |
| 2422 | #define PCI_DEVICE_ID_INTEL_CPT_LPC1 0x1c42 | 2422 | #define PCI_DEVICE_ID_INTEL_CPT_LPC_MIN 0x1c41 |
| 2423 | #define PCI_DEVICE_ID_INTEL_CPT_LPC2 0x1c43 | 2423 | #define PCI_DEVICE_ID_INTEL_CPT_LPC_MAX 0x1c5f |
| 2424 | #define PCI_DEVICE_ID_INTEL_82801AA_0 0x2410 | 2424 | #define PCI_DEVICE_ID_INTEL_82801AA_0 0x2410 |
| 2425 | #define PCI_DEVICE_ID_INTEL_82801AA_1 0x2411 | 2425 | #define PCI_DEVICE_ID_INTEL_82801AA_1 0x2411 |
| 2426 | #define PCI_DEVICE_ID_INTEL_82801AA_3 0x2413 | 2426 | #define PCI_DEVICE_ID_INTEL_82801AA_3 0x2413 |
diff --git a/include/linux/pci_regs.h b/include/linux/pci_regs.h index c4c3d68be19a..455b9ccdfca7 100644 --- a/include/linux/pci_regs.h +++ b/include/linux/pci_regs.h | |||
| @@ -566,8 +566,7 @@ | |||
| 566 | #define PCI_ERR_ROOT_FIRST_FATAL 0x00000010 /* First Fatal */ | 566 | #define PCI_ERR_ROOT_FIRST_FATAL 0x00000010 /* First Fatal */ |
| 567 | #define PCI_ERR_ROOT_NONFATAL_RCV 0x00000020 /* Non-Fatal Received */ | 567 | #define PCI_ERR_ROOT_NONFATAL_RCV 0x00000020 /* Non-Fatal Received */ |
| 568 | #define PCI_ERR_ROOT_FATAL_RCV 0x00000040 /* Fatal Received */ | 568 | #define PCI_ERR_ROOT_FATAL_RCV 0x00000040 /* Fatal Received */ |
| 569 | #define PCI_ERR_ROOT_COR_SRC 52 | 569 | #define PCI_ERR_ROOT_ERR_SRC 52 /* Error Source Identification */ |
| 570 | #define PCI_ERR_ROOT_SRC 54 | ||
| 571 | 570 | ||
| 572 | /* Virtual Channel */ | 571 | /* Virtual Channel */ |
| 573 | #define PCI_VC_PORT_REG1 4 | 572 | #define PCI_VC_PORT_REG1 4 |
diff --git a/include/linux/pda_power.h b/include/linux/pda_power.h index d4cf7a2ceb3e..c9e4d814ff77 100644 --- a/include/linux/pda_power.h +++ b/include/linux/pda_power.h | |||
| @@ -24,6 +24,8 @@ struct pda_power_pdata { | |||
| 24 | int (*is_usb_online)(void); | 24 | int (*is_usb_online)(void); |
| 25 | void (*set_charge)(int flags); | 25 | void (*set_charge)(int flags); |
| 26 | void (*exit)(struct device *dev); | 26 | void (*exit)(struct device *dev); |
| 27 | int (*suspend)(pm_message_t state); | ||
| 28 | int (*resume)(void); | ||
| 27 | 29 | ||
| 28 | char **supplied_to; | 30 | char **supplied_to; |
| 29 | size_t num_supplicants; | 31 | size_t num_supplicants; |
diff --git a/include/linux/pipe_fs_i.h b/include/linux/pipe_fs_i.h index b43a9e039059..16de3933c45e 100644 --- a/include/linux/pipe_fs_i.h +++ b/include/linux/pipe_fs_i.h | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | #define PIPEFS_MAGIC 0x50495045 | 4 | #define PIPEFS_MAGIC 0x50495045 |
| 5 | 5 | ||
| 6 | #define PIPE_BUFFERS (16) | 6 | #define PIPE_DEF_BUFFERS 16 |
| 7 | 7 | ||
| 8 | #define PIPE_BUF_FLAG_LRU 0x01 /* page is on the LRU */ | 8 | #define PIPE_BUF_FLAG_LRU 0x01 /* page is on the LRU */ |
| 9 | #define PIPE_BUF_FLAG_ATOMIC 0x02 /* was atomically mapped */ | 9 | #define PIPE_BUF_FLAG_ATOMIC 0x02 /* was atomically mapped */ |
| @@ -44,17 +44,17 @@ struct pipe_buffer { | |||
| 44 | **/ | 44 | **/ |
| 45 | struct pipe_inode_info { | 45 | struct pipe_inode_info { |
| 46 | wait_queue_head_t wait; | 46 | wait_queue_head_t wait; |
| 47 | unsigned int nrbufs, curbuf; | 47 | unsigned int nrbufs, curbuf, buffers; |
| 48 | struct page *tmp_page; | ||
| 49 | unsigned int readers; | 48 | unsigned int readers; |
| 50 | unsigned int writers; | 49 | unsigned int writers; |
| 51 | unsigned int waiting_writers; | 50 | unsigned int waiting_writers; |
| 52 | unsigned int r_counter; | 51 | unsigned int r_counter; |
| 53 | unsigned int w_counter; | 52 | unsigned int w_counter; |
| 53 | struct page *tmp_page; | ||
| 54 | struct fasync_struct *fasync_readers; | 54 | struct fasync_struct *fasync_readers; |
| 55 | struct fasync_struct *fasync_writers; | 55 | struct fasync_struct *fasync_writers; |
| 56 | struct inode *inode; | 56 | struct inode *inode; |
| 57 | struct pipe_buffer bufs[PIPE_BUFFERS]; | 57 | struct pipe_buffer *bufs; |
| 58 | }; | 58 | }; |
| 59 | 59 | ||
| 60 | /* | 60 | /* |
| @@ -139,6 +139,8 @@ void pipe_lock(struct pipe_inode_info *); | |||
| 139 | void pipe_unlock(struct pipe_inode_info *); | 139 | void pipe_unlock(struct pipe_inode_info *); |
| 140 | void pipe_double_lock(struct pipe_inode_info *, struct pipe_inode_info *); | 140 | void pipe_double_lock(struct pipe_inode_info *, struct pipe_inode_info *); |
| 141 | 141 | ||
| 142 | extern unsigned int pipe_max_pages; | ||
| 143 | |||
| 142 | /* Drop the inode semaphore and wait for a pipe event, atomically */ | 144 | /* Drop the inode semaphore and wait for a pipe event, atomically */ |
| 143 | void pipe_wait(struct pipe_inode_info *pipe); | 145 | void pipe_wait(struct pipe_inode_info *pipe); |
| 144 | 146 | ||
| @@ -154,4 +156,7 @@ int generic_pipe_buf_confirm(struct pipe_inode_info *, struct pipe_buffer *); | |||
| 154 | int generic_pipe_buf_steal(struct pipe_inode_info *, struct pipe_buffer *); | 156 | int generic_pipe_buf_steal(struct pipe_inode_info *, struct pipe_buffer *); |
| 155 | void generic_pipe_buf_release(struct pipe_inode_info *, struct pipe_buffer *); | 157 | void generic_pipe_buf_release(struct pipe_inode_info *, struct pipe_buffer *); |
| 156 | 158 | ||
| 159 | /* for F_SETPIPE_SZ and F_GETPIPE_SZ */ | ||
| 160 | long pipe_fcntl(struct file *, unsigned int, unsigned long arg); | ||
| 161 | |||
| 157 | #endif | 162 | #endif |
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index ebd2b8fb00d0..30083a896f36 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h | |||
| @@ -114,6 +114,7 @@ enum power_supply_property { | |||
| 114 | POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG, | 114 | POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG, |
| 115 | POWER_SUPPLY_PROP_TIME_TO_FULL_NOW, | 115 | POWER_SUPPLY_PROP_TIME_TO_FULL_NOW, |
| 116 | POWER_SUPPLY_PROP_TIME_TO_FULL_AVG, | 116 | POWER_SUPPLY_PROP_TIME_TO_FULL_AVG, |
| 117 | POWER_SUPPLY_PROP_TYPE, /* use power_supply.type instead */ | ||
| 117 | /* Properties of type `const char *' */ | 118 | /* Properties of type `const char *' */ |
| 118 | POWER_SUPPLY_PROP_MODEL_NAME, | 119 | POWER_SUPPLY_PROP_MODEL_NAME, |
| 119 | POWER_SUPPLY_PROP_MANUFACTURER, | 120 | POWER_SUPPLY_PROP_MANUFACTURER, |
| @@ -144,6 +145,11 @@ struct power_supply { | |||
| 144 | int (*get_property)(struct power_supply *psy, | 145 | int (*get_property)(struct power_supply *psy, |
| 145 | enum power_supply_property psp, | 146 | enum power_supply_property psp, |
| 146 | union power_supply_propval *val); | 147 | union power_supply_propval *val); |
| 148 | int (*set_property)(struct power_supply *psy, | ||
| 149 | enum power_supply_property psp, | ||
| 150 | const union power_supply_propval *val); | ||
| 151 | int (*property_is_writeable)(struct power_supply *psy, | ||
| 152 | enum power_supply_property psp); | ||
| 147 | void (*external_power_changed)(struct power_supply *psy); | 153 | void (*external_power_changed)(struct power_supply *psy); |
| 148 | void (*set_charged)(struct power_supply *psy); | 154 | void (*set_charged)(struct power_supply *psy); |
| 149 | 155 | ||
diff --git a/include/linux/quota.h b/include/linux/quota.h index b462916b2a0a..7126a15467f1 100644 --- a/include/linux/quota.h +++ b/include/linux/quota.h | |||
| @@ -174,6 +174,8 @@ enum { | |||
| 174 | #include <linux/rwsem.h> | 174 | #include <linux/rwsem.h> |
| 175 | #include <linux/spinlock.h> | 175 | #include <linux/spinlock.h> |
| 176 | #include <linux/wait.h> | 176 | #include <linux/wait.h> |
| 177 | #include <linux/percpu.h> | ||
| 178 | #include <linux/smp.h> | ||
| 177 | 179 | ||
| 178 | #include <linux/dqblk_xfs.h> | 180 | #include <linux/dqblk_xfs.h> |
| 179 | #include <linux/dqblk_v1.h> | 181 | #include <linux/dqblk_v1.h> |
| @@ -238,19 +240,43 @@ static inline int info_dirty(struct mem_dqinfo *info) | |||
| 238 | return test_bit(DQF_INFO_DIRTY_B, &info->dqi_flags); | 240 | return test_bit(DQF_INFO_DIRTY_B, &info->dqi_flags); |
| 239 | } | 241 | } |
| 240 | 242 | ||
| 243 | enum { | ||
| 244 | DQST_LOOKUPS, | ||
| 245 | DQST_DROPS, | ||
| 246 | DQST_READS, | ||
| 247 | DQST_WRITES, | ||
| 248 | DQST_CACHE_HITS, | ||
| 249 | DQST_ALLOC_DQUOTS, | ||
| 250 | DQST_FREE_DQUOTS, | ||
| 251 | DQST_SYNCS, | ||
| 252 | _DQST_DQSTAT_LAST | ||
| 253 | }; | ||
| 254 | |||
| 241 | struct dqstats { | 255 | struct dqstats { |
| 242 | int lookups; | 256 | int stat[_DQST_DQSTAT_LAST]; |
| 243 | int drops; | ||
| 244 | int reads; | ||
| 245 | int writes; | ||
| 246 | int cache_hits; | ||
| 247 | int allocated_dquots; | ||
| 248 | int free_dquots; | ||
| 249 | int syncs; | ||
| 250 | }; | 257 | }; |
| 251 | 258 | ||
| 259 | extern struct dqstats *dqstats_pcpu; | ||
| 252 | extern struct dqstats dqstats; | 260 | extern struct dqstats dqstats; |
| 253 | 261 | ||
| 262 | static inline void dqstats_inc(unsigned int type) | ||
| 263 | { | ||
| 264 | #ifdef CONFIG_SMP | ||
| 265 | per_cpu_ptr(dqstats_pcpu, smp_processor_id())->stat[type]++; | ||
| 266 | #else | ||
| 267 | dqstats.stat[type]++; | ||
| 268 | #endif | ||
| 269 | } | ||
| 270 | |||
| 271 | static inline void dqstats_dec(unsigned int type) | ||
| 272 | { | ||
| 273 | #ifdef CONFIG_SMP | ||
| 274 | per_cpu_ptr(dqstats_pcpu, smp_processor_id())->stat[type]--; | ||
| 275 | #else | ||
| 276 | dqstats.stat[type]--; | ||
| 277 | #endif | ||
| 278 | } | ||
| 279 | |||
| 254 | #define DQ_MOD_B 0 /* dquot modified since read */ | 280 | #define DQ_MOD_B 0 /* dquot modified since read */ |
| 255 | #define DQ_BLKS_B 1 /* uid/gid has been warned about blk limit */ | 281 | #define DQ_BLKS_B 1 /* uid/gid has been warned about blk limit */ |
| 256 | #define DQ_INODES_B 2 /* uid/gid has been warned about inode limit */ | 282 | #define DQ_INODES_B 2 /* uid/gid has been warned about inode limit */ |
| @@ -311,12 +337,10 @@ struct quotactl_ops { | |||
| 311 | int (*quota_sync)(struct super_block *, int, int); | 337 | int (*quota_sync)(struct super_block *, int, int); |
| 312 | int (*get_info)(struct super_block *, int, struct if_dqinfo *); | 338 | int (*get_info)(struct super_block *, int, struct if_dqinfo *); |
| 313 | int (*set_info)(struct super_block *, int, struct if_dqinfo *); | 339 | int (*set_info)(struct super_block *, int, struct if_dqinfo *); |
| 314 | int (*get_dqblk)(struct super_block *, int, qid_t, struct if_dqblk *); | 340 | int (*get_dqblk)(struct super_block *, int, qid_t, struct fs_disk_quota *); |
| 315 | int (*set_dqblk)(struct super_block *, int, qid_t, struct if_dqblk *); | 341 | int (*set_dqblk)(struct super_block *, int, qid_t, struct fs_disk_quota *); |
| 316 | int (*get_xstate)(struct super_block *, struct fs_quota_stat *); | 342 | int (*get_xstate)(struct super_block *, struct fs_quota_stat *); |
| 317 | int (*set_xstate)(struct super_block *, unsigned int, int); | 343 | int (*set_xstate)(struct super_block *, unsigned int, int); |
| 318 | int (*get_xquota)(struct super_block *, int, qid_t, struct fs_disk_quota *); | ||
| 319 | int (*set_xquota)(struct super_block *, int, qid_t, struct fs_disk_quota *); | ||
| 320 | }; | 344 | }; |
| 321 | 345 | ||
| 322 | struct quota_format_type { | 346 | struct quota_format_type { |
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h index e6fa7acce290..370abb1e99cb 100644 --- a/include/linux/quotaops.h +++ b/include/linux/quotaops.h | |||
| @@ -14,6 +14,14 @@ static inline struct quota_info *sb_dqopt(struct super_block *sb) | |||
| 14 | return &sb->s_dquot; | 14 | return &sb->s_dquot; |
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | /* i_mutex must being held */ | ||
| 18 | static inline bool is_quota_modification(struct inode *inode, struct iattr *ia) | ||
| 19 | { | ||
| 20 | return (ia->ia_valid & ATTR_SIZE && ia->ia_size != inode->i_size) || | ||
| 21 | (ia->ia_valid & ATTR_UID && ia->ia_uid != inode->i_uid) || | ||
| 22 | (ia->ia_valid & ATTR_GID && ia->ia_gid != inode->i_gid); | ||
| 23 | } | ||
| 24 | |||
| 17 | #if defined(CONFIG_QUOTA) | 25 | #if defined(CONFIG_QUOTA) |
| 18 | 26 | ||
| 19 | /* | 27 | /* |
| @@ -63,9 +71,12 @@ int vfs_quota_disable(struct super_block *sb, int type, unsigned int flags); | |||
| 63 | int vfs_quota_sync(struct super_block *sb, int type, int wait); | 71 | int vfs_quota_sync(struct super_block *sb, int type, int wait); |
| 64 | int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); | 72 | int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); |
| 65 | int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); | 73 | int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); |
| 66 | int vfs_get_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di); | 74 | int vfs_get_dqblk(struct super_block *sb, int type, qid_t id, |
| 67 | int vfs_set_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di); | 75 | struct fs_disk_quota *di); |
| 76 | int vfs_set_dqblk(struct super_block *sb, int type, qid_t id, | ||
| 77 | struct fs_disk_quota *di); | ||
| 68 | 78 | ||
| 79 | int __dquot_transfer(struct inode *inode, struct dquot **transfer_to); | ||
| 69 | int dquot_transfer(struct inode *inode, struct iattr *iattr); | 80 | int dquot_transfer(struct inode *inode, struct iattr *iattr); |
| 70 | int vfs_dq_quota_on_remount(struct super_block *sb); | 81 | int vfs_dq_quota_on_remount(struct super_block *sb); |
| 71 | 82 | ||
diff --git a/include/linux/ramfs.h b/include/linux/ramfs.h index 4e768dda87b0..e7320b5e82fb 100644 --- a/include/linux/ramfs.h +++ b/include/linux/ramfs.h | |||
| @@ -1,7 +1,8 @@ | |||
| 1 | #ifndef _LINUX_RAMFS_H | 1 | #ifndef _LINUX_RAMFS_H |
| 2 | #define _LINUX_RAMFS_H | 2 | #define _LINUX_RAMFS_H |
| 3 | 3 | ||
| 4 | struct inode *ramfs_get_inode(struct super_block *sb, int mode, dev_t dev); | 4 | struct inode *ramfs_get_inode(struct super_block *sb, const struct inode *dir, |
| 5 | int mode, dev_t dev); | ||
| 5 | extern int ramfs_get_sb(struct file_system_type *fs_type, | 6 | extern int ramfs_get_sb(struct file_system_type *fs_type, |
| 6 | int flags, const char *dev_name, void *data, struct vfsmount *mnt); | 7 | int flags, const char *dev_name, void *data, struct vfsmount *mnt); |
| 7 | 8 | ||
| @@ -20,4 +21,6 @@ extern const struct file_operations ramfs_file_operations; | |||
| 20 | extern const struct vm_operations_struct generic_file_vm_ops; | 21 | extern const struct vm_operations_struct generic_file_vm_ops; |
| 21 | extern int __init init_rootfs(void); | 22 | extern int __init init_rootfs(void); |
| 22 | 23 | ||
| 24 | int ramfs_fill_super(struct super_block *sb, void *data, int silent); | ||
| 25 | |||
| 23 | #endif | 26 | #endif |
diff --git a/include/linux/ratelimit.h b/include/linux/ratelimit.h index 668cf1bef030..8f69d09a41a5 100644 --- a/include/linux/ratelimit.h +++ b/include/linux/ratelimit.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | #define _LINUX_RATELIMIT_H | 2 | #define _LINUX_RATELIMIT_H |
| 3 | 3 | ||
| 4 | #include <linux/param.h> | 4 | #include <linux/param.h> |
| 5 | #include <linux/spinlock_types.h> | 5 | #include <linux/spinlock.h> |
| 6 | 6 | ||
| 7 | #define DEFAULT_RATELIMIT_INTERVAL (5 * HZ) | 7 | #define DEFAULT_RATELIMIT_INTERVAL (5 * HZ) |
| 8 | #define DEFAULT_RATELIMIT_BURST 10 | 8 | #define DEFAULT_RATELIMIT_BURST 10 |
| @@ -25,6 +25,17 @@ struct ratelimit_state { | |||
| 25 | .burst = burst_init, \ | 25 | .burst = burst_init, \ |
| 26 | } | 26 | } |
| 27 | 27 | ||
| 28 | static inline void ratelimit_state_init(struct ratelimit_state *rs, | ||
| 29 | int interval, int burst) | ||
| 30 | { | ||
| 31 | spin_lock_init(&rs->lock); | ||
| 32 | rs->interval = interval; | ||
| 33 | rs->burst = burst; | ||
| 34 | rs->printed = 0; | ||
| 35 | rs->missed = 0; | ||
| 36 | rs->begin = 0; | ||
| 37 | } | ||
| 38 | |||
| 28 | extern int ___ratelimit(struct ratelimit_state *rs, const char *func); | 39 | extern int ___ratelimit(struct ratelimit_state *rs, const char *func); |
| 29 | #define __ratelimit(state) ___ratelimit(state, __func__) | 40 | #define __ratelimit(state) ___ratelimit(state, __func__) |
| 30 | 41 | ||
diff --git a/include/linux/reiserfs_acl.h b/include/linux/reiserfs_acl.h index b4448853900e..3fd8c4506bbb 100644 --- a/include/linux/reiserfs_acl.h +++ b/include/linux/reiserfs_acl.h | |||
| @@ -53,8 +53,8 @@ int reiserfs_inherit_default_acl(struct reiserfs_transaction_handle *th, | |||
| 53 | struct inode *dir, struct dentry *dentry, | 53 | struct inode *dir, struct dentry *dentry, |
| 54 | struct inode *inode); | 54 | struct inode *inode); |
| 55 | int reiserfs_cache_default_acl(struct inode *dir); | 55 | int reiserfs_cache_default_acl(struct inode *dir); |
| 56 | extern struct xattr_handler reiserfs_posix_acl_default_handler; | 56 | extern const struct xattr_handler reiserfs_posix_acl_default_handler; |
| 57 | extern struct xattr_handler reiserfs_posix_acl_access_handler; | 57 | extern const struct xattr_handler reiserfs_posix_acl_access_handler; |
| 58 | 58 | ||
| 59 | #else | 59 | #else |
| 60 | 60 | ||
diff --git a/include/linux/reiserfs_xattr.h b/include/linux/reiserfs_xattr.h index 7fa02b4af838..b2cf2089769b 100644 --- a/include/linux/reiserfs_xattr.h +++ b/include/linux/reiserfs_xattr.h | |||
| @@ -58,9 +58,9 @@ int reiserfs_xattr_set_handle(struct reiserfs_transaction_handle *, | |||
| 58 | struct inode *, const char *, const void *, | 58 | struct inode *, const char *, const void *, |
| 59 | size_t, int); | 59 | size_t, int); |
| 60 | 60 | ||
| 61 | extern struct xattr_handler reiserfs_xattr_user_handler; | 61 | extern const struct xattr_handler reiserfs_xattr_user_handler; |
| 62 | extern struct xattr_handler reiserfs_xattr_trusted_handler; | 62 | extern const struct xattr_handler reiserfs_xattr_trusted_handler; |
| 63 | extern struct xattr_handler reiserfs_xattr_security_handler; | 63 | extern const struct xattr_handler reiserfs_xattr_security_handler; |
| 64 | #ifdef CONFIG_REISERFS_FS_SECURITY | 64 | #ifdef CONFIG_REISERFS_FS_SECURITY |
| 65 | int reiserfs_security_init(struct inode *dir, struct inode *inode, | 65 | int reiserfs_security_init(struct inode *dir, struct inode *inode, |
| 66 | struct reiserfs_security_handle *sec); | 66 | struct reiserfs_security_handle *sec); |
diff --git a/include/linux/rmap.h b/include/linux/rmap.h index d25bd224d370..77216742c178 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h | |||
| @@ -26,8 +26,17 @@ | |||
| 26 | */ | 26 | */ |
| 27 | struct anon_vma { | 27 | struct anon_vma { |
| 28 | spinlock_t lock; /* Serialize access to vma list */ | 28 | spinlock_t lock; /* Serialize access to vma list */ |
| 29 | #ifdef CONFIG_KSM | 29 | #if defined(CONFIG_KSM) || defined(CONFIG_MIGRATION) |
| 30 | atomic_t ksm_refcount; | 30 | |
| 31 | /* | ||
| 32 | * The external_refcount is taken by either KSM or page migration | ||
| 33 | * to take a reference to an anon_vma when there is no | ||
| 34 | * guarantee that the vma of page tables will exist for | ||
| 35 | * the duration of the operation. A caller that takes | ||
| 36 | * the reference is responsible for clearing up the | ||
| 37 | * anon_vma if they are the last user on release | ||
| 38 | */ | ||
| 39 | atomic_t external_refcount; | ||
| 31 | #endif | 40 | #endif |
| 32 | /* | 41 | /* |
| 33 | * NOTE: the LSB of the head.next is set by | 42 | * NOTE: the LSB of the head.next is set by |
| @@ -61,22 +70,22 @@ struct anon_vma_chain { | |||
| 61 | }; | 70 | }; |
| 62 | 71 | ||
| 63 | #ifdef CONFIG_MMU | 72 | #ifdef CONFIG_MMU |
| 64 | #ifdef CONFIG_KSM | 73 | #if defined(CONFIG_KSM) || defined(CONFIG_MIGRATION) |
| 65 | static inline void ksm_refcount_init(struct anon_vma *anon_vma) | 74 | static inline void anonvma_external_refcount_init(struct anon_vma *anon_vma) |
| 66 | { | 75 | { |
| 67 | atomic_set(&anon_vma->ksm_refcount, 0); | 76 | atomic_set(&anon_vma->external_refcount, 0); |
| 68 | } | 77 | } |
| 69 | 78 | ||
| 70 | static inline int ksm_refcount(struct anon_vma *anon_vma) | 79 | static inline int anonvma_external_refcount(struct anon_vma *anon_vma) |
| 71 | { | 80 | { |
| 72 | return atomic_read(&anon_vma->ksm_refcount); | 81 | return atomic_read(&anon_vma->external_refcount); |
| 73 | } | 82 | } |
| 74 | #else | 83 | #else |
| 75 | static inline void ksm_refcount_init(struct anon_vma *anon_vma) | 84 | static inline void anonvma_external_refcount_init(struct anon_vma *anon_vma) |
| 76 | { | 85 | { |
| 77 | } | 86 | } |
| 78 | 87 | ||
| 79 | static inline int ksm_refcount(struct anon_vma *anon_vma) | 88 | static inline int anonvma_external_refcount(struct anon_vma *anon_vma) |
| 80 | { | 89 | { |
| 81 | return 0; | 90 | return 0; |
| 82 | } | 91 | } |
diff --git a/include/linux/sched.h b/include/linux/sched.h index b55e988988b5..c0151ffd3541 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -384,7 +384,7 @@ struct user_namespace; | |||
| 384 | * 1-3 now and depends on arch. We use "5" as safe margin, here. | 384 | * 1-3 now and depends on arch. We use "5" as safe margin, here. |
| 385 | */ | 385 | */ |
| 386 | #define MAPCOUNT_ELF_CORE_MARGIN (5) | 386 | #define MAPCOUNT_ELF_CORE_MARGIN (5) |
| 387 | #define DEFAULT_MAX_MAP_COUNT (USHORT_MAX - MAPCOUNT_ELF_CORE_MARGIN) | 387 | #define DEFAULT_MAX_MAP_COUNT (USHRT_MAX - MAPCOUNT_ELF_CORE_MARGIN) |
| 388 | 388 | ||
| 389 | extern int sysctl_max_map_count; | 389 | extern int sysctl_max_map_count; |
| 390 | 390 | ||
| @@ -1421,6 +1421,7 @@ struct task_struct { | |||
| 1421 | #endif | 1421 | #endif |
| 1422 | #ifdef CONFIG_CPUSETS | 1422 | #ifdef CONFIG_CPUSETS |
| 1423 | nodemask_t mems_allowed; /* Protected by alloc_lock */ | 1423 | nodemask_t mems_allowed; /* Protected by alloc_lock */ |
| 1424 | int mems_allowed_change_disable; | ||
| 1424 | int cpuset_mem_spread_rotor; | 1425 | int cpuset_mem_spread_rotor; |
| 1425 | #endif | 1426 | #endif |
| 1426 | #ifdef CONFIG_CGROUPS | 1427 | #ifdef CONFIG_CGROUPS |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 78dd1e7120a9..f10db6e5f3b5 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
| @@ -182,6 +182,10 @@ | |||
| 182 | /* Aeroflex Gaisler GRLIB APBUART */ | 182 | /* Aeroflex Gaisler GRLIB APBUART */ |
| 183 | #define PORT_APBUART 90 | 183 | #define PORT_APBUART 90 |
| 184 | 184 | ||
| 185 | /* Altera UARTs */ | ||
| 186 | #define PORT_ALTERA_JTAGUART 91 | ||
| 187 | #define PORT_ALTERA_UART 92 | ||
| 188 | |||
| 185 | #ifdef __KERNEL__ | 189 | #ifdef __KERNEL__ |
| 186 | 190 | ||
| 187 | #include <linux/compiler.h> | 191 | #include <linux/compiler.h> |
| @@ -246,6 +250,7 @@ struct uart_ops { | |||
| 246 | #endif | 250 | #endif |
| 247 | }; | 251 | }; |
| 248 | 252 | ||
| 253 | #define NO_POLL_CHAR 0x00ff0000 | ||
| 249 | #define UART_CONFIG_TYPE (1 << 0) | 254 | #define UART_CONFIG_TYPE (1 << 0) |
| 250 | #define UART_CONFIG_IRQ (1 << 1) | 255 | #define UART_CONFIG_IRQ (1 << 1) |
| 251 | 256 | ||
diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h index ca6b2b317991..1812dac8c496 100644 --- a/include/linux/slab_def.h +++ b/include/linux/slab_def.h | |||
| @@ -16,6 +16,30 @@ | |||
| 16 | #include <linux/compiler.h> | 16 | #include <linux/compiler.h> |
| 17 | #include <linux/kmemtrace.h> | 17 | #include <linux/kmemtrace.h> |
| 18 | 18 | ||
| 19 | #ifndef ARCH_KMALLOC_MINALIGN | ||
| 20 | /* | ||
| 21 | * Enforce a minimum alignment for the kmalloc caches. | ||
| 22 | * Usually, the kmalloc caches are cache_line_size() aligned, except when | ||
| 23 | * DEBUG and FORCED_DEBUG are enabled, then they are BYTES_PER_WORD aligned. | ||
| 24 | * Some archs want to perform DMA into kmalloc caches and need a guaranteed | ||
| 25 | * alignment larger than the alignment of a 64-bit integer. | ||
| 26 | * ARCH_KMALLOC_MINALIGN allows that. | ||
| 27 | * Note that increasing this value may disable some debug features. | ||
| 28 | */ | ||
| 29 | #define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long) | ||
| 30 | #endif | ||
| 31 | |||
| 32 | #ifndef ARCH_SLAB_MINALIGN | ||
| 33 | /* | ||
| 34 | * Enforce a minimum alignment for all caches. | ||
| 35 | * Intended for archs that get misalignment faults even for BYTES_PER_WORD | ||
| 36 | * aligned buffers. Includes ARCH_KMALLOC_MINALIGN. | ||
| 37 | * If possible: Do not enable this flag for CONFIG_DEBUG_SLAB, it disables | ||
| 38 | * some debug features. | ||
| 39 | */ | ||
| 40 | #define ARCH_SLAB_MINALIGN 0 | ||
| 41 | #endif | ||
| 42 | |||
| 19 | /* | 43 | /* |
| 20 | * struct kmem_cache | 44 | * struct kmem_cache |
| 21 | * | 45 | * |
diff --git a/include/linux/slob_def.h b/include/linux/slob_def.h index 0ec00b39d006..62667f72c2ef 100644 --- a/include/linux/slob_def.h +++ b/include/linux/slob_def.h | |||
| @@ -1,6 +1,14 @@ | |||
| 1 | #ifndef __LINUX_SLOB_DEF_H | 1 | #ifndef __LINUX_SLOB_DEF_H |
| 2 | #define __LINUX_SLOB_DEF_H | 2 | #define __LINUX_SLOB_DEF_H |
| 3 | 3 | ||
| 4 | #ifndef ARCH_KMALLOC_MINALIGN | ||
| 5 | #define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long) | ||
| 6 | #endif | ||
| 7 | |||
| 8 | #ifndef ARCH_SLAB_MINALIGN | ||
| 9 | #define ARCH_SLAB_MINALIGN __alignof__(unsigned long) | ||
| 10 | #endif | ||
| 11 | |||
| 4 | void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node); | 12 | void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node); |
| 5 | 13 | ||
| 6 | static __always_inline void *kmem_cache_alloc(struct kmem_cache *cachep, | 14 | static __always_inline void *kmem_cache_alloc(struct kmem_cache *cachep, |
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h index 0249d4175bac..55695c8d2f8a 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h | |||
| @@ -116,6 +116,14 @@ struct kmem_cache { | |||
| 116 | 116 | ||
| 117 | #define KMALLOC_SHIFT_LOW ilog2(KMALLOC_MIN_SIZE) | 117 | #define KMALLOC_SHIFT_LOW ilog2(KMALLOC_MIN_SIZE) |
| 118 | 118 | ||
| 119 | #ifndef ARCH_KMALLOC_MINALIGN | ||
| 120 | #define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long) | ||
| 121 | #endif | ||
| 122 | |||
| 123 | #ifndef ARCH_SLAB_MINALIGN | ||
| 124 | #define ARCH_SLAB_MINALIGN __alignof__(unsigned long long) | ||
| 125 | #endif | ||
| 126 | |||
| 119 | /* | 127 | /* |
| 120 | * Maximum kmalloc object size handled by SLUB. Larger object allocations | 128 | * Maximum kmalloc object size handled by SLUB. Larger object allocations |
| 121 | * are passed through to the page allocator. The page allocator "fastpath" | 129 | * are passed through to the page allocator. The page allocator "fastpath" |
diff --git a/include/linux/splice.h b/include/linux/splice.h index 18e7c7c0cae6..997c3b4c212b 100644 --- a/include/linux/splice.h +++ b/include/linux/splice.h | |||
| @@ -82,4 +82,11 @@ extern ssize_t splice_to_pipe(struct pipe_inode_info *, | |||
| 82 | extern ssize_t splice_direct_to_actor(struct file *, struct splice_desc *, | 82 | extern ssize_t splice_direct_to_actor(struct file *, struct splice_desc *, |
| 83 | splice_direct_actor *); | 83 | splice_direct_actor *); |
| 84 | 84 | ||
| 85 | /* | ||
| 86 | * for dynamic pipe sizing | ||
| 87 | */ | ||
| 88 | extern int splice_grow_spd(struct pipe_inode_info *, struct splice_pipe_desc *); | ||
| 89 | extern void splice_shrink_spd(struct pipe_inode_info *, | ||
| 90 | struct splice_pipe_desc *); | ||
| 91 | |||
| 85 | #endif | 92 | #endif |
diff --git a/include/linux/swap.h b/include/linux/swap.h index 1f59d9340c4d..b6b614364dd8 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
| @@ -146,11 +146,13 @@ enum { | |||
| 146 | SWP_DISCARDING = (1 << 3), /* now discarding a free cluster */ | 146 | SWP_DISCARDING = (1 << 3), /* now discarding a free cluster */ |
| 147 | SWP_SOLIDSTATE = (1 << 4), /* blkdev seeks are cheap */ | 147 | SWP_SOLIDSTATE = (1 << 4), /* blkdev seeks are cheap */ |
| 148 | SWP_CONTINUED = (1 << 5), /* swap_map has count continuation */ | 148 | SWP_CONTINUED = (1 << 5), /* swap_map has count continuation */ |
| 149 | SWP_BLKDEV = (1 << 6), /* its a block device */ | ||
| 149 | /* add others here before... */ | 150 | /* add others here before... */ |
| 150 | SWP_SCANNING = (1 << 8), /* refcount in scan_swap_map */ | 151 | SWP_SCANNING = (1 << 8), /* refcount in scan_swap_map */ |
| 151 | }; | 152 | }; |
| 152 | 153 | ||
| 153 | #define SWAP_CLUSTER_MAX 32 | 154 | #define SWAP_CLUSTER_MAX 32 |
| 155 | #define COMPACT_CLUSTER_MAX SWAP_CLUSTER_MAX | ||
| 154 | 156 | ||
| 155 | #define SWAP_MAP_MAX 0x3e /* Max duplication count, in first swap_map */ | 157 | #define SWAP_MAP_MAX 0x3e /* Max duplication count, in first swap_map */ |
| 156 | #define SWAP_MAP_BAD 0x3f /* Note pageblock is bad, in first swap_map */ | 158 | #define SWAP_MAP_BAD 0x3f /* Note pageblock is bad, in first swap_map */ |
| @@ -223,20 +225,15 @@ static inline void lru_cache_add_anon(struct page *page) | |||
| 223 | __lru_cache_add(page, LRU_INACTIVE_ANON); | 225 | __lru_cache_add(page, LRU_INACTIVE_ANON); |
| 224 | } | 226 | } |
| 225 | 227 | ||
| 226 | static inline void lru_cache_add_active_anon(struct page *page) | ||
| 227 | { | ||
| 228 | __lru_cache_add(page, LRU_ACTIVE_ANON); | ||
| 229 | } | ||
| 230 | |||
| 231 | static inline void lru_cache_add_file(struct page *page) | 228 | static inline void lru_cache_add_file(struct page *page) |
| 232 | { | 229 | { |
| 233 | __lru_cache_add(page, LRU_INACTIVE_FILE); | 230 | __lru_cache_add(page, LRU_INACTIVE_FILE); |
| 234 | } | 231 | } |
| 235 | 232 | ||
| 236 | static inline void lru_cache_add_active_file(struct page *page) | 233 | /* LRU Isolation modes. */ |
| 237 | { | 234 | #define ISOLATE_INACTIVE 0 /* Isolate inactive pages. */ |
| 238 | __lru_cache_add(page, LRU_ACTIVE_FILE); | 235 | #define ISOLATE_ACTIVE 1 /* Isolate active pages. */ |
| 239 | } | 236 | #define ISOLATE_BOTH 2 /* Isolate both active and inactive pages. */ |
| 240 | 237 | ||
| 241 | /* linux/mm/vmscan.c */ | 238 | /* linux/mm/vmscan.c */ |
| 242 | extern unsigned long try_to_free_pages(struct zonelist *zonelist, int order, | 239 | extern unsigned long try_to_free_pages(struct zonelist *zonelist, int order, |
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index f0496b3d1811..f2694eb4dd3d 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | 20 | ||
| 21 | struct kobject; | 21 | struct kobject; |
| 22 | struct module; | 22 | struct module; |
| 23 | enum kobj_ns_type; | ||
| 23 | 24 | ||
| 24 | /* FIXME | 25 | /* FIXME |
| 25 | * The *owner field is no longer used. | 26 | * The *owner field is no longer used. |
| @@ -86,17 +87,18 @@ struct attribute_group { | |||
| 86 | 87 | ||
| 87 | #define attr_name(_attr) (_attr).attr.name | 88 | #define attr_name(_attr) (_attr).attr.name |
| 88 | 89 | ||
| 90 | struct file; | ||
| 89 | struct vm_area_struct; | 91 | struct vm_area_struct; |
| 90 | 92 | ||
| 91 | struct bin_attribute { | 93 | struct bin_attribute { |
| 92 | struct attribute attr; | 94 | struct attribute attr; |
| 93 | size_t size; | 95 | size_t size; |
| 94 | void *private; | 96 | void *private; |
| 95 | ssize_t (*read)(struct kobject *, struct bin_attribute *, | 97 | ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, |
| 96 | char *, loff_t, size_t); | 98 | char *, loff_t, size_t); |
| 97 | ssize_t (*write)(struct kobject *, struct bin_attribute *, | 99 | ssize_t (*write)(struct file *,struct kobject *, struct bin_attribute *, |
| 98 | char *, loff_t, size_t); | 100 | char *, loff_t, size_t); |
| 99 | int (*mmap)(struct kobject *, struct bin_attribute *attr, | 101 | int (*mmap)(struct file *, struct kobject *, struct bin_attribute *attr, |
| 100 | struct vm_area_struct *vma); | 102 | struct vm_area_struct *vma); |
| 101 | }; | 103 | }; |
| 102 | 104 | ||
| @@ -154,6 +156,9 @@ void sysfs_remove_link(struct kobject *kobj, const char *name); | |||
| 154 | int sysfs_rename_link(struct kobject *kobj, struct kobject *target, | 156 | int sysfs_rename_link(struct kobject *kobj, struct kobject *target, |
| 155 | const char *old_name, const char *new_name); | 157 | const char *old_name, const char *new_name); |
| 156 | 158 | ||
| 159 | void sysfs_delete_link(struct kobject *dir, struct kobject *targ, | ||
| 160 | const char *name); | ||
| 161 | |||
| 157 | int __must_check sysfs_create_group(struct kobject *kobj, | 162 | int __must_check sysfs_create_group(struct kobject *kobj, |
| 158 | const struct attribute_group *grp); | 163 | const struct attribute_group *grp); |
| 159 | int sysfs_update_group(struct kobject *kobj, | 164 | int sysfs_update_group(struct kobject *kobj, |
| @@ -168,10 +173,15 @@ void sysfs_remove_file_from_group(struct kobject *kobj, | |||
| 168 | void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr); | 173 | void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr); |
| 169 | void sysfs_notify_dirent(struct sysfs_dirent *sd); | 174 | void sysfs_notify_dirent(struct sysfs_dirent *sd); |
| 170 | struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd, | 175 | struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd, |
| 176 | const void *ns, | ||
| 171 | const unsigned char *name); | 177 | const unsigned char *name); |
| 172 | struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd); | 178 | struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd); |
| 173 | void sysfs_put(struct sysfs_dirent *sd); | 179 | void sysfs_put(struct sysfs_dirent *sd); |
| 174 | void sysfs_printk_last_file(void); | 180 | void sysfs_printk_last_file(void); |
| 181 | |||
| 182 | /* Called to clear a ns tag when it is no longer valid */ | ||
| 183 | void sysfs_exit_ns(enum kobj_ns_type type, const void *tag); | ||
| 184 | |||
| 175 | int __must_check sysfs_init(void); | 185 | int __must_check sysfs_init(void); |
| 176 | 186 | ||
| 177 | #else /* CONFIG_SYSFS */ | 187 | #else /* CONFIG_SYSFS */ |
| @@ -264,6 +274,11 @@ static inline int sysfs_rename_link(struct kobject *k, struct kobject *t, | |||
| 264 | return 0; | 274 | return 0; |
| 265 | } | 275 | } |
| 266 | 276 | ||
| 277 | static inline void sysfs_delete_link(struct kobject *k, struct kobject *t, | ||
| 278 | const char *name) | ||
| 279 | { | ||
| 280 | } | ||
| 281 | |||
| 267 | static inline int sysfs_create_group(struct kobject *kobj, | 282 | static inline int sysfs_create_group(struct kobject *kobj, |
| 268 | const struct attribute_group *grp) | 283 | const struct attribute_group *grp) |
| 269 | { | 284 | { |
| @@ -301,6 +316,7 @@ static inline void sysfs_notify_dirent(struct sysfs_dirent *sd) | |||
| 301 | } | 316 | } |
| 302 | static inline | 317 | static inline |
| 303 | struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd, | 318 | struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd, |
| 319 | const void *ns, | ||
| 304 | const unsigned char *name) | 320 | const unsigned char *name) |
| 305 | { | 321 | { |
| 306 | return NULL; | 322 | return NULL; |
| @@ -313,6 +329,10 @@ static inline void sysfs_put(struct sysfs_dirent *sd) | |||
| 313 | { | 329 | { |
| 314 | } | 330 | } |
| 315 | 331 | ||
| 332 | static inline void sysfs_exit_ns(int type, const void *tag) | ||
| 333 | { | ||
| 334 | } | ||
| 335 | |||
| 316 | static inline int __must_check sysfs_init(void) | 336 | static inline int __must_check sysfs_init(void) |
| 317 | { | 337 | { |
| 318 | return 0; | 338 | return 0; |
diff --git a/include/linux/tboot.h b/include/linux/tboot.h index bf2a0c748878..1dba6ee55203 100644 --- a/include/linux/tboot.h +++ b/include/linux/tboot.h | |||
| @@ -150,6 +150,7 @@ extern int tboot_force_iommu(void); | |||
| 150 | 150 | ||
| 151 | #else | 151 | #else |
| 152 | 152 | ||
| 153 | #define tboot_enabled() 0 | ||
| 153 | #define tboot_probe() do { } while (0) | 154 | #define tboot_probe() do { } while (0) |
| 154 | #define tboot_shutdown(shutdown_type) do { } while (0) | 155 | #define tboot_shutdown(shutdown_type) do { } while (0) |
| 155 | #define tboot_sleep(sleep_state, pm1a_control, pm1b_control) \ | 156 | #define tboot_sleep(sleep_state, pm1a_control, pm1b_control) \ |
diff --git a/include/linux/timb_dma.h b/include/linux/timb_dma.h new file mode 100644 index 000000000000..bb043e970b96 --- /dev/null +++ b/include/linux/timb_dma.h | |||
| @@ -0,0 +1,55 @@ | |||
| 1 | /* | ||
| 2 | * timb_dma.h timberdale FPGA DMA driver defines | ||
| 3 | * Copyright (c) 2010 Intel Corporation | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License version 2 as | ||
| 7 | * published by the Free Software Foundation. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 17 | */ | ||
| 18 | |||
| 19 | /* Supports: | ||
| 20 | * Timberdale FPGA DMA engine | ||
| 21 | */ | ||
| 22 | |||
| 23 | #ifndef _LINUX_TIMB_DMA_H | ||
| 24 | #define _LINUX_TIMB_DMA_H | ||
| 25 | |||
| 26 | /** | ||
| 27 | * struct timb_dma_platform_data_channel - Description of each individual | ||
| 28 | * DMA channel for the timberdale DMA driver | ||
| 29 | * @rx: true if this channel handles data in the direction to | ||
| 30 | * the CPU. | ||
| 31 | * @bytes_per_line: Number of bytes per line, this is specific for channels | ||
| 32 | * handling video data. For other channels this shall be left to 0. | ||
| 33 | * @descriptors: Number of descriptors to allocate for this channel. | ||
| 34 | * @descriptor_elements: Number of elements in each descriptor. | ||
| 35 | * | ||
| 36 | */ | ||
| 37 | struct timb_dma_platform_data_channel { | ||
| 38 | bool rx; | ||
| 39 | unsigned int bytes_per_line; | ||
| 40 | unsigned int descriptors; | ||
| 41 | unsigned int descriptor_elements; | ||
| 42 | }; | ||
| 43 | |||
| 44 | /** | ||
| 45 | * struct timb_dma_platform_data - Platform data of the timberdale DMA driver | ||
| 46 | * @nr_channels: Number of defined channels in the channels array. | ||
| 47 | * @channels: Definition of the each channel. | ||
| 48 | * | ||
| 49 | */ | ||
| 50 | struct timb_dma_platform_data { | ||
| 51 | unsigned nr_channels; | ||
| 52 | struct timb_dma_platform_data_channel channels[32]; | ||
| 53 | }; | ||
| 54 | |||
| 55 | #endif | ||
diff --git a/include/linux/tty.h b/include/linux/tty.h index bb44fa9ae135..931078b73226 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | */ | 23 | */ |
| 24 | #define NR_UNIX98_PTY_DEFAULT 4096 /* Default maximum for Unix98 ptys */ | 24 | #define NR_UNIX98_PTY_DEFAULT 4096 /* Default maximum for Unix98 ptys */ |
| 25 | #define NR_UNIX98_PTY_MAX (1 << MINORBITS) /* Absolute limit */ | 25 | #define NR_UNIX98_PTY_MAX (1 << MINORBITS) /* Absolute limit */ |
| 26 | #define NR_LDISCS 21 | 26 | #define NR_LDISCS 30 |
| 27 | 27 | ||
| 28 | /* line disciplines */ | 28 | /* line disciplines */ |
| 29 | #define N_TTY 0 | 29 | #define N_TTY 0 |
| @@ -48,6 +48,7 @@ | |||
| 48 | #define N_PPS 18 /* Pulse per Second */ | 48 | #define N_PPS 18 /* Pulse per Second */ |
| 49 | #define N_V253 19 /* Codec control over voice modem */ | 49 | #define N_V253 19 /* Codec control over voice modem */ |
| 50 | #define N_CAIF 20 /* CAIF protocol for talking to modems */ | 50 | #define N_CAIF 20 /* CAIF protocol for talking to modems */ |
| 51 | #define N_GSM0710 21 /* GSM 0710 Mux */ | ||
| 51 | 52 | ||
| 52 | /* | 53 | /* |
| 53 | * This character is the same as _POSIX_VDISABLE: it cannot be used as | 54 | * This character is the same as _POSIX_VDISABLE: it cannot be used as |
diff --git a/include/linux/virtio.h b/include/linux/virtio.h index 40d1709bdbf4..aff5b4f74041 100644 --- a/include/linux/virtio.h +++ b/include/linux/virtio.h | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | #include <linux/spinlock.h> | 7 | #include <linux/spinlock.h> |
| 8 | #include <linux/device.h> | 8 | #include <linux/device.h> |
| 9 | #include <linux/mod_devicetable.h> | 9 | #include <linux/mod_devicetable.h> |
| 10 | #include <linux/gfp.h> | ||
| 10 | 11 | ||
| 11 | /** | 12 | /** |
| 12 | * virtqueue - a queue to register buffers for sending or receiving. | 13 | * virtqueue - a queue to register buffers for sending or receiving. |
| @@ -14,7 +15,6 @@ | |||
| 14 | * @callback: the function to call when buffers are consumed (can be NULL). | 15 | * @callback: the function to call when buffers are consumed (can be NULL). |
| 15 | * @name: the name of this virtqueue (mainly for debugging) | 16 | * @name: the name of this virtqueue (mainly for debugging) |
| 16 | * @vdev: the virtio device this queue was created for. | 17 | * @vdev: the virtio device this queue was created for. |
| 17 | * @vq_ops: the operations for this virtqueue (see below). | ||
| 18 | * @priv: a pointer for the virtqueue implementation to use. | 18 | * @priv: a pointer for the virtqueue implementation to use. |
| 19 | */ | 19 | */ |
| 20 | struct virtqueue { | 20 | struct virtqueue { |
| @@ -22,60 +22,71 @@ struct virtqueue { | |||
| 22 | void (*callback)(struct virtqueue *vq); | 22 | void (*callback)(struct virtqueue *vq); |
| 23 | const char *name; | 23 | const char *name; |
| 24 | struct virtio_device *vdev; | 24 | struct virtio_device *vdev; |
| 25 | struct virtqueue_ops *vq_ops; | ||
| 26 | void *priv; | 25 | void *priv; |
| 27 | }; | 26 | }; |
| 28 | 27 | ||
| 29 | /** | 28 | /** |
| 30 | * virtqueue_ops - operations for virtqueue abstraction layer | 29 | * operations for virtqueue |
| 31 | * @add_buf: expose buffer to other end | 30 | * virtqueue_add_buf: expose buffer to other end |
| 32 | * vq: the struct virtqueue we're talking about. | 31 | * vq: the struct virtqueue we're talking about. |
| 33 | * sg: the description of the buffer(s). | 32 | * sg: the description of the buffer(s). |
| 34 | * out_num: the number of sg readable by other side | 33 | * out_num: the number of sg readable by other side |
| 35 | * in_num: the number of sg which are writable (after readable ones) | 34 | * in_num: the number of sg which are writable (after readable ones) |
| 36 | * data: the token identifying the buffer. | 35 | * data: the token identifying the buffer. |
| 36 | * gfp: how to do memory allocations (if necessary). | ||
| 37 | * Returns remaining capacity of queue (sg segments) or a negative error. | 37 | * Returns remaining capacity of queue (sg segments) or a negative error. |
| 38 | * @kick: update after add_buf | 38 | * virtqueue_kick: update after add_buf |
| 39 | * vq: the struct virtqueue | 39 | * vq: the struct virtqueue |
| 40 | * After one or more add_buf calls, invoke this to kick the other side. | 40 | * After one or more add_buf calls, invoke this to kick the other side. |
| 41 | * @get_buf: get the next used buffer | 41 | * virtqueue_get_buf: get the next used buffer |
| 42 | * vq: the struct virtqueue we're talking about. | 42 | * vq: the struct virtqueue we're talking about. |
| 43 | * len: the length written into the buffer | 43 | * len: the length written into the buffer |
| 44 | * Returns NULL or the "data" token handed to add_buf. | 44 | * Returns NULL or the "data" token handed to add_buf. |
| 45 | * @disable_cb: disable callbacks | 45 | * virtqueue_disable_cb: disable callbacks |
| 46 | * vq: the struct virtqueue we're talking about. | 46 | * vq: the struct virtqueue we're talking about. |
| 47 | * Note that this is not necessarily synchronous, hence unreliable and only | 47 | * Note that this is not necessarily synchronous, hence unreliable and only |
| 48 | * useful as an optimization. | 48 | * useful as an optimization. |
| 49 | * @enable_cb: restart callbacks after disable_cb. | 49 | * virtqueue_enable_cb: restart callbacks after disable_cb. |
| 50 | * vq: the struct virtqueue we're talking about. | 50 | * vq: the struct virtqueue we're talking about. |
| 51 | * This re-enables callbacks; it returns "false" if there are pending | 51 | * This re-enables callbacks; it returns "false" if there are pending |
| 52 | * buffers in the queue, to detect a possible race between the driver | 52 | * buffers in the queue, to detect a possible race between the driver |
| 53 | * checking for more work, and enabling callbacks. | 53 | * checking for more work, and enabling callbacks. |
| 54 | * @detach_unused_buf: detach first unused buffer | 54 | * virtqueue_detach_unused_buf: detach first unused buffer |
| 55 | * vq: the struct virtqueue we're talking about. | 55 | * vq: the struct virtqueue we're talking about. |
| 56 | * Returns NULL or the "data" token handed to add_buf | 56 | * Returns NULL or the "data" token handed to add_buf |
| 57 | * | 57 | * |
| 58 | * Locking rules are straightforward: the driver is responsible for | 58 | * Locking rules are straightforward: the driver is responsible for |
| 59 | * locking. No two operations may be invoked simultaneously, with the exception | 59 | * locking. No two operations may be invoked simultaneously, with the exception |
| 60 | * of @disable_cb. | 60 | * of virtqueue_disable_cb. |
| 61 | * | 61 | * |
| 62 | * All operations can be called in any context. | 62 | * All operations can be called in any context. |
| 63 | */ | 63 | */ |
| 64 | struct virtqueue_ops { | ||
| 65 | int (*add_buf)(struct virtqueue *vq, | ||
| 66 | struct scatterlist sg[], | ||
| 67 | unsigned int out_num, | ||
| 68 | unsigned int in_num, | ||
| 69 | void *data); | ||
| 70 | 64 | ||
| 71 | void (*kick)(struct virtqueue *vq); | 65 | int virtqueue_add_buf_gfp(struct virtqueue *vq, |
| 66 | struct scatterlist sg[], | ||
| 67 | unsigned int out_num, | ||
| 68 | unsigned int in_num, | ||
| 69 | void *data, | ||
| 70 | gfp_t gfp); | ||
| 72 | 71 | ||
| 73 | void *(*get_buf)(struct virtqueue *vq, unsigned int *len); | 72 | static inline int virtqueue_add_buf(struct virtqueue *vq, |
| 73 | struct scatterlist sg[], | ||
| 74 | unsigned int out_num, | ||
| 75 | unsigned int in_num, | ||
| 76 | void *data) | ||
| 77 | { | ||
| 78 | return virtqueue_add_buf_gfp(vq, sg, out_num, in_num, data, GFP_ATOMIC); | ||
| 79 | } | ||
| 74 | 80 | ||
| 75 | void (*disable_cb)(struct virtqueue *vq); | 81 | void virtqueue_kick(struct virtqueue *vq); |
| 76 | bool (*enable_cb)(struct virtqueue *vq); | 82 | |
| 77 | void *(*detach_unused_buf)(struct virtqueue *vq); | 83 | void *virtqueue_get_buf(struct virtqueue *vq, unsigned int *len); |
| 78 | }; | 84 | |
| 85 | void virtqueue_disable_cb(struct virtqueue *vq); | ||
| 86 | |||
| 87 | bool virtqueue_enable_cb(struct virtqueue *vq); | ||
| 88 | |||
| 89 | void *virtqueue_detach_unused_buf(struct virtqueue *vq); | ||
| 79 | 90 | ||
| 80 | /** | 91 | /** |
| 81 | * virtio_device - representation of a device using virtio | 92 | * virtio_device - representation of a device using virtio |
diff --git a/include/linux/virtio_blk.h b/include/linux/virtio_blk.h index e52029e98919..167720d695ed 100644 --- a/include/linux/virtio_blk.h +++ b/include/linux/virtio_blk.h | |||
| @@ -17,6 +17,8 @@ | |||
| 17 | #define VIRTIO_BLK_F_FLUSH 9 /* Cache flush command support */ | 17 | #define VIRTIO_BLK_F_FLUSH 9 /* Cache flush command support */ |
| 18 | #define VIRTIO_BLK_F_TOPOLOGY 10 /* Topology information is available */ | 18 | #define VIRTIO_BLK_F_TOPOLOGY 10 /* Topology information is available */ |
| 19 | 19 | ||
| 20 | #define VIRTIO_BLK_ID_BYTES 20 /* ID string length */ | ||
| 21 | |||
| 20 | struct virtio_blk_config { | 22 | struct virtio_blk_config { |
| 21 | /* The capacity (in 512-byte sectors). */ | 23 | /* The capacity (in 512-byte sectors). */ |
| 22 | __u64 capacity; | 24 | __u64 capacity; |
| @@ -67,6 +69,9 @@ struct virtio_blk_config { | |||
| 67 | /* Cache flush command */ | 69 | /* Cache flush command */ |
| 68 | #define VIRTIO_BLK_T_FLUSH 4 | 70 | #define VIRTIO_BLK_T_FLUSH 4 |
| 69 | 71 | ||
| 72 | /* Get device ID command */ | ||
| 73 | #define VIRTIO_BLK_T_GET_ID 8 | ||
| 74 | |||
| 70 | /* Barrier before this op. */ | 75 | /* Barrier before this op. */ |
| 71 | #define VIRTIO_BLK_T_BARRIER 0x80000000 | 76 | #define VIRTIO_BLK_T_BARRIER 0x80000000 |
| 72 | 77 | ||
diff --git a/include/linux/virtio_console.h b/include/linux/virtio_console.h index 92228a8fbcbc..a85064db8f94 100644 --- a/include/linux/virtio_console.h +++ b/include/linux/virtio_console.h | |||
| @@ -12,14 +12,39 @@ | |||
| 12 | 12 | ||
| 13 | /* Feature bits */ | 13 | /* Feature bits */ |
| 14 | #define VIRTIO_CONSOLE_F_SIZE 0 /* Does host provide console size? */ | 14 | #define VIRTIO_CONSOLE_F_SIZE 0 /* Does host provide console size? */ |
| 15 | #define VIRTIO_CONSOLE_F_MULTIPORT 1 /* Does host provide multiple ports? */ | ||
| 16 | |||
| 17 | #define VIRTIO_CONSOLE_BAD_ID (~(u32)0) | ||
| 15 | 18 | ||
| 16 | struct virtio_console_config { | 19 | struct virtio_console_config { |
| 17 | /* colums of the screens */ | 20 | /* colums of the screens */ |
| 18 | __u16 cols; | 21 | __u16 cols; |
| 19 | /* rows of the screens */ | 22 | /* rows of the screens */ |
| 20 | __u16 rows; | 23 | __u16 rows; |
| 24 | /* max. number of ports this device can hold */ | ||
| 25 | __u32 max_nr_ports; | ||
| 21 | } __attribute__((packed)); | 26 | } __attribute__((packed)); |
| 22 | 27 | ||
| 28 | /* | ||
| 29 | * A message that's passed between the Host and the Guest for a | ||
| 30 | * particular port. | ||
| 31 | */ | ||
| 32 | struct virtio_console_control { | ||
| 33 | __u32 id; /* Port number */ | ||
| 34 | __u16 event; /* The kind of control event (see below) */ | ||
| 35 | __u16 value; /* Extra information for the key */ | ||
| 36 | }; | ||
| 37 | |||
| 38 | /* Some events for control messages */ | ||
| 39 | #define VIRTIO_CONSOLE_DEVICE_READY 0 | ||
| 40 | #define VIRTIO_CONSOLE_PORT_ADD 1 | ||
| 41 | #define VIRTIO_CONSOLE_PORT_REMOVE 2 | ||
| 42 | #define VIRTIO_CONSOLE_PORT_READY 3 | ||
| 43 | #define VIRTIO_CONSOLE_CONSOLE_PORT 4 | ||
| 44 | #define VIRTIO_CONSOLE_RESIZE 5 | ||
| 45 | #define VIRTIO_CONSOLE_PORT_OPEN 6 | ||
| 46 | #define VIRTIO_CONSOLE_PORT_NAME 7 | ||
| 47 | |||
| 23 | #ifdef __KERNEL__ | 48 | #ifdef __KERNEL__ |
| 24 | int __init virtio_cons_early_init(int (*put_chars)(u32, const char *, int)); | 49 | int __init virtio_cons_early_init(int (*put_chars)(u32, const char *, int)); |
| 25 | #endif /* __KERNEL__ */ | 50 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h index 117f0dd8ad03..7f43ccdc1d38 100644 --- a/include/linux/vmstat.h +++ b/include/linux/vmstat.h | |||
| @@ -43,6 +43,10 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT, | |||
| 43 | KSWAPD_LOW_WMARK_HIT_QUICKLY, KSWAPD_HIGH_WMARK_HIT_QUICKLY, | 43 | KSWAPD_LOW_WMARK_HIT_QUICKLY, KSWAPD_HIGH_WMARK_HIT_QUICKLY, |
| 44 | KSWAPD_SKIP_CONGESTION_WAIT, | 44 | KSWAPD_SKIP_CONGESTION_WAIT, |
| 45 | PAGEOUTRUN, ALLOCSTALL, PGROTATED, | 45 | PAGEOUTRUN, ALLOCSTALL, PGROTATED, |
| 46 | #ifdef CONFIG_COMPACTION | ||
| 47 | COMPACTBLOCKS, COMPACTPAGES, COMPACTPAGEFAILED, | ||
| 48 | COMPACTSTALL, COMPACTFAIL, COMPACTSUCCESS, | ||
| 49 | #endif | ||
| 46 | #ifdef CONFIG_HUGETLB_PAGE | 50 | #ifdef CONFIG_HUGETLB_PAGE |
| 47 | HTLB_BUDDY_PGALLOC, HTLB_BUDDY_PGALLOC_FAIL, | 51 | HTLB_BUDDY_PGALLOC, HTLB_BUDDY_PGALLOC_FAIL, |
| 48 | #endif | 52 | #endif |
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 36520ded3e06..cc97d6caf2b3 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
| @@ -65,6 +65,15 @@ struct writeback_control { | |||
| 65 | * so we use a single control to update them | 65 | * so we use a single control to update them |
| 66 | */ | 66 | */ |
| 67 | unsigned no_nrwrite_index_update:1; | 67 | unsigned no_nrwrite_index_update:1; |
| 68 | |||
| 69 | /* | ||
| 70 | * For WB_SYNC_ALL, the sb must always be pinned. For WB_SYNC_NONE, | ||
| 71 | * the writeback code will pin the sb for the caller. However, | ||
| 72 | * for eg umount, the caller does WB_SYNC_NONE but already has | ||
| 73 | * the sb pinned. If the below is set, caller already has the | ||
| 74 | * sb pinned. | ||
| 75 | */ | ||
| 76 | unsigned sb_pinned:1; | ||
| 68 | }; | 77 | }; |
| 69 | 78 | ||
| 70 | /* | 79 | /* |
| @@ -73,6 +82,7 @@ struct writeback_control { | |||
| 73 | struct bdi_writeback; | 82 | struct bdi_writeback; |
| 74 | int inode_wait(void *); | 83 | int inode_wait(void *); |
| 75 | void writeback_inodes_sb(struct super_block *); | 84 | void writeback_inodes_sb(struct super_block *); |
| 85 | void writeback_inodes_sb_locked(struct super_block *); | ||
| 76 | int writeback_inodes_sb_if_idle(struct super_block *); | 86 | int writeback_inodes_sb_if_idle(struct super_block *); |
| 77 | void sync_inodes_sb(struct super_block *); | 87 | void sync_inodes_sb(struct super_block *); |
| 78 | void writeback_inodes_wbc(struct writeback_control *wbc); | 88 | void writeback_inodes_wbc(struct writeback_control *wbc); |
| @@ -96,8 +106,14 @@ static inline void inode_sync_wait(struct inode *inode) | |||
| 96 | /* | 106 | /* |
| 97 | * mm/page-writeback.c | 107 | * mm/page-writeback.c |
| 98 | */ | 108 | */ |
| 99 | void laptop_io_completion(void); | 109 | #ifdef CONFIG_BLOCK |
| 110 | void laptop_io_completion(struct backing_dev_info *info); | ||
| 100 | void laptop_sync_completion(void); | 111 | void laptop_sync_completion(void); |
| 112 | void laptop_mode_sync(struct work_struct *work); | ||
| 113 | void laptop_mode_timer_fn(unsigned long data); | ||
| 114 | #else | ||
| 115 | static inline void laptop_sync_completion(void) { } | ||
| 116 | #endif | ||
| 101 | void throttle_vm_writeout(gfp_t gfp_mask); | 117 | void throttle_vm_writeout(gfp_t gfp_mask); |
| 102 | 118 | ||
| 103 | /* These are exported to sysctl. */ | 119 | /* These are exported to sysctl. */ |
diff --git a/include/linux/xattr.h b/include/linux/xattr.h index fb9b7e6e1e2d..0cfa1e9c4cc1 100644 --- a/include/linux/xattr.h +++ b/include/linux/xattr.h | |||
| @@ -37,7 +37,7 @@ struct inode; | |||
| 37 | struct dentry; | 37 | struct dentry; |
| 38 | 38 | ||
| 39 | struct xattr_handler { | 39 | struct xattr_handler { |
| 40 | char *prefix; | 40 | const char *prefix; |
| 41 | int flags; /* fs private flags passed back to the handlers */ | 41 | int flags; /* fs private flags passed back to the handlers */ |
| 42 | size_t (*list)(struct dentry *dentry, char *list, size_t list_size, | 42 | size_t (*list)(struct dentry *dentry, char *list, size_t list_size, |
| 43 | const char *name, size_t name_len, int handler_flags); | 43 | const char *name, size_t name_len, int handler_flags); |
diff --git a/include/linux/z2_battery.h b/include/linux/z2_battery.h new file mode 100644 index 000000000000..7b9750404d22 --- /dev/null +++ b/include/linux/z2_battery.h | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | #ifndef _LINUX_Z2_BATTERY_H | ||
| 2 | #define _LINUX_Z2_BATTERY_H | ||
| 3 | |||
| 4 | struct z2_battery_info { | ||
| 5 | int batt_I2C_bus; | ||
| 6 | int batt_I2C_addr; | ||
| 7 | int batt_I2C_reg; | ||
| 8 | int charge_gpio; | ||
| 9 | int min_voltage; | ||
| 10 | int max_voltage; | ||
| 11 | int batt_div; | ||
| 12 | int batt_mult; | ||
| 13 | int batt_tech; | ||
| 14 | char *batt_name; | ||
| 15 | }; | ||
| 16 | |||
| 17 | #endif | ||
diff --git a/include/net/9p/9p.h b/include/net/9p/9p.h index a7fb54808a23..156c26bb8bd7 100644 --- a/include/net/9p/9p.h +++ b/include/net/9p/9p.h | |||
| @@ -86,6 +86,10 @@ do { \ | |||
| 86 | 86 | ||
| 87 | /** | 87 | /** |
| 88 | * enum p9_msg_t - 9P message types | 88 | * enum p9_msg_t - 9P message types |
| 89 | * @P9_TSTATFS: file system status request | ||
| 90 | * @P9_RSTATFS: file system status response | ||
| 91 | * @P9_TRENAME: rename request | ||
| 92 | * @P9_RRENAME: rename response | ||
| 89 | * @P9_TVERSION: version handshake request | 93 | * @P9_TVERSION: version handshake request |
| 90 | * @P9_RVERSION: version handshake response | 94 | * @P9_RVERSION: version handshake response |
| 91 | * @P9_TAUTH: request to establish authentication channel | 95 | * @P9_TAUTH: request to establish authentication channel |
| @@ -125,6 +129,10 @@ do { \ | |||
| 125 | */ | 129 | */ |
| 126 | 130 | ||
| 127 | enum p9_msg_t { | 131 | enum p9_msg_t { |
| 132 | P9_TSTATFS = 8, | ||
| 133 | P9_RSTATFS, | ||
| 134 | P9_TRENAME = 20, | ||
| 135 | P9_RRENAME, | ||
| 128 | P9_TVERSION = 100, | 136 | P9_TVERSION = 100, |
| 129 | P9_RVERSION, | 137 | P9_RVERSION, |
| 130 | P9_TAUTH = 102, | 138 | P9_TAUTH = 102, |
| @@ -350,6 +358,31 @@ struct p9_wstat { | |||
| 350 | }; | 358 | }; |
| 351 | 359 | ||
| 352 | /* Structures for Protocol Operations */ | 360 | /* Structures for Protocol Operations */ |
| 361 | struct p9_tstatfs { | ||
| 362 | u32 fid; | ||
| 363 | }; | ||
| 364 | |||
| 365 | struct p9_rstatfs { | ||
| 366 | u32 type; | ||
| 367 | u32 bsize; | ||
| 368 | u64 blocks; | ||
| 369 | u64 bfree; | ||
| 370 | u64 bavail; | ||
| 371 | u64 files; | ||
| 372 | u64 ffree; | ||
| 373 | u64 fsid; | ||
| 374 | u32 namelen; | ||
| 375 | }; | ||
| 376 | |||
| 377 | struct p9_trename { | ||
| 378 | u32 fid; | ||
| 379 | u32 newdirfid; | ||
| 380 | struct p9_str name; | ||
| 381 | }; | ||
| 382 | |||
| 383 | struct p9_rrename { | ||
| 384 | }; | ||
| 385 | |||
| 353 | struct p9_tversion { | 386 | struct p9_tversion { |
| 354 | u32 msize; | 387 | u32 msize; |
| 355 | struct p9_str version; | 388 | struct p9_str version; |
diff --git a/include/net/9p/client.h b/include/net/9p/client.h index 4f3760afc20f..7dd3ed85c782 100644 --- a/include/net/9p/client.h +++ b/include/net/9p/client.h | |||
| @@ -195,6 +195,8 @@ struct p9_fid { | |||
| 195 | struct list_head dlist; /* list of all fids attached to a dentry */ | 195 | struct list_head dlist; /* list of all fids attached to a dentry */ |
| 196 | }; | 196 | }; |
| 197 | 197 | ||
| 198 | int p9_client_statfs(struct p9_fid *fid, struct p9_rstatfs *sb); | ||
| 199 | int p9_client_rename(struct p9_fid *fid, struct p9_fid *newdirfid, char *name); | ||
| 198 | int p9_client_version(struct p9_client *); | 200 | int p9_client_version(struct p9_client *); |
| 199 | struct p9_client *p9_client_create(const char *dev_name, char *options); | 201 | struct p9_client *p9_client_create(const char *dev_name, char *options); |
| 200 | void p9_client_destroy(struct p9_client *clnt); | 202 | void p9_client_destroy(struct p9_client *clnt); |
diff --git a/include/net/ip.h b/include/net/ip.h index 63548f0a44b1..452f229c380a 100644 --- a/include/net/ip.h +++ b/include/net/ip.h | |||
| @@ -358,11 +358,11 @@ enum ip_defrag_users { | |||
| 358 | IP_DEFRAG_LOCAL_DELIVER, | 358 | IP_DEFRAG_LOCAL_DELIVER, |
| 359 | IP_DEFRAG_CALL_RA_CHAIN, | 359 | IP_DEFRAG_CALL_RA_CHAIN, |
| 360 | IP_DEFRAG_CONNTRACK_IN, | 360 | IP_DEFRAG_CONNTRACK_IN, |
| 361 | __IP_DEFRAG_CONNTRACK_IN_END = IP_DEFRAG_CONNTRACK_IN + USHORT_MAX, | 361 | __IP_DEFRAG_CONNTRACK_IN_END = IP_DEFRAG_CONNTRACK_IN + USHRT_MAX, |
| 362 | IP_DEFRAG_CONNTRACK_OUT, | 362 | IP_DEFRAG_CONNTRACK_OUT, |
| 363 | __IP_DEFRAG_CONNTRACK_OUT_END = IP_DEFRAG_CONNTRACK_OUT + USHORT_MAX, | 363 | __IP_DEFRAG_CONNTRACK_OUT_END = IP_DEFRAG_CONNTRACK_OUT + USHRT_MAX, |
| 364 | IP_DEFRAG_CONNTRACK_BRIDGE_IN, | 364 | IP_DEFRAG_CONNTRACK_BRIDGE_IN, |
| 365 | __IP_DEFRAG_CONNTRACK_BRIDGE_IN = IP_DEFRAG_CONNTRACK_BRIDGE_IN + USHORT_MAX, | 365 | __IP_DEFRAG_CONNTRACK_BRIDGE_IN = IP_DEFRAG_CONNTRACK_BRIDGE_IN + USHRT_MAX, |
| 366 | IP_DEFRAG_VS_IN, | 366 | IP_DEFRAG_VS_IN, |
| 367 | IP_DEFRAG_VS_OUT, | 367 | IP_DEFRAG_VS_OUT, |
| 368 | IP_DEFRAG_VS_FWD | 368 | IP_DEFRAG_VS_FWD |
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index eba5cc00325a..2600b69757b8 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
| @@ -354,11 +354,11 @@ struct inet_frag_queue; | |||
| 354 | enum ip6_defrag_users { | 354 | enum ip6_defrag_users { |
| 355 | IP6_DEFRAG_LOCAL_DELIVER, | 355 | IP6_DEFRAG_LOCAL_DELIVER, |
| 356 | IP6_DEFRAG_CONNTRACK_IN, | 356 | IP6_DEFRAG_CONNTRACK_IN, |
| 357 | __IP6_DEFRAG_CONNTRACK_IN = IP6_DEFRAG_CONNTRACK_IN + USHORT_MAX, | 357 | __IP6_DEFRAG_CONNTRACK_IN = IP6_DEFRAG_CONNTRACK_IN + USHRT_MAX, |
| 358 | IP6_DEFRAG_CONNTRACK_OUT, | 358 | IP6_DEFRAG_CONNTRACK_OUT, |
| 359 | __IP6_DEFRAG_CONNTRACK_OUT = IP6_DEFRAG_CONNTRACK_OUT + USHORT_MAX, | 359 | __IP6_DEFRAG_CONNTRACK_OUT = IP6_DEFRAG_CONNTRACK_OUT + USHRT_MAX, |
| 360 | IP6_DEFRAG_CONNTRACK_BRIDGE_IN, | 360 | IP6_DEFRAG_CONNTRACK_BRIDGE_IN, |
| 361 | __IP6_DEFRAG_CONNTRACK_BRIDGE_IN = IP6_DEFRAG_CONNTRACK_BRIDGE_IN + USHORT_MAX, | 361 | __IP6_DEFRAG_CONNTRACK_BRIDGE_IN = IP6_DEFRAG_CONNTRACK_BRIDGE_IN + USHRT_MAX, |
| 362 | }; | 362 | }; |
| 363 | 363 | ||
| 364 | struct ip6_create_arg { | 364 | struct ip6_create_arg { |
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 5be900d19660..e24b0363e6cb 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
| @@ -831,7 +831,6 @@ struct ieee80211_key_conf { | |||
| 831 | u8 iv_len; | 831 | u8 iv_len; |
| 832 | u8 hw_key_idx; | 832 | u8 hw_key_idx; |
| 833 | u8 flags; | 833 | u8 flags; |
| 834 | u8 *ap_addr; | ||
| 835 | s8 keyidx; | 834 | s8 keyidx; |
| 836 | u8 keylen; | 835 | u8 keylen; |
| 837 | u8 key[0]; | 836 | u8 key[0]; |
diff --git a/include/trace/events/kvm.h b/include/trace/events/kvm.h index b17d49dfc3ef..6dd3a51ab1cb 100644 --- a/include/trace/events/kvm.h +++ b/include/trace/events/kvm.h | |||
| @@ -5,7 +5,6 @@ | |||
| 5 | 5 | ||
| 6 | #undef TRACE_SYSTEM | 6 | #undef TRACE_SYSTEM |
| 7 | #define TRACE_SYSTEM kvm | 7 | #define TRACE_SYSTEM kvm |
| 8 | #define TRACE_INCLUDE_FILE kvm | ||
| 9 | 8 | ||
| 10 | #if defined(__KVM_HAVE_IOAPIC) | 9 | #if defined(__KVM_HAVE_IOAPIC) |
| 11 | TRACE_EVENT(kvm_set_irq, | 10 | TRACE_EVENT(kvm_set_irq, |
diff --git a/include/video/da8xx-fb.h b/include/video/da8xx-fb.h index 89d43b3d4cb9..6316cdabf73f 100644 --- a/include/video/da8xx-fb.h +++ b/include/video/da8xx-fb.h | |||
| @@ -99,6 +99,7 @@ struct lcd_sync_arg { | |||
| 99 | #define FBIPUT_COLOR _IOW('F', 6, int) | 99 | #define FBIPUT_COLOR _IOW('F', 6, int) |
| 100 | #define FBIPUT_HSYNC _IOW('F', 9, int) | 100 | #define FBIPUT_HSYNC _IOW('F', 9, int) |
| 101 | #define FBIPUT_VSYNC _IOW('F', 10, int) | 101 | #define FBIPUT_VSYNC _IOW('F', 10, int) |
| 102 | #define FBIO_WAITFORVSYNC _IOW('F', 0x20, u_int32_t) | ||
| 102 | 103 | ||
| 103 | #endif /* ifndef DA8XX_FB_H */ | 104 | #endif /* ifndef DA8XX_FB_H */ |
| 104 | 105 | ||
diff --git a/include/video/sh_mobile_lcdc.h b/include/video/sh_mobile_lcdc.h index 2cc893fc1f85..288205457713 100644 --- a/include/video/sh_mobile_lcdc.h +++ b/include/video/sh_mobile_lcdc.h | |||
| @@ -34,8 +34,6 @@ enum { LCDC_CLK_BUS, LCDC_CLK_PERIPHERAL, LCDC_CLK_EXTERNAL }; | |||
| 34 | #define LCDC_FLAGS_HSCNT (1 << 3) /* Disable HSYNC during VBLANK */ | 34 | #define LCDC_FLAGS_HSCNT (1 << 3) /* Disable HSYNC during VBLANK */ |
| 35 | #define LCDC_FLAGS_DWCNT (1 << 4) /* Disable dotclock during blanking */ | 35 | #define LCDC_FLAGS_DWCNT (1 << 4) /* Disable dotclock during blanking */ |
| 36 | 36 | ||
| 37 | #define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32) | ||
| 38 | |||
| 39 | struct sh_mobile_lcdc_sys_bus_cfg { | 37 | struct sh_mobile_lcdc_sys_bus_cfg { |
| 40 | unsigned long ldmt2r; | 38 | unsigned long ldmt2r; |
| 41 | unsigned long ldmt3r; | 39 | unsigned long ldmt3r; |
