Commit 95d0c427 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux

Pull s390 fixes from Martin Schwidefsky:
 "A couple of bug fixes"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
  s390: add CPU_BIG_ENDIAN config option
  s390/spinlock: avoid yield to non existent cpu
  s390/dcssblk: fix possible deadlock in remove vs. per-device attributes
  s390/seccomp: include generic seccomp header file
  s390/pci: add extra padding to function measurement block
  s390/scm_blk: fix deadlock for requests != REQ_TYPE_FS
parents c3b46c73 2fd92273
...@@ -4,6 +4,9 @@ config MMU ...@@ -4,6 +4,9 @@ config MMU
config ZONE_DMA config ZONE_DMA
def_bool y def_bool y
config CPU_BIG_ENDIAN
def_bool y
config LOCKDEP_SUPPORT config LOCKDEP_SUPPORT
def_bool y def_bool y
......
...@@ -44,7 +44,8 @@ struct zpci_fmb { ...@@ -44,7 +44,8 @@ struct zpci_fmb {
u64 rpcit_ops; u64 rpcit_ops;
u64 dma_rbytes; u64 dma_rbytes;
u64 dma_wbytes; u64 dma_wbytes;
} __packed __aligned(64); u64 pad[2];
} __packed __aligned(128);
enum zpci_state { enum zpci_state {
ZPCI_FN_STATE_RESERVED, ZPCI_FN_STATE_RESERVED,
......
...@@ -13,4 +13,6 @@ ...@@ -13,4 +13,6 @@
#define __NR_seccomp_exit_32 __NR_exit #define __NR_seccomp_exit_32 __NR_exit
#define __NR_seccomp_sigreturn_32 __NR_sigreturn #define __NR_seccomp_sigreturn_32 __NR_sigreturn
#include <asm-generic/seccomp.h>
#endif /* _ASM_S390_SECCOMP_H */ #endif /* _ASM_S390_SECCOMP_H */
...@@ -105,6 +105,7 @@ void arch_spin_lock_wait_flags(arch_spinlock_t *lp, unsigned long flags) ...@@ -105,6 +105,7 @@ void arch_spin_lock_wait_flags(arch_spinlock_t *lp, unsigned long flags)
if (_raw_compare_and_swap(&lp->lock, 0, cpu)) if (_raw_compare_and_swap(&lp->lock, 0, cpu))
return; return;
local_irq_restore(flags); local_irq_restore(flags);
continue;
} }
/* Check if the lock owner is running. */ /* Check if the lock owner is running. */
if (first_diag && cpu_is_preempted(~owner)) { if (first_diag && cpu_is_preempted(~owner)) {
......
...@@ -756,15 +756,16 @@ dcssblk_remove_store(struct device *dev, struct device_attribute *attr, const ch ...@@ -756,15 +756,16 @@ dcssblk_remove_store(struct device *dev, struct device_attribute *attr, const ch
blk_cleanup_queue(dev_info->dcssblk_queue); blk_cleanup_queue(dev_info->dcssblk_queue);
dev_info->gd->queue = NULL; dev_info->gd->queue = NULL;
put_disk(dev_info->gd); put_disk(dev_info->gd);
device_unregister(&dev_info->dev);
/* unload all related segments */ /* unload all related segments */
list_for_each_entry(entry, &dev_info->seg_list, lh) list_for_each_entry(entry, &dev_info->seg_list, lh)
segment_unload(entry->segment_name); segment_unload(entry->segment_name);
put_device(&dev_info->dev);
up_write(&dcssblk_devices_sem); up_write(&dcssblk_devices_sem);
device_unregister(&dev_info->dev);
put_device(&dev_info->dev);
rc = count; rc = count;
out_buf: out_buf:
kfree(local_buf); kfree(local_buf);
......
...@@ -303,7 +303,7 @@ static void scm_blk_request(struct request_queue *rq) ...@@ -303,7 +303,7 @@ static void scm_blk_request(struct request_queue *rq)
if (req->cmd_type != REQ_TYPE_FS) { if (req->cmd_type != REQ_TYPE_FS) {
blk_start_request(req); blk_start_request(req);
blk_dump_rq_flags(req, KMSG_COMPONENT " bad request"); blk_dump_rq_flags(req, KMSG_COMPONENT " bad request");
blk_end_request_all(req, -EIO); __blk_end_request_all(req, -EIO);
continue; continue;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment