Changeset 96da40c in rtems-libbsd for linux


Ignore:
Timestamp:
May 18, 2017, 9:50:43 AM (2 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
c1e05b9ea378b2971e3d7704779112b4bc4296da, 4a77611a223ea883fb548679b516d326a020d447
Children:
69a5677
Parents:
ed254d5
git-author:
Sebastian Huber <sebastian.huber@…> (05/18/17 09:50:43)
git-committer:
Sebastian Huber <sebastian.huber@…> (10/23/17 07:24:05)
Message:

dpaa: Avoid QMan work queue

File:
1 edited

Legend:

Unmodified
Added
Removed
  • linux/drivers/soc/fsl/qbman/qman.c

    red254d5 r96da40c  
    958958        /* list lock */
    959959        spinlock_t cgr_lock;
     960#ifndef __rtems__
    960961        struct work_struct congestion_work;
    961962        struct work_struct mr_work;
     963#endif /* __rtems__ */
    962964        char irqname[MAX_IRQNAME];
    963965};
     
    981983}
    982984
     985#ifndef __rtems__
    983986static struct workqueue_struct *qm_portal_wq;
     987#endif /* __rtems__ */
    984988
    985989int qman_wq_alloc(void)
    986990{
     991#ifndef __rtems__
    987992        qm_portal_wq = alloc_workqueue("qman_portal_wq", 0, 1);
    988993        if (!qm_portal_wq)
    989994                return -ENOMEM;
     995#endif /* __rtems__ */
    990996        return 0;
    991997}
     
    10571063static inline unsigned int __poll_portal_fast(struct qman_portal *p,
    10581064                                        unsigned int poll_limit);
     1065#ifndef __rtems__
    10591066static void qm_congestion_task(struct work_struct *work);
    10601067static void qm_mr_process_task(struct work_struct *work);
     1068#endif /* __rtems__ */
    10611069
    10621070static irqreturn_t portal_isr(int irq, void *ptr)
     
    11791187        INIT_LIST_HEAD(&portal->cgr_cbs);
    11801188        spin_lock_init(&portal->cgr_lock);
     1189#ifndef __rtems__
    11811190        INIT_WORK(&portal->congestion_work, qm_congestion_task);
    11821191        INIT_WORK(&portal->mr_work, qm_mr_process_task);
     1192#endif /* __rtems__ */
    11831193        portal->bits = 0;
    11841194        portal->sdqcr = QM_SDQCR_SOURCE_CHANNELS | QM_SDQCR_COUNT_UPTO3 |
     
    13571367}
    13581368
     1369#ifndef __rtems__
    13591370static void qm_congestion_task(struct work_struct *work)
    13601371{
    13611372        struct qman_portal *p = container_of(work, struct qman_portal,
    13621373                                             congestion_work);
     1374#else /* __rtems__ */
     1375static void qm_congestion_task(struct qman_portal *p)
     1376{
     1377#endif /* __rtems__ */
    13631378        struct qman_cgrs rr, c;
    13641379        union qm_mc_result *mcr;
     
    13891404}
    13901405
     1406#ifndef __rtems__
    13911407static void qm_mr_process_task(struct work_struct *work)
    13921408{
    13931409        struct qman_portal *p = container_of(work, struct qman_portal,
    13941410                                             mr_work);
     1411#else /* __rtems__ */
     1412static void qm_mr_process_task(struct qman_portal *p)
     1413{
     1414#endif /* __rtems__ */
    13951415        const union qm_mr_entry *msg;
    13961416        struct qman_fq *fq;
    13971417        u8 verb, num = 0;
    13981418
     1419#ifndef __rtems__
    13991420        preempt_disable();
     1421#endif /* __rtems__ */
    14001422
    14011423        while (1) {
     
    14391461                        /* Its a software ERN */
    14401462                        fq = tag_to_fq(be32_to_cpu(msg->ern.tag));
    1441 #ifdef __rtems__
    1442                         preempt_enable();
    1443 #endif /* __rtems__ */
    14441463                        fq->cb.ern(p, fq, msg);
    1445 #ifdef __rtems__
    1446                         preempt_disable();
    1447 #endif /* __rtems__ */
    14481464                }
    14491465                num++;
     
    14531469        qm_mr_cci_consume(&p->p, num);
    14541470        qman_p_irqsource_add(p, QM_PIRQ_MRI);
     1471#ifndef __rtems__
    14551472        preempt_enable();
     1473#endif /* __rtems__ */
    14561474}
    14571475
     
    14601478        if (is & QM_PIRQ_CSCI) {
    14611479                qman_p_irqsource_remove(p, QM_PIRQ_CSCI);
     1480#ifndef __rtems__
    14621481                queue_work_on(smp_processor_id(), qm_portal_wq,
    14631482                              &p->congestion_work);
     1483#else /* __rtems__ */
     1484                qm_congestion_task(p);
     1485#endif /* __rtems__ */
    14641486        }
    14651487
     
    14721494        if (is & QM_PIRQ_MRI) {
    14731495                qman_p_irqsource_remove(p, QM_PIRQ_MRI);
     1496#ifndef __rtems__
    14741497                queue_work_on(smp_processor_id(), qm_portal_wq,
    14751498                              &p->mr_work);
     1499#else /* __rtems__ */
     1500                qm_mr_process_task(p);
     1501#endif /* __rtems__ */
    14761502        }
    14771503
Note: See TracChangeset for help on using the changeset viewer.