Merge de5a059e36
("RDMA/rxe: Fix seg fault in rxe_comp_queue_pkt") into android12-5.10-lts
Steps on the way to 5.10.227 Change-Id: Ie75a10f12b4c90baa487a120d138956dd5a09da8 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
e22e091f95
@ -53,9 +53,11 @@ static inline int test_facility(unsigned long nr)
|
||||
unsigned long facilities_als[] = { FACILITIES_ALS };
|
||||
|
||||
if (__builtin_constant_p(nr) && nr < sizeof(facilities_als) * 8) {
|
||||
if (__test_facility(nr, &facilities_als))
|
||||
if (__test_facility(nr, &facilities_als)) {
|
||||
if (!__is_defined(__DECOMPRESSOR))
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return __test_facility(nr, &S390_lowcore.stfle_fac_list);
|
||||
}
|
||||
|
||||
|
@ -1432,7 +1432,7 @@ static int aux_output_begin(struct perf_output_handle *handle,
|
||||
unsigned long head, base, offset;
|
||||
struct hws_trailer_entry *te;
|
||||
|
||||
if (WARN_ON_ONCE(handle->head & ~PAGE_MASK))
|
||||
if (handle->head & ~PAGE_MASK)
|
||||
return -EINVAL;
|
||||
|
||||
aux->head = handle->head >> PAGE_SHIFT;
|
||||
@ -1613,7 +1613,7 @@ static void hw_collect_aux(struct cpu_hw_sf *cpuhw)
|
||||
unsigned long num_sdb;
|
||||
|
||||
aux = perf_get_aux(handle);
|
||||
if (WARN_ON_ONCE(!aux))
|
||||
if (!aux)
|
||||
return;
|
||||
|
||||
/* Inform user space new data arrived */
|
||||
@ -1635,7 +1635,7 @@ static void hw_collect_aux(struct cpu_hw_sf *cpuhw)
|
||||
__func__);
|
||||
break;
|
||||
}
|
||||
if (WARN_ON_ONCE(!aux))
|
||||
if (!aux)
|
||||
return;
|
||||
|
||||
/* Update head and alert_mark to new position */
|
||||
@ -1870,12 +1870,8 @@ static void cpumsf_pmu_start(struct perf_event *event, int flags)
|
||||
{
|
||||
struct cpu_hw_sf *cpuhw = this_cpu_ptr(&cpu_hw_sf);
|
||||
|
||||
if (WARN_ON_ONCE(!(event->hw.state & PERF_HES_STOPPED)))
|
||||
if (!(event->hw.state & PERF_HES_STOPPED))
|
||||
return;
|
||||
|
||||
if (flags & PERF_EF_RELOAD)
|
||||
WARN_ON_ONCE(!(event->hw.state & PERF_HES_UPTODATE));
|
||||
|
||||
perf_pmu_disable(event->pmu);
|
||||
event->hw.state = 0;
|
||||
cpuhw->lsctl.cs = 1;
|
||||
|
@ -95,11 +95,12 @@ static long cmm_alloc_pages(long nr, long *counter,
|
||||
(*counter)++;
|
||||
spin_unlock(&cmm_lock);
|
||||
nr--;
|
||||
cond_resched();
|
||||
}
|
||||
return nr;
|
||||
}
|
||||
|
||||
static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
|
||||
static long __cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
|
||||
{
|
||||
struct cmm_page_array *pa;
|
||||
unsigned long addr;
|
||||
@ -123,6 +124,21 @@ static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
|
||||
return nr;
|
||||
}
|
||||
|
||||
static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
|
||||
{
|
||||
long inc = 0;
|
||||
|
||||
while (nr) {
|
||||
inc = min(256L, nr);
|
||||
nr -= inc;
|
||||
inc = __cmm_free_pages(inc, counter, list);
|
||||
if (inc)
|
||||
break;
|
||||
cond_resched();
|
||||
}
|
||||
return nr + inc;
|
||||
}
|
||||
|
||||
static int cmm_oom_notify(struct notifier_block *self,
|
||||
unsigned long dummy, void *parm)
|
||||
{
|
||||
|
@ -104,7 +104,8 @@ static ssize_t bus_attr_show(struct kobject *kobj, struct attribute *attr,
|
||||
{
|
||||
struct bus_attribute *bus_attr = to_bus_attr(attr);
|
||||
struct subsys_private *subsys_priv = to_subsys_private(kobj);
|
||||
ssize_t ret = 0;
|
||||
/* return -EIO for reading a bus attribute without show() */
|
||||
ssize_t ret = -EIO;
|
||||
|
||||
if (bus_attr->show)
|
||||
ret = bus_attr->show(subsys_priv->bus, buf);
|
||||
@ -116,7 +117,8 @@ static ssize_t bus_attr_store(struct kobject *kobj, struct attribute *attr,
|
||||
{
|
||||
struct bus_attribute *bus_attr = to_bus_attr(attr);
|
||||
struct subsys_private *subsys_priv = to_subsys_private(kobj);
|
||||
ssize_t ret = 0;
|
||||
/* return -EIO for writing a bus attribute without store() */
|
||||
ssize_t ret = -EIO;
|
||||
|
||||
if (bus_attr->store)
|
||||
ret = bus_attr->store(subsys_priv->bus, buf, count);
|
||||
|
@ -112,7 +112,7 @@ static void bcm53573_ilp_init(struct device_node *np)
|
||||
goto err_free_ilp;
|
||||
}
|
||||
|
||||
ilp->regmap = syscon_node_to_regmap(of_get_parent(np));
|
||||
ilp->regmap = syscon_node_to_regmap(np->parent);
|
||||
if (IS_ERR(ilp->regmap)) {
|
||||
err = PTR_ERR(ilp->regmap);
|
||||
goto err_free_ilp;
|
||||
|
@ -498,9 +498,9 @@ static void __init imx7d_clocks_init(struct device_node *ccm_node)
|
||||
hws[IMX7D_ENET_AXI_ROOT_SRC] = imx_clk_hw_mux2_flags("enet_axi_src", base + 0x8900, 24, 3, enet_axi_sel, ARRAY_SIZE(enet_axi_sel), CLK_SET_PARENT_GATE);
|
||||
hws[IMX7D_NAND_USDHC_BUS_ROOT_SRC] = imx_clk_hw_mux2_flags("nand_usdhc_src", base + 0x8980, 24, 3, nand_usdhc_bus_sel, ARRAY_SIZE(nand_usdhc_bus_sel), CLK_SET_PARENT_GATE);
|
||||
hws[IMX7D_DRAM_PHYM_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_phym_src", base + 0x9800, 24, 1, dram_phym_sel, ARRAY_SIZE(dram_phym_sel), CLK_SET_PARENT_GATE);
|
||||
hws[IMX7D_DRAM_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_src", base + 0x9880, 24, 1, dram_sel, ARRAY_SIZE(dram_sel), CLK_SET_PARENT_GATE);
|
||||
hws[IMX7D_DRAM_ROOT_SRC] = imx_clk_hw_mux2("dram_src", base + 0x9880, 24, 1, dram_sel, ARRAY_SIZE(dram_sel));
|
||||
hws[IMX7D_DRAM_PHYM_ALT_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_phym_alt_src", base + 0xa000, 24, 3, dram_phym_alt_sel, ARRAY_SIZE(dram_phym_alt_sel), CLK_SET_PARENT_GATE);
|
||||
hws[IMX7D_DRAM_ALT_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_alt_src", base + 0xa080, 24, 3, dram_alt_sel, ARRAY_SIZE(dram_alt_sel), CLK_SET_PARENT_GATE);
|
||||
hws[IMX7D_DRAM_ALT_ROOT_SRC] = imx_clk_hw_mux2("dram_alt_src", base + 0xa080, 24, 3, dram_alt_sel, ARRAY_SIZE(dram_alt_sel));
|
||||
hws[IMX7D_USB_HSIC_ROOT_SRC] = imx_clk_hw_mux2_flags("usb_hsic_src", base + 0xa100, 24, 3, usb_hsic_sel, ARRAY_SIZE(usb_hsic_sel), CLK_SET_PARENT_GATE);
|
||||
hws[IMX7D_PCIE_CTRL_ROOT_SRC] = imx_clk_hw_mux2_flags("pcie_ctrl_src", base + 0xa180, 24, 3, pcie_ctrl_sel, ARRAY_SIZE(pcie_ctrl_sel), CLK_SET_PARENT_GATE);
|
||||
hws[IMX7D_PCIE_PHY_ROOT_SRC] = imx_clk_hw_mux2_flags("pcie_phy_src", base + 0xa200, 24, 3, pcie_phy_sel, ARRAY_SIZE(pcie_phy_sel), CLK_SET_PARENT_GATE);
|
||||
|
@ -1258,7 +1258,7 @@ bool dc_validate_seamless_boot_timing(const struct dc *dc,
|
||||
if (crtc_timing->pix_clk_100hz != pix_clk_100hz)
|
||||
return false;
|
||||
|
||||
if (!se->funcs->dp_get_pixel_format)
|
||||
if (!se || !se->funcs->dp_get_pixel_format)
|
||||
return false;
|
||||
|
||||
if (!se->funcs->dp_get_pixel_format(
|
||||
|
@ -1895,8 +1895,15 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
|
||||
i801_add_tco(priv);
|
||||
|
||||
/*
|
||||
* adapter.name is used by platform code to find the main I801 adapter
|
||||
* to instantiante i2c_clients, do not change.
|
||||
*/
|
||||
snprintf(priv->adapter.name, sizeof(priv->adapter.name),
|
||||
"SMBus I801 adapter at %04lx", priv->smba);
|
||||
"SMBus %s adapter at %04lx",
|
||||
(priv->features & FEATURE_IDF) ? "I801 IDF" : "I801",
|
||||
priv->smba);
|
||||
|
||||
err = i2c_add_adapter(&priv->adapter);
|
||||
if (err) {
|
||||
platform_device_unregister(priv->tco_pdev);
|
||||
|
@ -2631,14 +2631,16 @@ static int retry_send(struct ib_mad_send_wr_private *mad_send_wr)
|
||||
|
||||
static void timeout_sends(struct work_struct *work)
|
||||
{
|
||||
struct ib_mad_send_wr_private *mad_send_wr, *n;
|
||||
struct ib_mad_agent_private *mad_agent_priv;
|
||||
struct ib_mad_send_wr_private *mad_send_wr;
|
||||
struct ib_mad_send_wc mad_send_wc;
|
||||
struct list_head local_list;
|
||||
unsigned long flags, delay;
|
||||
|
||||
mad_agent_priv = container_of(work, struct ib_mad_agent_private,
|
||||
timed_work.work);
|
||||
mad_send_wc.vendor_err = 0;
|
||||
INIT_LIST_HEAD(&local_list);
|
||||
|
||||
spin_lock_irqsave(&mad_agent_priv->lock, flags);
|
||||
while (!list_empty(&mad_agent_priv->wait_list)) {
|
||||
@ -2656,13 +2658,16 @@ static void timeout_sends(struct work_struct *work)
|
||||
break;
|
||||
}
|
||||
|
||||
list_del(&mad_send_wr->agent_list);
|
||||
list_del_init(&mad_send_wr->agent_list);
|
||||
if (mad_send_wr->status == IB_WC_SUCCESS &&
|
||||
!retry_send(mad_send_wr))
|
||||
continue;
|
||||
|
||||
list_add_tail(&mad_send_wr->agent_list, &local_list);
|
||||
}
|
||||
spin_unlock_irqrestore(&mad_agent_priv->lock, flags);
|
||||
|
||||
list_for_each_entry_safe(mad_send_wr, n, &local_list, agent_list) {
|
||||
if (mad_send_wr->status == IB_WC_SUCCESS)
|
||||
mad_send_wc.status = IB_WC_RESP_TIMEOUT_ERR;
|
||||
else
|
||||
@ -2670,11 +2675,8 @@ static void timeout_sends(struct work_struct *work)
|
||||
mad_send_wc.send_buf = &mad_send_wr->send_buf;
|
||||
mad_agent_priv->agent.send_handler(&mad_agent_priv->agent,
|
||||
&mad_send_wc);
|
||||
|
||||
deref_mad_agent(mad_agent_priv);
|
||||
spin_lock_irqsave(&mad_agent_priv->lock, flags);
|
||||
}
|
||||
spin_unlock_irqrestore(&mad_agent_priv->lock, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -123,12 +123,12 @@ void rxe_comp_queue_pkt(struct rxe_qp *qp, struct sk_buff *skb)
|
||||
{
|
||||
int must_sched;
|
||||
|
||||
skb_queue_tail(&qp->resp_pkts, skb);
|
||||
|
||||
must_sched = skb_queue_len(&qp->resp_pkts) > 1;
|
||||
must_sched = skb_queue_len(&qp->resp_pkts) > 0;
|
||||
if (must_sched != 0)
|
||||
rxe_counter_inc(SKB_TO_PKT(skb)->rxe, RXE_CNT_COMPLETER_SCHED);
|
||||
|
||||
skb_queue_tail(&qp->resp_pkts, skb);
|
||||
|
||||
rxe_run_task(&qp->comp.task, must_sched);
|
||||
}
|
||||
|
||||
|
@ -978,12 +978,12 @@ static int rmi_driver_remove(struct device *dev)
|
||||
|
||||
rmi_disable_irq(rmi_dev, false);
|
||||
|
||||
irq_domain_remove(data->irqdomain);
|
||||
data->irqdomain = NULL;
|
||||
|
||||
rmi_f34_remove_sysfs(rmi_dev);
|
||||
rmi_free_function_list(rmi_dev);
|
||||
|
||||
irq_domain_remove(data->irqdomain);
|
||||
data->irqdomain = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -301,6 +301,10 @@ static void __vb2_plane_dmabuf_put(struct vb2_buffer *vb, struct vb2_plane *p)
|
||||
p->mem_priv = NULL;
|
||||
p->dbuf = NULL;
|
||||
p->dbuf_mapped = 0;
|
||||
p->bytesused = 0;
|
||||
p->length = 0;
|
||||
p->m.fd = 0;
|
||||
p->data_offset = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1278,10 +1282,6 @@ static int __prepare_dmabuf(struct vb2_buffer *vb)
|
||||
|
||||
/* Release previously acquired memory if present */
|
||||
__vb2_plane_dmabuf_put(vb, &vb->planes[plane]);
|
||||
vb->planes[plane].bytesused = 0;
|
||||
vb->planes[plane].length = 0;
|
||||
vb->planes[plane].m.fd = 0;
|
||||
vb->planes[plane].data_offset = 0;
|
||||
|
||||
/* Acquire each plane's memory */
|
||||
mem_priv = call_ptr_memop(vb, attach_dmabuf,
|
||||
|
@ -1558,6 +1558,7 @@ static void switchtec_ntb_remove(struct device *dev,
|
||||
switchtec_ntb_deinit_db_msg_irq(sndev);
|
||||
switchtec_ntb_deinit_shared_mw(sndev);
|
||||
switchtec_ntb_deinit_crosslink(sndev);
|
||||
cancel_work_sync(&sndev->check_link_status_work);
|
||||
kfree(sndev);
|
||||
dev_info(dev, "ntb device unregistered\n");
|
||||
}
|
||||
|
@ -44,6 +44,15 @@ static int virtio_pmem_flush(struct nd_region *nd_region)
|
||||
unsigned long flags;
|
||||
int err, err1;
|
||||
|
||||
/*
|
||||
* Don't bother to submit the request to the device if the device is
|
||||
* not activated.
|
||||
*/
|
||||
if (vdev->config->get_status(vdev) & VIRTIO_CONFIG_S_NEEDS_RESET) {
|
||||
dev_info(&vdev->dev, "virtio pmem device needs a reset\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
might_sleep();
|
||||
req_data = kmalloc(sizeof(*req_data), GFP_KERNEL);
|
||||
if (!req_data)
|
||||
|
@ -3453,6 +3453,8 @@ DECLARE_PCI_FIXUP_FINAL(0x1814, 0x0601, /* Ralink RT2800 802.11n PCI */
|
||||
quirk_broken_intx_masking);
|
||||
DECLARE_PCI_FIXUP_FINAL(0x1b7c, 0x0004, /* Ceton InfiniTV4 */
|
||||
quirk_broken_intx_masking);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_20K2,
|
||||
quirk_broken_intx_masking);
|
||||
|
||||
/*
|
||||
* Realtek RTL8169 PCI Gigabit Ethernet Controller (rev 10)
|
||||
@ -4091,6 +4093,10 @@ static void quirk_dma_func0_alias(struct pci_dev *dev)
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_RICOH, 0xe832, quirk_dma_func0_alias);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_RICOH, 0xe476, quirk_dma_func0_alias);
|
||||
|
||||
/* Some Glenfly chips use function 0 as the PCIe Requester ID for DMA */
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_GLENFLY, 0x3d40, quirk_dma_func0_alias);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_GLENFLY, 0x3d41, quirk_dma_func0_alias);
|
||||
|
||||
static void quirk_dma_func1_alias(struct pci_dev *dev)
|
||||
{
|
||||
if (PCI_FUNC(dev->devfn) != 1)
|
||||
@ -4915,6 +4921,8 @@ static const struct pci_dev_acs_enabled {
|
||||
/* QCOM QDF2xxx root ports */
|
||||
{ PCI_VENDOR_ID_QCOM, 0x0400, pci_quirk_qcom_rp_acs },
|
||||
{ PCI_VENDOR_ID_QCOM, 0x0401, pci_quirk_qcom_rp_acs },
|
||||
/* QCOM SA8775P root port */
|
||||
{ PCI_VENDOR_ID_QCOM, 0x0115, pci_quirk_qcom_rp_acs },
|
||||
/* HXT SD4800 root ports. The ACS design is same as QCOM QDF2xxx */
|
||||
{ PCI_VENDOR_ID_HXT, 0x0401, pci_quirk_qcom_rp_acs },
|
||||
/* Intel PCH root ports */
|
||||
|
@ -83,7 +83,7 @@ static int hw_device_state(struct ci_hdrc *ci, u32 dma)
|
||||
hw_write(ci, OP_ENDPTLISTADDR, ~0, dma);
|
||||
/* interrupt, error, port change, reset, sleep/suspend */
|
||||
hw_write(ci, OP_USBINTR, ~0,
|
||||
USBi_UI|USBi_UEI|USBi_PCI|USBi_URI|USBi_SLI);
|
||||
USBi_UI|USBi_UEI|USBi_PCI|USBi_URI);
|
||||
} else {
|
||||
hw_write(ci, OP_USBINTR, ~0, 0);
|
||||
}
|
||||
@ -862,6 +862,7 @@ __releases(ci->lock)
|
||||
__acquires(ci->lock)
|
||||
{
|
||||
int retval;
|
||||
u32 intr;
|
||||
|
||||
spin_unlock(&ci->lock);
|
||||
if (ci->gadget.speed != USB_SPEED_UNKNOWN)
|
||||
@ -875,6 +876,11 @@ __acquires(ci->lock)
|
||||
if (retval)
|
||||
goto done;
|
||||
|
||||
/* clear SLI */
|
||||
hw_write(ci, OP_USBSTS, USBi_SLI, USBi_SLI);
|
||||
intr = hw_read(ci, OP_USBINTR, ~0);
|
||||
hw_write(ci, OP_USBINTR, ~0, intr | USBi_SLI);
|
||||
|
||||
ci->status = usb_ep_alloc_request(&ci->ep0in->ep, GFP_ATOMIC);
|
||||
if (ci->status == NULL)
|
||||
retval = -ENOMEM;
|
||||
|
@ -441,18 +441,6 @@ static int dwc2_driver_probe(struct platform_device *dev)
|
||||
|
||||
spin_lock_init(&hsotg->lock);
|
||||
|
||||
hsotg->irq = platform_get_irq(dev, 0);
|
||||
if (hsotg->irq < 0)
|
||||
return hsotg->irq;
|
||||
|
||||
dev_dbg(hsotg->dev, "registering common handler for irq%d\n",
|
||||
hsotg->irq);
|
||||
retval = devm_request_irq(hsotg->dev, hsotg->irq,
|
||||
dwc2_handle_common_intr, IRQF_SHARED,
|
||||
dev_name(hsotg->dev), hsotg);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
hsotg->vbus_supply = devm_regulator_get_optional(hsotg->dev, "vbus");
|
||||
if (IS_ERR(hsotg->vbus_supply)) {
|
||||
retval = PTR_ERR(hsotg->vbus_supply);
|
||||
@ -496,6 +484,20 @@ static int dwc2_driver_probe(struct platform_device *dev)
|
||||
if (retval)
|
||||
goto error;
|
||||
|
||||
hsotg->irq = platform_get_irq(dev, 0);
|
||||
if (hsotg->irq < 0) {
|
||||
retval = hsotg->irq;
|
||||
goto error;
|
||||
}
|
||||
|
||||
dev_dbg(hsotg->dev, "registering common handler for irq%d\n",
|
||||
hsotg->irq);
|
||||
retval = devm_request_irq(hsotg->dev, hsotg->irq,
|
||||
dwc2_handle_common_intr, IRQF_SHARED,
|
||||
dev_name(hsotg->dev), hsotg);
|
||||
if (retval)
|
||||
goto error;
|
||||
|
||||
/*
|
||||
* For OTG cores, set the force mode bits to reflect the value
|
||||
* of dr_mode. Force mode bits should not be touched at any
|
||||
|
@ -183,7 +183,7 @@ static void sisfb_search_mode(char *name, bool quiet)
|
||||
{
|
||||
unsigned int j = 0, xres = 0, yres = 0, depth = 0, rate = 0;
|
||||
int i = 0;
|
||||
char strbuf[16], strbuf1[20];
|
||||
char strbuf[24], strbuf1[20];
|
||||
char *nameptr = name;
|
||||
|
||||
/* We don't know the hardware specs yet and there is no ivideo */
|
||||
|
@ -422,7 +422,7 @@ static int ext4_xattr_inode_iget(struct inode *parent, unsigned long ea_ino,
|
||||
ext4_set_inode_state(inode, EXT4_STATE_LUSTRE_EA_INODE);
|
||||
ext4_xattr_inode_set_ref(inode, 1);
|
||||
} else {
|
||||
inode_lock(inode);
|
||||
inode_lock_nested(inode, I_MUTEX_XATTR);
|
||||
inode->i_flags |= S_NOQUOTA;
|
||||
inode_unlock(inode);
|
||||
}
|
||||
@ -986,7 +986,7 @@ static int ext4_xattr_inode_update_ref(handle_t *handle, struct inode *ea_inode,
|
||||
s64 ref_count;
|
||||
int ret;
|
||||
|
||||
inode_lock(ea_inode);
|
||||
inode_lock_nested(ea_inode, I_MUTEX_XATTR);
|
||||
|
||||
ret = ext4_reserve_inode_write(handle, ea_inode, &iloc);
|
||||
if (ret)
|
||||
|
@ -2659,6 +2659,8 @@
|
||||
#define PCI_DEVICE_ID_DCI_PCCOM8 0x0002
|
||||
#define PCI_DEVICE_ID_DCI_PCCOM2 0x0004
|
||||
|
||||
#define PCI_VENDOR_ID_GLENFLY 0x6766
|
||||
|
||||
#define PCI_VENDOR_ID_INTEL 0x8086
|
||||
#define PCI_DEVICE_ID_INTEL_EESSC 0x0008
|
||||
#define PCI_DEVICE_ID_INTEL_PXHD_0 0x0320
|
||||
|
@ -74,6 +74,9 @@ int array_map_alloc_check(union bpf_attr *attr)
|
||||
* access the elements.
|
||||
*/
|
||||
return -E2BIG;
|
||||
/* percpu map value size is bound by PCPU_MIN_UNIT_SIZE */
|
||||
if (percpu && round_up(attr->value_size, 8) > PCPU_MIN_UNIT_SIZE)
|
||||
return -E2BIG;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -404,6 +404,9 @@ static int htab_map_alloc_check(union bpf_attr *attr)
|
||||
* kmalloc-able later in htab_map_update_elem()
|
||||
*/
|
||||
return -E2BIG;
|
||||
/* percpu map value size is bound by PCPU_MIN_UNIT_SIZE */
|
||||
if (percpu && round_up(attr->value_size, 8) > PCPU_MIN_UNIT_SIZE)
|
||||
return -E2BIG;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -715,6 +715,38 @@ static inline void sanitize_event_name(char *name)
|
||||
*name = '_';
|
||||
}
|
||||
|
||||
struct count_symbols_struct {
|
||||
const char *func_name;
|
||||
unsigned int count;
|
||||
};
|
||||
|
||||
static int count_symbols(void *data, const char *name, struct module *unused0,
|
||||
unsigned long unused1)
|
||||
{
|
||||
struct count_symbols_struct *args = data;
|
||||
|
||||
if (strcmp(args->func_name, name))
|
||||
return 0;
|
||||
|
||||
args->count++;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned int number_of_same_symbols(char *func_name)
|
||||
{
|
||||
struct count_symbols_struct args = {
|
||||
.func_name = func_name,
|
||||
.count = 0,
|
||||
};
|
||||
|
||||
kallsyms_on_each_symbol(count_symbols, &args);
|
||||
|
||||
module_kallsyms_on_each_symbol(count_symbols, &args);
|
||||
|
||||
return args.count;
|
||||
}
|
||||
|
||||
static int trace_kprobe_create(int argc, const char *argv[])
|
||||
{
|
||||
/*
|
||||
@ -842,6 +874,31 @@ static int trace_kprobe_create(int argc, const char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
if (symbol && !strchr(symbol, ':')) {
|
||||
unsigned int count;
|
||||
|
||||
count = number_of_same_symbols(symbol);
|
||||
if (count > 1) {
|
||||
/*
|
||||
* Users should use ADDR to remove the ambiguity of
|
||||
* using KSYM only.
|
||||
*/
|
||||
trace_probe_log_err(0, NON_UNIQ_SYMBOL);
|
||||
ret = -EADDRNOTAVAIL;
|
||||
|
||||
goto error;
|
||||
} else if (count == 0) {
|
||||
/*
|
||||
* We can return ENOENT earlier than when register the
|
||||
* kprobe.
|
||||
*/
|
||||
trace_probe_log_err(0, BAD_PROBE_ADDR);
|
||||
ret = -ENOENT;
|
||||
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
trace_probe_log_set_index(0);
|
||||
if (event) {
|
||||
ret = traceprobe_parse_event_name(&event, &group, buf,
|
||||
@ -1805,6 +1862,7 @@ static int unregister_kprobe_event(struct trace_kprobe *tk)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PERF_EVENTS
|
||||
|
||||
/* create a trace_kprobe, but don't add it to global lists */
|
||||
struct trace_event_call *
|
||||
create_local_trace_kprobe(char *func, void *addr, unsigned long offs,
|
||||
@ -1814,6 +1872,24 @@ create_local_trace_kprobe(char *func, void *addr, unsigned long offs,
|
||||
int ret;
|
||||
char *event;
|
||||
|
||||
if (func) {
|
||||
unsigned int count;
|
||||
|
||||
count = number_of_same_symbols(func);
|
||||
if (count > 1)
|
||||
/*
|
||||
* Users should use addr to remove the ambiguity of
|
||||
* using func only.
|
||||
*/
|
||||
return ERR_PTR(-EADDRNOTAVAIL);
|
||||
else if (count == 0)
|
||||
/*
|
||||
* We can return ENOENT earlier than when register the
|
||||
* kprobe.
|
||||
*/
|
||||
return ERR_PTR(-ENOENT);
|
||||
}
|
||||
|
||||
/*
|
||||
* local trace_kprobes are not added to dyn_event, so they are never
|
||||
* searched in find_trace_kprobe(). Therefore, there is no concern of
|
||||
|
@ -390,6 +390,7 @@ extern int traceprobe_define_arg_fields(struct trace_event_call *event_call,
|
||||
C(BAD_MAXACT, "Invalid maxactive number"), \
|
||||
C(MAXACT_TOO_BIG, "Maxactive is too big"), \
|
||||
C(BAD_PROBE_ADDR, "Invalid probed address or symbol"), \
|
||||
C(NON_UNIQ_SYMBOL, "The symbol is not unique"), \
|
||||
C(BAD_RETPROBE, "Retprobe address must be an function entry"), \
|
||||
C(BAD_ADDR_SUFFIX, "Invalid probed address suffix"), \
|
||||
C(NO_GROUP_NAME, "Group name is not specified"), \
|
||||
|
@ -2777,7 +2777,7 @@ static const struct pci_device_id azx_ids[] = {
|
||||
.driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |
|
||||
AZX_DCAPS_PM_RUNTIME },
|
||||
/* GLENFLY */
|
||||
{ PCI_DEVICE(0x6766, PCI_ANY_ID),
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_GLENFLY, PCI_ANY_ID),
|
||||
.class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
|
||||
.class_mask = 0xffffff,
|
||||
.driver_data = AZX_DRIVER_GFHDMI | AZX_DCAPS_POSFIX_LPIB |
|
||||
|
@ -479,6 +479,10 @@ int main(int argc, char **argv)
|
||||
return -ENOMEM;
|
||||
}
|
||||
trigger_name = malloc(IIO_MAX_NAME_LENGTH);
|
||||
if (!trigger_name) {
|
||||
ret = -ENOMEM;
|
||||
goto error;
|
||||
}
|
||||
ret = read_sysfs_string("name", trig_dev_name, trigger_name);
|
||||
free(trig_dev_name);
|
||||
if (ret < 0) {
|
||||
|
@ -1985,7 +1985,7 @@ sub get_grub_index {
|
||||
} elsif ($reboot_type eq "grub2") {
|
||||
$command = "cat $grub_file";
|
||||
$target = '^\s*menuentry.*' . $grub_menu_qt;
|
||||
$skip = '^\s*menuentry';
|
||||
$skip = '^\s*menuentry\s';
|
||||
$submenu = '^\s*submenu\s';
|
||||
} elsif ($reboot_type eq "grub2bls") {
|
||||
$command = $grub_bls_get;
|
||||
|
Loading…
Reference in New Issue
Block a user