mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
Merge 27cf74b92e ("arm64: dts: rockchip: increase gmac rx_delay on rk3399-puma") into android14-6.1-lts
Steps on the way to 6.1.129 Change-Id: Id70934e90d88f1d202b708f3ad520dce2a0288eb Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -147,7 +147,7 @@
|
||||
snps,reset-active-low;
|
||||
snps,reset-delays-us = <0 10000 50000>;
|
||||
tx_delay = <0x10>;
|
||||
rx_delay = <0x10>;
|
||||
rx_delay = <0x23>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
*/
|
||||
#ifndef CONFIG_PCI
|
||||
|
||||
#include <asm/raw_io.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/kmap.h>
|
||||
|
||||
/*
|
||||
@@ -29,9 +29,9 @@
|
||||
#define inw_p(port) 0
|
||||
#define outb_p(port, val) do { } while (0)
|
||||
#define outw(port, val) do { } while (0)
|
||||
#define readb raw_inb
|
||||
#define writeb raw_outb
|
||||
#define writew raw_outw
|
||||
#define readb __raw_readb
|
||||
#define writeb __raw_writeb
|
||||
#define writew __raw_writew
|
||||
|
||||
#endif /* CONFIG_PCI */
|
||||
#endif /* _ASM_M68K_VGA_H */
|
||||
|
||||
@@ -242,7 +242,7 @@ static inline int tlbe_is_writable(struct kvm_book3e_206_tlb_entry *tlbe)
|
||||
return tlbe->mas7_3 & (MAS3_SW|MAS3_UW);
|
||||
}
|
||||
|
||||
static inline void kvmppc_e500_ref_setup(struct tlbe_ref *ref,
|
||||
static inline bool kvmppc_e500_ref_setup(struct tlbe_ref *ref,
|
||||
struct kvm_book3e_206_tlb_entry *gtlbe,
|
||||
kvm_pfn_t pfn, unsigned int wimg)
|
||||
{
|
||||
@@ -252,11 +252,7 @@ static inline void kvmppc_e500_ref_setup(struct tlbe_ref *ref,
|
||||
/* Use guest supplied MAS2_G and MAS2_E */
|
||||
ref->flags |= (gtlbe->mas2 & MAS2_ATTRIB_MASK) | wimg;
|
||||
|
||||
/* Mark the page accessed */
|
||||
kvm_set_pfn_accessed(pfn);
|
||||
|
||||
if (tlbe_is_writable(gtlbe))
|
||||
kvm_set_pfn_dirty(pfn);
|
||||
return tlbe_is_writable(gtlbe);
|
||||
}
|
||||
|
||||
static inline void kvmppc_e500_ref_release(struct tlbe_ref *ref)
|
||||
@@ -326,6 +322,7 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
|
||||
{
|
||||
struct kvm_memory_slot *slot;
|
||||
unsigned long pfn = 0; /* silence GCC warning */
|
||||
struct page *page = NULL;
|
||||
unsigned long hva;
|
||||
int pfnmap = 0;
|
||||
int tsize = BOOK3E_PAGESZ_4K;
|
||||
@@ -337,6 +334,7 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
|
||||
unsigned int wimg = 0;
|
||||
pgd_t *pgdir;
|
||||
unsigned long flags;
|
||||
bool writable = false;
|
||||
|
||||
/* used to check for invalidations in progress */
|
||||
mmu_seq = kvm->mmu_invalidate_seq;
|
||||
@@ -446,7 +444,7 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
|
||||
|
||||
if (likely(!pfnmap)) {
|
||||
tsize_pages = 1UL << (tsize + 10 - PAGE_SHIFT);
|
||||
pfn = gfn_to_pfn_memslot(slot, gfn);
|
||||
pfn = __kvm_faultin_pfn(slot, gfn, FOLL_WRITE, NULL, &page);
|
||||
if (is_error_noslot_pfn(pfn)) {
|
||||
if (printk_ratelimit())
|
||||
pr_err("%s: real page not found for gfn %lx\n",
|
||||
@@ -481,7 +479,6 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
|
||||
if (pte_present(pte)) {
|
||||
wimg = (pte_val(pte) >> PTE_WIMGE_SHIFT) &
|
||||
MAS2_WIMGE_MASK;
|
||||
local_irq_restore(flags);
|
||||
} else {
|
||||
local_irq_restore(flags);
|
||||
pr_err_ratelimited("%s: pte not present: gfn %lx,pfn %lx\n",
|
||||
@@ -490,8 +487,9 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
kvmppc_e500_ref_setup(ref, gtlbe, pfn, wimg);
|
||||
local_irq_restore(flags);
|
||||
|
||||
writable = kvmppc_e500_ref_setup(ref, gtlbe, pfn, wimg);
|
||||
kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize,
|
||||
ref, gvaddr, stlbe);
|
||||
|
||||
@@ -499,11 +497,8 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
|
||||
kvmppc_mmu_flush_icache(pfn);
|
||||
|
||||
out:
|
||||
kvm_release_faultin_page(kvm, page, !!ret, writable);
|
||||
spin_unlock(&kvm->mmu_lock);
|
||||
|
||||
/* Drop refcount on page, so that mmu notifiers can clear it */
|
||||
kvm_release_pfn_clean(pfn);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ static inline int arch_futex_atomic_op_inuser(int op, int oparg, int *oval,
|
||||
break;
|
||||
case FUTEX_OP_ANDN:
|
||||
__futex_atomic_op("lr %2,%1\nnr %2,%5\n",
|
||||
ret, oldval, newval, uaddr, oparg);
|
||||
ret, oldval, newval, uaddr, ~oparg);
|
||||
break;
|
||||
case FUTEX_OP_XOR:
|
||||
__futex_atomic_op("lr %2,%1\nxr %2,%5\n",
|
||||
|
||||
@@ -110,8 +110,8 @@ SYM_FUNC_START(xen_hypercall_hvm)
|
||||
pop %ebx
|
||||
pop %eax
|
||||
#else
|
||||
lea xen_hypercall_amd(%rip), %rbx
|
||||
cmp %rax, %rbx
|
||||
lea xen_hypercall_amd(%rip), %rcx
|
||||
cmp %rax, %rcx
|
||||
#ifdef CONFIG_FRAME_POINTER
|
||||
pop %rax /* Dummy pop. */
|
||||
#endif
|
||||
@@ -125,6 +125,7 @@ SYM_FUNC_START(xen_hypercall_hvm)
|
||||
pop %rcx
|
||||
pop %rax
|
||||
#endif
|
||||
FRAME_END
|
||||
/* Use correct hypercall function. */
|
||||
jz xen_hypercall_amd
|
||||
jmp xen_hypercall_intel
|
||||
|
||||
@@ -1128,8 +1128,6 @@ static int acpi_data_prop_read(const struct acpi_device_data *data,
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (nval == 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (obj->type == ACPI_TYPE_BUFFER) {
|
||||
if (proptype != DEV_PROP_U8)
|
||||
@@ -1153,9 +1151,11 @@ static int acpi_data_prop_read(const struct acpi_device_data *data,
|
||||
ret = acpi_copy_property_array_uint(items, (u64 *)val, nval);
|
||||
break;
|
||||
case DEV_PROP_STRING:
|
||||
ret = acpi_copy_property_array_string(
|
||||
items, (char **)val,
|
||||
min_t(u32, nval, obj->package.count));
|
||||
nval = min_t(u32, nval, obj->package.count);
|
||||
if (nval == 0)
|
||||
return -ENODATA;
|
||||
|
||||
ret = acpi_copy_property_array_string(items, (char **)val, nval);
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
|
||||
@@ -24,6 +24,7 @@ struct s3c64xx_dvfs {
|
||||
unsigned int vddarm_max;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_REGULATOR
|
||||
static struct s3c64xx_dvfs s3c64xx_dvfs_table[] = {
|
||||
[0] = { 1000000, 1150000 },
|
||||
[1] = { 1050000, 1150000 },
|
||||
@@ -31,6 +32,7 @@ static struct s3c64xx_dvfs s3c64xx_dvfs_table[] = {
|
||||
[3] = { 1200000, 1350000 },
|
||||
[4] = { 1300000, 1350000 },
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct cpufreq_frequency_table s3c64xx_freq_table[] = {
|
||||
{ 0, 0, 66000 },
|
||||
@@ -51,15 +53,16 @@ static struct cpufreq_frequency_table s3c64xx_freq_table[] = {
|
||||
static int s3c64xx_cpufreq_set_target(struct cpufreq_policy *policy,
|
||||
unsigned int index)
|
||||
{
|
||||
struct s3c64xx_dvfs *dvfs;
|
||||
unsigned int old_freq, new_freq;
|
||||
unsigned int new_freq = s3c64xx_freq_table[index].frequency;
|
||||
int ret;
|
||||
|
||||
#ifdef CONFIG_REGULATOR
|
||||
struct s3c64xx_dvfs *dvfs;
|
||||
unsigned int old_freq;
|
||||
|
||||
old_freq = clk_get_rate(policy->clk) / 1000;
|
||||
new_freq = s3c64xx_freq_table[index].frequency;
|
||||
dvfs = &s3c64xx_dvfs_table[s3c64xx_freq_table[index].driver_data];
|
||||
|
||||
#ifdef CONFIG_REGULATOR
|
||||
if (vddarm && new_freq > old_freq) {
|
||||
ret = regulator_set_voltage(vddarm,
|
||||
dvfs->vddarm_min,
|
||||
|
||||
@@ -139,7 +139,7 @@ config ISCSI_IBFT
|
||||
select ISCSI_BOOT_SYSFS
|
||||
select ISCSI_IBFT_FIND if X86
|
||||
depends on ACPI && SCSI && SCSI_LOWLEVEL
|
||||
default n
|
||||
default n
|
||||
help
|
||||
This option enables support for detection and exposing of iSCSI
|
||||
Boot Firmware Table (iBFT) via sysfs to userspace. If you wish to
|
||||
|
||||
@@ -851,25 +851,6 @@ static bool pca953x_irq_pending(struct pca953x_chip *chip, unsigned long *pendin
|
||||
DECLARE_BITMAP(trigger, MAX_LINE);
|
||||
int ret;
|
||||
|
||||
if (chip->driver_data & PCA_PCAL) {
|
||||
/* Read the current interrupt status from the device */
|
||||
ret = pca953x_read_regs(chip, PCAL953X_INT_STAT, trigger);
|
||||
if (ret)
|
||||
return false;
|
||||
|
||||
/* Check latched inputs and clear interrupt status */
|
||||
ret = pca953x_read_regs(chip, chip->regs->input, cur_stat);
|
||||
if (ret)
|
||||
return false;
|
||||
|
||||
/* Apply filter for rising/falling edge selection */
|
||||
bitmap_replace(new_stat, chip->irq_trig_fall, chip->irq_trig_raise, cur_stat, gc->ngpio);
|
||||
|
||||
bitmap_and(pending, new_stat, trigger, gc->ngpio);
|
||||
|
||||
return !bitmap_empty(pending, gc->ngpio);
|
||||
}
|
||||
|
||||
ret = pca953x_read_regs(chip, chip->regs->input, cur_stat);
|
||||
if (ret)
|
||||
return false;
|
||||
|
||||
@@ -66,9 +66,8 @@ struct xgpio_instance {
|
||||
DECLARE_BITMAP(state, 64);
|
||||
DECLARE_BITMAP(last_irq_read, 64);
|
||||
DECLARE_BITMAP(dir, 64);
|
||||
spinlock_t gpio_lock; /* For serializing operations */
|
||||
raw_spinlock_t gpio_lock; /* For serializing operations */
|
||||
int irq;
|
||||
struct irq_chip irqchip;
|
||||
DECLARE_BITMAP(enable, 64);
|
||||
DECLARE_BITMAP(rising_edge, 64);
|
||||
DECLARE_BITMAP(falling_edge, 64);
|
||||
@@ -181,14 +180,14 @@ static void xgpio_set(struct gpio_chip *gc, unsigned int gpio, int val)
|
||||
struct xgpio_instance *chip = gpiochip_get_data(gc);
|
||||
int bit = xgpio_to_bit(chip, gpio);
|
||||
|
||||
spin_lock_irqsave(&chip->gpio_lock, flags);
|
||||
raw_spin_lock_irqsave(&chip->gpio_lock, flags);
|
||||
|
||||
/* Write to GPIO signal and set its direction to output */
|
||||
__assign_bit(bit, chip->state, val);
|
||||
|
||||
xgpio_write_ch(chip, XGPIO_DATA_OFFSET, bit, chip->state);
|
||||
|
||||
spin_unlock_irqrestore(&chip->gpio_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&chip->gpio_lock, flags);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -212,7 +211,7 @@ static void xgpio_set_multiple(struct gpio_chip *gc, unsigned long *mask,
|
||||
bitmap_remap(hw_mask, mask, chip->sw_map, chip->hw_map, 64);
|
||||
bitmap_remap(hw_bits, bits, chip->sw_map, chip->hw_map, 64);
|
||||
|
||||
spin_lock_irqsave(&chip->gpio_lock, flags);
|
||||
raw_spin_lock_irqsave(&chip->gpio_lock, flags);
|
||||
|
||||
bitmap_replace(state, chip->state, hw_bits, hw_mask, 64);
|
||||
|
||||
@@ -220,7 +219,7 @@ static void xgpio_set_multiple(struct gpio_chip *gc, unsigned long *mask,
|
||||
|
||||
bitmap_copy(chip->state, state, 64);
|
||||
|
||||
spin_unlock_irqrestore(&chip->gpio_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&chip->gpio_lock, flags);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -238,13 +237,13 @@ static int xgpio_dir_in(struct gpio_chip *gc, unsigned int gpio)
|
||||
struct xgpio_instance *chip = gpiochip_get_data(gc);
|
||||
int bit = xgpio_to_bit(chip, gpio);
|
||||
|
||||
spin_lock_irqsave(&chip->gpio_lock, flags);
|
||||
raw_spin_lock_irqsave(&chip->gpio_lock, flags);
|
||||
|
||||
/* Set the GPIO bit in shadow register and set direction as input */
|
||||
__set_bit(bit, chip->dir);
|
||||
xgpio_write_ch(chip, XGPIO_TRI_OFFSET, bit, chip->dir);
|
||||
|
||||
spin_unlock_irqrestore(&chip->gpio_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&chip->gpio_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -267,7 +266,7 @@ static int xgpio_dir_out(struct gpio_chip *gc, unsigned int gpio, int val)
|
||||
struct xgpio_instance *chip = gpiochip_get_data(gc);
|
||||
int bit = xgpio_to_bit(chip, gpio);
|
||||
|
||||
spin_lock_irqsave(&chip->gpio_lock, flags);
|
||||
raw_spin_lock_irqsave(&chip->gpio_lock, flags);
|
||||
|
||||
/* Write state of GPIO signal */
|
||||
__assign_bit(bit, chip->state, val);
|
||||
@@ -277,7 +276,7 @@ static int xgpio_dir_out(struct gpio_chip *gc, unsigned int gpio, int val)
|
||||
__clear_bit(bit, chip->dir);
|
||||
xgpio_write_ch(chip, XGPIO_TRI_OFFSET, bit, chip->dir);
|
||||
|
||||
spin_unlock_irqrestore(&chip->gpio_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&chip->gpio_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -405,7 +404,7 @@ static void xgpio_irq_mask(struct irq_data *irq_data)
|
||||
int bit = xgpio_to_bit(chip, irq_offset);
|
||||
u32 mask = BIT(bit / 32), temp;
|
||||
|
||||
spin_lock_irqsave(&chip->gpio_lock, flags);
|
||||
raw_spin_lock_irqsave(&chip->gpio_lock, flags);
|
||||
|
||||
__clear_bit(bit, chip->enable);
|
||||
|
||||
@@ -415,7 +414,9 @@ static void xgpio_irq_mask(struct irq_data *irq_data)
|
||||
temp &= ~mask;
|
||||
xgpio_writereg(chip->regs + XGPIO_IPIER_OFFSET, temp);
|
||||
}
|
||||
spin_unlock_irqrestore(&chip->gpio_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&chip->gpio_lock, flags);
|
||||
|
||||
gpiochip_disable_irq(&chip->gc, irq_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -431,7 +432,9 @@ static void xgpio_irq_unmask(struct irq_data *irq_data)
|
||||
u32 old_enable = xgpio_get_value32(chip->enable, bit);
|
||||
u32 mask = BIT(bit / 32), val;
|
||||
|
||||
spin_lock_irqsave(&chip->gpio_lock, flags);
|
||||
gpiochip_enable_irq(&chip->gc, irq_offset);
|
||||
|
||||
raw_spin_lock_irqsave(&chip->gpio_lock, flags);
|
||||
|
||||
__set_bit(bit, chip->enable);
|
||||
|
||||
@@ -450,7 +453,7 @@ static void xgpio_irq_unmask(struct irq_data *irq_data)
|
||||
xgpio_writereg(chip->regs + XGPIO_IPIER_OFFSET, val);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&chip->gpio_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&chip->gpio_lock, flags);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -515,7 +518,7 @@ static void xgpio_irqhandler(struct irq_desc *desc)
|
||||
|
||||
chained_irq_enter(irqchip, desc);
|
||||
|
||||
spin_lock(&chip->gpio_lock);
|
||||
raw_spin_lock(&chip->gpio_lock);
|
||||
|
||||
xgpio_read_ch_all(chip, XGPIO_DATA_OFFSET, all);
|
||||
|
||||
@@ -532,7 +535,7 @@ static void xgpio_irqhandler(struct irq_desc *desc)
|
||||
bitmap_copy(chip->last_irq_read, all, 64);
|
||||
bitmap_or(all, rising, falling, 64);
|
||||
|
||||
spin_unlock(&chip->gpio_lock);
|
||||
raw_spin_unlock(&chip->gpio_lock);
|
||||
|
||||
dev_dbg(gc->parent, "IRQ rising %*pb falling %*pb\n", 64, rising, 64, falling);
|
||||
|
||||
@@ -544,6 +547,16 @@ static void xgpio_irqhandler(struct irq_desc *desc)
|
||||
chained_irq_exit(irqchip, desc);
|
||||
}
|
||||
|
||||
static const struct irq_chip xgpio_irq_chip = {
|
||||
.name = "gpio-xilinx",
|
||||
.irq_ack = xgpio_irq_ack,
|
||||
.irq_mask = xgpio_irq_mask,
|
||||
.irq_unmask = xgpio_irq_unmask,
|
||||
.irq_set_type = xgpio_set_irq_type,
|
||||
.flags = IRQCHIP_IMMUTABLE,
|
||||
GPIOCHIP_IRQ_RESOURCE_HELPERS,
|
||||
};
|
||||
|
||||
/**
|
||||
* xgpio_probe - Probe method for the GPIO device.
|
||||
* @pdev: pointer to the platform device
|
||||
@@ -623,7 +636,7 @@ static int xgpio_probe(struct platform_device *pdev)
|
||||
bitmap_set(chip->hw_map, 0, width[0]);
|
||||
bitmap_set(chip->hw_map, 32, width[1]);
|
||||
|
||||
spin_lock_init(&chip->gpio_lock);
|
||||
raw_spin_lock_init(&chip->gpio_lock);
|
||||
|
||||
chip->gc.base = -1;
|
||||
chip->gc.ngpio = bitmap_weight(chip->hw_map, 64);
|
||||
@@ -664,12 +677,6 @@ static int xgpio_probe(struct platform_device *pdev)
|
||||
if (chip->irq <= 0)
|
||||
goto skip_irq;
|
||||
|
||||
chip->irqchip.name = "gpio-xilinx";
|
||||
chip->irqchip.irq_ack = xgpio_irq_ack;
|
||||
chip->irqchip.irq_mask = xgpio_irq_mask;
|
||||
chip->irqchip.irq_unmask = xgpio_irq_unmask;
|
||||
chip->irqchip.irq_set_type = xgpio_set_irq_type;
|
||||
|
||||
/* Disable per-channel interrupts */
|
||||
xgpio_writereg(chip->regs + XGPIO_IPIER_OFFSET, 0);
|
||||
/* Clear any existing per-channel interrupts */
|
||||
@@ -679,7 +686,7 @@ static int xgpio_probe(struct platform_device *pdev)
|
||||
xgpio_writereg(chip->regs + XGPIO_GIER_OFFSET, XGPIO_GIER_IE);
|
||||
|
||||
girq = &chip->gc.irq;
|
||||
girq->chip = &chip->irqchip;
|
||||
gpio_irq_chip_set_chip(girq, &xgpio_irq_chip);
|
||||
girq->parent_handler = xgpio_irqhandler;
|
||||
girq->num_parents = 1;
|
||||
girq->parents = devm_kcalloc(&pdev->dev, 1,
|
||||
|
||||
@@ -310,16 +310,6 @@ void drm_dp_cec_set_edid(struct drm_dp_aux *aux, const struct edid *edid)
|
||||
if (!aux->transfer)
|
||||
return;
|
||||
|
||||
#ifndef CONFIG_MEDIA_CEC_RC
|
||||
/*
|
||||
* CEC_CAP_RC is part of CEC_CAP_DEFAULTS, but it is stripped by
|
||||
* cec_allocate_adapter() if CONFIG_MEDIA_CEC_RC is undefined.
|
||||
*
|
||||
* Do this here as well to ensure the tests against cec_caps are
|
||||
* correct.
|
||||
*/
|
||||
cec_caps &= ~CEC_CAP_RC;
|
||||
#endif
|
||||
cancel_delayed_work_sync(&aux->cec.unregister_work);
|
||||
|
||||
mutex_lock(&aux->cec.lock);
|
||||
@@ -336,7 +326,9 @@ void drm_dp_cec_set_edid(struct drm_dp_aux *aux, const struct edid *edid)
|
||||
num_las = CEC_MAX_LOG_ADDRS;
|
||||
|
||||
if (aux->cec.adap) {
|
||||
if (aux->cec.adap->capabilities == cec_caps &&
|
||||
/* Check if the adapter properties have changed */
|
||||
if ((aux->cec.adap->capabilities & CEC_CAP_MONITOR_ALL) ==
|
||||
(cec_caps & CEC_CAP_MONITOR_ALL) &&
|
||||
aux->cec.adap->available_log_addrs == num_las) {
|
||||
/* Unchanged, so just set the phys addr */
|
||||
cec_s_phys_addr_from_edid(aux->cec.adap, edid);
|
||||
|
||||
@@ -1495,14 +1495,14 @@ int drm_fb_helper_set_par(struct fb_info *info)
|
||||
}
|
||||
EXPORT_SYMBOL(drm_fb_helper_set_par);
|
||||
|
||||
static void pan_set(struct drm_fb_helper *fb_helper, int x, int y)
|
||||
static void pan_set(struct drm_fb_helper *fb_helper, int dx, int dy)
|
||||
{
|
||||
struct drm_mode_set *mode_set;
|
||||
|
||||
mutex_lock(&fb_helper->client.modeset_mutex);
|
||||
drm_client_for_each_modeset(mode_set, &fb_helper->client) {
|
||||
mode_set->x = x;
|
||||
mode_set->y = y;
|
||||
mode_set->x += dx;
|
||||
mode_set->y += dy;
|
||||
}
|
||||
mutex_unlock(&fb_helper->client.modeset_mutex);
|
||||
}
|
||||
@@ -1511,16 +1511,18 @@ static int pan_display_atomic(struct fb_var_screeninfo *var,
|
||||
struct fb_info *info)
|
||||
{
|
||||
struct drm_fb_helper *fb_helper = info->par;
|
||||
int ret;
|
||||
int ret, dx, dy;
|
||||
|
||||
pan_set(fb_helper, var->xoffset, var->yoffset);
|
||||
dx = var->xoffset - info->var.xoffset;
|
||||
dy = var->yoffset - info->var.yoffset;
|
||||
pan_set(fb_helper, dx, dy);
|
||||
|
||||
ret = drm_client_modeset_commit_locked(&fb_helper->client);
|
||||
if (!ret) {
|
||||
info->var.xoffset = var->xoffset;
|
||||
info->var.yoffset = var->yoffset;
|
||||
} else
|
||||
pan_set(fb_helper, info->var.xoffset, info->var.yoffset);
|
||||
pan_set(fb_helper, -dx, -dy);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -948,9 +948,6 @@ static void cdn_dp_pd_event_work(struct work_struct *work)
|
||||
{
|
||||
struct cdn_dp_device *dp = container_of(work, struct cdn_dp_device,
|
||||
event_work);
|
||||
struct drm_connector *connector = &dp->connector;
|
||||
enum drm_connector_status old_status;
|
||||
|
||||
int ret;
|
||||
|
||||
mutex_lock(&dp->lock);
|
||||
@@ -1012,11 +1009,7 @@ static void cdn_dp_pd_event_work(struct work_struct *work)
|
||||
|
||||
out:
|
||||
mutex_unlock(&dp->lock);
|
||||
|
||||
old_status = connector->status;
|
||||
connector->status = connector->funcs->detect(connector, false);
|
||||
if (old_status != connector->status)
|
||||
drm_kms_helper_hotplug_event(dp->drm_dev);
|
||||
drm_connector_helper_hpd_irq_event(&dp->connector);
|
||||
}
|
||||
|
||||
static int cdn_dp_pd_event(struct notifier_block *nb,
|
||||
|
||||
@@ -267,7 +267,7 @@ static int lp8860_init(struct lp8860_led *led)
|
||||
goto out;
|
||||
}
|
||||
|
||||
reg_count = ARRAY_SIZE(lp8860_eeprom_disp_regs) / sizeof(lp8860_eeprom_disp_regs[0]);
|
||||
reg_count = ARRAY_SIZE(lp8860_eeprom_disp_regs);
|
||||
for (i = 0; i < reg_count; i++) {
|
||||
ret = regmap_write(led->eeprom_regmap,
|
||||
lp8860_eeprom_disp_regs[i].reg,
|
||||
|
||||
@@ -1436,7 +1436,9 @@ void aq_nic_deinit(struct aq_nic_s *self, bool link_down)
|
||||
aq_ptp_ring_free(self);
|
||||
aq_ptp_free(self);
|
||||
|
||||
if (likely(self->aq_fw_ops->deinit) && link_down) {
|
||||
/* May be invoked during hot unplug. */
|
||||
if (pci_device_is_present(self->pdev) &&
|
||||
likely(self->aq_fw_ops->deinit) && link_down) {
|
||||
mutex_lock(&self->fwreq_mutex);
|
||||
self->aq_fw_ops->deinit(self->aq_hw);
|
||||
mutex_unlock(&self->fwreq_mutex);
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
#include <linux/hwmon.h>
|
||||
#include <linux/hwmon-sysfs.h>
|
||||
#include <linux/crc32poly.h>
|
||||
#include <linux/dmi.h>
|
||||
|
||||
#include <net/checksum.h>
|
||||
#include <net/ip.h>
|
||||
@@ -18114,6 +18115,50 @@ unlock:
|
||||
|
||||
static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume);
|
||||
|
||||
/* Systems where ACPI _PTS (Prepare To Sleep) S5 will result in a fatal
|
||||
* PCIe AER event on the tg3 device if the tg3 device is not, or cannot
|
||||
* be, powered down.
|
||||
*/
|
||||
static const struct dmi_system_id tg3_restart_aer_quirk_table[] = {
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge R440"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge R540"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge R640"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge R650"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge R740"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge R750"),
|
||||
},
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static void tg3_shutdown(struct pci_dev *pdev)
|
||||
{
|
||||
struct net_device *dev = pci_get_drvdata(pdev);
|
||||
@@ -18130,6 +18175,19 @@ static void tg3_shutdown(struct pci_dev *pdev)
|
||||
|
||||
if (system_state == SYSTEM_POWER_OFF)
|
||||
tg3_power_down(tp);
|
||||
else if (system_state == SYSTEM_RESTART &&
|
||||
dmi_first_match(tg3_restart_aer_quirk_table) &&
|
||||
pdev->current_state != PCI_D3cold &&
|
||||
pdev->current_state != PCI_UNKNOWN) {
|
||||
/* Disable PCIe AER on the tg3 to avoid a fatal
|
||||
* error during this system restart.
|
||||
*/
|
||||
pcie_capability_clear_word(pdev, PCI_EXP_DEVCTL,
|
||||
PCI_EXP_DEVCTL_CERE |
|
||||
PCI_EXP_DEVCTL_NFERE |
|
||||
PCI_EXP_DEVCTL_FERE |
|
||||
PCI_EXP_DEVCTL_URRE);
|
||||
}
|
||||
|
||||
rtnl_unlock();
|
||||
|
||||
|
||||
@@ -574,18 +574,14 @@ static u16 tun_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline bool tun_capable(struct tun_struct *tun)
|
||||
static inline bool tun_not_capable(struct tun_struct *tun)
|
||||
{
|
||||
const struct cred *cred = current_cred();
|
||||
struct net *net = dev_net(tun->dev);
|
||||
|
||||
if (ns_capable(net->user_ns, CAP_NET_ADMIN))
|
||||
return 1;
|
||||
if (uid_valid(tun->owner) && uid_eq(cred->euid, tun->owner))
|
||||
return 1;
|
||||
if (gid_valid(tun->group) && in_egroup_p(tun->group))
|
||||
return 1;
|
||||
return 0;
|
||||
return ((uid_valid(tun->owner) && !uid_eq(cred->euid, tun->owner)) ||
|
||||
(gid_valid(tun->group) && !in_egroup_p(tun->group))) &&
|
||||
!ns_capable(net->user_ns, CAP_NET_ADMIN);
|
||||
}
|
||||
|
||||
static void tun_set_real_num_queues(struct tun_struct *tun)
|
||||
@@ -2771,7 +2767,7 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)
|
||||
!!(tun->flags & IFF_MULTI_QUEUE))
|
||||
return -EINVAL;
|
||||
|
||||
if (!tun_capable(tun))
|
||||
if (tun_not_capable(tun))
|
||||
return -EPERM;
|
||||
err = security_tun_dev_open(tun->security);
|
||||
if (err < 0)
|
||||
|
||||
@@ -1609,7 +1609,13 @@ int nvme_set_queue_count(struct nvme_ctrl *ctrl, int *count)
|
||||
|
||||
status = nvme_set_features(ctrl, NVME_FEAT_NUM_QUEUES, q_count, NULL, 0,
|
||||
&result);
|
||||
if (status < 0)
|
||||
|
||||
/*
|
||||
* It's either a kernel error or the host observed a connection
|
||||
* lost. In either case it's not possible communicate with the
|
||||
* controller and thus enter the error code path.
|
||||
*/
|
||||
if (status < 0 || status == NVME_SC_HOST_PATH_ERROR)
|
||||
return status;
|
||||
|
||||
/*
|
||||
|
||||
@@ -88,6 +88,7 @@ enum acer_wmi_event_ids {
|
||||
WMID_HOTKEY_EVENT = 0x1,
|
||||
WMID_ACCEL_OR_KBD_DOCK_EVENT = 0x5,
|
||||
WMID_GAMING_TURBO_KEY_EVENT = 0x7,
|
||||
WMID_AC_EVENT = 0x8,
|
||||
};
|
||||
|
||||
static const struct key_entry acer_wmi_keymap[] __initconst = {
|
||||
@@ -1999,6 +2000,9 @@ static void acer_wmi_notify(u32 value, void *context)
|
||||
if (return_value.key_num == 0x4)
|
||||
acer_toggle_turbo();
|
||||
break;
|
||||
case WMID_AC_EVENT:
|
||||
/* We ignore AC events here */
|
||||
break;
|
||||
default:
|
||||
pr_warn("Unknown function number - %d - %d\n",
|
||||
return_value.function, return_value.key_num);
|
||||
|
||||
@@ -359,6 +359,9 @@ static int skl_int3472_discrete_probe(struct platform_device *pdev)
|
||||
struct int3472_cldb cldb;
|
||||
int ret;
|
||||
|
||||
if (!adev)
|
||||
return -ENODEV;
|
||||
|
||||
ret = skl_int3472_fill_cldb(adev, &cldb);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Couldn't fill CLDB structure\n");
|
||||
|
||||
@@ -152,6 +152,9 @@ static int skl_int3472_tps68470_probe(struct i2c_client *client)
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
if (!adev)
|
||||
return -ENODEV;
|
||||
|
||||
n_consumers = skl_int3472_fill_clk_pdata(&client->dev, &clk_pdata);
|
||||
if (n_consumers < 0)
|
||||
return n_consumers;
|
||||
|
||||
@@ -357,25 +357,29 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
|
||||
data->pinctrl = devm_pinctrl_get(dev);
|
||||
if (PTR_ERR(data->pinctrl) == -ENODEV)
|
||||
data->pinctrl = NULL;
|
||||
else if (IS_ERR(data->pinctrl))
|
||||
return dev_err_probe(dev, PTR_ERR(data->pinctrl),
|
||||
else if (IS_ERR(data->pinctrl)) {
|
||||
ret = dev_err_probe(dev, PTR_ERR(data->pinctrl),
|
||||
"pinctrl get failed\n");
|
||||
goto err_put;
|
||||
}
|
||||
|
||||
data->hsic_pad_regulator =
|
||||
devm_regulator_get_optional(dev, "hsic");
|
||||
if (PTR_ERR(data->hsic_pad_regulator) == -ENODEV) {
|
||||
/* no pad regualator is needed */
|
||||
data->hsic_pad_regulator = NULL;
|
||||
} else if (IS_ERR(data->hsic_pad_regulator))
|
||||
return dev_err_probe(dev, PTR_ERR(data->hsic_pad_regulator),
|
||||
} else if (IS_ERR(data->hsic_pad_regulator)) {
|
||||
ret = dev_err_probe(dev, PTR_ERR(data->hsic_pad_regulator),
|
||||
"Get HSIC pad regulator error\n");
|
||||
goto err_put;
|
||||
}
|
||||
|
||||
if (data->hsic_pad_regulator) {
|
||||
ret = regulator_enable(data->hsic_pad_regulator);
|
||||
if (ret) {
|
||||
dev_err(dev,
|
||||
"Failed to enable HSIC pad regulator\n");
|
||||
return ret;
|
||||
goto err_put;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -389,13 +393,14 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
|
||||
dev_err(dev,
|
||||
"pinctrl_hsic_idle lookup failed, err=%ld\n",
|
||||
PTR_ERR(pinctrl_hsic_idle));
|
||||
return PTR_ERR(pinctrl_hsic_idle);
|
||||
ret = PTR_ERR(pinctrl_hsic_idle);
|
||||
goto err_put;
|
||||
}
|
||||
|
||||
ret = pinctrl_select_state(data->pinctrl, pinctrl_hsic_idle);
|
||||
if (ret) {
|
||||
dev_err(dev, "hsic_idle select failed, err=%d\n", ret);
|
||||
return ret;
|
||||
goto err_put;
|
||||
}
|
||||
|
||||
data->pinctrl_hsic_active = pinctrl_lookup_state(data->pinctrl,
|
||||
@@ -404,7 +409,8 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
|
||||
dev_err(dev,
|
||||
"pinctrl_hsic_active lookup failed, err=%ld\n",
|
||||
PTR_ERR(data->pinctrl_hsic_active));
|
||||
return PTR_ERR(data->pinctrl_hsic_active);
|
||||
ret = PTR_ERR(data->pinctrl_hsic_active);
|
||||
goto err_put;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -504,10 +510,12 @@ disable_hsic_regulator:
|
||||
if (pdata.flags & CI_HDRC_PMQOS)
|
||||
cpu_latency_qos_remove_request(&data->pm_qos_req);
|
||||
data->ci_pdev = NULL;
|
||||
err_put:
|
||||
put_device(data->usbmisc_data->dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ci_hdrc_imx_remove(struct platform_device *pdev)
|
||||
static void ci_hdrc_imx_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct ci_hdrc_imx_data *data = platform_get_drvdata(pdev);
|
||||
|
||||
@@ -527,8 +535,7 @@ static int ci_hdrc_imx_remove(struct platform_device *pdev)
|
||||
if (data->hsic_pad_regulator)
|
||||
regulator_disable(data->hsic_pad_regulator);
|
||||
}
|
||||
|
||||
return 0;
|
||||
put_device(data->usbmisc_data->dev);
|
||||
}
|
||||
|
||||
static void ci_hdrc_imx_shutdown(struct platform_device *pdev)
|
||||
@@ -674,7 +681,7 @@ static const struct dev_pm_ops ci_hdrc_imx_pm_ops = {
|
||||
};
|
||||
static struct platform_driver ci_hdrc_imx_driver = {
|
||||
.probe = ci_hdrc_imx_probe,
|
||||
.remove = ci_hdrc_imx_remove,
|
||||
.remove_new = ci_hdrc_imx_remove,
|
||||
.shutdown = ci_hdrc_imx_shutdown,
|
||||
.driver = {
|
||||
.name = "imx_usb",
|
||||
|
||||
@@ -478,7 +478,7 @@ static int load_flat_file(struct linux_binprm *bprm,
|
||||
* 28 bits (256 MB) is way more than reasonable in this case.
|
||||
* If some top bits are set we have probable binary corruption.
|
||||
*/
|
||||
if ((text_len | data_len | bss_len | stack_len | full_data) >> 28) {
|
||||
if ((text_len | data_len | bss_len | stack_len | relocs | full_data) >> 28) {
|
||||
pr_err("bad header\n");
|
||||
ret = -ENOEXEC;
|
||||
goto err;
|
||||
|
||||
@@ -490,7 +490,7 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
|
||||
* a program is not able to use ptrace(2) in that case. It is
|
||||
* safe because the task has stopped executing permanently.
|
||||
*/
|
||||
if (permitted && (task->flags & (PF_EXITING|PF_DUMPCORE))) {
|
||||
if (permitted && (task->flags & (PF_EXITING|PF_DUMPCORE|PF_POSTCOREDUMP))) {
|
||||
if (try_get_task_stack(task)) {
|
||||
eip = KSTK_EIP(task);
|
||||
esp = KSTK_ESP(task);
|
||||
|
||||
@@ -286,7 +286,7 @@ struct smb_version_operations {
|
||||
int (*handle_cancelled_mid)(struct mid_q_entry *, struct TCP_Server_Info *);
|
||||
void (*downgrade_oplock)(struct TCP_Server_Info *server,
|
||||
struct cifsInodeInfo *cinode, __u32 oplock,
|
||||
unsigned int epoch, bool *purge_cache);
|
||||
__u16 epoch, bool *purge_cache);
|
||||
/* process transaction2 response */
|
||||
bool (*check_trans2)(struct mid_q_entry *, struct TCP_Server_Info *,
|
||||
char *, int);
|
||||
@@ -466,12 +466,12 @@ struct smb_version_operations {
|
||||
/* if we can do cache read operations */
|
||||
bool (*is_read_op)(__u32);
|
||||
/* set oplock level for the inode */
|
||||
void (*set_oplock_level)(struct cifsInodeInfo *, __u32, unsigned int,
|
||||
bool *);
|
||||
void (*set_oplock_level)(struct cifsInodeInfo *cinode, __u32 oplock, __u16 epoch,
|
||||
bool *purge_cache);
|
||||
/* create lease context buffer for CREATE request */
|
||||
char * (*create_lease_buf)(u8 *lease_key, u8 oplock);
|
||||
/* parse lease context buffer and return oplock/epoch info */
|
||||
__u8 (*parse_lease_buf)(void *buf, unsigned int *epoch, char *lkey);
|
||||
__u8 (*parse_lease_buf)(void *buf, __u16 *epoch, char *lkey);
|
||||
ssize_t (*copychunk_range)(const unsigned int,
|
||||
struct cifsFileInfo *src_file,
|
||||
struct cifsFileInfo *target_file,
|
||||
@@ -1328,7 +1328,7 @@ struct cifs_fid {
|
||||
__u8 create_guid[16];
|
||||
__u32 access;
|
||||
struct cifs_pending_open *pending_open;
|
||||
unsigned int epoch;
|
||||
__u16 epoch;
|
||||
#ifdef CONFIG_CIFS_DEBUG2
|
||||
__u64 mid;
|
||||
#endif /* CIFS_DEBUG2 */
|
||||
@@ -1360,7 +1360,7 @@ struct cifsFileInfo {
|
||||
bool swapfile:1;
|
||||
bool oplock_break_cancelled:1;
|
||||
bool offload:1; /* offload final part of _put to a wq */
|
||||
unsigned int oplock_epoch; /* epoch from the lease break */
|
||||
__u16 oplock_epoch; /* epoch from the lease break */
|
||||
__u32 oplock_level; /* oplock/lease level from the lease break */
|
||||
int count;
|
||||
spinlock_t file_info_lock; /* protects four flag/count fields above */
|
||||
@@ -1510,7 +1510,7 @@ struct cifsInodeInfo {
|
||||
spinlock_t open_file_lock; /* protects openFileList */
|
||||
__u32 cifsAttrs; /* e.g. DOS archive bit, sparse, compressed, system */
|
||||
unsigned int oplock; /* oplock/lease level we have */
|
||||
unsigned int epoch; /* used to track lease state changes */
|
||||
__u16 epoch; /* used to track lease state changes */
|
||||
#define CIFS_INODE_PENDING_OPLOCK_BREAK (0) /* oplock break in progress */
|
||||
#define CIFS_INODE_PENDING_WRITERS (1) /* Writes in progress */
|
||||
#define CIFS_INODE_FLAG_UNUSED (2) /* Unused flag */
|
||||
|
||||
@@ -377,7 +377,7 @@ coalesce_t2(char *second_buf, struct smb_hdr *target_hdr)
|
||||
static void
|
||||
cifs_downgrade_oplock(struct TCP_Server_Info *server,
|
||||
struct cifsInodeInfo *cinode, __u32 oplock,
|
||||
unsigned int epoch, bool *purge_cache)
|
||||
__u16 epoch, bool *purge_cache)
|
||||
{
|
||||
cifs_set_oplock_level(cinode, oplock);
|
||||
}
|
||||
|
||||
@@ -4111,22 +4111,22 @@ static long smb3_fallocate(struct file *file, struct cifs_tcon *tcon, int mode,
|
||||
static void
|
||||
smb2_downgrade_oplock(struct TCP_Server_Info *server,
|
||||
struct cifsInodeInfo *cinode, __u32 oplock,
|
||||
unsigned int epoch, bool *purge_cache)
|
||||
__u16 epoch, bool *purge_cache)
|
||||
{
|
||||
server->ops->set_oplock_level(cinode, oplock, 0, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
smb21_set_oplock_level(struct cifsInodeInfo *cinode, __u32 oplock,
|
||||
unsigned int epoch, bool *purge_cache);
|
||||
__u16 epoch, bool *purge_cache);
|
||||
|
||||
static void
|
||||
smb3_downgrade_oplock(struct TCP_Server_Info *server,
|
||||
struct cifsInodeInfo *cinode, __u32 oplock,
|
||||
unsigned int epoch, bool *purge_cache)
|
||||
__u16 epoch, bool *purge_cache)
|
||||
{
|
||||
unsigned int old_state = cinode->oplock;
|
||||
unsigned int old_epoch = cinode->epoch;
|
||||
__u16 old_epoch = cinode->epoch;
|
||||
unsigned int new_state;
|
||||
|
||||
if (epoch > old_epoch) {
|
||||
@@ -4146,7 +4146,7 @@ smb3_downgrade_oplock(struct TCP_Server_Info *server,
|
||||
|
||||
static void
|
||||
smb2_set_oplock_level(struct cifsInodeInfo *cinode, __u32 oplock,
|
||||
unsigned int epoch, bool *purge_cache)
|
||||
__u16 epoch, bool *purge_cache)
|
||||
{
|
||||
oplock &= 0xFF;
|
||||
cinode->lease_granted = false;
|
||||
@@ -4170,7 +4170,7 @@ smb2_set_oplock_level(struct cifsInodeInfo *cinode, __u32 oplock,
|
||||
|
||||
static void
|
||||
smb21_set_oplock_level(struct cifsInodeInfo *cinode, __u32 oplock,
|
||||
unsigned int epoch, bool *purge_cache)
|
||||
__u16 epoch, bool *purge_cache)
|
||||
{
|
||||
char message[5] = {0};
|
||||
unsigned int new_oplock = 0;
|
||||
@@ -4207,7 +4207,7 @@ smb21_set_oplock_level(struct cifsInodeInfo *cinode, __u32 oplock,
|
||||
|
||||
static void
|
||||
smb3_set_oplock_level(struct cifsInodeInfo *cinode, __u32 oplock,
|
||||
unsigned int epoch, bool *purge_cache)
|
||||
__u16 epoch, bool *purge_cache)
|
||||
{
|
||||
unsigned int old_oplock = cinode->oplock;
|
||||
|
||||
@@ -4321,7 +4321,7 @@ smb3_create_lease_buf(u8 *lease_key, u8 oplock)
|
||||
}
|
||||
|
||||
static __u8
|
||||
smb2_parse_lease_buf(void *buf, unsigned int *epoch, char *lease_key)
|
||||
smb2_parse_lease_buf(void *buf, __u16 *epoch, char *lease_key)
|
||||
{
|
||||
struct create_lease *lc = (struct create_lease *)buf;
|
||||
|
||||
@@ -4332,7 +4332,7 @@ smb2_parse_lease_buf(void *buf, unsigned int *epoch, char *lease_key)
|
||||
}
|
||||
|
||||
static __u8
|
||||
smb3_parse_lease_buf(void *buf, unsigned int *epoch, char *lease_key)
|
||||
smb3_parse_lease_buf(void *buf, __u16 *epoch, char *lease_key)
|
||||
{
|
||||
struct create_lease_v2 *lc = (struct create_lease_v2 *)buf;
|
||||
|
||||
|
||||
@@ -2158,7 +2158,7 @@ parse_posix_ctxt(struct create_context *cc, struct smb2_file_all_info *info,
|
||||
|
||||
int smb2_parse_contexts(struct TCP_Server_Info *server,
|
||||
struct kvec *rsp_iov,
|
||||
unsigned int *epoch,
|
||||
__u16 *epoch,
|
||||
char *lease_key, __u8 *oplock,
|
||||
struct smb2_file_all_info *buf,
|
||||
struct create_posix_rsp *posix)
|
||||
|
||||
@@ -251,7 +251,7 @@ extern enum securityEnum smb2_select_sectype(struct TCP_Server_Info *,
|
||||
enum securityEnum);
|
||||
int smb2_parse_contexts(struct TCP_Server_Info *server,
|
||||
struct kvec *rsp_iov,
|
||||
unsigned int *epoch,
|
||||
__u16 *epoch,
|
||||
char *lease_key, __u8 *oplock,
|
||||
struct smb2_file_all_info *buf,
|
||||
struct create_posix_rsp *posix);
|
||||
|
||||
@@ -19,28 +19,41 @@
|
||||
STATIC void
|
||||
xfs_fill_statvfs_from_dquot(
|
||||
struct kstatfs *statp,
|
||||
struct xfs_inode *ip,
|
||||
struct xfs_dquot *dqp)
|
||||
{
|
||||
struct xfs_dquot_res *blkres = &dqp->q_blk;
|
||||
uint64_t limit;
|
||||
|
||||
limit = dqp->q_blk.softlimit ?
|
||||
dqp->q_blk.softlimit :
|
||||
dqp->q_blk.hardlimit;
|
||||
if (limit && statp->f_blocks > limit) {
|
||||
statp->f_blocks = limit;
|
||||
statp->f_bfree = statp->f_bavail =
|
||||
(statp->f_blocks > dqp->q_blk.reserved) ?
|
||||
(statp->f_blocks - dqp->q_blk.reserved) : 0;
|
||||
if (XFS_IS_REALTIME_MOUNT(ip->i_mount) &&
|
||||
(ip->i_diflags & (XFS_DIFLAG_RTINHERIT | XFS_DIFLAG_REALTIME)))
|
||||
blkres = &dqp->q_rtb;
|
||||
|
||||
limit = blkres->softlimit ?
|
||||
blkres->softlimit :
|
||||
blkres->hardlimit;
|
||||
if (limit) {
|
||||
uint64_t remaining = 0;
|
||||
|
||||
if (limit > blkres->reserved)
|
||||
remaining = limit - blkres->reserved;
|
||||
|
||||
statp->f_blocks = min(statp->f_blocks, limit);
|
||||
statp->f_bfree = min(statp->f_bfree, remaining);
|
||||
statp->f_bavail = min(statp->f_bavail, remaining);
|
||||
}
|
||||
|
||||
limit = dqp->q_ino.softlimit ?
|
||||
dqp->q_ino.softlimit :
|
||||
dqp->q_ino.hardlimit;
|
||||
if (limit && statp->f_files > limit) {
|
||||
statp->f_files = limit;
|
||||
statp->f_ffree =
|
||||
(statp->f_files > dqp->q_ino.reserved) ?
|
||||
(statp->f_files - dqp->q_ino.reserved) : 0;
|
||||
if (limit) {
|
||||
uint64_t remaining = 0;
|
||||
|
||||
if (limit > dqp->q_ino.reserved)
|
||||
remaining = limit - dqp->q_ino.reserved;
|
||||
|
||||
statp->f_files = min(statp->f_files, limit);
|
||||
statp->f_ffree = min(statp->f_ffree, remaining);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,7 +74,7 @@ xfs_qm_statvfs(
|
||||
struct xfs_dquot *dqp;
|
||||
|
||||
if (!xfs_qm_dqget(mp, ip->i_projid, XFS_DQTYPE_PROJ, false, &dqp)) {
|
||||
xfs_fill_statvfs_from_dquot(statp, dqp);
|
||||
xfs_fill_statvfs_from_dquot(statp, ip, dqp);
|
||||
xfs_qm_dqput(dqp);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -849,12 +849,6 @@ xfs_fs_statfs(
|
||||
ffree = statp->f_files - (icount - ifree);
|
||||
statp->f_ffree = max_t(int64_t, ffree, 0);
|
||||
|
||||
|
||||
if ((ip->i_diflags & XFS_DIFLAG_PROJINHERIT) &&
|
||||
((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))) ==
|
||||
(XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))
|
||||
xfs_qm_statvfs(ip, statp);
|
||||
|
||||
if (XFS_IS_REALTIME_MOUNT(mp) &&
|
||||
(ip->i_diflags & (XFS_DIFLAG_RTINHERIT | XFS_DIFLAG_REALTIME))) {
|
||||
s64 freertx;
|
||||
@@ -864,6 +858,11 @@ xfs_fs_statfs(
|
||||
statp->f_bavail = statp->f_bfree = freertx * sbp->sb_rextsize;
|
||||
}
|
||||
|
||||
if ((ip->i_diflags & XFS_DIFLAG_PROJINHERIT) &&
|
||||
((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))) ==
|
||||
(XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))
|
||||
xfs_qm_statvfs(ip, statp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -823,7 +823,7 @@ static inline int qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch,
|
||||
}
|
||||
|
||||
static inline void _bstats_update(struct gnet_stats_basic_sync *bstats,
|
||||
__u64 bytes, __u32 packets)
|
||||
__u64 bytes, __u64 packets)
|
||||
{
|
||||
u64_stats_update_begin(&bstats->syncp);
|
||||
u64_stats_add(&bstats->bytes, bytes);
|
||||
|
||||
@@ -519,6 +519,7 @@
|
||||
#define KEY_NOTIFICATION_CENTER 0x1bc /* Show/hide the notification center */
|
||||
#define KEY_PICKUP_PHONE 0x1bd /* Answer incoming call */
|
||||
#define KEY_HANGUP_PHONE 0x1be /* Decline incoming call */
|
||||
#define KEY_LINK_PHONE 0x1bf /* AL Phone Syncing */
|
||||
|
||||
#define KEY_DEL_EOL 0x1c0
|
||||
#define KEY_DEL_EOS 0x1c1
|
||||
|
||||
@@ -939,9 +939,9 @@ static int udp_send_skb(struct sk_buff *skb, struct flowi4 *fl4,
|
||||
const int hlen = skb_network_header_len(skb) +
|
||||
sizeof(struct udphdr);
|
||||
|
||||
if (hlen + cork->gso_size > cork->fragsize) {
|
||||
if (hlen + min(datalen, cork->gso_size) > cork->fragsize) {
|
||||
kfree_skb(skb);
|
||||
return -EINVAL;
|
||||
return -EMSGSIZE;
|
||||
}
|
||||
if (datalen > cork->gso_size * UDP_MAX_SEGMENTS) {
|
||||
kfree_skb(skb);
|
||||
|
||||
@@ -1255,9 +1255,9 @@ static int udp_v6_send_skb(struct sk_buff *skb, struct flowi6 *fl6,
|
||||
const int hlen = skb_network_header_len(skb) +
|
||||
sizeof(struct udphdr);
|
||||
|
||||
if (hlen + cork->gso_size > cork->fragsize) {
|
||||
if (hlen + min(datalen, cork->gso_size) > cork->fragsize) {
|
||||
kfree_skb(skb);
|
||||
return -EINVAL;
|
||||
return -EMSGSIZE;
|
||||
}
|
||||
if (datalen > cork->gso_size * UDP_MAX_SEGMENTS) {
|
||||
kfree_skb(skb);
|
||||
|
||||
@@ -289,6 +289,7 @@ enum {
|
||||
ncsi_dev_state_config_sp = 0x0301,
|
||||
ncsi_dev_state_config_cis,
|
||||
ncsi_dev_state_config_oem_gma,
|
||||
ncsi_dev_state_config_apply_mac,
|
||||
ncsi_dev_state_config_clear_vids,
|
||||
ncsi_dev_state_config_svf,
|
||||
ncsi_dev_state_config_ev,
|
||||
@@ -322,6 +323,7 @@ struct ncsi_dev_priv {
|
||||
#define NCSI_DEV_RESHUFFLE 4
|
||||
#define NCSI_DEV_RESET 8 /* Reset state of NC */
|
||||
unsigned int gma_flag; /* OEM GMA flag */
|
||||
struct sockaddr pending_mac; /* MAC address received from GMA */
|
||||
spinlock_t lock; /* Protect the NCSI device */
|
||||
unsigned int package_probe_id;/* Current ID during probe */
|
||||
unsigned int package_num; /* Number of packages */
|
||||
|
||||
@@ -269,7 +269,8 @@ static struct ncsi_cmd_handler {
|
||||
{ NCSI_PKT_CMD_GPS, 0, ncsi_cmd_handler_default },
|
||||
{ NCSI_PKT_CMD_OEM, -1, ncsi_cmd_handler_oem },
|
||||
{ NCSI_PKT_CMD_PLDM, 0, NULL },
|
||||
{ NCSI_PKT_CMD_GPUUID, 0, ncsi_cmd_handler_default }
|
||||
{ NCSI_PKT_CMD_GPUUID, 0, ncsi_cmd_handler_default },
|
||||
{ NCSI_PKT_CMD_GMCMA, 0, ncsi_cmd_handler_default }
|
||||
};
|
||||
|
||||
static struct ncsi_request *ncsi_alloc_command(struct ncsi_cmd_arg *nca)
|
||||
|
||||
@@ -1038,17 +1038,34 @@ static void ncsi_configure_channel(struct ncsi_dev_priv *ndp)
|
||||
: ncsi_dev_state_config_clear_vids;
|
||||
break;
|
||||
case ncsi_dev_state_config_oem_gma:
|
||||
nd->state = ncsi_dev_state_config_clear_vids;
|
||||
nd->state = ncsi_dev_state_config_apply_mac;
|
||||
|
||||
nca.type = NCSI_PKT_CMD_OEM;
|
||||
nca.package = np->id;
|
||||
nca.channel = nc->id;
|
||||
ndp->pending_req_num = 1;
|
||||
ret = ncsi_gma_handler(&nca, nc->version.mf_id);
|
||||
if (ret < 0)
|
||||
if (nc->version.major >= 1 && nc->version.minor >= 2) {
|
||||
nca.type = NCSI_PKT_CMD_GMCMA;
|
||||
ret = ncsi_xmit_cmd(&nca);
|
||||
} else {
|
||||
nca.type = NCSI_PKT_CMD_OEM;
|
||||
ret = ncsi_gma_handler(&nca, nc->version.mf_id);
|
||||
}
|
||||
if (ret < 0) {
|
||||
nd->state = ncsi_dev_state_config_clear_vids;
|
||||
schedule_work(&ndp->work);
|
||||
}
|
||||
|
||||
break;
|
||||
case ncsi_dev_state_config_apply_mac:
|
||||
rtnl_lock();
|
||||
ret = dev_set_mac_address(dev, &ndp->pending_mac, NULL);
|
||||
rtnl_unlock();
|
||||
if (ret < 0)
|
||||
netdev_warn(dev, "NCSI: 'Writing MAC address to device failed\n");
|
||||
|
||||
nd->state = ncsi_dev_state_config_clear_vids;
|
||||
|
||||
fallthrough;
|
||||
case ncsi_dev_state_config_clear_vids:
|
||||
case ncsi_dev_state_config_svf:
|
||||
case ncsi_dev_state_config_ev:
|
||||
|
||||
@@ -338,6 +338,14 @@ struct ncsi_rsp_gpuuid_pkt {
|
||||
__be32 checksum;
|
||||
};
|
||||
|
||||
/* Get MC MAC Address */
|
||||
struct ncsi_rsp_gmcma_pkt {
|
||||
struct ncsi_rsp_pkt_hdr rsp;
|
||||
unsigned char address_count;
|
||||
unsigned char reserved[3];
|
||||
unsigned char addresses[][ETH_ALEN];
|
||||
};
|
||||
|
||||
/* AEN: Link State Change */
|
||||
struct ncsi_aen_lsc_pkt {
|
||||
struct ncsi_aen_pkt_hdr aen; /* AEN header */
|
||||
@@ -398,6 +406,7 @@ struct ncsi_aen_hncdsc_pkt {
|
||||
#define NCSI_PKT_CMD_GPUUID 0x52 /* Get package UUID */
|
||||
#define NCSI_PKT_CMD_QPNPR 0x56 /* Query Pending NC PLDM request */
|
||||
#define NCSI_PKT_CMD_SNPR 0x57 /* Send NC PLDM Reply */
|
||||
#define NCSI_PKT_CMD_GMCMA 0x58 /* Get MC MAC Address */
|
||||
|
||||
|
||||
/* NCSI packet responses */
|
||||
@@ -433,6 +442,7 @@ struct ncsi_aen_hncdsc_pkt {
|
||||
#define NCSI_PKT_RSP_GPUUID (NCSI_PKT_CMD_GPUUID + 0x80)
|
||||
#define NCSI_PKT_RSP_QPNPR (NCSI_PKT_CMD_QPNPR + 0x80)
|
||||
#define NCSI_PKT_RSP_SNPR (NCSI_PKT_CMD_SNPR + 0x80)
|
||||
#define NCSI_PKT_RSP_GMCMA (NCSI_PKT_CMD_GMCMA + 0x80)
|
||||
|
||||
/* NCSI response code/reason */
|
||||
#define NCSI_PKT_RSP_C_COMPLETED 0x0000 /* Command Completed */
|
||||
|
||||
@@ -628,16 +628,14 @@ static int ncsi_rsp_handler_snfc(struct ncsi_request *nr)
|
||||
static int ncsi_rsp_handler_oem_gma(struct ncsi_request *nr, int mfr_id)
|
||||
{
|
||||
struct ncsi_dev_priv *ndp = nr->ndp;
|
||||
struct sockaddr *saddr = &ndp->pending_mac;
|
||||
struct net_device *ndev = ndp->ndev.dev;
|
||||
struct ncsi_rsp_oem_pkt *rsp;
|
||||
struct sockaddr saddr;
|
||||
u32 mac_addr_off = 0;
|
||||
int ret = 0;
|
||||
|
||||
/* Get the response header */
|
||||
rsp = (struct ncsi_rsp_oem_pkt *)skb_network_header(nr->rsp);
|
||||
|
||||
saddr.sa_family = ndev->type;
|
||||
ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
|
||||
if (mfr_id == NCSI_OEM_MFR_BCM_ID)
|
||||
mac_addr_off = BCM_MAC_ADDR_OFFSET;
|
||||
@@ -646,22 +644,17 @@ static int ncsi_rsp_handler_oem_gma(struct ncsi_request *nr, int mfr_id)
|
||||
else if (mfr_id == NCSI_OEM_MFR_INTEL_ID)
|
||||
mac_addr_off = INTEL_MAC_ADDR_OFFSET;
|
||||
|
||||
memcpy(saddr.sa_data, &rsp->data[mac_addr_off], ETH_ALEN);
|
||||
saddr->sa_family = ndev->type;
|
||||
memcpy(saddr->sa_data, &rsp->data[mac_addr_off], ETH_ALEN);
|
||||
if (mfr_id == NCSI_OEM_MFR_BCM_ID || mfr_id == NCSI_OEM_MFR_INTEL_ID)
|
||||
eth_addr_inc((u8 *)saddr.sa_data);
|
||||
if (!is_valid_ether_addr((const u8 *)saddr.sa_data))
|
||||
eth_addr_inc((u8 *)saddr->sa_data);
|
||||
if (!is_valid_ether_addr((const u8 *)saddr->sa_data))
|
||||
return -ENXIO;
|
||||
|
||||
/* Set the flag for GMA command which should only be called once */
|
||||
ndp->gma_flag = 1;
|
||||
|
||||
rtnl_lock();
|
||||
ret = dev_set_mac_address(ndev, &saddr, NULL);
|
||||
rtnl_unlock();
|
||||
if (ret < 0)
|
||||
netdev_warn(ndev, "NCSI: 'Writing mac address to device failed\n");
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Response handler for Mellanox card */
|
||||
@@ -1093,6 +1086,44 @@ static int ncsi_rsp_handler_netlink(struct ncsi_request *nr)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ncsi_rsp_handler_gmcma(struct ncsi_request *nr)
|
||||
{
|
||||
struct ncsi_dev_priv *ndp = nr->ndp;
|
||||
struct net_device *ndev = ndp->ndev.dev;
|
||||
struct ncsi_rsp_gmcma_pkt *rsp;
|
||||
struct sockaddr saddr;
|
||||
int ret = -1;
|
||||
int i;
|
||||
|
||||
rsp = (struct ncsi_rsp_gmcma_pkt *)skb_network_header(nr->rsp);
|
||||
saddr.sa_family = ndev->type;
|
||||
ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
|
||||
|
||||
netdev_info(ndev, "NCSI: Received %d provisioned MAC addresses\n",
|
||||
rsp->address_count);
|
||||
for (i = 0; i < rsp->address_count; i++) {
|
||||
netdev_info(ndev, "NCSI: MAC address %d: %02x:%02x:%02x:%02x:%02x:%02x\n",
|
||||
i, rsp->addresses[i][0], rsp->addresses[i][1],
|
||||
rsp->addresses[i][2], rsp->addresses[i][3],
|
||||
rsp->addresses[i][4], rsp->addresses[i][5]);
|
||||
}
|
||||
|
||||
for (i = 0; i < rsp->address_count; i++) {
|
||||
memcpy(saddr.sa_data, &rsp->addresses[i], ETH_ALEN);
|
||||
ret = ndev->netdev_ops->ndo_set_mac_address(ndev, &saddr);
|
||||
if (ret < 0) {
|
||||
netdev_warn(ndev, "NCSI: Unable to assign %pM to device\n",
|
||||
saddr.sa_data);
|
||||
continue;
|
||||
}
|
||||
netdev_warn(ndev, "NCSI: Set MAC address to %pM\n", saddr.sa_data);
|
||||
break;
|
||||
}
|
||||
|
||||
ndp->gma_flag = ret == 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct ncsi_rsp_handler {
|
||||
unsigned char type;
|
||||
int payload;
|
||||
@@ -1129,7 +1160,8 @@ static struct ncsi_rsp_handler {
|
||||
{ NCSI_PKT_RSP_PLDM, -1, ncsi_rsp_handler_pldm },
|
||||
{ NCSI_PKT_RSP_GPUUID, 20, ncsi_rsp_handler_gpuuid },
|
||||
{ NCSI_PKT_RSP_QPNPR, -1, ncsi_rsp_handler_pldm },
|
||||
{ NCSI_PKT_RSP_SNPR, -1, ncsi_rsp_handler_pldm }
|
||||
{ NCSI_PKT_RSP_SNPR, -1, ncsi_rsp_handler_pldm },
|
||||
{ NCSI_PKT_RSP_GMCMA, -1, ncsi_rsp_handler_gmcma },
|
||||
};
|
||||
|
||||
int ncsi_rcv_rsp(struct sk_buff *skb, struct net_device *dev,
|
||||
|
||||
@@ -701,11 +701,9 @@ static int rose_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||
struct net_device *dev;
|
||||
ax25_address *source;
|
||||
ax25_uid_assoc *user;
|
||||
int err = -EINVAL;
|
||||
int n;
|
||||
|
||||
if (!sock_flag(sk, SOCK_ZAPPED))
|
||||
return -EINVAL;
|
||||
|
||||
if (addr_len != sizeof(struct sockaddr_rose) && addr_len != sizeof(struct full_sockaddr_rose))
|
||||
return -EINVAL;
|
||||
|
||||
@@ -718,8 +716,15 @@ static int rose_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||
if ((unsigned int) addr->srose_ndigis > ROSE_MAX_DIGIS)
|
||||
return -EINVAL;
|
||||
|
||||
if ((dev = rose_dev_get(&addr->srose_addr)) == NULL)
|
||||
return -EADDRNOTAVAIL;
|
||||
lock_sock(sk);
|
||||
|
||||
if (!sock_flag(sk, SOCK_ZAPPED))
|
||||
goto out_release;
|
||||
|
||||
err = -EADDRNOTAVAIL;
|
||||
dev = rose_dev_get(&addr->srose_addr);
|
||||
if (!dev)
|
||||
goto out_release;
|
||||
|
||||
source = &addr->srose_call;
|
||||
|
||||
@@ -730,7 +735,8 @@ static int rose_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||
} else {
|
||||
if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE)) {
|
||||
dev_put(dev);
|
||||
return -EACCES;
|
||||
err = -EACCES;
|
||||
goto out_release;
|
||||
}
|
||||
rose->source_call = *source;
|
||||
}
|
||||
@@ -753,8 +759,10 @@ static int rose_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||
rose_insert_socket(sk);
|
||||
|
||||
sock_reset_flag(sk, SOCK_ZAPPED);
|
||||
|
||||
return 0;
|
||||
err = 0;
|
||||
out_release:
|
||||
release_sock(sk);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int rose_connect(struct socket *sock, struct sockaddr *uaddr, int addr_len, int flags)
|
||||
|
||||
@@ -739,9 +739,9 @@ deliver:
|
||||
if (err != NET_XMIT_SUCCESS) {
|
||||
if (net_xmit_drop_count(err))
|
||||
qdisc_qstats_drop(sch);
|
||||
qdisc_tree_reduce_backlog(sch, 1, pkt_len);
|
||||
sch->qstats.backlog -= pkt_len;
|
||||
sch->q.qlen--;
|
||||
qdisc_tree_reduce_backlog(sch, 1, pkt_len);
|
||||
}
|
||||
goto tfifo_dequeue;
|
||||
}
|
||||
|
||||
@@ -9793,6 +9793,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x103c, 0x8870, "HP ZBook Fury 15.6 Inch G8 Mobile Workstation PC", ALC285_FIXUP_HP_GPIO_AMP_INIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x8873, "HP ZBook Studio 15.6 Inch G8 Mobile Workstation PC", ALC285_FIXUP_HP_GPIO_AMP_INIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x887a, "HP Laptop 15s-eq2xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
|
||||
SND_PCI_QUIRK(0x103c, 0x887c, "HP Laptop 14s-fq1xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
|
||||
SND_PCI_QUIRK(0x103c, 0x888a, "HP ENVY x360 Convertible 15-eu0xxx", ALC245_FIXUP_HP_X360_MUTE_LEDS),
|
||||
SND_PCI_QUIRK(0x103c, 0x888d, "HP ZBook Power 15.6 inch G8 Mobile Workstation PC", ALC236_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8895, "HP EliteBook 855 G8 Notebook PC", ALC285_FIXUP_HP_SPEAKERS_MICMUTE_LED),
|
||||
|
||||
@@ -103,7 +103,7 @@ config SND_SOC_AMD_ACP6x
|
||||
config SND_SOC_AMD_YC_MACH
|
||||
tristate "AMD YC support for DMIC"
|
||||
select SND_SOC_DMIC
|
||||
depends on SND_SOC_AMD_ACP6x
|
||||
depends on SND_SOC_AMD_ACP6x && ACPI
|
||||
help
|
||||
This option enables machine driver for Yellow Carp platform
|
||||
using dmic. ACP IP has PDM Decoder block with DMA controller.
|
||||
|
||||
@@ -893,7 +893,13 @@ static int __soc_pcm_prepare(struct snd_soc_pcm_runtime *rtd,
|
||||
snd_soc_dai_digital_mute(dai, 0, substream->stream);
|
||||
|
||||
out:
|
||||
return soc_pcm_ret(rtd, ret);
|
||||
/*
|
||||
* Don't use soc_pcm_ret() on .prepare callback to lower error log severity
|
||||
*
|
||||
* We don't want to log an error since we do not want to give userspace a way to do a
|
||||
* denial-of-service attack on the syslog / diskspace.
|
||||
*/
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* PCM prepare ops for non-DPCM streams */
|
||||
@@ -905,6 +911,13 @@ static int soc_pcm_prepare(struct snd_pcm_substream *substream)
|
||||
snd_soc_dpcm_mutex_lock(rtd);
|
||||
ret = __soc_pcm_prepare(rtd, substream);
|
||||
snd_soc_dpcm_mutex_unlock(rtd);
|
||||
|
||||
/*
|
||||
* Don't use soc_pcm_ret() on .prepare callback to lower error log severity
|
||||
*
|
||||
* We don't want to log an error since we do not want to give userspace a way to do a
|
||||
* denial-of-service attack on the syslog / diskspace.
|
||||
*/
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -2409,7 +2422,13 @@ int dpcm_be_dai_prepare(struct snd_soc_pcm_runtime *fe, int stream)
|
||||
be->dpcm[stream].state = SND_SOC_DPCM_STATE_PREPARE;
|
||||
}
|
||||
|
||||
return soc_pcm_ret(fe, ret);
|
||||
/*
|
||||
* Don't use soc_pcm_ret() on .prepare callback to lower error log severity
|
||||
*
|
||||
* We don't want to log an error since we do not want to give userspace a way to do a
|
||||
* denial-of-service attack on the syslog / diskspace.
|
||||
*/
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int dpcm_fe_dai_prepare(struct snd_pcm_substream *substream)
|
||||
@@ -2446,7 +2465,13 @@ out:
|
||||
dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_NO);
|
||||
snd_soc_dpcm_mutex_unlock(fe);
|
||||
|
||||
return soc_pcm_ret(fe, ret);
|
||||
/*
|
||||
* Don't use soc_pcm_ret() on .prepare callback to lower error log severity
|
||||
*
|
||||
* We don't want to log an error since we do not want to give userspace a way to do a
|
||||
* denial-of-service attack on the syslog / diskspace.
|
||||
*/
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int dpcm_run_update_shutdown(struct snd_soc_pcm_runtime *fe, int stream)
|
||||
|
||||
@@ -94,6 +94,19 @@ struct testcase testcases_v4[] = {
|
||||
.gso_len = CONST_MSS_V4,
|
||||
.r_num_mss = 1,
|
||||
},
|
||||
{
|
||||
/* datalen <= MSS < gso_len: will fall back to no GSO */
|
||||
.tlen = CONST_MSS_V4,
|
||||
.gso_len = CONST_MSS_V4 + 1,
|
||||
.r_num_mss = 0,
|
||||
.r_len_last = CONST_MSS_V4,
|
||||
},
|
||||
{
|
||||
/* MSS < datalen < gso_len: fail */
|
||||
.tlen = CONST_MSS_V4 + 1,
|
||||
.gso_len = CONST_MSS_V4 + 2,
|
||||
.tfail = true,
|
||||
},
|
||||
{
|
||||
/* send a single MSS + 1B */
|
||||
.tlen = CONST_MSS_V4 + 1,
|
||||
@@ -197,6 +210,19 @@ struct testcase testcases_v6[] = {
|
||||
.gso_len = CONST_MSS_V6,
|
||||
.r_num_mss = 1,
|
||||
},
|
||||
{
|
||||
/* datalen <= MSS < gso_len: will fall back to no GSO */
|
||||
.tlen = CONST_MSS_V6,
|
||||
.gso_len = CONST_MSS_V6 + 1,
|
||||
.r_num_mss = 0,
|
||||
.r_len_last = CONST_MSS_V6,
|
||||
},
|
||||
{
|
||||
/* MSS < datalen < gso_len: fail */
|
||||
.tlen = CONST_MSS_V6 + 1,
|
||||
.gso_len = CONST_MSS_V6 + 2,
|
||||
.tfail = true
|
||||
},
|
||||
{
|
||||
/* send a single MSS + 1B */
|
||||
.tlen = CONST_MSS_V6 + 1,
|
||||
|
||||
Reference in New Issue
Block a user