Page MenuHomeFreeBSD

D6304.1775465102.diff
No OneTemporary

Size
19 KB
Referenced Files
None
Subscribers
None

D6304.1775465102.diff

Index: sys/arm/allwinner/a10/a10_intc.c
===================================================================
--- sys/arm/allwinner/a10/a10_intc.c
+++ sys/arm/allwinner/a10/a10_intc.c
@@ -106,6 +106,7 @@
struct a10_aintc_softc {
device_t sc_dev;
+ struct intr_pic * sc_pic;
struct resource * aintc_res;
bus_space_tag_t aintc_bst;
bus_space_handle_t aintc_bsh;
@@ -266,11 +267,11 @@
}
xref = OF_xref_from_node(ofw_bus_get_node(sc->sc_dev));
- error = intr_pic_register(sc->sc_dev, xref);
- if (error != 0)
- return (error);
+ sc->sc_pic = intr_pic_register(sc->sc_dev, xref);
+ if (sc->sc_pic == NULL)
+ return (ENXIO);
- return (intr_pic_claim_root(sc->sc_dev, xref, a10_intr, sc, 0));
+ return (intr_pic_claim_root(sc->sc_pic, a10_intr, sc, 0));
}
static void
Index: sys/arm/arm/gic.c
===================================================================
--- sys/arm/arm/gic.c
+++ sys/arm/arm/gic.c
@@ -152,6 +152,7 @@
struct arm_gic_softc {
device_t gic_dev;
#ifdef INTRNG
+ struct intr_pic * gic_pic;
void * gic_intrhand;
struct gic_irqsrc * gic_irqs;
#endif
@@ -669,7 +670,8 @@
* Now, when everything is initialized, it's right time to
* register interrupt controller to interrupt framefork.
*/
- if (intr_pic_register(dev, xref) != 0) {
+ sc->gic_pic = intr_pic_register(dev, xref);
+ if (sc->gic_pic == NULL) {
device_printf(dev, "could not register PIC\n");
goto cleanup;
}
@@ -681,23 +683,23 @@
*/
pxref = ofw_bus_find_iparent(ofw_bus_get_node(dev));
if (pxref == 0 || xref == pxref) {
- if (intr_pic_claim_root(dev, xref, arm_gic_intr, sc,
+ if (intr_pic_claim_root(sc->gic_pic, arm_gic_intr, sc,
GIC_LAST_SGI - GIC_FIRST_SGI + 1) != 0) {
device_printf(dev, "could not set PIC as a root\n");
- intr_pic_deregister(dev, xref);
+ intr_pic_deregister(sc->gic_pic);
goto cleanup;
}
} else {
if (sc->gic_res[2] == NULL) {
device_printf(dev,
"not root PIC must have defined interrupt\n");
- intr_pic_deregister(dev, xref);
+ intr_pic_deregister(sc->gic_pic);
goto cleanup;
}
if (bus_setup_intr(dev, sc->gic_res[2], INTR_TYPE_CLK,
arm_gic_intr, NULL, sc, &sc->gic_intrhand)) {
device_printf(dev, "could not setup irq handler\n");
- intr_pic_deregister(dev, xref);
+ intr_pic_deregister(sc->gic_pic);
goto cleanup;
}
}
Index: sys/arm/broadcom/bcm2835/bcm2835_gpio.c
===================================================================
--- sys/arm/broadcom/bcm2835/bcm2835_gpio.c
+++ sys/arm/broadcom/bcm2835/bcm2835_gpio.c
@@ -104,6 +104,7 @@
struct bcm_gpio_softc {
device_t sc_dev;
device_t sc_busdev;
+ struct intr_pic * sc_pic;
struct mtx sc_mtx;
struct resource * sc_res[BCM_GPIO_IRQS + 1];
bus_space_tag_t sc_bst;
@@ -1045,8 +1046,12 @@
if (error != 0)
return (error); /* XXX deregister ISRCs */
}
- return (intr_pic_register(sc->sc_dev,
- OF_xref_from_node(ofw_bus_get_node(sc->sc_dev))));
+ sc->sc_pic = intr_pic_register(sc->sc_dev,
+ OF_xref_from_node(ofw_bus_get_node(sc->sc_dev)));
+ if (sc->sc_pic == NULL)
+ return (ENXIO);
+
+ return (0);
}
static int
Index: sys/arm/broadcom/bcm2835/bcm2835_intr.c
===================================================================
--- sys/arm/broadcom/bcm2835/bcm2835_intr.c
+++ sys/arm/broadcom/bcm2835/bcm2835_intr.c
@@ -143,6 +143,7 @@
bus_space_tag_t intc_bst;
bus_space_handle_t intc_bsh;
#ifdef INTRNG
+ struct intr_pic * intc_pic;
struct resource * intc_irq_res;
void * intc_irq_hdl;
struct bcm_intc_irqsrc intc_isrcs[BCM_INTC_NIRQS];
@@ -309,7 +310,7 @@
{
}
-static int
+static struct intr_pic *
bcm_intc_pic_register(struct bcm_intc_softc *sc, intptr_t xref)
{
struct bcm_intc_irqsrc *bii;
@@ -334,12 +335,12 @@
bii->bii_enable_reg = INTC_ENABLE_BANK2;
bii->bii_mask = 1 << IRQ_BANK2(irq);
} else
- return (ENXIO);
+ return (NULL);
error = intr_isrc_register(&bii->bii_isrc, sc->sc_dev, 0,
"%s,%u", name, irq);
if (error != 0)
- return (error);
+ return (NULL);
}
return (intr_pic_register(sc->sc_dev, xref));
}
@@ -379,7 +380,8 @@
#ifdef INTRNG
xref = OF_xref_from_node(ofw_bus_get_node(dev));
- if (bcm_intc_pic_register(sc, xref) != 0) {
+ sc->intc_pic = bcm_intc_pic_register(sc, xref);
+ if (sc->intc_pic == NULL) {
bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->intc_res);
device_printf(dev, "could not register PIC\n");
return (ENXIO);
@@ -389,7 +391,8 @@
sc->intc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
RF_ACTIVE);
if (sc->intc_irq_res == NULL) {
- if (intr_pic_claim_root(dev, xref, bcm2835_intc_intr, sc, 0) != 0) {
+ if (intr_pic_claim_root(sc->intc_pic, bcm2835_intc_intr, sc,
+ 0) != 0) {
/* XXX clean up */
device_printf(dev, "could not set PIC as a root\n");
return (ENXIO);
Index: sys/arm/broadcom/bcm2835/bcm2836.c
===================================================================
--- sys/arm/broadcom/bcm2835/bcm2836.c
+++ sys/arm/broadcom/bcm2835/bcm2836.c
@@ -166,6 +166,7 @@
struct bcm_lintc_softc {
device_t bls_dev;
+ struct intr_pic * bls_pic;
struct mtx bls_mtx;
struct resource * bls_mem;
bus_space_tag_t bls_bst;
@@ -653,11 +654,11 @@
}
xref = OF_xref_from_node(ofw_bus_get_node(sc->bls_dev));
- error = intr_pic_register(sc->bls_dev, xref);
- if (error != 0)
- return (error);
+ sc->bls_pic = intr_pic_register(sc->bls_dev, xref);
+ if (sc->bls_pic == NULL)
+ return (ENXIO);
- return (intr_pic_claim_root(sc->bls_dev, xref, bcm_lintc_intr, sc, 0));
+ return (intr_pic_claim_root(sc->bls_pic, bcm_lintc_intr, sc, 0));
}
static int
Index: sys/arm/mv/mpic.c
===================================================================
--- sys/arm/mv/mpic.c
+++ sys/arm/mv/mpic.c
@@ -274,7 +274,7 @@
bus_release_resources(dev, mv_mpic_spec, sc->mpic_res);
return (ENXIO);
}
- if (intr_pic_register(dev, OF_xref_from_device(dev)) != 0) {
+ if (intr_pic_register(dev, OF_xref_from_device(dev)) == NULL) {
device_printf(dev, "could not register PIC\n");
bus_release_resources(dev, mv_mpic_spec, sc->mpic_res);
return (ENXIO);
Index: sys/arm/nvidia/tegra_gpio.c
===================================================================
--- sys/arm/nvidia/tegra_gpio.c
+++ sys/arm/nvidia/tegra_gpio.c
@@ -433,7 +433,7 @@
return (FILTER_HANDLED);
}
-static int
+static struct intr_pic *
tegra_gpio_pic_attach(struct tegra_gpio_softc *sc)
{
int error;
@@ -450,7 +450,7 @@
error = intr_isrc_register(&sc->isrcs[irq].isrc,
sc->dev, 0, "%s,%u", name, irq);
if (error != 0)
- return (error); /* XXX deregister ISRCs */
+ return (NULL); /* XXX deregister ISRCs */
}
return (intr_pic_register(sc->dev,
OF_xref_from_node(ofw_bus_get_node(sc->dev))));
@@ -814,7 +814,7 @@
}
}
- if (tegra_gpio_pic_attach(sc) != 0) {
+ if (tegra_gpio_pic_attach(sc) == NULL) {
device_printf(dev, "WARNING: unable to attach PIC\n");
tegra_gpio_detach(dev);
return (ENXIO);
Index: sys/arm/nvidia/tegra_lic.c
===================================================================
--- sys/arm/nvidia/tegra_lic.c
+++ sys/arm/nvidia/tegra_lic.c
@@ -233,7 +233,7 @@
}
- if (intr_pic_register(dev, OF_xref_from_node(node)) != 0) {
+ if (intr_pic_register(dev, OF_xref_from_node(node)) == NULL) {
device_printf(dev, "Cannot register PIC\n");
goto fail;
}
Index: sys/arm/ti/aintc.c
===================================================================
--- sys/arm/ti/aintc.c
+++ sys/arm/ti/aintc.c
@@ -82,6 +82,7 @@
bus_space_handle_t aintc_bsh;
uint8_t ver;
#ifdef INTRNG
+ struct intr_pic * sc_pic;
struct ti_aintc_irqsrc aintc_isrcs[INTC_NIRQS];
#endif
};
@@ -236,11 +237,11 @@
}
xref = OF_xref_from_node(ofw_bus_get_node(sc->sc_dev));
- error = intr_pic_register(sc->sc_dev, xref);
- if (error != 0)
- return (error);
+ sc->sc_pic = intr_pic_register(sc->sc_dev, xref);
+ if (sc->sc_pic == NULL)
+ return (ENXIO);
- return (intr_pic_claim_root(sc->sc_dev, xref, ti_aintc_intr, sc, 0));
+ return (intr_pic_claim_root(sc->sc_pic, ti_aintc_intr, sc, 0));
}
#else
Index: sys/arm/ti/omap4/omap4_wugen.c
===================================================================
--- sys/arm/ti/omap4/omap4_wugen.c
+++ sys/arm/ti/omap4/omap4_wugen.c
@@ -210,7 +210,7 @@
return (ENXIO);
}
- if (intr_pic_register(dev, OF_xref_from_node(node)) != 0) {
+ if (intr_pic_register(dev, OF_xref_from_node(node)) == NULL) {
device_printf(dev, "can't register PIC\n");
goto fail;
}
Index: sys/arm/ti/ti_gpio.c
===================================================================
--- sys/arm/ti/ti_gpio.c
+++ sys/arm/ti/ti_gpio.c
@@ -122,7 +122,7 @@
static int ti_gpio_detach(device_t);
#ifdef INTRNG
-static int ti_gpio_pic_attach(struct ti_gpio_softc *sc);
+static struct intr_pic *ti_gpio_pic_attach(struct ti_gpio_softc *sc);
static int ti_gpio_pic_detach(struct ti_gpio_softc *sc);
#endif
@@ -709,7 +709,7 @@
}
#ifdef INTRNG
- if (ti_gpio_pic_attach(sc) != 0) {
+ if (ti_gpio_pic_attach(sc) == NULL) {
device_printf(dev, "WARNING: unable to attach PIC\n");
ti_gpio_detach(dev);
return (ENXIO);
@@ -883,7 +883,7 @@
return (FILTER_HANDLED);
}
-static int
+static struct intr_pic *
ti_gpio_pic_attach(struct ti_gpio_softc *sc)
{
int error;
@@ -902,7 +902,7 @@
error = intr_isrc_register(&sc->sc_isrcs[irq].tgi_isrc,
sc->sc_dev, 0, "%s,%u", name, irq);
if (error != 0)
- return (error); /* XXX deregister ISRCs */
+ return (NULL); /* XXX deregister ISRCs */
}
return (intr_pic_register(sc->sc_dev,
OF_xref_from_node(ofw_bus_get_node(sc->sc_dev))));
Index: sys/kern/subr_intr.c
===================================================================
--- sys/kern/subr_intr.c
+++ sys/kern/subr_intr.c
@@ -521,6 +521,7 @@
int error;
struct intr_irqsrc *isrc;
struct intr_dev_data *ddata;
+ struct intr_pic *pic;
isrc = isrc_lookup(irq);
if (isrc != NULL) {
@@ -887,16 +888,10 @@
* Destroy interrupt controller.
*/
static void
-pic_destroy(device_t dev, intptr_t xref)
+pic_destroy(struct intr_pic *pic)
{
- struct intr_pic *pic;
mtx_lock(&pic_list_lock);
- pic = pic_lookup_locked(dev, xref);
- if (pic == NULL) {
- mtx_unlock(&pic_list_lock);
- return;
- }
SLIST_REMOVE(&pic_list, pic, intr_pic, pic_next);
mtx_unlock(&pic_list_lock);
@@ -906,27 +901,27 @@
/*
* Register interrupt controller.
*/
-int
+struct intr_pic *
intr_pic_register(device_t dev, intptr_t xref)
{
struct intr_pic *pic;
if (dev == NULL)
- return (EINVAL);
+ return (NULL);
pic = pic_create(dev, xref);
if (pic == NULL)
- return (ENOMEM);
+ return (NULL);
debugf("PIC %p registered for %s <dev %p, xref %x>\n", pic,
device_get_nameunit(dev), dev, xref);
- return (0);
+ return (pic);
}
/*
* Unregister interrupt controller.
*/
int
-intr_pic_deregister(device_t dev, intptr_t xref)
+intr_pic_deregister(struct intr_pic *pic)
{
panic("%s: not implemented", __func__);
@@ -945,16 +940,12 @@
* an interrupts property and thus no explicit interrupt parent."
*/
int
-intr_pic_claim_root(device_t dev, intptr_t xref, intr_irq_filter_t *filter,
+intr_pic_claim_root(struct intr_pic *pic, intr_irq_filter_t *filter,
void *arg, u_int ipicount)
{
- if (pic_lookup(dev, xref) == NULL) {
- device_printf(dev, "not registered\n");
- return (EINVAL);
- }
if (filter == NULL) {
- device_printf(dev, "filter missing\n");
+ device_printf(pic->pic_dev, "filter missing\n");
return (EINVAL);
}
@@ -964,11 +955,11 @@
* routine (handler) on the root. See intr_irq_handler().
*/
if (intr_irq_root_dev != NULL) {
- device_printf(dev, "another root already set\n");
+ device_printf(pic->pic_dev, "another root already set\n");
return (EBUSY);
}
- intr_irq_root_dev = dev;
+ intr_irq_root_dev = pic->pic_dev;
irq_root_filter = filter;
irq_root_arg = arg;
irq_root_ipicount = ipicount;
Index: sys/mips/mediatek/mtk_gpio_v1.c
===================================================================
--- sys/mips/mediatek/mtk_gpio_v1.c
+++ sys/mips/mediatek/mtk_gpio_v1.c
@@ -90,6 +90,7 @@
struct mtk_gpio_softc {
device_t dev;
device_t busdev;
+ struct intr_pic * pic;
struct resource *res[2];
struct mtx mtx;
struct mtk_gpio_pin pins[MTK_GPIO_PINS];
@@ -308,7 +309,8 @@
goto fail;
}
- if (intr_pic_register(dev, OF_xref_from_node(node)) != 0) {
+ sc->pic = intr_pic_register(dev, OF_xref_from_node(node));
+ if (sc->pic == NULL) {
device_printf(dev, "could not register PIC\n");
goto fail;
}
@@ -323,7 +325,7 @@
return (0);
fail_pic:
- intr_pic_deregister(dev, OF_xref_from_node(node));
+ intr_pic_deregister(sc->pic);
fail:
if(sc->intrhand != NULL)
bus_teardown_intr(dev, sc->res[1], sc->intrhand);
@@ -339,7 +341,7 @@
phandle_t node;
node = ofw_bus_get_node(dev);
- intr_pic_deregister(dev, OF_xref_from_node(node));
+ intr_pic_deregister(sc->pic);
if (sc->intrhand != NULL)
bus_teardown_intr(dev, sc->res[1], sc->intrhand);
bus_release_resources(dev, mtk_gpio_spec, sc->res);
Index: sys/mips/mediatek/mtk_gpio_v2.c
===================================================================
--- sys/mips/mediatek/mtk_gpio_v2.c
+++ sys/mips/mediatek/mtk_gpio_v2.c
@@ -76,6 +76,7 @@
struct mtk_gpio_softc {
device_t dev;
device_t busdev;
+ struct intr_pic * pic;
struct resource *res[2];
struct mtx mtx;
struct mtk_gpio_pin pins[MTK_GPIO_PINS];
@@ -299,7 +300,8 @@
goto fail;
}
- if (intr_pic_register(dev, OF_xref_from_node(node)) != 0) {
+ sc->pic = intr_pic_register(dev, OF_xref_from_node(node));
+ if (sc->pic == NULL) {
device_printf(dev, "could not register PIC\n");
goto fail;
}
@@ -314,7 +316,7 @@
return (0);
fail_pic:
- intr_pic_deregister(dev, OF_xref_from_node(node));
+ intr_pic_deregister(sc->pic);
fail:
if(sc->intrhand != NULL)
bus_teardown_intr(dev, sc->res[1], sc->intrhand);
@@ -330,7 +332,7 @@
phandle_t node;
node = ofw_bus_get_node(dev);
- intr_pic_deregister(dev, OF_xref_from_node(node));
+ intr_pic_deregister(sc->pic);
if (sc->intrhand != NULL)
bus_teardown_intr(dev, sc->res[1], sc->intrhand);
bus_release_resources(dev, mtk_gpio_spec, sc->res);
Index: sys/mips/mediatek/mtk_intr_gic.c
===================================================================
--- sys/mips/mediatek/mtk_intr_gic.c
+++ sys/mips/mediatek/mtk_intr_gic.c
@@ -84,6 +84,7 @@
struct mtk_gic_softc {
device_t gic_dev;
+ struct intr_pic * gic_pic;
void * gic_intrhand;
struct resource * gic_res[2];
struct mtk_gic_irqsrc gic_irqs[MTK_NIRQS];
@@ -213,7 +214,8 @@
* Now, when everything is initialized, it's right time to
* register interrupt controller to interrupt framefork.
*/
- if (intr_pic_register(dev, xref) != 0) {
+ sc->gic_pic = intr_pic_register(dev, xref);
+ if (sc->gic_pic == NULL) {
device_printf(dev, "could not register PIC\n");
goto cleanup;
}
Index: sys/mips/mediatek/mtk_intr_v1.c
===================================================================
--- sys/mips/mediatek/mtk_intr_v1.c
+++ sys/mips/mediatek/mtk_intr_v1.c
@@ -75,6 +75,7 @@
struct mtk_pic_softc {
device_t pic_dev;
+ struct intr_pic * pic;
void * pic_intrhand;
struct resource * pic_res[2];
struct mtk_pic_irqsrc pic_irqs[MTK_NIRQS];
@@ -201,7 +202,8 @@
* Now, when everything is initialized, it's right time to
* register interrupt controller to interrupt framefork.
*/
- if (intr_pic_register(dev, xref) != 0) {
+ sc->pic = intr_pic_register(dev, xref);
+ if (sc->pic == NULL) {
device_printf(dev, "could not register PIC\n");
goto cleanup;
}
@@ -209,7 +211,7 @@
if (bus_setup_intr(dev, sc->pic_res[1], INTR_TYPE_CLK,
mtk_pic_intr, NULL, sc, &sc->pic_intrhand)) {
device_printf(dev, "could not setup irq handler\n");
- intr_pic_deregister(dev, xref);
+ intr_pic_deregister(sc->pic);
goto cleanup;
}
return (0);
Index: sys/mips/mediatek/mtk_intr_v2.c
===================================================================
--- sys/mips/mediatek/mtk_intr_v2.c
+++ sys/mips/mediatek/mtk_intr_v2.c
@@ -75,6 +75,7 @@
struct mtk_pic_softc {
device_t pic_dev;
+ struct intr_pic * pic;
void * pic_intrhand;
struct resource * pic_res[2];
struct mtk_pic_irqsrc pic_irqs[MTK_NIRQS];
@@ -196,7 +197,8 @@
* Now, when everything is initialized, it's right time to
* register interrupt controller to interrupt framefork.
*/
- if (intr_pic_register(dev, xref) != 0) {
+ sc->pic = intr_pic_register(dev, xref);
+ if (sc->pic == NULL) {
device_printf(dev, "could not register PIC\n");
goto cleanup;
}
@@ -204,7 +206,7 @@
if (bus_setup_intr(dev, sc->pic_res[1], INTR_TYPE_CLK,
mtk_pic_intr, NULL, sc, &sc->pic_intrhand)) {
device_printf(dev, "could not setup irq handler\n");
- intr_pic_deregister(dev, xref);
+ intr_pic_deregister(sc->pic);
goto cleanup;
}
return (0);
Index: sys/mips/mediatek/mtk_pcie.c
===================================================================
--- sys/mips/mediatek/mtk_pcie.c
+++ sys/mips/mediatek/mtk_pcie.c
@@ -229,6 +229,7 @@
{
struct mtk_pci_softc *sc = device_get_softc(dev);
struct mtk_pci_range io_space, mem_space;
+ struct intr_pic *pic;
phandle_t node;
intptr_t xref;
int i, rid;
@@ -318,7 +319,8 @@
}
/* Register ourselves as an interrupt controller */
- if (intr_pic_register(dev, xref) != 0) {
+ pic = intr_pic_register(dev, xref);
+ if (pic == NULL) {
device_printf(dev, "could not register PIC\n");
goto cleanup_rman;
}
@@ -350,7 +352,7 @@
cleanup:
#ifdef notyet
- intr_pic_unregister(dev, xref);
+ intr_pic_unregister(pic);
#endif
for (i = 1; i <= sc->sc_num_irq; i++) {
if (sc->pci_intrhand[i - 1] != NULL)
Index: sys/mips/mips/mips_pic.c
===================================================================
--- sys/mips/mips/mips_pic.c
+++ sys/mips/mips/mips_pic.c
@@ -79,6 +79,7 @@
struct mips_pic_softc {
device_t pic_dev;
+ struct intr_pic * pic;
struct mips_pic_irqsrc pic_irqs[NREAL_IRQS];
struct rman pic_irq_rman;
struct mtx mutex;
@@ -223,15 +224,16 @@
* Now, when everything is initialized, it's right time to
* register interrupt controller to interrupt framefork.
*/
- if (intr_pic_register(dev, xref) != 0) {
+ sc->pic = intr_pic_register(dev, xref);
+ if (sc->pic == NULL) {
device_printf(dev, "could not register PIC\n");
goto cleanup;
}
/* Claim our root controller role */
- if (intr_pic_claim_root(dev, xref, mips_pic_intr, sc, 0) != 0) {
+ if (intr_pic_claim_root(sc->pic, mips_pic_intr, sc, 0) != 0) {
device_printf(dev, "could not set PIC as a root\n");
- intr_pic_deregister(dev, xref);
+ intr_pic_deregister(sc->pic);
goto cleanup;
}
Index: sys/sys/intr.h
===================================================================
--- sys/sys/intr.h
+++ sys/sys/intr.h
@@ -34,6 +34,8 @@
#define INTR_IRQ_INVALID 0xFFFFFFFF
+struct intr_pic;
+
enum intr_map_data_type {
INTR_MAP_DATA_ACPI,
INTR_MAP_DATA_FDT,
@@ -110,9 +112,9 @@
int intr_isrc_dispatch(struct intr_irqsrc *, struct trapframe *);
u_int intr_irq_next_cpu(u_int current_cpu, cpuset_t *cpumask);
-int intr_pic_register(device_t, intptr_t);
-int intr_pic_deregister(device_t, intptr_t);
-int intr_pic_claim_root(device_t, intptr_t, intr_irq_filter_t *, void *, u_int);
+struct intr_pic *intr_pic_register(device_t, intptr_t);
+int intr_pic_deregister(struct intr_pic *);
+int intr_pic_claim_root(struct intr_pic *, intr_irq_filter_t *, void *, u_int);
extern device_t intr_irq_root_dev;

File Metadata

Mime Type
text/plain
Expires
Mon, Apr 6, 8:45 AM (9 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28272411
Default Alt Text
D6304.1775465102.diff (19 KB)

Event Timeline