Merge 4.14.109 into android-4.14
Changes in 4.14.109 mmc: pxamci: fix enum type confusion drm/vmwgfx: Don't double-free the mode stored in par->set_mode iommu/amd: fix sg->dma_address for sg->offset bigger than PAGE_SIZE libceph: wait for latest osdmap in ceph_monc_blacklist_add() udf: Fix crash on IO error during truncate mips: loongson64: lemote-2f: Add IRQF_NO_SUSPEND to "cascade" irqaction. MIPS: Ensure ELF appended dtb is relocated MIPS: Fix kernel crash for R6 in jump label branch function scsi: ibmvscsi: Protect ibmvscsi_head from concurrent modificaiton scsi: ibmvscsi: Fix empty event pool access during host removal futex: Ensure that futex address is aligned in handle_futex_death() perf probe: Fix getting the kernel map objtool: Move objtool_file struct off the stack ALSA: x86: Fix runtime PM for hdmi-lpe-audio ext4: fix NULL pointer dereference while journal is aborted ext4: fix data corruption caused by unaligned direct AIO ext4: brelse all indirect buffer in ext4_ind_remove_space() media: v4l2-ctrls.c/uvc: zero v4l2_event Bluetooth: hci_uart: Check if socket buffer is ERR_PTR in h4_recv_buf() Bluetooth: Fix decrementing reference count twice in releasing socket Bluetooth: hci_ldisc: Initialize hci_dev before open() Bluetooth: hci_ldisc: Postpone HCI_UART_PROTO_READY bit set in hci_uart_set_proto() drm: Reorder set_property_atomic to avoid returning with an active ww_ctx netfilter: ebtables: remove BUGPRINT messages x86/unwind: Handle NULL pointer calls better in frame unwinder x86/unwind: Add hardcoded ORC entry for NULL locking/lockdep: Add debug_locks check in __lock_downgrade() ALSA: hda - Record the current power state before suspend/resume calls ALSA: hda - Enforces runtime_resume after S3 and S4 for each codec lib/int_sqrt: optimize small argument USB: core: only clean up what we allocated scsi: ufs: fix wrong command type of UTRD for UFSHCI v2.1 PCI: designware-ep: dw_pcie_ep_set_msi() should only set MMC bits PCI: designware-ep: Read-only registers need DBI_RO_WR_EN to be writable PCI: endpoint: Use EPC's device in dma_alloc_coherent()/dma_free_coherent() rtc: Fix overflow when converting time64_t to rtc_time sched/cpufreq/schedutil: Fix error path mutex unlock pwm-backlight: Enable/disable the PWM before/after LCD enable toggle. power: supply: charger-manager: Fix incorrect return value ath10k: avoid possible string overflow Linux 4.14.109 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 14
|
||||
SUBLEVEL = 108
|
||||
SUBLEVEL = 109
|
||||
EXTRAVERSION =
|
||||
NAME = Petit Gorille
|
||||
|
||||
|
||||
@@ -21,15 +21,15 @@
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_MICROMIPS
|
||||
#define NOP_INSN "nop32"
|
||||
#define B_INSN "b32"
|
||||
#else
|
||||
#define NOP_INSN "nop"
|
||||
#define B_INSN "b"
|
||||
#endif
|
||||
|
||||
static __always_inline bool arch_static_branch(struct static_key *key, bool branch)
|
||||
{
|
||||
asm_volatile_goto("1:\t" NOP_INSN "\n\t"
|
||||
"nop\n\t"
|
||||
asm_volatile_goto("1:\t" B_INSN " 2f\n\t"
|
||||
"2:\tnop\n\t"
|
||||
".pushsection __jump_table, \"aw\"\n\t"
|
||||
WORD_INSN " 1b, %l[l_yes], %0\n\t"
|
||||
".popsection\n\t"
|
||||
|
||||
@@ -140,6 +140,13 @@ SECTIONS
|
||||
PERCPU_SECTION(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MIPS_ELF_APPENDED_DTB
|
||||
.appended_dtb : AT(ADDR(.appended_dtb) - LOAD_OFFSET) {
|
||||
*(.appended_dtb)
|
||||
KEEP(*(.appended_dtb))
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_RELOCATABLE
|
||||
. = ALIGN(4);
|
||||
|
||||
@@ -164,11 +171,6 @@ SECTIONS
|
||||
__appended_dtb = .;
|
||||
/* leave space for appended DTB */
|
||||
. += 0x100000;
|
||||
#elif defined(CONFIG_MIPS_ELF_APPENDED_DTB)
|
||||
.appended_dtb : AT(ADDR(.appended_dtb) - LOAD_OFFSET) {
|
||||
*(.appended_dtb)
|
||||
KEEP(*(.appended_dtb))
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
* Align to 64K in attempt to eliminate holes before the
|
||||
|
||||
@@ -103,7 +103,7 @@ static struct irqaction ip6_irqaction = {
|
||||
static struct irqaction cascade_irqaction = {
|
||||
.handler = no_action,
|
||||
.name = "cascade",
|
||||
.flags = IRQF_NO_THREAD,
|
||||
.flags = IRQF_NO_THREAD | IRQF_NO_SUSPEND,
|
||||
};
|
||||
|
||||
void __init mach_init_irq(void)
|
||||
|
||||
@@ -23,6 +23,12 @@ struct unwind_state {
|
||||
#elif defined(CONFIG_UNWINDER_FRAME_POINTER)
|
||||
bool got_irq;
|
||||
unsigned long *bp, *orig_sp, ip;
|
||||
/*
|
||||
* If non-NULL: The current frame is incomplete and doesn't contain a
|
||||
* valid BP. When looking for the next frame, use this instead of the
|
||||
* non-existent saved BP.
|
||||
*/
|
||||
unsigned long *next_bp;
|
||||
struct pt_regs *regs;
|
||||
#else
|
||||
unsigned long *sp;
|
||||
|
||||
@@ -320,10 +320,14 @@ bool unwind_next_frame(struct unwind_state *state)
|
||||
}
|
||||
|
||||
/* Get the next frame pointer: */
|
||||
if (state->regs)
|
||||
if (state->next_bp) {
|
||||
next_bp = state->next_bp;
|
||||
state->next_bp = NULL;
|
||||
} else if (state->regs) {
|
||||
next_bp = (unsigned long *)state->regs->bp;
|
||||
else
|
||||
} else {
|
||||
next_bp = (unsigned long *)READ_ONCE_TASK_STACK(state->task, *state->bp);
|
||||
}
|
||||
|
||||
/* Move to the next frame if it's safe: */
|
||||
if (!update_stack_state(state, next_bp))
|
||||
@@ -398,6 +402,21 @@ void __unwind_start(struct unwind_state *state, struct task_struct *task,
|
||||
|
||||
bp = get_frame_pointer(task, regs);
|
||||
|
||||
/*
|
||||
* If we crash with IP==0, the last successfully executed instruction
|
||||
* was probably an indirect function call with a NULL function pointer.
|
||||
* That means that SP points into the middle of an incomplete frame:
|
||||
* *SP is a return pointer, and *(SP-sizeof(unsigned long)) is where we
|
||||
* would have written a frame pointer if we hadn't crashed.
|
||||
* Pretend that the frame is complete and that BP points to it, but save
|
||||
* the real BP so that we can use it when looking for the next frame.
|
||||
*/
|
||||
if (regs && regs->ip == 0 &&
|
||||
(unsigned long *)kernel_stack_pointer(regs) >= first_frame) {
|
||||
state->next_bp = bp;
|
||||
bp = ((unsigned long *)kernel_stack_pointer(regs)) - 1;
|
||||
}
|
||||
|
||||
/* Initialize stack info and make sure the frame data is accessible: */
|
||||
get_stack_info(bp, state->task, &state->stack_info,
|
||||
&state->stack_mask);
|
||||
@@ -410,7 +429,7 @@ void __unwind_start(struct unwind_state *state, struct task_struct *task,
|
||||
*/
|
||||
while (!unwind_done(state) &&
|
||||
(!on_stack(&state->stack_info, first_frame, sizeof(long)) ||
|
||||
state->bp < first_frame))
|
||||
(state->next_bp == NULL && state->bp < first_frame)))
|
||||
unwind_next_frame(state);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__unwind_start);
|
||||
|
||||
@@ -74,11 +74,28 @@ static struct orc_entry *orc_module_find(unsigned long ip)
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* If we crash with IP==0, the last successfully executed instruction
|
||||
* was probably an indirect function call with a NULL function pointer,
|
||||
* and we don't have unwind information for NULL.
|
||||
* This hardcoded ORC entry for IP==0 allows us to unwind from a NULL function
|
||||
* pointer into its parent and then continue normally from there.
|
||||
*/
|
||||
static struct orc_entry null_orc_entry = {
|
||||
.sp_offset = sizeof(long),
|
||||
.sp_reg = ORC_REG_SP,
|
||||
.bp_reg = ORC_REG_UNDEFINED,
|
||||
.type = ORC_TYPE_CALL
|
||||
};
|
||||
|
||||
static struct orc_entry *orc_find(unsigned long ip)
|
||||
{
|
||||
if (!orc_init)
|
||||
return NULL;
|
||||
|
||||
if (ip == 0)
|
||||
return &null_orc_entry;
|
||||
|
||||
/* For non-init vmlinux addresses, use the fast lookup table: */
|
||||
if (ip >= LOOKUP_START_IP && ip < LOOKUP_STOP_IP) {
|
||||
unsigned int idx, start, stop;
|
||||
|
||||
@@ -174,6 +174,10 @@ struct sk_buff *h4_recv_buf(struct hci_dev *hdev, struct sk_buff *skb,
|
||||
struct hci_uart *hu = hci_get_drvdata(hdev);
|
||||
u8 alignment = hu->alignment ? hu->alignment : 1;
|
||||
|
||||
/* Check for error from previous call */
|
||||
if (IS_ERR(skb))
|
||||
skb = NULL;
|
||||
|
||||
while (count) {
|
||||
int i, len;
|
||||
|
||||
|
||||
@@ -207,11 +207,11 @@ static void hci_uart_init_work(struct work_struct *work)
|
||||
err = hci_register_dev(hu->hdev);
|
||||
if (err < 0) {
|
||||
BT_ERR("Can't register HCI device");
|
||||
clear_bit(HCI_UART_PROTO_READY, &hu->flags);
|
||||
hu->proto->close(hu);
|
||||
hdev = hu->hdev;
|
||||
hu->hdev = NULL;
|
||||
hci_free_dev(hdev);
|
||||
clear_bit(HCI_UART_PROTO_READY, &hu->flags);
|
||||
hu->proto->close(hu);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -612,6 +612,7 @@ static void hci_uart_tty_receive(struct tty_struct *tty, const u8 *data,
|
||||
static int hci_uart_register_dev(struct hci_uart *hu)
|
||||
{
|
||||
struct hci_dev *hdev;
|
||||
int err;
|
||||
|
||||
BT_DBG("");
|
||||
|
||||
@@ -655,11 +656,22 @@ static int hci_uart_register_dev(struct hci_uart *hu)
|
||||
else
|
||||
hdev->dev_type = HCI_PRIMARY;
|
||||
|
||||
/* Only call open() for the protocol after hdev is fully initialized as
|
||||
* open() (or a timer/workqueue it starts) may attempt to reference it.
|
||||
*/
|
||||
err = hu->proto->open(hu);
|
||||
if (err) {
|
||||
hu->hdev = NULL;
|
||||
hci_free_dev(hdev);
|
||||
return err;
|
||||
}
|
||||
|
||||
if (test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
|
||||
return 0;
|
||||
|
||||
if (hci_register_dev(hdev) < 0) {
|
||||
BT_ERR("Can't register HCI device");
|
||||
hu->proto->close(hu);
|
||||
hu->hdev = NULL;
|
||||
hci_free_dev(hdev);
|
||||
return -ENODEV;
|
||||
@@ -679,20 +691,14 @@ static int hci_uart_set_proto(struct hci_uart *hu, int id)
|
||||
if (!p)
|
||||
return -EPROTONOSUPPORT;
|
||||
|
||||
err = p->open(hu);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
hu->proto = p;
|
||||
set_bit(HCI_UART_PROTO_READY, &hu->flags);
|
||||
|
||||
err = hci_uart_register_dev(hu);
|
||||
if (err) {
|
||||
clear_bit(HCI_UART_PROTO_READY, &hu->flags);
|
||||
p->close(hu);
|
||||
return err;
|
||||
}
|
||||
|
||||
set_bit(HCI_UART_PROTO_READY, &hu->flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -432,12 +432,13 @@ static int set_property_atomic(struct drm_mode_object *obj,
|
||||
struct drm_modeset_acquire_ctx ctx;
|
||||
int ret;
|
||||
|
||||
drm_modeset_acquire_init(&ctx, 0);
|
||||
|
||||
state = drm_atomic_state_alloc(dev);
|
||||
if (!state)
|
||||
return -ENOMEM;
|
||||
|
||||
drm_modeset_acquire_init(&ctx, 0);
|
||||
state->acquire_ctx = &ctx;
|
||||
|
||||
retry:
|
||||
if (prop == state->dev->mode_config.dpms_property) {
|
||||
if (obj->type != DRM_MODE_OBJECT_CONNECTOR) {
|
||||
|
||||
@@ -588,11 +588,9 @@ static int vmw_fb_set_par(struct fb_info *info)
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC)
|
||||
};
|
||||
struct drm_display_mode *old_mode;
|
||||
struct drm_display_mode *mode;
|
||||
int ret;
|
||||
|
||||
old_mode = par->set_mode;
|
||||
mode = drm_mode_duplicate(vmw_priv->dev, &new_mode);
|
||||
if (!mode) {
|
||||
DRM_ERROR("Could not create new fb mode.\n");
|
||||
@@ -603,11 +601,7 @@ static int vmw_fb_set_par(struct fb_info *info)
|
||||
mode->vdisplay = var->yres;
|
||||
vmw_guess_mode_timing(mode);
|
||||
|
||||
if (old_mode && drm_mode_equal(old_mode, mode)) {
|
||||
drm_mode_destroy(vmw_priv->dev, mode);
|
||||
mode = old_mode;
|
||||
old_mode = NULL;
|
||||
} else if (!vmw_kms_validate_mode_vram(vmw_priv,
|
||||
if (!vmw_kms_validate_mode_vram(vmw_priv,
|
||||
mode->hdisplay *
|
||||
DIV_ROUND_UP(var->bits_per_pixel, 8),
|
||||
mode->vdisplay)) {
|
||||
@@ -677,8 +671,8 @@ static int vmw_fb_set_par(struct fb_info *info)
|
||||
schedule_delayed_work(&par->local_work, 0);
|
||||
|
||||
out_unlock:
|
||||
if (old_mode)
|
||||
drm_mode_destroy(vmw_priv->dev, old_mode);
|
||||
if (par->set_mode)
|
||||
drm_mode_destroy(vmw_priv->dev, par->set_mode);
|
||||
par->set_mode = mode;
|
||||
|
||||
drm_modeset_unlock_all(vmw_priv->dev);
|
||||
|
||||
@@ -2548,7 +2548,12 @@ static int map_sg(struct device *dev, struct scatterlist *sglist,
|
||||
|
||||
/* Everything is mapped - write the right values into s->dma_address */
|
||||
for_each_sg(sglist, s, nelems, i) {
|
||||
s->dma_address += address + s->offset;
|
||||
/*
|
||||
* Add in the remaining piece of the scatter-gather offset that
|
||||
* was masked out when we were determining the physical address
|
||||
* via (sg_phys(s) & PAGE_MASK) earlier.
|
||||
*/
|
||||
s->dma_address += address + (s->offset & ~PAGE_MASK);
|
||||
s->dma_length = s->length;
|
||||
}
|
||||
|
||||
|
||||
@@ -1203,7 +1203,7 @@ static void uvc_ctrl_fill_event(struct uvc_video_chain *chain,
|
||||
|
||||
__uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl);
|
||||
|
||||
memset(ev->reserved, 0, sizeof(ev->reserved));
|
||||
memset(ev, 0, sizeof(*ev));
|
||||
ev->type = V4L2_EVENT_CTRL;
|
||||
ev->id = v4l2_ctrl.id;
|
||||
ev->u.ctrl.value = value;
|
||||
|
||||
@@ -1239,7 +1239,7 @@ static u32 user_flags(const struct v4l2_ctrl *ctrl)
|
||||
|
||||
static void fill_event(struct v4l2_event *ev, struct v4l2_ctrl *ctrl, u32 changes)
|
||||
{
|
||||
memset(ev->reserved, 0, sizeof(ev->reserved));
|
||||
memset(ev, 0, sizeof(*ev));
|
||||
ev->type = V4L2_EVENT_CTRL;
|
||||
ev->id = ctrl->id;
|
||||
ev->u.ctrl.changes = changes;
|
||||
|
||||
@@ -181,7 +181,7 @@ static void pxamci_dma_irq(void *param);
|
||||
static void pxamci_setup_data(struct pxamci_host *host, struct mmc_data *data)
|
||||
{
|
||||
struct dma_async_tx_descriptor *tx;
|
||||
enum dma_data_direction direction;
|
||||
enum dma_transfer_direction direction;
|
||||
struct dma_slave_config config;
|
||||
struct dma_chan *chan;
|
||||
unsigned int nob = data->blocks;
|
||||
|
||||
@@ -4309,7 +4309,7 @@ static void ath10k_tpc_config_disp_tables(struct ath10k *ar,
|
||||
rate_code[i],
|
||||
type);
|
||||
snprintf(buff, sizeof(buff), "%8d ", tpc[j]);
|
||||
strncat(tpc_value, buff, strlen(buff));
|
||||
strlcat(tpc_value, buff, sizeof(tpc_value));
|
||||
}
|
||||
tpc_stats->tpc_table[type].pream_idx[i] = pream_idx;
|
||||
tpc_stats->tpc_table[type].rate_code[i] = rate_code[i];
|
||||
|
||||
@@ -35,8 +35,10 @@ static void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar)
|
||||
u32 reg;
|
||||
|
||||
reg = PCI_BASE_ADDRESS_0 + (4 * bar);
|
||||
dw_pcie_dbi_ro_wr_en(pci);
|
||||
dw_pcie_writel_dbi2(pci, reg, 0x0);
|
||||
dw_pcie_writel_dbi(pci, reg, 0x0);
|
||||
dw_pcie_dbi_ro_wr_dis(pci);
|
||||
}
|
||||
|
||||
static int dw_pcie_ep_write_header(struct pci_epc *epc,
|
||||
@@ -45,6 +47,7 @@ static int dw_pcie_ep_write_header(struct pci_epc *epc,
|
||||
struct dw_pcie_ep *ep = epc_get_drvdata(epc);
|
||||
struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
|
||||
|
||||
dw_pcie_dbi_ro_wr_en(pci);
|
||||
dw_pcie_writew_dbi(pci, PCI_VENDOR_ID, hdr->vendorid);
|
||||
dw_pcie_writew_dbi(pci, PCI_DEVICE_ID, hdr->deviceid);
|
||||
dw_pcie_writeb_dbi(pci, PCI_REVISION_ID, hdr->revid);
|
||||
@@ -58,6 +61,7 @@ static int dw_pcie_ep_write_header(struct pci_epc *epc,
|
||||
dw_pcie_writew_dbi(pci, PCI_SUBSYSTEM_ID, hdr->subsys_id);
|
||||
dw_pcie_writeb_dbi(pci, PCI_INTERRUPT_PIN,
|
||||
hdr->interrupt_pin);
|
||||
dw_pcie_dbi_ro_wr_dis(pci);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -142,8 +146,10 @@ static int dw_pcie_ep_set_bar(struct pci_epc *epc, enum pci_barno bar,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
dw_pcie_dbi_ro_wr_en(pci);
|
||||
dw_pcie_writel_dbi2(pci, reg, size - 1);
|
||||
dw_pcie_writel_dbi(pci, reg, flags);
|
||||
dw_pcie_dbi_ro_wr_dis(pci);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -214,8 +220,12 @@ static int dw_pcie_ep_set_msi(struct pci_epc *epc, u8 encode_int)
|
||||
struct dw_pcie_ep *ep = epc_get_drvdata(epc);
|
||||
struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
|
||||
|
||||
val = (encode_int << MSI_CAP_MMC_SHIFT);
|
||||
val = dw_pcie_readw_dbi(pci, MSI_MESSAGE_CONTROL);
|
||||
val &= ~MSI_CAP_MMC_MASK;
|
||||
val |= (encode_int << MSI_CAP_MMC_SHIFT) & MSI_CAP_MMC_MASK;
|
||||
dw_pcie_dbi_ro_wr_en(pci);
|
||||
dw_pcie_writew_dbi(pci, MSI_MESSAGE_CONTROL, val);
|
||||
dw_pcie_dbi_ro_wr_dis(pci);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -99,6 +99,7 @@
|
||||
|
||||
#define MSI_MESSAGE_CONTROL 0x52
|
||||
#define MSI_CAP_MMC_SHIFT 1
|
||||
#define MSI_CAP_MMC_MASK (7 << MSI_CAP_MMC_SHIFT)
|
||||
#define MSI_CAP_MME_SHIFT 4
|
||||
#define MSI_CAP_MSI_EN_MASK 0x1
|
||||
#define MSI_CAP_MME_MASK (7 << MSI_CAP_MME_SHIFT)
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
*/
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_device.h>
|
||||
@@ -371,7 +370,6 @@ EXPORT_SYMBOL_GPL(pci_epc_write_header);
|
||||
int pci_epc_add_epf(struct pci_epc *epc, struct pci_epf *epf)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct device *dev = epc->dev.parent;
|
||||
|
||||
if (epf->epc)
|
||||
return -EBUSY;
|
||||
@@ -383,12 +381,6 @@ int pci_epc_add_epf(struct pci_epc *epc, struct pci_epf *epf)
|
||||
return -EINVAL;
|
||||
|
||||
epf->epc = epc;
|
||||
if (dev->of_node) {
|
||||
of_dma_configure(&epf->dev, dev->of_node);
|
||||
} else {
|
||||
dma_set_coherent_mask(&epf->dev, epc->dev.coherent_dma_mask);
|
||||
epf->dev.dma_mask = epc->dev.dma_mask;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&epc->lock, flags);
|
||||
list_add_tail(&epf->list, &epc->pci_epf);
|
||||
@@ -503,9 +495,7 @@ __pci_epc_create(struct device *dev, const struct pci_epc_ops *ops,
|
||||
INIT_LIST_HEAD(&epc->pci_epf);
|
||||
|
||||
device_initialize(&epc->dev);
|
||||
dma_set_coherent_mask(&epc->dev, dev->coherent_dma_mask);
|
||||
epc->dev.class = pci_epc_class;
|
||||
epc->dev.dma_mask = dev->dma_mask;
|
||||
epc->dev.parent = dev;
|
||||
epc->ops = ops;
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ EXPORT_SYMBOL_GPL(pci_epf_bind);
|
||||
*/
|
||||
void pci_epf_free_space(struct pci_epf *epf, void *addr, enum pci_barno bar)
|
||||
{
|
||||
struct device *dev = &epf->dev;
|
||||
struct device *dev = epf->epc->dev.parent;
|
||||
|
||||
if (!addr)
|
||||
return;
|
||||
@@ -122,7 +122,7 @@ EXPORT_SYMBOL_GPL(pci_epf_free_space);
|
||||
void *pci_epf_alloc_space(struct pci_epf *epf, size_t size, enum pci_barno bar)
|
||||
{
|
||||
void *space;
|
||||
struct device *dev = &epf->dev;
|
||||
struct device *dev = epf->epc->dev.parent;
|
||||
dma_addr_t phys_addr;
|
||||
|
||||
if (size < 128)
|
||||
|
||||
@@ -1212,7 +1212,6 @@ static int charger_extcon_init(struct charger_manager *cm,
|
||||
if (ret < 0) {
|
||||
pr_info("Cannot register extcon_dev for %s(cable: %s)\n",
|
||||
cable->extcon_name, cable->name);
|
||||
ret = -EINVAL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -1629,7 +1628,7 @@ static int charger_manager_probe(struct platform_device *pdev)
|
||||
|
||||
if (IS_ERR(desc)) {
|
||||
dev_err(&pdev->dev, "No platform data (desc) found\n");
|
||||
return -ENODEV;
|
||||
return PTR_ERR(desc);
|
||||
}
|
||||
|
||||
cm = devm_kzalloc(&pdev->dev, sizeof(*cm), GFP_KERNEL);
|
||||
|
||||
@@ -52,13 +52,11 @@ EXPORT_SYMBOL(rtc_year_days);
|
||||
*/
|
||||
void rtc_time64_to_tm(time64_t time, struct rtc_time *tm)
|
||||
{
|
||||
unsigned int month, year;
|
||||
unsigned long secs;
|
||||
unsigned int month, year, secs;
|
||||
int days;
|
||||
|
||||
/* time must be positive */
|
||||
days = div_s64(time, 86400);
|
||||
secs = time - (unsigned int) days * 86400;
|
||||
days = div_s64_rem(time, 86400, &secs);
|
||||
|
||||
/* day of the week, 1970-01-01 was a Thursday */
|
||||
tm->tm_wday = (days + 4) % 7;
|
||||
|
||||
@@ -96,6 +96,7 @@ static int client_reserve = 1;
|
||||
static char partition_name[96] = "UNKNOWN";
|
||||
static unsigned int partition_number = -1;
|
||||
static LIST_HEAD(ibmvscsi_head);
|
||||
static DEFINE_SPINLOCK(ibmvscsi_driver_lock);
|
||||
|
||||
static struct scsi_transport_template *ibmvscsi_transport_template;
|
||||
|
||||
@@ -2274,7 +2275,9 @@ static int ibmvscsi_probe(struct vio_dev *vdev, const struct vio_device_id *id)
|
||||
}
|
||||
|
||||
dev_set_drvdata(&vdev->dev, hostdata);
|
||||
spin_lock(&ibmvscsi_driver_lock);
|
||||
list_add_tail(&hostdata->host_list, &ibmvscsi_head);
|
||||
spin_unlock(&ibmvscsi_driver_lock);
|
||||
return 0;
|
||||
|
||||
add_srp_port_failed:
|
||||
@@ -2296,15 +2299,27 @@ static int ibmvscsi_probe(struct vio_dev *vdev, const struct vio_device_id *id)
|
||||
static int ibmvscsi_remove(struct vio_dev *vdev)
|
||||
{
|
||||
struct ibmvscsi_host_data *hostdata = dev_get_drvdata(&vdev->dev);
|
||||
list_del(&hostdata->host_list);
|
||||
unmap_persist_bufs(hostdata);
|
||||
unsigned long flags;
|
||||
|
||||
srp_remove_host(hostdata->host);
|
||||
scsi_remove_host(hostdata->host);
|
||||
|
||||
purge_requests(hostdata, DID_ERROR);
|
||||
|
||||
spin_lock_irqsave(hostdata->host->host_lock, flags);
|
||||
release_event_pool(&hostdata->pool, hostdata);
|
||||
spin_unlock_irqrestore(hostdata->host->host_lock, flags);
|
||||
|
||||
ibmvscsi_release_crq_queue(&hostdata->queue, hostdata,
|
||||
max_events);
|
||||
|
||||
kthread_stop(hostdata->work_thread);
|
||||
srp_remove_host(hostdata->host);
|
||||
scsi_remove_host(hostdata->host);
|
||||
unmap_persist_bufs(hostdata);
|
||||
|
||||
spin_lock(&ibmvscsi_driver_lock);
|
||||
list_del(&hostdata->host_list);
|
||||
spin_unlock(&ibmvscsi_driver_lock);
|
||||
|
||||
scsi_host_put(hostdata->host);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -2195,10 +2195,11 @@ static int ufshcd_comp_devman_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
|
||||
u32 upiu_flags;
|
||||
int ret = 0;
|
||||
|
||||
if (hba->ufs_version == UFSHCI_VERSION_20)
|
||||
lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE;
|
||||
else
|
||||
if ((hba->ufs_version == UFSHCI_VERSION_10) ||
|
||||
(hba->ufs_version == UFSHCI_VERSION_11))
|
||||
lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE;
|
||||
else
|
||||
lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE;
|
||||
|
||||
ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, DMA_NONE);
|
||||
if (hba->dev_cmd.type == DEV_CMD_TYPE_QUERY)
|
||||
@@ -2222,10 +2223,11 @@ static int ufshcd_comp_scsi_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
|
||||
u32 upiu_flags;
|
||||
int ret = 0;
|
||||
|
||||
if (hba->ufs_version == UFSHCI_VERSION_20)
|
||||
lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE;
|
||||
else
|
||||
if ((hba->ufs_version == UFSHCI_VERSION_10) ||
|
||||
(hba->ufs_version == UFSHCI_VERSION_11))
|
||||
lrbp->command_type = UTP_CMD_TYPE_SCSI;
|
||||
else
|
||||
lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE;
|
||||
|
||||
if (likely(lrbp->cmd)) {
|
||||
ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags,
|
||||
|
||||
@@ -768,18 +768,21 @@ void usb_destroy_configuration(struct usb_device *dev)
|
||||
return;
|
||||
|
||||
if (dev->rawdescriptors) {
|
||||
for (i = 0; i < dev->descriptor.bNumConfigurations; i++)
|
||||
for (i = 0; i < dev->descriptor.bNumConfigurations &&
|
||||
i < USB_MAXCONFIG; i++)
|
||||
kfree(dev->rawdescriptors[i]);
|
||||
|
||||
kfree(dev->rawdescriptors);
|
||||
dev->rawdescriptors = NULL;
|
||||
}
|
||||
|
||||
for (c = 0; c < dev->descriptor.bNumConfigurations; c++) {
|
||||
for (c = 0; c < dev->descriptor.bNumConfigurations &&
|
||||
c < USB_MAXCONFIG; c++) {
|
||||
struct usb_host_config *cf = &dev->config[c];
|
||||
|
||||
kfree(cf->string);
|
||||
for (i = 0; i < cf->desc.bNumInterfaces; i++) {
|
||||
for (i = 0; i < cf->desc.bNumInterfaces &&
|
||||
i < USB_MAXINTERFACES; i++) {
|
||||
if (cf->intf_cache[i])
|
||||
kref_put(&cf->intf_cache[i]->ref,
|
||||
usb_release_interface_cache);
|
||||
|
||||
@@ -54,10 +54,11 @@ static void pwm_backlight_power_on(struct pwm_bl_data *pb, int brightness)
|
||||
if (err < 0)
|
||||
dev_err(pb->dev, "failed to enable power supply\n");
|
||||
|
||||
pwm_enable(pb->pwm);
|
||||
|
||||
if (pb->enable_gpio)
|
||||
gpiod_set_value_cansleep(pb->enable_gpio, 1);
|
||||
|
||||
pwm_enable(pb->pwm);
|
||||
pb->enabled = true;
|
||||
}
|
||||
|
||||
@@ -66,12 +67,12 @@ static void pwm_backlight_power_off(struct pwm_bl_data *pb)
|
||||
if (!pb->enabled)
|
||||
return;
|
||||
|
||||
pwm_config(pb->pwm, 0, pb->period);
|
||||
pwm_disable(pb->pwm);
|
||||
|
||||
if (pb->enable_gpio)
|
||||
gpiod_set_value_cansleep(pb->enable_gpio, 0);
|
||||
|
||||
pwm_config(pb->pwm, 0, pb->period);
|
||||
pwm_disable(pb->pwm);
|
||||
|
||||
regulator_disable(pb->power_supply);
|
||||
pb->enabled = false;
|
||||
}
|
||||
|
||||
@@ -387,7 +387,7 @@ static inline void ext4_update_inode_fsync_trans(handle_t *handle,
|
||||
{
|
||||
struct ext4_inode_info *ei = EXT4_I(inode);
|
||||
|
||||
if (ext4_handle_valid(handle)) {
|
||||
if (ext4_handle_valid(handle) && !is_handle_aborted(handle)) {
|
||||
ei->i_sync_tid = handle->h_transaction->t_tid;
|
||||
if (datasync)
|
||||
ei->i_datasync_tid = handle->h_transaction->t_tid;
|
||||
|
||||
@@ -123,7 +123,7 @@ ext4_unaligned_aio(struct inode *inode, struct iov_iter *from, loff_t pos)
|
||||
struct super_block *sb = inode->i_sb;
|
||||
int blockmask = sb->s_blocksize - 1;
|
||||
|
||||
if (pos >= i_size_read(inode))
|
||||
if (pos >= ALIGN(i_size_read(inode), sb->s_blocksize))
|
||||
return 0;
|
||||
|
||||
if ((pos | iov_iter_alignment(from)) & blockmask)
|
||||
|
||||
@@ -1387,10 +1387,14 @@ end_range:
|
||||
partial->p + 1,
|
||||
partial2->p,
|
||||
(chain+n-1) - partial);
|
||||
BUFFER_TRACE(partial->bh, "call brelse");
|
||||
brelse(partial->bh);
|
||||
BUFFER_TRACE(partial2->bh, "call brelse");
|
||||
brelse(partial2->bh);
|
||||
while (partial > chain) {
|
||||
BUFFER_TRACE(partial->bh, "call brelse");
|
||||
brelse(partial->bh);
|
||||
}
|
||||
while (partial2 > chain2) {
|
||||
BUFFER_TRACE(partial2->bh, "call brelse");
|
||||
brelse(partial2->bh);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -260,6 +260,9 @@ void udf_truncate_extents(struct inode *inode)
|
||||
epos.block = eloc;
|
||||
epos.bh = udf_tread(sb,
|
||||
udf_get_lb_pblock(sb, &eloc, 0));
|
||||
/* Error reading indirect block? */
|
||||
if (!epos.bh)
|
||||
return;
|
||||
if (elen)
|
||||
indirect_ext_len =
|
||||
(elen + sb->s_blocksize - 1) >>
|
||||
|
||||
@@ -291,6 +291,8 @@ extern void ceph_destroy_client(struct ceph_client *client);
|
||||
extern int __ceph_open_session(struct ceph_client *client,
|
||||
unsigned long started);
|
||||
extern int ceph_open_session(struct ceph_client *client);
|
||||
int ceph_wait_for_latest_osdmap(struct ceph_client *client,
|
||||
unsigned long timeout);
|
||||
|
||||
/* pagevec.c */
|
||||
extern void ceph_release_page_vector(struct page **pages, int num_pages);
|
||||
|
||||
@@ -3450,6 +3450,10 @@ int handle_futex_death(u32 __user *uaddr, struct task_struct *curr, int pi)
|
||||
{
|
||||
u32 uval, uninitialized_var(nval), mval;
|
||||
|
||||
/* Futex address must be 32bit aligned */
|
||||
if ((((unsigned long)uaddr) % sizeof(*uaddr)) != 0)
|
||||
return -1;
|
||||
|
||||
retry:
|
||||
if (get_user(uval, uaddr))
|
||||
return -1;
|
||||
|
||||
@@ -3650,6 +3650,9 @@ __lock_set_class(struct lockdep_map *lock, const char *name,
|
||||
unsigned int depth;
|
||||
int i;
|
||||
|
||||
if (unlikely(!debug_locks))
|
||||
return 0;
|
||||
|
||||
depth = curr->lockdep_depth;
|
||||
/*
|
||||
* This function is about (re)setting the class of a held lock,
|
||||
|
||||
@@ -680,10 +680,9 @@ fail:
|
||||
|
||||
stop_kthread:
|
||||
sugov_kthread_stop(sg_policy);
|
||||
|
||||
free_sg_policy:
|
||||
mutex_unlock(&global_tunables_lock);
|
||||
|
||||
free_sg_policy:
|
||||
sugov_policy_free(sg_policy);
|
||||
|
||||
disable_fast_switch:
|
||||
|
||||
@@ -23,6 +23,9 @@ unsigned long int_sqrt(unsigned long x)
|
||||
return x;
|
||||
|
||||
m = 1UL << (BITS_PER_LONG - 2);
|
||||
while (m > x)
|
||||
m >>= 2;
|
||||
|
||||
while (m != 0) {
|
||||
b = y + m;
|
||||
y >>= 1;
|
||||
|
||||
@@ -826,8 +826,6 @@ static int hci_sock_release(struct socket *sock)
|
||||
if (!sk)
|
||||
return 0;
|
||||
|
||||
hdev = hci_pi(sk)->hdev;
|
||||
|
||||
switch (hci_pi(sk)->channel) {
|
||||
case HCI_CHANNEL_MONITOR:
|
||||
atomic_dec(&monitor_promisc);
|
||||
@@ -849,6 +847,7 @@ static int hci_sock_release(struct socket *sock)
|
||||
|
||||
bt_sock_unlink(&hci_sk_list, sk);
|
||||
|
||||
hdev = hci_pi(sk)->hdev;
|
||||
if (hdev) {
|
||||
if (hci_pi(sk)->channel == HCI_CHANNEL_USER) {
|
||||
/* When releasing a user channel exclusive access,
|
||||
|
||||
@@ -31,10 +31,6 @@
|
||||
/* needed for logical [in,out]-dev filtering */
|
||||
#include "../br_private.h"
|
||||
|
||||
#define BUGPRINT(format, args...) printk("kernel msg: ebtables bug: please "\
|
||||
"report to author: "format, ## args)
|
||||
/* #define BUGPRINT(format, args...) */
|
||||
|
||||
/* Each cpu has its own set of counters, so there is no need for write_lock in
|
||||
* the softirq
|
||||
* For reading or updating the counters, the user context needs to
|
||||
@@ -453,8 +449,6 @@ static int ebt_verify_pointers(const struct ebt_replace *repl,
|
||||
/* we make userspace set this right,
|
||||
* so there is no misunderstanding
|
||||
*/
|
||||
BUGPRINT("EBT_ENTRY_OR_ENTRIES shouldn't be set "
|
||||
"in distinguisher\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (i != NF_BR_NUMHOOKS)
|
||||
@@ -472,18 +466,14 @@ static int ebt_verify_pointers(const struct ebt_replace *repl,
|
||||
offset += e->next_offset;
|
||||
}
|
||||
}
|
||||
if (offset != limit) {
|
||||
BUGPRINT("entries_size too small\n");
|
||||
if (offset != limit)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* check if all valid hooks have a chain */
|
||||
for (i = 0; i < NF_BR_NUMHOOKS; i++) {
|
||||
if (!newinfo->hook_entry[i] &&
|
||||
(valid_hooks & (1 << i))) {
|
||||
BUGPRINT("Valid hook without chain\n");
|
||||
(valid_hooks & (1 << i)))
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -510,26 +500,20 @@ ebt_check_entry_size_and_hooks(const struct ebt_entry *e,
|
||||
/* this checks if the previous chain has as many entries
|
||||
* as it said it has
|
||||
*/
|
||||
if (*n != *cnt) {
|
||||
BUGPRINT("nentries does not equal the nr of entries "
|
||||
"in the chain\n");
|
||||
if (*n != *cnt)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (((struct ebt_entries *)e)->policy != EBT_DROP &&
|
||||
((struct ebt_entries *)e)->policy != EBT_ACCEPT) {
|
||||
/* only RETURN from udc */
|
||||
if (i != NF_BR_NUMHOOKS ||
|
||||
((struct ebt_entries *)e)->policy != EBT_RETURN) {
|
||||
BUGPRINT("bad policy\n");
|
||||
((struct ebt_entries *)e)->policy != EBT_RETURN)
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
if (i == NF_BR_NUMHOOKS) /* it's a user defined chain */
|
||||
(*udc_cnt)++;
|
||||
if (((struct ebt_entries *)e)->counter_offset != *totalcnt) {
|
||||
BUGPRINT("counter_offset != totalcnt");
|
||||
if (((struct ebt_entries *)e)->counter_offset != *totalcnt)
|
||||
return -EINVAL;
|
||||
}
|
||||
*n = ((struct ebt_entries *)e)->nentries;
|
||||
*cnt = 0;
|
||||
return 0;
|
||||
@@ -537,15 +521,13 @@ ebt_check_entry_size_and_hooks(const struct ebt_entry *e,
|
||||
/* a plain old entry, heh */
|
||||
if (sizeof(struct ebt_entry) > e->watchers_offset ||
|
||||
e->watchers_offset > e->target_offset ||
|
||||
e->target_offset >= e->next_offset) {
|
||||
BUGPRINT("entry offsets not in right order\n");
|
||||
e->target_offset >= e->next_offset)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* this is not checked anywhere else */
|
||||
if (e->next_offset - e->target_offset < sizeof(struct ebt_entry_target)) {
|
||||
BUGPRINT("target size too small\n");
|
||||
if (e->next_offset - e->target_offset < sizeof(struct ebt_entry_target))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
(*cnt)++;
|
||||
(*totalcnt)++;
|
||||
return 0;
|
||||
@@ -665,18 +647,15 @@ ebt_check_entry(struct ebt_entry *e, struct net *net,
|
||||
if (e->bitmask == 0)
|
||||
return 0;
|
||||
|
||||
if (e->bitmask & ~EBT_F_MASK) {
|
||||
BUGPRINT("Unknown flag for bitmask\n");
|
||||
if (e->bitmask & ~EBT_F_MASK)
|
||||
return -EINVAL;
|
||||
}
|
||||
if (e->invflags & ~EBT_INV_MASK) {
|
||||
BUGPRINT("Unknown flag for inv bitmask\n");
|
||||
|
||||
if (e->invflags & ~EBT_INV_MASK)
|
||||
return -EINVAL;
|
||||
}
|
||||
if ((e->bitmask & EBT_NOPROTO) && (e->bitmask & EBT_802_3)) {
|
||||
BUGPRINT("NOPROTO & 802_3 not allowed\n");
|
||||
|
||||
if ((e->bitmask & EBT_NOPROTO) && (e->bitmask & EBT_802_3))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* what hook do we belong to? */
|
||||
for (i = 0; i < NF_BR_NUMHOOKS; i++) {
|
||||
if (!newinfo->hook_entry[i])
|
||||
@@ -735,13 +714,11 @@ ebt_check_entry(struct ebt_entry *e, struct net *net,
|
||||
t->u.target = target;
|
||||
if (t->u.target == &ebt_standard_target) {
|
||||
if (gap < sizeof(struct ebt_standard_target)) {
|
||||
BUGPRINT("Standard target size too big\n");
|
||||
ret = -EFAULT;
|
||||
goto cleanup_watchers;
|
||||
}
|
||||
if (((struct ebt_standard_target *)t)->verdict <
|
||||
-NUM_STANDARD_TARGETS) {
|
||||
BUGPRINT("Invalid standard target\n");
|
||||
ret = -EFAULT;
|
||||
goto cleanup_watchers;
|
||||
}
|
||||
@@ -801,10 +778,9 @@ static int check_chainloops(const struct ebt_entries *chain, struct ebt_cl_stack
|
||||
if (strcmp(t->u.name, EBT_STANDARD_TARGET))
|
||||
goto letscontinue;
|
||||
if (e->target_offset + sizeof(struct ebt_standard_target) >
|
||||
e->next_offset) {
|
||||
BUGPRINT("Standard target size too big\n");
|
||||
e->next_offset)
|
||||
return -1;
|
||||
}
|
||||
|
||||
verdict = ((struct ebt_standard_target *)t)->verdict;
|
||||
if (verdict >= 0) { /* jump to another chain */
|
||||
struct ebt_entries *hlp2 =
|
||||
@@ -813,14 +789,12 @@ static int check_chainloops(const struct ebt_entries *chain, struct ebt_cl_stack
|
||||
if (hlp2 == cl_s[i].cs.chaininfo)
|
||||
break;
|
||||
/* bad destination or loop */
|
||||
if (i == udc_cnt) {
|
||||
BUGPRINT("bad destination\n");
|
||||
if (i == udc_cnt)
|
||||
return -1;
|
||||
}
|
||||
if (cl_s[i].cs.n) {
|
||||
BUGPRINT("loop\n");
|
||||
|
||||
if (cl_s[i].cs.n)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (cl_s[i].hookmask & (1 << hooknr))
|
||||
goto letscontinue;
|
||||
/* this can't be 0, so the loop test is correct */
|
||||
@@ -853,24 +827,21 @@ static int translate_table(struct net *net, const char *name,
|
||||
i = 0;
|
||||
while (i < NF_BR_NUMHOOKS && !newinfo->hook_entry[i])
|
||||
i++;
|
||||
if (i == NF_BR_NUMHOOKS) {
|
||||
BUGPRINT("No valid hooks specified\n");
|
||||
if (i == NF_BR_NUMHOOKS)
|
||||
return -EINVAL;
|
||||
}
|
||||
if (newinfo->hook_entry[i] != (struct ebt_entries *)newinfo->entries) {
|
||||
BUGPRINT("Chains don't start at beginning\n");
|
||||
|
||||
if (newinfo->hook_entry[i] != (struct ebt_entries *)newinfo->entries)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* make sure chains are ordered after each other in same order
|
||||
* as their corresponding hooks
|
||||
*/
|
||||
for (j = i + 1; j < NF_BR_NUMHOOKS; j++) {
|
||||
if (!newinfo->hook_entry[j])
|
||||
continue;
|
||||
if (newinfo->hook_entry[j] <= newinfo->hook_entry[i]) {
|
||||
BUGPRINT("Hook order must be followed\n");
|
||||
if (newinfo->hook_entry[j] <= newinfo->hook_entry[i])
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
i = j;
|
||||
}
|
||||
|
||||
@@ -888,15 +859,11 @@ static int translate_table(struct net *net, const char *name,
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
if (i != j) {
|
||||
BUGPRINT("nentries does not equal the nr of entries in the "
|
||||
"(last) chain\n");
|
||||
if (i != j)
|
||||
return -EINVAL;
|
||||
}
|
||||
if (k != newinfo->nentries) {
|
||||
BUGPRINT("Total nentries is wrong\n");
|
||||
|
||||
if (k != newinfo->nentries)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* get the location of the udc, put them in an array
|
||||
* while we're at it, allocate the chainstack
|
||||
@@ -929,7 +896,6 @@ static int translate_table(struct net *net, const char *name,
|
||||
ebt_get_udc_positions, newinfo, &i, cl_s);
|
||||
/* sanity check */
|
||||
if (i != udc_cnt) {
|
||||
BUGPRINT("i != udc_cnt\n");
|
||||
vfree(cl_s);
|
||||
return -EFAULT;
|
||||
}
|
||||
@@ -1030,7 +996,6 @@ static int do_replace_finish(struct net *net, struct ebt_replace *repl,
|
||||
goto free_unlock;
|
||||
|
||||
if (repl->num_counters && repl->num_counters != t->private->nentries) {
|
||||
BUGPRINT("Wrong nr. of counters requested\n");
|
||||
ret = -EINVAL;
|
||||
goto free_unlock;
|
||||
}
|
||||
@@ -1115,15 +1080,12 @@ static int do_replace(struct net *net, const void __user *user,
|
||||
if (copy_from_user(&tmp, user, sizeof(tmp)) != 0)
|
||||
return -EFAULT;
|
||||
|
||||
if (len != sizeof(tmp) + tmp.entries_size) {
|
||||
BUGPRINT("Wrong len argument\n");
|
||||
if (len != sizeof(tmp) + tmp.entries_size)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (tmp.entries_size == 0) {
|
||||
BUGPRINT("Entries_size never zero\n");
|
||||
if (tmp.entries_size == 0)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* overflow check */
|
||||
if (tmp.nentries >= ((INT_MAX - sizeof(struct ebt_table_info)) /
|
||||
NR_CPUS - SMP_CACHE_BYTES) / sizeof(struct ebt_counter))
|
||||
@@ -1150,7 +1112,6 @@ static int do_replace(struct net *net, const void __user *user,
|
||||
}
|
||||
if (copy_from_user(
|
||||
newinfo->entries, tmp.entries, tmp.entries_size) != 0) {
|
||||
BUGPRINT("Couldn't copy entries from userspace\n");
|
||||
ret = -EFAULT;
|
||||
goto free_entries;
|
||||
}
|
||||
@@ -1197,10 +1158,8 @@ int ebt_register_table(struct net *net, const struct ebt_table *input_table,
|
||||
|
||||
if (input_table == NULL || (repl = input_table->table) == NULL ||
|
||||
repl->entries == NULL || repl->entries_size == 0 ||
|
||||
repl->counters != NULL || input_table->private != NULL) {
|
||||
BUGPRINT("Bad table data for ebt_register_table!!!\n");
|
||||
repl->counters != NULL || input_table->private != NULL)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Don't add one table to multiple lists. */
|
||||
table = kmemdup(input_table, sizeof(struct ebt_table), GFP_KERNEL);
|
||||
@@ -1238,13 +1197,10 @@ int ebt_register_table(struct net *net, const struct ebt_table *input_table,
|
||||
((char *)repl->hook_entry[i] - repl->entries);
|
||||
}
|
||||
ret = translate_table(net, repl->name, newinfo);
|
||||
if (ret != 0) {
|
||||
BUGPRINT("Translate_table failed\n");
|
||||
if (ret != 0)
|
||||
goto free_chainstack;
|
||||
}
|
||||
|
||||
if (table->check && table->check(newinfo, table->valid_hooks)) {
|
||||
BUGPRINT("The table doesn't like its own initial data, lol\n");
|
||||
ret = -EINVAL;
|
||||
goto free_chainstack;
|
||||
}
|
||||
@@ -1255,7 +1211,6 @@ int ebt_register_table(struct net *net, const struct ebt_table *input_table,
|
||||
list_for_each_entry(t, &net->xt.tables[NFPROTO_BRIDGE], list) {
|
||||
if (strcmp(t->name, table->name) == 0) {
|
||||
ret = -EEXIST;
|
||||
BUGPRINT("Table name already exists\n");
|
||||
goto free_unlock;
|
||||
}
|
||||
}
|
||||
@@ -1327,7 +1282,6 @@ static int do_update_counters(struct net *net, const char *name,
|
||||
goto free_tmp;
|
||||
|
||||
if (num_counters != t->private->nentries) {
|
||||
BUGPRINT("Wrong nr of counters\n");
|
||||
ret = -EINVAL;
|
||||
goto unlock_mutex;
|
||||
}
|
||||
@@ -1452,10 +1406,8 @@ static int copy_counters_to_user(struct ebt_table *t,
|
||||
if (num_counters == 0)
|
||||
return 0;
|
||||
|
||||
if (num_counters != nentries) {
|
||||
BUGPRINT("Num_counters wrong\n");
|
||||
if (num_counters != nentries)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
counterstmp = vmalloc(nentries * sizeof(*counterstmp));
|
||||
if (!counterstmp)
|
||||
@@ -1501,15 +1453,11 @@ static int copy_everything_to_user(struct ebt_table *t, void __user *user,
|
||||
(tmp.num_counters ? nentries * sizeof(struct ebt_counter) : 0))
|
||||
return -EINVAL;
|
||||
|
||||
if (tmp.nentries != nentries) {
|
||||
BUGPRINT("Nentries wrong\n");
|
||||
if (tmp.nentries != nentries)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (tmp.entries_size != entries_size) {
|
||||
BUGPRINT("Wrong size\n");
|
||||
if (tmp.entries_size != entries_size)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = copy_counters_to_user(t, oldcounters, tmp.counters,
|
||||
tmp.num_counters, nentries);
|
||||
@@ -1581,7 +1529,6 @@ static int do_ebt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
|
||||
}
|
||||
mutex_unlock(&ebt_mutex);
|
||||
if (copy_to_user(user, &tmp, *len) != 0) {
|
||||
BUGPRINT("c2u Didn't work\n");
|
||||
ret = -EFAULT;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -720,7 +720,6 @@ int __ceph_open_session(struct ceph_client *client, unsigned long started)
|
||||
}
|
||||
EXPORT_SYMBOL(__ceph_open_session);
|
||||
|
||||
|
||||
int ceph_open_session(struct ceph_client *client)
|
||||
{
|
||||
int ret;
|
||||
@@ -736,6 +735,23 @@ int ceph_open_session(struct ceph_client *client)
|
||||
}
|
||||
EXPORT_SYMBOL(ceph_open_session);
|
||||
|
||||
int ceph_wait_for_latest_osdmap(struct ceph_client *client,
|
||||
unsigned long timeout)
|
||||
{
|
||||
u64 newest_epoch;
|
||||
int ret;
|
||||
|
||||
ret = ceph_monc_get_version(&client->monc, "osdmap", &newest_epoch);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (client->osdc.osdmap->epoch >= newest_epoch)
|
||||
return 0;
|
||||
|
||||
ceph_osdc_maybe_request_map(&client->osdc);
|
||||
return ceph_monc_wait_osdmap(&client->monc, newest_epoch, timeout);
|
||||
}
|
||||
EXPORT_SYMBOL(ceph_wait_for_latest_osdmap);
|
||||
|
||||
static int __init init_ceph_lib(void)
|
||||
{
|
||||
|
||||
@@ -922,6 +922,15 @@ int ceph_monc_blacklist_add(struct ceph_mon_client *monc,
|
||||
mutex_unlock(&monc->mutex);
|
||||
|
||||
ret = wait_generic_request(req);
|
||||
if (!ret)
|
||||
/*
|
||||
* Make sure we have the osdmap that includes the blacklist
|
||||
* entry. This is needed to ensure that the OSDs pick up the
|
||||
* new blacklist before processing any future requests from
|
||||
* this client.
|
||||
*/
|
||||
ret = ceph_wait_for_latest_osdmap(monc->client, 0);
|
||||
|
||||
out:
|
||||
put_generic_request(req);
|
||||
return ret;
|
||||
|
||||
@@ -2900,6 +2900,7 @@ static void hda_call_codec_resume(struct hda_codec *codec)
|
||||
hda_jackpoll_work(&codec->jackpoll_work.work);
|
||||
else
|
||||
snd_hda_jack_report_sync(codec);
|
||||
codec->core.dev.power.power_state = PMSG_ON;
|
||||
atomic_dec(&codec->core.in_pm);
|
||||
}
|
||||
|
||||
@@ -2932,10 +2933,62 @@ static int hda_codec_runtime_resume(struct device *dev)
|
||||
}
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int hda_codec_force_resume(struct device *dev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* The get/put pair below enforces the runtime resume even if the
|
||||
* device hasn't been used at suspend time. This trick is needed to
|
||||
* update the jack state change during the sleep.
|
||||
*/
|
||||
pm_runtime_get_noresume(dev);
|
||||
ret = pm_runtime_force_resume(dev);
|
||||
pm_runtime_put(dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int hda_codec_pm_suspend(struct device *dev)
|
||||
{
|
||||
dev->power.power_state = PMSG_SUSPEND;
|
||||
return pm_runtime_force_suspend(dev);
|
||||
}
|
||||
|
||||
static int hda_codec_pm_resume(struct device *dev)
|
||||
{
|
||||
dev->power.power_state = PMSG_RESUME;
|
||||
return hda_codec_force_resume(dev);
|
||||
}
|
||||
|
||||
static int hda_codec_pm_freeze(struct device *dev)
|
||||
{
|
||||
dev->power.power_state = PMSG_FREEZE;
|
||||
return pm_runtime_force_suspend(dev);
|
||||
}
|
||||
|
||||
static int hda_codec_pm_thaw(struct device *dev)
|
||||
{
|
||||
dev->power.power_state = PMSG_THAW;
|
||||
return hda_codec_force_resume(dev);
|
||||
}
|
||||
|
||||
static int hda_codec_pm_restore(struct device *dev)
|
||||
{
|
||||
dev->power.power_state = PMSG_RESTORE;
|
||||
return hda_codec_force_resume(dev);
|
||||
}
|
||||
#endif /* CONFIG_PM_SLEEP */
|
||||
|
||||
/* referred in hda_bind.c */
|
||||
const struct dev_pm_ops hda_codec_driver_pm = {
|
||||
SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
|
||||
pm_runtime_force_resume)
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
.suspend = hda_codec_pm_suspend,
|
||||
.resume = hda_codec_pm_resume,
|
||||
.freeze = hda_codec_pm_freeze,
|
||||
.thaw = hda_codec_pm_thaw,
|
||||
.poweroff = hda_codec_pm_suspend,
|
||||
.restore = hda_codec_pm_restore,
|
||||
#endif /* CONFIG_PM_SLEEP */
|
||||
SET_RUNTIME_PM_OPS(hda_codec_runtime_suspend, hda_codec_runtime_resume,
|
||||
NULL)
|
||||
};
|
||||
|
||||
@@ -1887,7 +1887,6 @@ static int hdmi_lpe_audio_probe(struct platform_device *pdev)
|
||||
|
||||
pm_runtime_use_autosuspend(&pdev->dev);
|
||||
pm_runtime_mark_last_busy(&pdev->dev);
|
||||
pm_runtime_set_active(&pdev->dev);
|
||||
|
||||
dev_dbg(&pdev->dev, "%s: handle pending notification\n", __func__);
|
||||
for_each_port(card_ctx, port) {
|
||||
|
||||
@@ -2132,9 +2132,10 @@ static void cleanup(struct objtool_file *file)
|
||||
elf_close(file->elf);
|
||||
}
|
||||
|
||||
static struct objtool_file file;
|
||||
|
||||
int check(const char *_objname, bool orc)
|
||||
{
|
||||
struct objtool_file file;
|
||||
int ret, warnings = 0;
|
||||
|
||||
objname = _objname;
|
||||
|
||||
@@ -169,8 +169,10 @@ static struct map *kernel_get_module_map(const char *module)
|
||||
if (module && strchr(module, '/'))
|
||||
return dso__new_map(module);
|
||||
|
||||
if (!module)
|
||||
module = "kernel";
|
||||
if (!module) {
|
||||
pos = machine__kernel_map(host_machine);
|
||||
return map__get(pos);
|
||||
}
|
||||
|
||||
for (pos = maps__first(maps); pos; pos = map__next(pos)) {
|
||||
/* short_name is "[module]" */
|
||||
|
||||
Reference in New Issue
Block a user