Hello community, here is the log from the commit of package crystalhd for openSUSE:Factory checked in at Fri Sep 24 01:03:00 CEST 2010. -------- --- crystalhd/crystalhd.changes 2010-09-16 00:07:48.000000000 +0200 +++ /mounts/work_src_done/STABLE/crystalhd/crystalhd.changes 2010-09-23 19:50:04.000000000 +0200 @@ -1,0 +2,6 @@ +Thu Sep 23 19:46:48 CEST 2010 - tiwai@suse.de + +- updated version 3.8: + fixed crash when multiple streams are opened + +------------------------------------------------------------------- calling whatdependson for head-i586 Old: ---- crystalhd-driver_3.7.0-1.tar.bz2 New: ---- crystalhd-driver_3.8.0-1.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ crystalhd.spec ++++++ --- /var/tmp/diff_new_pack.UFrdMl/_old 2010-09-24 01:02:55.000000000 +0200 +++ /var/tmp/diff_new_pack.UFrdMl/_new 2010-09-24 01:02:55.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package crystalhd (Version 3.7.0) +# spec file for package crystalhd (Version 3.8.0) # # Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -22,8 +22,8 @@ BuildRequires: %kernel_module_package_buildreqs Summary: Broadcom Crystal HD driver KMP Group: Hardware/Other -Version: 3.7.0 -Release: 3 +Version: 3.8.0 +Release: 1 License: GPLv2 Group: Hardware/Other Source0: crystalhd-driver_%{version}-1.tar.bz2 ++++++ crystalhd-driver_3.7.0-1.tar.bz2 -> crystalhd-driver_3.8.0-1.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crystalhd-driver/Makefile.in new/crystalhd-driver/Makefile.in --- old/crystalhd-driver/Makefile.in 1970-01-01 01:00:00.000000000 +0100 +++ new/crystalhd-driver/Makefile.in 2010-09-22 21:54:37.000000000 +0200 @@ -0,0 +1,48 @@ +# +# Broadcom Crystal HD (BCM970012) controller Makefile. +# +# +KDIR = @KERN_DIR@ + + +INCLUDES = -I$(KDIR)/include +INCLUDES += -I$(src)/../../include +INCLUDES += -I$(src)/../../include/link +INCLUDES += -I$(src)/../../include/flea +INCLUDES += -I$(src)/../../include/flea/70015/magnum/basemodules/chp/70015/rdb/a0 + +EXTRA_CFLAGS = -D__KERNEL__ -DMODULE $(INCLUDES) $(INC) +EXTRA_CFLAGS += -Wall -Wstrict-prototypes -Wno-trigraphs -Werror -O2 + +OBJ := crystalhd_lnx.o \ + crystalhd_misc.o \ + crystalhd_cmds.o \ + crystalhd_hw.o \ + crystalhd_linkfuncs.o \ + crystalhd_fleafuncs.o \ + crystalhd_flea_ddr.o + +PWD = $(shell pwd) + +obj-m := crystalhd.o + crystalhd-objs := $(OBJ) + +all: + $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules + +install: + if [ -e "/lib/udev/rules.d" ] ; then cp -f 20-crystalhd.rules /lib/udev/rules.d/ ; fi + if [ -e "/etc/udev/rules.d" ] ; then cp -f 20-crystalhd.rules /etc/udev/rules.d/ ; fi + install -d /lib/modules/$(shell uname -r)/kernel/drivers/video/broadcom + install -m 0644 crystalhd.ko /lib/modules/$(shell uname -r)/kernel/drivers/video/broadcom + /sbin/depmod -a + +clean: + rm -f *.map *.list *.o *.ko crystalhd.mod.c $(OBJ) + +distclean: + rm -f *.map *.list *.o *.ko crystalhd.mod.c $(OBJ) + rm -f configure config.status config.log *~* + rm -rf autom4te.cache + rm -f Makefile + rm -f Module.symvers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crystalhd-driver/configure.ac new/crystalhd-driver/configure.ac --- old/crystalhd-driver/configure.ac 1970-01-01 01:00:00.000000000 +0100 +++ new/crystalhd-driver/configure.ac 2010-09-22 21:54:37.000000000 +0200 @@ -0,0 +1,12 @@ +AC_INIT(configure.ac) +AC_CHECK_TOOL(LD, ld, :) + +AC_ARG_WITH(kernel-path, [ --with-kernel-path Specify kernel path], + KERN_DIR=$withval, KERN_DIR="/lib/modules/"$(uname -r)"/build") + + +AC_SUBST(KERN_DIR) + +AC_OUTPUT([ +./Makefile +]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crystalhd-driver/crystalhd_cmds.c new/crystalhd-driver/crystalhd_cmds.c --- old/crystalhd-driver/crystalhd_cmds.c 2010-08-18 19:31:46.000000000 +0200 +++ new/crystalhd-driver/crystalhd_cmds.c 2010-09-22 21:54:37.000000000 +0200 @@ -303,6 +303,8 @@ { BC_STATUS sts = BC_STS_SUCCESS; + dev_dbg(chddev(), "Downloading FW\n"); + if (!ctx || !idata || !idata->add_cdata || !idata->add_cdata_sz) { dev_err(chddev(), "%s: Invalid Arg\n", __func__); return BC_STS_INV_ARG; @@ -317,7 +319,7 @@ idata->add_cdata_sz); if (sts != BC_STS_SUCCESS) { - dev_err(chddev(), "Firmware Download Failure!! - %d\n", sts); + dev_info(chddev(), "Firmware Download Failure!! - %d\n", sts); } else ctx->state |= BC_LINK_INIT; @@ -789,7 +791,7 @@ stats->DrvNextMDataPLD = 0; if (pic_width <= 1920) { // get fetch lock to make sure that fetch is not in progress as wel peek - if(down_interruptible(&ctx->hw_ctx->fetch_sem)) + if(down_interruptible(&ctx->hw_ctx->fetch_sem)) goto get_out; if(ctx->hw_ctx->pfnPeekNextDeodedFr(ctx->hw_ctx,&stats->DrvNextMDataPLD, &stats->picNumFlags, pic_width)) { // Check in case we dropped a picture here @@ -899,7 +901,7 @@ if (sts != BC_STS_SUCCESS) return sts; - dev_dbg(dev, "Crystal HD suspend success\n"); + dev_info(dev, "Crystal HD suspend success\n"); return BC_STS_SUCCESS; } @@ -922,7 +924,7 @@ */ BC_STATUS crystalhd_resume(struct crystalhd_cmd *ctx) { - dev_dbg(chddev(), "crystalhd_resume Success %x\n", ctx->state); + dev_info(chddev(), "crystalhd_resume Success %x\n", ctx->state); bc_cproc_mark_pwr_state(ctx); @@ -960,13 +962,18 @@ dev_info(dev, "Opening new user[%x] handle\n", uc->uid); - ctx->hw_ctx = (struct crystalhd_hw*)kmalloc(sizeof(struct crystalhd_hw), GFP_KERNEL); - if(ctx->hw_ctx != NULL) - memset(ctx->hw_ctx, 0, sizeof(struct crystalhd_hw)); - else - return BC_STS_ERROR; + uc->mode = DTS_MODE_INV; + uc->in_use = 0; - crystalhd_hw_open(ctx->hw_ctx, ctx->adp); + if(ctx->hw_ctx == NULL) { + ctx->hw_ctx = (struct crystalhd_hw*)kmalloc(sizeof(struct crystalhd_hw), GFP_KERNEL); + if(ctx->hw_ctx != NULL) + memset(ctx->hw_ctx, 0, sizeof(struct crystalhd_hw)); + else + return BC_STS_ERROR; + + crystalhd_hw_open(ctx->hw_ctx, ctx->adp); + } uc->in_use = 1; @@ -992,26 +999,26 @@ ctx->user[uc->uid].mode = DTS_MODE_INV; ctx->user[uc->uid].in_use = 0; - ctx->cin_wait_exit = 1; - ctx->pwr_state_change = 0; - dev_info(chddev(), "Closing user[%x] handle\n", uc->uid); + dev_info(chddev(), "Closing user[%x] handle with mode %x\n", uc->uid, mode); - if (((mode & 0xFF) == DTS_DIAG_MODE) || ((mode & 0xFF) == DTS_PLAYBACK_MODE)) { + if (((mode & 0xFF) == DTS_DIAG_MODE) || + ((mode & 0xFF) == DTS_PLAYBACK_MODE) || + ((bc_cproc_get_user_count(ctx) == 0) && (ctx->hw_ctx != NULL))) { + ctx->cin_wait_exit = 1; + ctx->pwr_state_change = 0; // Stop the HW Capture just in case flush did not get called before stop crystalhd_hw_stop_capture(ctx->hw_ctx, true); crystalhd_hw_free_dma_rings(ctx->hw_ctx); crystalhd_destroy_dio_pool(ctx->adp); crystalhd_delete_elem_pool(ctx->adp); - } else if (bc_cproc_get_user_count(ctx)) { + ctx->state = BC_LINK_INVALID; + crystalhd_hw_close(ctx->hw_ctx, ctx->adp); + kfree(ctx->hw_ctx); + ctx->hw_ctx = NULL; + } /*else if (bc_cproc_get_user_count(ctx)) { return BC_STS_SUCCESS; - } - - crystalhd_hw_close(ctx->hw_ctx); - kfree(ctx->hw_ctx); - ctx->hw_ctx = NULL; - - ctx->state = BC_LINK_INVALID; + }*/ return BC_STS_SUCCESS; } @@ -1053,7 +1060,7 @@ /*Open and Close the Hardware to put it in to sleep state*/ crystalhd_hw_open(ctx->hw_ctx, ctx->adp); - crystalhd_hw_close(ctx->hw_ctx); + crystalhd_hw_close(ctx->hw_ctx, ctx->adp); kfree(ctx->hw_ctx); ctx->hw_ctx = NULL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crystalhd-driver/crystalhd_fleafuncs.c new/crystalhd-driver/crystalhd_fleafuncs.c --- old/crystalhd-driver/crystalhd_fleafuncs.c 2010-08-18 19:31:46.000000000 +0200 +++ new/crystalhd-driver/crystalhd_fleafuncs.c 2010-09-22 21:54:37.000000000 +0200 @@ -42,6 +42,8 @@ { unsigned int pollCnt=0,regVal=0; + dev_dbg(&hw->adp->pdev->dev,"[crystalhd_flea_core_reset]: Starting core reset\n"); + hw->pfnWriteDevRegister(hw->adp, BCHP_MISC3_RESET_CTRL, 0x01); pollCnt=0; @@ -779,9 +781,9 @@ -- For Flea, we will get a PicQSts interrupt where we will -- enable the capture. */ - if(!hw->RxCaptureState) + if(hw->RxCaptureState != 1) { - hw->RxCaptureState = true; + hw->RxCaptureState = 1; } } @@ -1127,7 +1129,7 @@ //uint32_t BuffSz = (BuffSzInDWords * 4); //uint32_t HBCnt=0; - bool bRetVal = false; + bool bRetVal = true; printk("[crystalhd_flea_download_fw]: Sz:%d\n", buffSz); @@ -1289,6 +1291,12 @@ msleep_interruptible(1); /*1 Milli Sec delay*/ } + if( !bRetVal ) + { + dev_info(&hw->adp->pdev->dev,"[crystalhd_flea_download_fw]: step 7. Firmware image signature failure.\n"); + return BC_STS_ERROR; + } + /*Clear the interrupts by writing the register value back*/ regVal &= 0x00FFFFFF; //Mask off the reserved bits.[24-31] hw->pfnWriteDevRegister(hw->adp, BCHP_WRAP_MISC_INTR2_PCI_CLEAR, regVal); @@ -1314,7 +1322,7 @@ bRetVal = crystalhd_flea_detect_fw_alive(hw); if( !bRetVal ) { - dev_err(&hw->adp->pdev->dev,"[crystalhd_flea_download_fw]: step 8. Detect firmware heart beat failed.\n"); + dev_info(&hw->adp->pdev->dev,"[crystalhd_flea_download_fw]: step 8. Detect firmware heart beat failed.\n"); return BC_STS_ERROR; } @@ -1423,7 +1431,7 @@ -- except for fatal errors. */ hw->rx_list_post_index = 0; - hw->RxCaptureState = false; + hw->RxCaptureState = 0; msleep_interruptible(1); @@ -1849,8 +1857,9 @@ msleep_interruptible(50); + // FW commands should complete even if we got a signal from the upper layer crystalhd_wait_on_event(&fw_cmd_event, hw->fwcmd_evt_sts, - 20000, rc, false); + 20000, rc, true); if (!rc) { sts = BC_STS_SUCCESS; @@ -1858,7 +1867,7 @@ dev_err(dev, "Firmware command T/O\n"); sts = BC_STS_TIMEOUT; } else if (rc == -EINTR) { - dev_dbg(dev, "FwCmd Wait Signal int.\n"); + dev_info(dev, "FwCmd Wait Signal - Can Never Happen\n"); sts = BC_STS_IO_USER_ABORT; } else { dev_err(dev, "FwCmd IO Error.\n"); @@ -1988,10 +1997,17 @@ bool failedL0 = true, failedL1 = true; uint32_t pollCnt = 0; - hw->RxCaptureState = false; + hw->RxCaptureState = 2; - if((hw->rx_list_sts[0] == sts_free) && (hw->rx_list_sts[1] == sts_free)) + if((hw->rx_list_sts[0] == sts_free) && (hw->rx_list_sts[1] == sts_free)) { + hw->RxCaptureState = 0; return; // Nothing to be done + } + + if(hw->rx_list_sts[0] == sts_free) + failedL0 = false; + if(hw->rx_list_sts[1] == sts_free) + failedL1 = false; while(1) { @@ -2004,6 +2020,8 @@ failedL0 = false; } } + else + failedL0 = false; if(hw->rx_list_sts[1] != sts_free) { if( (IntrStsValue.L1YRxDMADone) || (IntrStsValue.L1YRxDMAErr) || @@ -2012,6 +2030,9 @@ failedL1 = false; } } + else + failedL1 = false; + msleep_interruptible(10); if(pollCnt >= MAX_VALID_POLL_CNT) @@ -2026,6 +2047,8 @@ if(failedL0 || failedL1) printk("Failed to stop RX DMA\n"); + hw->RxCaptureState = 0; + crystalhd_flea_clear_rx_errs_intrs(hw); } @@ -2050,8 +2073,8 @@ return BC_STS_INV_ARG; } - if(!hw->RxCaptureState) { - printk("Capture not yet enabled\n"); + if(hw->RxCaptureState != 1) { + printk("Capture not enabled\n"); return BC_STS_BUSY; } @@ -2554,7 +2577,6 @@ break; } } - /* handle completion...*/ if (comp_sts != BC_STS_NO_DATA) { crystalhd_rx_pkt_done(hw, i, comp_sts); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crystalhd-driver/crystalhd_hw.c new/crystalhd-driver/crystalhd_hw.c --- old/crystalhd-driver/crystalhd_hw.c 2010-08-18 19:31:46.000000000 +0200 +++ new/crystalhd-driver/crystalhd_hw.c 2010-09-22 21:54:37.000000000 +0200 @@ -119,7 +119,7 @@ return BC_STS_SUCCESS; } -BC_STATUS crystalhd_hw_close(struct crystalhd_hw *hw) +BC_STATUS crystalhd_hw_close(struct crystalhd_hw *hw, struct crystalhd_adp *adp) { if (!hw) { printk(KERN_ERR "%s: Invalid Arguments\n", __func__); @@ -130,7 +130,10 @@ return BC_STS_SUCCESS; /* Stop and DDR sleep will happen in here */ - crystalhd_hw_suspend(hw); + // Only stop the HW if we are the last user + if(adp->cfg_users == 1) + crystalhd_hw_suspend(hw); + hw->dev_started = false; return BC_STS_SUCCESS; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crystalhd-driver/crystalhd_hw.h new/crystalhd-driver/crystalhd_hw.h --- old/crystalhd-driver/crystalhd_hw.h 2010-08-18 19:31:46.000000000 +0200 +++ new/crystalhd-driver/crystalhd_hw.h 2010-09-22 21:54:37.000000000 +0200 @@ -26,6 +26,8 @@ #ifndef _CRYSTALHD_HW_H_ #define _CRYSTALHD_HW_H_ +#define DEBUG 1 + #include <linux/device.h> #include <linux/version.h> #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 24) @@ -386,7 +388,7 @@ struct semaphore fetch_sem; // semaphore between fetch and probe of the next picture information, since both will be in process context - bool RxCaptureState; + uint32_t RxCaptureState; // 0 if capture is not enabled, 1 if capture is enabled, 2 if stop rxdma is pending // BCM70015 mods uint32_t PicQSts; /* This is the bitmap given by PiCQSts Interrupt*/ @@ -498,7 +500,7 @@ void crystalhd_hw_delete_ioqs(struct crystalhd_hw *hw); BC_STATUS crystalhd_hw_create_ioqs(struct crystalhd_hw *hw); BC_STATUS crystalhd_hw_open(struct crystalhd_hw *hw, struct crystalhd_adp *adp); -BC_STATUS crystalhd_hw_close(struct crystalhd_hw *hw); +BC_STATUS crystalhd_hw_close(struct crystalhd_hw *hw, struct crystalhd_adp *adp); BC_STATUS crystalhd_hw_setup_dma_rings(struct crystalhd_hw *hw); BC_STATUS crystalhd_hw_free_dma_rings(struct crystalhd_hw *hw); BC_STATUS crystalhd_hw_tx_req_complete(struct crystalhd_hw *hw, uint32_t list_id, BC_STATUS cs); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crystalhd-driver/crystalhd_linkfuncs.c new/crystalhd-driver/crystalhd_linkfuncs.c --- old/crystalhd-driver/crystalhd_linkfuncs.c 2010-08-18 19:31:46.000000000 +0200 +++ new/crystalhd-driver/crystalhd_linkfuncs.c 2010-09-22 21:54:37.000000000 +0200 @@ -473,7 +473,7 @@ dev = &hw->adp->pdev->dev; - dev_dbg(dev, "Starting Crystal HD Device\n"); + dev_dbg(dev, "Starting Crystal HD BCM70012 Device\n"); if (!crystalhd_link_bring_out_of_rst(hw)) { dev_err(dev, "Failed To Bring BCM70012 Out Of Reset\n"); @@ -521,7 +521,7 @@ uint32_t reg; BC_STATUS sts; - dev_dbg(&hw->adp->pdev->dev, "Stopping Crystal HD Device\n"); + dev_dbg(&hw->adp->pdev->dev, "Stopping Crystal HD BCM70012 Device\n"); sts = crystalhd_link_put_ddr2sleep(hw); if (sts != BC_STS_SUCCESS) { dev_err(&hw->adp->pdev->dev, "Failed to Put DDR To Sleep!!\n"); @@ -637,6 +637,8 @@ int i; unsigned long res = 0; + dev_dbg(&hw->adp->pdev->dev, "getting Picture Info\n"); + *PicNumber = 0; *PicMetaData = 0; @@ -668,7 +670,7 @@ PicInfoLineNum = link_GetPicInfoLineNum(dio, dio->pib_va); if (PicInfoLineNum > 1092) { - printk("Invalid Line Number[%x]\n", (int)PicInfoLineNum); + dev_dbg(&hw->adp->pdev->dev, "Invalid Line Number[%x]\n", (int)PicInfoLineNum); goto getpictureinfo_err; } @@ -683,7 +685,7 @@ if (picHeight) { if ((PicInfoLineNum != picHeight) && (PicInfoLineNum != picHeight/2)) { - printk("PicInfoLineNum[%d] != PICHeight " + dev_dbg(&hw->adp->pdev->dev, "PicInfoLineNum[%d] != PICHeight " "Or PICHeight/2 [%d]\n", (int)PicInfoLineNum, picHeight); goto getpictureinfo_err; @@ -1884,7 +1886,7 @@ return BC_STS_FW_AUTH_FAILED; } - dev_info(dev, "Firmware Downloaded Successfully\n"); + dev_dbg(dev, "Firmware Downloaded Successfully\n"); // Load command response addresses hw->fwcmdPostAddr = TS_Host2CpuSnd; @@ -1941,8 +1943,9 @@ msleep_interruptible(50); + // FW commands should complete even if we got a signal from the upper layer crystalhd_wait_on_event(&fw_cmd_event, hw->fwcmd_evt_sts, - 20000, rc, false); + 20000, rc, true); if (!rc) { sts = BC_STS_SUCCESS; @@ -1950,7 +1953,7 @@ dev_err(dev, "Firmware command T/O\n"); sts = BC_STS_TIMEOUT; } else if (rc == -EINTR) { - dev_dbg(dev, "FwCmd Wait Signal int.\n"); + dev_err(dev, "FwCmd Wait Signal int - Should never happen\n"); sts = BC_STS_IO_USER_ABORT; } else { dev_err(dev, "FwCmd IO Error.\n"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crystalhd-driver/crystalhd_lnx.c new/crystalhd-driver/crystalhd_lnx.c --- old/crystalhd-driver/crystalhd_lnx.c 2010-08-18 19:31:46.000000000 +0200 +++ new/crystalhd-driver/crystalhd_lnx.c 2010-09-22 21:54:37.000000000 +0200 @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this driver. If not, see <http://www.gnu.org/licenses/>. ***************************************************************************/ -#define DEBUG + #include <linux/version.h> #include "crystalhd_lnx.h" @@ -573,7 +573,7 @@ int rc; BC_STATUS sts = BC_STS_SUCCESS; - dev_dbg(dev, "Starting Device:0x%04x\n", pdev->device); + dev_info(dev, "Starting Device:0x%04x\n", pdev->device); pinfo = kzalloc(sizeof(struct crystalhd_adp), GFP_KERNEL); if (!pinfo) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crystalhd-driver/crystalhd_misc.c new/crystalhd-driver/crystalhd_misc.c --- old/crystalhd-driver/crystalhd_misc.c 2010-08-18 19:31:46.000000000 +0200 +++ new/crystalhd-driver/crystalhd_misc.c 2010-09-22 21:54:37.000000000 +0200 @@ -138,7 +138,7 @@ * Return: * Status. * - * Get value from Link's PCIe config space. + * Get value from PCIe config space. */ BC_STATUS crystalhd_pci_cfg_rd(struct crystalhd_adp *adp, uint32_t off, uint32_t len, uint32_t *val) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crystalhd-driver/debian/changelog new/crystalhd-driver/debian/changelog --- old/crystalhd-driver/debian/changelog 2010-08-18 19:31:46.000000000 +0200 +++ new/crystalhd-driver/debian/changelog 2010-09-22 21:54:37.000000000 +0200 @@ -1,4 +1,4 @@ -crystalhd-driver (3.7.0-1) unstable; urgency=low +crystalhd-driver (3.8.0-1) unstable; urgency=low * Initial deb package release - Made for Ubuntu 10.04 * Updated clean up code to add support for MSI interrupts @@ -6,5 +6,7 @@ * Added support for correct playback of interlaced content * Expanded fetch semaphore + * Fixed system hang with multiple device handles open + * Fixed long timeout in stopping the decoder - -- Narendra Sankar <nsankar@nsankar64-laptop> Wed, 18 Aug 2010 17:30:22 +0000 + -- Narendra Sankar <nsankar@nsankar64-laptop> Wed, 22 Sep 2010 19:54:26 +0000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org
participants (1)
-
root@hilbert.suse.de