Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
Pull s390 fixes from Martin Schwidefsky: "Four bug fixes" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: s390/dasd: fix wrongly assigned configuration data s390: fix preemption race in disable_sacf_uaccess s390/sclp: disable FORTIFY_SOURCE for early sclp code s390/pci: handle insufficient resources during dma tlb flush
This commit is contained in:
commit
3eac690383
@ -89,11 +89,11 @@ EXPORT_SYMBOL(enable_sacf_uaccess);
|
|||||||
|
|
||||||
void disable_sacf_uaccess(mm_segment_t old_fs)
|
void disable_sacf_uaccess(mm_segment_t old_fs)
|
||||||
{
|
{
|
||||||
|
current->thread.mm_segment = old_fs;
|
||||||
if (old_fs == USER_DS && test_facility(27)) {
|
if (old_fs == USER_DS && test_facility(27)) {
|
||||||
__ctl_load(S390_lowcore.user_asce, 1, 1);
|
__ctl_load(S390_lowcore.user_asce, 1, 1);
|
||||||
clear_cpu_flag(CIF_ASCE_PRIMARY);
|
clear_cpu_flag(CIF_ASCE_PRIMARY);
|
||||||
}
|
}
|
||||||
current->thread.mm_segment = old_fs;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(disable_sacf_uaccess);
|
EXPORT_SYMBOL(disable_sacf_uaccess);
|
||||||
|
|
||||||
|
@ -181,6 +181,9 @@ out_unlock:
|
|||||||
static int __dma_purge_tlb(struct zpci_dev *zdev, dma_addr_t dma_addr,
|
static int __dma_purge_tlb(struct zpci_dev *zdev, dma_addr_t dma_addr,
|
||||||
size_t size, int flags)
|
size_t size, int flags)
|
||||||
{
|
{
|
||||||
|
unsigned long irqflags;
|
||||||
|
int ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* With zdev->tlb_refresh == 0, rpcit is not required to establish new
|
* With zdev->tlb_refresh == 0, rpcit is not required to establish new
|
||||||
* translations when previously invalid translation-table entries are
|
* translations when previously invalid translation-table entries are
|
||||||
@ -196,8 +199,22 @@ static int __dma_purge_tlb(struct zpci_dev *zdev, dma_addr_t dma_addr,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return zpci_refresh_trans((u64) zdev->fh << 32, dma_addr,
|
ret = zpci_refresh_trans((u64) zdev->fh << 32, dma_addr,
|
||||||
PAGE_ALIGN(size));
|
PAGE_ALIGN(size));
|
||||||
|
if (ret == -ENOMEM && !s390_iommu_strict) {
|
||||||
|
/* enable the hypervisor to free some resources */
|
||||||
|
if (zpci_refresh_global(zdev))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&zdev->iommu_bitmap_lock, irqflags);
|
||||||
|
bitmap_andnot(zdev->iommu_bitmap, zdev->iommu_bitmap,
|
||||||
|
zdev->lazy_bitmap, zdev->iommu_pages);
|
||||||
|
bitmap_zero(zdev->lazy_bitmap, zdev->iommu_pages);
|
||||||
|
spin_unlock_irqrestore(&zdev->iommu_bitmap_lock, irqflags);
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
out:
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dma_update_trans(struct zpci_dev *zdev, unsigned long pa,
|
static int dma_update_trans(struct zpci_dev *zdev, unsigned long pa,
|
||||||
|
@ -89,6 +89,9 @@ int zpci_refresh_trans(u64 fn, u64 addr, u64 range)
|
|||||||
if (cc)
|
if (cc)
|
||||||
zpci_err_insn(cc, status, addr, range);
|
zpci_err_insn(cc, status, addr, range);
|
||||||
|
|
||||||
|
if (cc == 1 && (status == 4 || status == 16))
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
return (cc) ? -EIO : 0;
|
return (cc) ? -EIO : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2803,6 +2803,16 @@ dasd_3990_erp_action(struct dasd_ccw_req * cqr)
|
|||||||
erp = dasd_3990_erp_handle_match_erp(cqr, erp);
|
erp = dasd_3990_erp_handle_match_erp(cqr, erp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For path verification work we need to stick with the path that was
|
||||||
|
* originally chosen so that the per path configuration data is
|
||||||
|
* assigned correctly.
|
||||||
|
*/
|
||||||
|
if (test_bit(DASD_CQR_VERIFY_PATH, &erp->flags) && cqr->lpm) {
|
||||||
|
erp->lpm = cqr->lpm;
|
||||||
|
}
|
||||||
|
|
||||||
if (device->features & DASD_FEATURE_ERPLOG) {
|
if (device->features & DASD_FEATURE_ERPLOG) {
|
||||||
/* print current erp_chain */
|
/* print current erp_chain */
|
||||||
dev_err(&device->cdev->dev,
|
dev_err(&device->cdev->dev,
|
||||||
|
@ -17,6 +17,8 @@ CFLAGS_REMOVE_sclp_early_core.o += $(CC_FLAGS_MARCH)
|
|||||||
CFLAGS_sclp_early_core.o += -march=z900
|
CFLAGS_sclp_early_core.o += -march=z900
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
CFLAGS_sclp_early_core.o += -D__NO_FORTIFY
|
||||||
|
|
||||||
obj-y += ctrlchar.o keyboard.o defkeymap.o sclp.o sclp_rw.o sclp_quiesce.o \
|
obj-y += ctrlchar.o keyboard.o defkeymap.o sclp.o sclp_rw.o sclp_quiesce.o \
|
||||||
sclp_cmd.o sclp_config.o sclp_cpi_sys.o sclp_ocf.o sclp_ctl.o \
|
sclp_cmd.o sclp_config.o sclp_cpi_sys.o sclp_ocf.o sclp_ctl.o \
|
||||||
sclp_early.o sclp_early_core.o
|
sclp_early.o sclp_early_core.o
|
||||||
|
Loading…
Reference in New Issue
Block a user